--:--:--
HV://ROOT
Himanshu Verma

Infrastructure engineer. Distributed systems, Kubernetes, containers.

I fix distributed systems that fail in ways the logs do not explain. 73 merged pull requests upstream in Apache and CNCF projects, most of them in the guts of a distributed graph database.

  • Public member of the HugeGraph GitHub org, with push access to the org staging repo. 31 merged into HugeGraph core, 15,693 lines across 251 files.
  • Raft quorum health checks, gRPC channel isolation, DNS cache expiry, container process supervision. The unglamorous parts that decide whether a cluster stays up.
  • 116 inline review notes on 14 HugeGraph PRs by other contributors. The project chair requests my review and merges my work.
  • Six merged into Cilium, plus Apache Kafka and Apache OFBiz.
73
MERGED UPSTREAM PRs
31
IN HUGEGRAPH CORE
116
UPSTREAM REVIEW NOTES

Counted from the GitHub API, upstream repositories only. Every PR below is merged and linked.

01 · HIRE

Available for contract work

I take on infrastructure contracts: Kubernetes and Helm, distributed systems debugging, container and release work. Remote, and I work across time zones already. Rates on request.

Distributed systems debugging

Deadlocks, split brain, races that only show up under load, nodes that rejoin a cluster and quietly serve stale data. I have shipped fixes for all of these upstream, with the PR numbers to show for it.

Kubernetes and Helm deployment work

Charts that install cleanly on a real cluster instead of only in a template render. Readiness that reflects the actual state of the system. Secret rotation and upgrade paths that survive a second run.

Container and release hardening

Signal handling and PID 1, health checks that mean something, build cache that actually caches, startup scripts that propagate exit codes so CI can tell a skip from a pass.

[email protected]

I reply within 24 hours.

02 · TOOLKIT
JavaGoPythonKubernetesHelmDockergRPCRaftCilium / eBPFKafkaRedisPostgreSQLSpring BootLinuxCI/CDNode.jsReact
03 · PROOF

Merged upstream work

73 merged pull requests in projects I do not own. Everything here is merged, not proposed. Each card opens to the specific PRs, and each card has a terminal you can ask about the repository.

Most of my upstream work lives here. HugeGraph is a distributed graph database with a Raft-backed placement driver, a separate store tier, and a server tier that has to find both of them at startup. A lot of my PRs are about what happens when that goes wrong. 31 merged, 15,693 lines across 251 files. Usually I file the bug, root-cause it, then land the fix myself.

  • PD accepted any password on its REST APIIssue #3188, PR #3189

    The auth check compared the service name and never looked at the password, then returned 200 on a refusal. Reported it, then fixed it: 1,415 lines across 35 files.

  • Containers never restarted when the JVM diedIssue #3043, 6 merged PRs

    The cron monitor was broken and the entrypoint held the container open with a sleeping tail, so a dead Java process looked healthy forever. One report, six merged fixes: #3044, #3047, #3051, #3052, #3055, #3056.

  • Quorum-aware readiness endpoint for the placement driverPR #3185

    Added /v1/ready plus Raft gauges, so a PD node reports ready only when it actually has quorum. Before this, orchestrators would route traffic to a PD that could not commit.

  • One gRPC channel per stubPR #3128

    Stubs were sharing a channel, so one bad peer took down calls that had nothing to do with it. Bound each stub to its own channel.

  • Retry every PD peer while waiting for storagePR #3129, #3130

    Startup gave up after the first unreachable peer. Now it walks the whole peer list, and the store recovers its retry loop after a replacement node comes in.

  • Finite DNS cache TTLPR #3126

    The JVM was caching DNS forever. In Kubernetes, where pod IPs change under a stable name, that means a node keeps dialing an address that no longer exists.

  • Supervise the Java process instead of tail -f /dev/nullPR #3051, #3047, #3044

    Containers were held open by a sleeping tail, so SIGTERM never reached the JVM and exit codes never propagated. Replaced it with real supervision across pd, store and server.

  • Await deadlock in consumer thread poolsPR #2941

    A ContextCallable failure left the consumer waiting on a latch that would never count down. Under contention the whole pool stalled.

  • Hostname entries in the PD allowlistPR #2962, #2961

    IpAuthHandler compared raw strings, so a hostname in the allowlist never matched the IP that connected, and valid nodes were refused. Also added a timeout and null check to getLeaderGrpcAddress().

  • Host networking to bridge networkingPR #2952, #2976, #2963

    Moved the single-node compose files off host networking onto isolated bridge networks, and removed tmp volume mounts that were spilling data outside the container.

JavaRaftgRPCDockerKubernetes
$
04 · OPEN

Currently in review

Open pull requests, listed separately from the merged work because they are not landed yet.

05 · WORK

Things I built

TermStoryv0.6.3LIVECode PyPI

A CLI that turns your shell history into a searchable timeline of what you actually worked on. The interesting part is timestamp recovery: if your shell never recorded dates, it reconstructs them by correlating git logs, file mtimes, Homebrew Cellar mtimes and Docker image metadata, then interpolating between the anchors. Secrets are redacted locally before anything is sent to a model. 497 commits, 73 test files, CI across Python 3.9 to 3.12, 36 contributors, on PyPI under MIT.

PythonSQLite WALTextualstdlib-only LLM client
$
HugeGraph Helm test methodologyLIVECode The chart PR

How I test a distributed system on Kubernetes, written down. Fault scenarios for leader crash, majority loss, network partition, pod IP churn and PVC reattach, each with a named oracle established before the fault. Evidence is classed as measured, derived or carried, a negative claim can only ever be measured, and a fault with no landing evidence is inconclusive rather than a pass. It is a runbook and a set of reference docs, not executable code. It came out of writing the HStore chart in apache/hugegraph#3132, which is still open.

KubernetesHelmKindRaft fault injection
$
cc2butanePROTOTYPECode

A cloud-config to Butane and Ignition transpiler, written as a research spike and labelled as one. It has never been run against a booted machine. What it does have is tests that push every generated config through the real upstream Butane library, and notes on the two traps that make this conversion hard: runcmd running per instance while bootcmd runs per boot, and Ignition writing from the initramfs into /sysroot so anything staged in /tmp disappears. It documents what it refuses to convert instead of dropping it silently.

GoButaneIgnitionCluster API
$
06 · ACTIVITY

Coding activity

GITHUB CONTRIBUTIONS
07 · WRITING

Writing

I ran Apache HugeGraph on macOS. Big mistake. Here's what happened

Building a distributed graph database natively on an ARM Mac looked like a weekend job. It turned into broken JNI, background processes that would not die, and Docker networking that behaved differently than on Linux.

13 min read · 81 claps · Medium