feat: pre-launch quick wins (COMMAND, HINCRBYFLOAT, Z*STORE, helm pvc, npm publish)#331
Merged
feat: pre-launch quick wins (COMMAND, HINCRBYFLOAT, Z*STORE, helm pvc, npm publish)#331
Conversation
COMMAND (with COUNT, INFO, DOCS, LIST subcommands) provides the static command metadata that client libraries like jedis, lettuce, and redis-py call on connect for capability discovery. without it many clients refuse to operate. HINCRBYFLOAT follows the same pattern as HINCRBY and INCRBYFLOAT: it increments a hash field's float value atomically, creating the field at 0 if absent. persisted to AOF as an HSET with the resulting value to avoid float drift during replay. both commands are wired through protocol parse, shard dispatch, execute, and the CLI command table.
implements the sorted set store variants. each command computes the corresponding set operation (union/intersection/diff) and writes the result to a destination key, replacing whatever was there before. routing follows the same pattern as SUNIONSTORE/SINTERSTORE/SDIFFSTORE: all input keys and dest must land on the same shard, and we route to dest's shard. aof persistence records a DEL+ZADD pair so recovery is idempotent. keyspace notifications fire on dest with the FLAG_Z flag. 8 new unit tests cover basic behaviour, score summing, dest overwrite, empty-result removal, and wrong-type error propagation.
…at updates - add docker quickstart to readme (one-liner to get running immediately) - helm: add persistence pvc support with emptyDir warning for production - helm: use http /health probe when metrics port is configured - add npm publish job to release workflow for ember-ts - update compatibility.md: HINCRBYFLOAT, ZUNIONSTORE/ZINTERSTORE/ZDIFFSTORE, FLUSHALL, COMMAND introspection all marked ✓ - expand MULTI/EXEC cross-shard atomicity caveat with hash tag tip
1173463 to
c6d9b86
Compare
kacy
added a commit
that referenced
this pull request
Feb 27, 2026
kacy
added a commit
that referenced
this pull request
Feb 27, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
summary
pre-launch polish pass covering the most impactful gaps identified in the audit.
new commands
COMMAND/COMMAND COUNT/COMMAND INFO/COMMAND DOCS— static metadata table for 150+ commands. this is what redis client libraries (jedis, lettuce, redis-py, ioredis) probe on connect to discover command metadata. without it those clients emit warnings or refuse to start.HINCRBYFLOAT— float increment on hash fields. rounds out the hash type alongside the existingHINCRBY.ZUNIONSTORE/ZINTERSTORE/ZDIFFSTORE— sorted set store variants. reuses the existingZUNION/ZINTER/ZDIFFlogic, writes result to dest key. dest and source keys must hash to the same shard (same constraint as the read-only variants).helm
persistencesection tovalues.yaml— off by default, enable withpersistence.enabled=trueand a PVC is created automaticallypvc.yamltemplatehttpGet /healthwhenmetricsPortis configured (was baretcpSocketbefore)emptyDirfallback includes a prominent WARNING comment so nobody silently loses data in productiondocs
compatibility.md: all new commands marked ✓; MULTI/EXEC section expanded with cross-shard atomicity caveat and hash tag exampleci
npmjob publishesember-tsto npm on every tagged releaseNPM_TOKENsecret in repo settingswhat was tested
cargo check -p emberkv-core -p ember-protocol -p ember-serverclean on both agentshelm templatepasses; probes render correctly with and without metricsPortdesign notes
the COMMAND table is a static
OnceLock<Vec<CommandEntry>>initialized at first call — no heap allocation on the hot path.COMMAND INFO name [name ...]returns nil for unknown commands (matching redis behavior).COMMAND DOCSreturns an empty map — sufficient for client compat, avoids the maintenance burden of full docs inline.ZUNIONSTORE/ZINTERSTORE/ZDIFFSTORE route to the dest key's shard. all source keys must share that shard (enforced with a
MOVEDerror if not). this is the same constraint asRENAMEand the existing cross-shard store ops.