Conversation
adds all commonly-useful commands missing from the grpc service. the server had ~170 resp3 commands; the proto only exposed 68. this brings the grpc api close to parity. new commands by category: - strings: getdel, getex, getrange, setrange - keys: copy, randomkey, touch - lists: lindex, lset, ltrim, linsert, lrem, lpos, lmove - sets: sunion, sinter, sdiff, sunionstore, sinterstore, sdiffstore, srandmember, spop, smismember - hashes: hscan - sorted sets: zrevrank, zrevrange, zcount, zincrby, zrangebyscore, zrevrangebyscore, zpopmin, zpopmax, zdiff, zinter, zunion, zscan - scans: sscan - server: time, lastsave also adds boolArrayResponse, hScanResponse, zScanResponse, sScanResponse, and timeResponse as new pipeline result types (tags 30-34). all new rpcs are wired into the pipeline streaming handler.
kacy
added a commit
that referenced
this pull request
Feb 25, 2026
- ember-client readme now covers all 65+ commands (strings, keys, lists, hashes, sets, sorted sets, server, slowlog, pub/sub, vector), public types (ScanPage, SlowlogEntry, Message, SimResult), and the full pipeline method reference - new crates/README.md: crate table with package names, dependency graph, cargo cheat-sheet, and makefile target reference - regenerate go and python grpc stubs from the latest proto (closes api gap from pr #306 — 39 new rpcs now reflected in generated code) - fix clients/ember-py/Makefile: use python3 instead of python
kacy
added a commit
that referenced
this pull request
Feb 25, 2026
…#307) - ember-client readme now covers all 65+ commands (strings, keys, lists, hashes, sets, sorted sets, server, slowlog, pub/sub, vector), public types (ScanPage, SlowlogEntry, Message, SimResult), and the full pipeline method reference - new crates/README.md: crate table with package names, dependency graph, cargo cheat-sheet, and makefile target reference - regenerate go and python grpc stubs from the latest proto (closes api gap from pr #306 — 39 new rpcs now reflected in generated code) - fix clients/ember-py/Makefile: use python3 instead of python
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
closes the gap between the resp3 engine (~170 commands) and the grpc service (68 rpcs). adds 39 new rpcs, ~35 new message types, extends the pipeline streaming handler, and adds five new pipeline result types.
new commands by category:
getdel,getex,getrange,setrangecopy,randomkey,touchlindex,lset,ltrim,linsert,lrem,lpos,lmovesunion,sinter,sdiff,sunionstore,sinterstore,sdiffstore,srandmember,spop,smismemberhscanzrevrank,zrevrange,zcount,zincrby,zrangebyscore,zrevrangebyscore,zpopmin,zpopmax,zdiff,zinter,zunion,zscansscantime,lastsavenew pipeline result types (tags 30–34):
BoolArrayResponse,HScanResponse,ZScanResponse,SScanResponse,TimeResponse. pipelineoneof commandextended to tag 111.intentionally skipped:
blpop/brpop(blocking doesn't map to unary grpc),multi/exec(requires stateful streaming),cluster/acl/config(admin tier),auth/quit/client(connection-level).what was tested
cargo build -p ember-server --features grpc— clean, zero warningscargo test -p ember-server --features grpc— 137 tests, all pass-inf,+inf,(5.0,5.0round-trip correctly throughparse_score_bound()design considerations
same-shard requirement for multi-key ops —
copy,lmove,sunion/sinter/sdiff, andzdiff/zinter/zunionall route to a single shard.copyandlmovereturn an error when source and destination hash to different shards (same behavior asrename). the set/sorted-set multi-key ops route to the first key's shard, consistent with the resp3 handler.with_scoreson sorted set range ops —zdiff,zinter,zunion,zrangebyscore,zrevrangebyscore, andzrevrangealways fetch scored data from the engine. ifwith_scoresis false, scores are zeroed in the response rather than requiring a separate engine call.lposreturnsOptionalIntResponse— returns only the first match. a futurelpos_allrpc can return an array if needed; the count field is accepted but only the first result is surfaced.