25 Commits
Author SHA1 Message Date
ump45noseandNedyalko Dyakov eda1d05d07 fix(csc): drop module movablekeys extraction (#4212)
Redis resolves the keys it must invalidate in getKeysFromCommand(): the
module getkeys API, then getkeys_proc, then the legacy range. Key specs are
never consulted, so a module command that declares movable keys without
registering a getkeys callback is tracked by its legacy positions alone,
usually none. cscDeriveMeta indexed the spec positions instead, and the
entry then sits stale for its whole life because no invalidation ever
matches it.

Deriving no extraction means the command is never cached, so the guarantee
no longer depends on remembering each module command in a dont_cache
correction. The cacheable-command list is unchanged; the pinned
fingerprint moves because ts.nrange and ts.nrevrange now derive no
extraction.

Refs #4097

Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
2026-10-27 18:09:30 +02:00
ump45noseandNedyalko Dyakov a44168309f fix(command): unwrap a null COMMAND attribute (#4208)
A null attribute (|-1) is not valid RESP3, but ReadAttributeLen consumes
the header and reports proto.Nil. peekCommandInfoReplyType passed that
error on, and the COMMAND readers treat a Nil error as "the value was
already drained", so the wrapped reply stayed on the wire and the
connection went back to the pool out of step with the stream.
Unwrap it as an empty attribute instead.

Refs #4097

Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
2026-10-27 15:47:24 +02:00
ump45nose a3a890780b fix(hotkeys): read the CPU time reply fields (#4206)
HOTKEYS GET reports the session CPU time as total-cpu-time-user-ms and
total-cpu-time-sys-ms, which is how src/hotkeys.c and the command docs name
them. readReply looked up used-cpu-user-ms and used-cpu-sys-ms instead, so
UsedCPUUser and UsedCPUSys stayed zero for every reply.
2026-10-26 23:23:11 +02:00
ump45nose e2f3a1e69a docs(cms): correct CMS.MERGE requirements (#4188) 2026-10-26 12:16:44 +02:00
ump45nose 534ffada4b docs(cmd): point HPExpireTime doc at hpexpiretime (#4175)
The comment links the seconds command (HEXPIRETIME) although the method
sends HPEXPIRETIME.
2026-10-20 12:17:07 +03:00
ump45nose 01aff3f69c chore: drop stranded buildCacheKey doc comment (#4178)
The function moved to csc_cachekey_test.go, which carries the
authoritative doc; the block left behind documented nothing.
2026-10-20 11:03:47 +03:00
ump45nose e4d05b0d43 docs: state PoolTimeout's 30-second fallback default (#4177)
init() only derives ReadTimeout+1s when ReadTimeout is positive;
otherwise the default is 30s, which the comment omitted.
2026-10-20 11:02:40 +03:00
ump45nose a9b6e4013c docs(cmd): point HPExpireAt doc at hpexpireat (#4176)
The comment links the seconds command (HEXPIREAT) although the method
sends HPEXPIREAT.
2026-10-20 11:02:08 +03:00
ump45nose b92a16e02d docs(streams): fix XAdd idempotent option note (#4170) 2026-10-19 20:30:57 +03:00
ump45nose 081e153f10 docs(cmd): fix SetIFDEQ experimental note names (#4171) 2026-10-19 20:24:11 +03:00
ump45noseandump45nose 36f026105d docs(readme): add Redis 8.6 to supported versions (#4122)
* docs(readme): fix the supported-versions list

The Supported versions section lists Redis 8.0, 8.2, 8.4, 8.8 and 8.10, but
that is not what CI builds against. `.github/workflows/build.yml` runs both
`test-stack` (:48-54) and `test-redis-ce` (:109-115) over
8.12.x, 8.10.x, 8.6.x, 8.4.x, 8.2.x and 8.0.x.

So two versions that are tested are missing from the list (8.6, and 8.12 as a
pre-release) while 8.8 is listed although it is no longer exercised — its
removal from the matrix is recorded in RELEASE-NOTES.md:440 ("8.8 was dropped
from the CI matrix", #3940).

Rewrite the list to match the matrix. The "last three releases" sentence is
left as-is: it states the policy, not a fact CI can confirm.

* docs(readme): avoid unknown word in the 8.12 support note

* docs(readme): preserve supported Redis versions

---------

Co-authored-by: ump45nose <ump45nose@users.noreply.github.com>
2026-10-19 15:03:20 +03:00
ump45nose 5c913d4bd9 docs(example): drop the no-op UnstableResp3 advice (#4123)
Both FT.AGGREGATE examples tell the reader to set `UnstableResp3: true` to
use RESP3:

  example/search-aggregate-steps/README.md:15-17
  example/search-aggregate-collect/README.md:15-18

That advice is stale in two ways. `Options.UnstableResp3` is deprecated and
documented as a no-op (`options.go:448-451`, and the same note on
`universal.go`, `osscluster.go`, `ring.go`, `sentinel.go`); README.md:536-543
says plainly that "new code should not set it". Grepping the package shows the
field is only ever copied between option structs (`universal.go:291`,
`osscluster.go:514`, `ring.go:276`, `sentinel.go:255`) or assigned from a URL
(`sentinel.go:507`) — nothing reads it, so following the advice would change
nothing.

The stated reason is also gone: RediSearch RESP3 parsing has been stable since
v9.20, which is why no flag is needed. The examples still construct their
client with `Protocol: 2` (`search-aggregate-steps/main.go:25`,
`search-aggregate-collect/main.go:29`); that choice is left alone, only the
justification is corrected.
2026-10-19 14:23:47 +03:00
ump45nose 85f0c92d26 docs: fix ZStore weights type in README example (#4134) 2026-10-19 14:23:32 +03:00
ump45nose c422850371 docs(otel): fix NewClient call in README example (#4147) 2026-10-19 14:06:03 +03:00
ump45nose 3a4aeb5d05 docs(ts): call the incrby/decrby delta a value (#4163)
* docs(ts): call the incrby/decrby delta a value

TSIncrBy, TSIncrByWithArgs, TSDecrBy and TSDecrByWithArgs all said the
argument is a timestamp, but it is placed in the addition_value slot of
TS.INCRBY/TS.DECRBY. The real timestamp is passed separately as the TIMESTAMP
option (see TSIncrDecrOptions.Timestamp), which the very same doc comment
lists as an additional option.

* fix(ts): rename incrby/decrby timestamp argument to value

Follow-up to the doc fix: the parameter of TSIncrBy, TSIncrByWithArgs,
TSDecrBy and TSDecrByWithArgs is the addition value, not a timestamp, so
name it value to match the doc comments. No behavior or API change.
2026-10-19 13:51:04 +03:00
ump45nose c5062586c6 docs: replace stale invoke hint in CONTRIBUTING (#4148)
* docs: replace stale invoke hint in CONTRIBUTING

* docs(docs): clarify automation discovery
2026-10-19 13:48:44 +03:00
ump45nose 084760cd72 docs(prob): document CFReserve's expansion option (#4167) 2026-10-19 13:42:44 +03:00
ump45nose c9298320cd docs(ts): list the options TSAlter actually sends (#4166) 2026-10-19 11:00:52 +03:00
ump45nose 30d2361c11 docs: match the SET KEEPTTL keyword case in README (#4159)
The "Look and feel" block documents each snippet with the uppercase Redis
command syntax it stands for ("SET key value EX 10 NX", "SORT list LIMIT
0 2 ASC", "ZRANGEBYSCORE zset -inf +inf WITHSCORES LIMIT 0 2"), but the
KeepTTL snippet alone writes its option in lowercase. Redis spells the SET
option KEEPTTL, so align the comment with the other five uppercase
snippets.

Comment text only; the Go line below is unchanged.
2026-10-19 10:25:27 +03:00
ump45nose d01bbdfde5 docs(ts): describe TS.ADD as a time-series sample (#4162)
The TSAdd and TSAddWithArgs doc comments said the observations go into a
t-digest sketch, but both build a TS.ADD command that appends one
timestamp/value sample to a time-series key. TSMAdd in the same file already
uses the correct wording.
2026-10-19 10:15:32 +03:00
ump45nose 32d98f8a10 docs: correct the CF.INSERT/CF.INSERTNX options (#4164) 2026-10-19 10:10:28 +03:00
ump45nose 08f3f318de docs: use "its" in the experimental command notes (#4158)
The "NOTE ... is still experimental" comment on the newer string commands
read "it's signature and behaviour may change", using the contraction
where the possessive determiner is needed. These comments are rendered as
godoc, so the mistake is user-visible on pkg.go.dev.

Only the pronoun changes: wording and line breaks are untouched, and no
code moves.
2026-10-19 10:02:47 +03:00
ump45nose 6d855d16d7 docs: fix stale TOC anchor for StreamingCredentialsProvider (#4042)
* docs: fix stale TOC anchor for StreamingCredentialsProvider

* docs(readme): remove streaming experimental label
2026-10-01 12:19:25 +03:00
ump45nose f648fa79b5 fix(maintnotifications): fix "proccessing" typo in log message (#4044) 2026-09-29 14:05:40 +03:00
ump45nose 6c4fdec267 docs: fix "possiblity" typo in CONTRIBUTING.md (#4043) 2026-09-29 14:04:52 +03:00