1
0
mirror of https://github.com/redis/go-redis.git synced 2025-09-02 22:01:16 +03:00
Commit Graph

2741 Commits

Author SHA1 Message Date
Nedyalko Dyakov
56829d4925 Merge branch 'master' into implement-tls-url-parameters-pr2076 2025-09-02 16:03:17 +03:00
LINKIWI
10121e9e1c feat(osscluster): Support subscriptions against cluster slave nodes (#3480) 2025-09-02 16:03:00 +03:00
Jonathan Suever
6f41b600c5 fix(client): Do not assume that all non-IP hosts are loopbacks (#3085)
* Do not assume that all non-IP hosts are loopbacks

* handle localhost and Docker internal hostnames

---------

Co-authored-by: Nedyalko Dyakov <nedyalko.dyakov@gmail.com>
Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
Co-authored-by: ofekshenawa <ofek.shenawa@redis.com>
Co-authored-by: ofekshenawa <104765379+ofekshenawa@users.noreply.github.com>
2025-09-02 15:58:50 +03:00
Matthew Hooker
f0058063a9 feat(otel): Add wait metrics to otel (#3493)
* Add wait metrics to otel

* add unit
2025-09-02 15:48:18 +03:00
cxljs
fafec3f3ce Pipeliner expose queued commands (#3496)
* Pipeliner expose queued commands

Signed-off-by: Xiaolong Chen <fukua95@gmail.com>

* add tests and update some comments

Signed-off-by: Xiaolong Chen <fukua95@gmail.com>

---------

Signed-off-by: Xiaolong Chen <fukua95@gmail.com>
2025-09-01 17:44:26 +03:00
cxljs
6b9cbe8c54 fix(test): fix a timing issue in pubsub test (#3498)
Signed-off-by: Xiaolong Chen <fukua95@gmail.com>
2025-09-01 17:15:50 +03:00
Nedyalko Dyakov
e91f6ced09 fix(make test): Add default env in makefile (#3491)
* fix(make test): add default env in makefile

* Apply suggestion from @ndyakov

* update hardcoded version
2025-09-01 16:17:28 +03:00
cxljs
6bc7238340 Fix the ReplicaOnly option does not take effect when using NewFailoverClusterClient (#3482)
Signed-off-by: Xiaolong Chen <fukua95@gmail.com>
Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
2025-09-01 10:09:32 +03:00
cxljs
bb94ac7898 chore(readme): Update the introduction to running tests in README.md (#3495)
* update README.md

Signed-off-by: Xiaolong Chen <fukua95@gmail.com>

* update README.md

Signed-off-by: Xiaolong Chen <fukua95@gmail.com>

---------

Signed-off-by: Xiaolong Chen <fukua95@gmail.com>
2025-09-01 10:08:14 +03:00
ofekshenawa
7add47d726 Merge branch 'master' into implement-tls-url-parameters-pr2076 2025-08-22 16:35:34 +03:00
cybersmeashish
ff4d63e06b chore(test): Add comprehensive edge case tests for IncrByFloat command (#3477)
This commit adds extensive test coverage for the IncrByFloat Redis command,
covering various edge cases and scenarios that were not previously tested.

Test cases added:
- Negative increment values
- Zero increment (should return current value)
- High precision floating point operations
- Non-existent key behavior (should start from 0)
- Integer values stored as strings
- Scientific notation (both positive and negative)
- Error handling for non-numeric values
- Very large numbers (near float64 limits)
- Very small numbers (near zero precision)

These tests ensure robust behavior of the IncrByFloat command across
different numeric formats and edge conditions, improving the overall
reliability and test coverage of the go-redis library.

The tests use Gomega's BeNumerically matcher for floating point
comparisons to handle precision issues appropriately.
2025-08-18 20:05:47 +03:00
cxljs
e07f55bed1 chore(buffers): Set the default read/write buffer size of Redis connection to 32KiB (#3483)
* update README.md

Signed-off-by: Xiaolong Chen <fukua95@gmail.com>

* typo: 0.5MiB -> 256KiB

Signed-off-by: Xiaolong Chen <fukua95@gmail.com>

* Set the default read/write buffer size of Redis connection to 32KiB

Signed-off-by: Xiaolong Chen <fukua95@gmail.com>

---------

Signed-off-by: Xiaolong Chen <fukua95@gmail.com>
2025-08-18 20:04:55 +03:00
Elena Kolevska
b8682d037b chore(ci): Bumps test image to 8.2.1-pre (#3478)
* Bumps test image to 8.2.1-pre

Signed-off-by: Elena Kolevska <elena@kolevska.com>

* Missed the “benchmark” job

Signed-off-by: Elena Kolevska <elena@kolevska.com>

---------

Signed-off-by: Elena Kolevska <elena@kolevska.com>
2025-08-18 16:51:38 +03:00
cxljs
8336c44404 chore(client): fix UniversalOptions miss ReadBufferSize and WriteBufferSize options (#3485)
Signed-off-by: Xiaolong Chen <fukua95@gmail.com>
2025-08-18 15:46:31 +03:00
dependabot[bot]
d2ad801ba2 chore(deps): bump actions/checkout from 4 to 5 (#3484)
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-18 11:33:44 +03:00
ofekshenawa
5060993085 Merge branch 'master' into implement-tls-url-parameters-pr2076 2025-08-14 18:53:38 +03:00
ofekshenawa
835d6ef7c3 fix: update RedissUsernamePassword test case for TLS 1.2 enforcement
Fix the remaining cluster test failure by updating the RedissUsernamePassword
test case to expect MinVersion: tls.VersionTLS12.

The test was failing because:
- Expected: TLSConfig with MinVersion: 0 (not set)
- Actual: TLSConfig with MinVersion: 771 (TLS 1.2)

This completes the alignment of all cluster test cases with our security-first
approach where all rediss:// URLs automatically enforce TLS 1.2 minimum.

All cluster test cases now consistently expect MinVersion: tls.VersionTLS12
for rediss:// URLs, matching the behavior of single client tests.
2025-08-14 18:50:30 +03:00
ofekshenawa
8ff9a76346 fix: update cluster test expectations for TLS 1.2 enforcement
Fix the failing cluster test 'ClusterClient ParseURL match ParseClusterURL'
by updating the MissingRedissPort test case to expect MinVersion: tls.VersionTLS12.

The test was failing because:
- Expected: MinVersion: 0 (not set)
- Actual: MinVersion: 771 (TLS 1.2)

This aligns with our security-first approach where all rediss:// URLs
automatically enforce TLS 1.2 minimum, even when no TLS parameters
are explicitly specified.

Test verification:
- Created and ran isolated test confirming ParseClusterURL now correctly
  sets MinVersion: 771 for basic rediss://localhost URLs
- All cluster URL parsing now consistent with single client behavior

This resolves the cluster test failure while maintaining the enhanced
security posture across all client types.
2025-08-14 18:46:09 +03:00
ofekshenawa
62a56aa6b1 fix: update test expectations for consistent TLS 1.2 enforcement
After pulling the latest security fixes, update test cases to match the new
security-first behavior where all rediss:// URLs enforce TLS 1.2 minimum:

**Changes Made**:
1. **Cluster Test Fixes**:
   - Updated ParseRedissURL test to expect MinVersion: tls.VersionTLS12
   - Updated MultipleRedissURLs test to expect MinVersion: tls.VersionTLS12
   - Updated RedissTLSCert test to expect MinVersion: tls.VersionTLS12
   - Updated RedissSkipVerify test to expect MinVersion: tls.VersionTLS12

2. **Sentinel Client Consistency**:
   - Made sentinel client behavior consistent with single/cluster clients
   - Always set MinVersion to TLS 1.2 for rediss:// URLs, even when not specified
   - Matches the security-first approach across all client types

**Security Behavior**:
- All rediss:// URLs now enforce minimum TLS 1.2 by default
- Consistent security posture across single, cluster, and sentinel clients
- No breaking changes for secure configurations
- Enhanced security for all TLS connections

**Test Results**:
- All single client tests pass 
- All builds successful 
- Consistent behavior across all client types 

This ensures uniform security enforcement and test expectations across
the entire go-redis library.
2025-08-14 17:13:13 +03:00
cxljs
97817108dd Set the read/write buffer size of the sentinel client to 4KiB (#3476)
Signed-off-by: Xiaolong Chen <fukua95@gmail.com>
2025-08-14 15:48:45 +03:00
ofekshenawa
2614ca0e7e Potential fix for code scanning alert no. 14: Insecure TLS configuration
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2025-08-14 11:40:43 +03:00
ofekshenawa
a4436229e3 Potential fix for code scanning alert no. 13: Insecure TLS configuration
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2025-08-14 11:37:53 +03:00
ofekshenawa
1cfe757f09 Potential fix for code scanning alert no. 15: Insecure TLS configuration
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2025-08-14 11:37:38 +03:00
ofekshenawa
a070b72dfd security: fix remaining CodeQL insecure TLS configuration alerts
Address the final 3 CodeQL security alerts for 'Insecure TLS configuration':

**Root Cause**:
CodeQL detected that setting  or
would result in , which is insecure
(TLS version 0).

**Security Fix**:
- When  or  is specified, don't set
  the TLS version at all - let Go use its secure defaults
- Only set explicit TLS versions when they are >= TLS 1.2 (secure)
- Applied fix consistently across all client types

**Files Fixed**:
- options.go (lines 609, 620) - Single client
- osscluster.go (lines 336, 350) - Cluster client
- sentinel.go (lines 446, 460) - Sentinel client

**Security Behavior**:
-  → Don't set MinVersion (Go default: secure)
-  → Error: insecure, minimum TLS 1.2 required
-  → Set explicit secure version
- Same logic applies to

**Test Coverage**:
- Added test case for  behavior
- Verified all security validation tests pass
- Confirmed no regression in functionality

This resolves all remaining CodeQL security alerts while maintaining
secure defaults and clear error messages for insecure configurations.
2025-08-14 11:20:18 +03:00
ofekshenawa
85cfa2db7b security: fix CodeQL security vulnerabilities in TLS parameters
Address 9 high-severity security issues identified by GitHub CodeQL:

1. **Integer Conversion Security**:
   - Add proper bounds checking for tls_min_version and tls_max_version
   - Validate input range (0-65535) before casting to uint16
   - Prevent integer overflow vulnerabilities

2. **TLS Security Enforcement**:
   - Enforce minimum TLS 1.2 (771) for all TLS version parameters
   - Reject insecure TLS versions (< TLS 1.2) with clear error messages
   - Prevent downgrade attacks and insecure configurations

3. **Comprehensive Validation**:
   - Applied security fixes to all client types (single, cluster, sentinel)
   - Added security validation test cases
   - Updated documentation to reflect security requirements

4. **Test Coverage**:
   - Added tests for insecure TLS version rejection
   - Added tests for integer overflow protection
   - Updated existing tests to use secure TLS versions (771, 772)

Security improvements:
- Prevents integer overflow attacks via malicious URL parameters
- Enforces secure TLS configurations by default
- Provides clear error messages for security violations
- Maintains backward compatibility for secure configurations

Fixes all CodeQL security alerts while maintaining functionality.
2025-08-14 11:10:31 +03:00
ofekshenawa
8c5764632d feat: extend TLS URL parameters to all client types
Add comprehensive TLS URL parameter support across all Redis client types:

- Cluster Client (ParseClusterURL): Full TLS parameter support
- Sentinel Client (ParseFailoverURL): Full TLS parameter support
- Universal Client: Inherits support from underlying clients

Supported parameters for all client types:
- tls_cert_file and tls_key_file: Client certificate authentication
- tls_min_version and tls_max_version: TLS version constraints
- tls_server_name: Server name override for certificate validation
- skip_verify: Skip certificate verification (existing parameter)

Features:
- Consistent API across all client types
- Comprehensive test coverage for cluster client
- Enhanced documentation for all client configurations
- Proper error handling and validation

This ensures users have the same TLS configuration capabilities
regardless of which Redis client type they use, providing a
consistent and complete TLS configuration experience.
2025-08-14 11:01:41 +03:00
ofekshenawa
3ba4a9ae20 Merge branch 'master' of https://github.com/redis/go-redis into implement-tls-url-parameters-pr2076 2025-08-14 10:55:10 +03:00
ofekshenawa
185f6aba7a feat: improve TLS URL parameters with snake_case naming
Building on Ben Weissmann's original implementation, this commit adds:

- Snake_case parameter names (addressing reviewer feedback):
  * tls_cert_file and tls_key_file (instead of TLSCertPEMFile/TLSKeyPEMFile)
  * tls_min_version and tls_max_version (instead of TLSMinVersion/TLSMaxVersion)
  * tls_server_name (instead of ServerName)
- Improved error messages for better user experience
- Updated test cases to use snake_case parameters
- Removed redundant tls_insecure_skip_verify (use existing skip_verify)
- Enhanced documentation with clear parameter descriptions

This addresses all reviewer feedback from PR #2076 while maintaining
the core functionality and comprehensive test coverage.
2025-08-14 10:47:16 +03:00
ofekshenawa
2e2225ec07 fix: update test case for current TLS behavior
The skip_verify test case now expects ServerName to be set to 'localhost'
as this is the current behavior in the updated codebase.
2025-08-14 10:44:17 +03:00
Ben Weissmann
c1e788b6a3 feat: add TLS URL parameters 2025-08-14 10:42:50 +03:00
ofekshenawa
0b1e9f77ef fix(json): Ensure that JSON.GET returns Nil response (#3470)
* fix conflicts

* Fix JSON nil response handling

Ensure that JSON.GET returns redis.Nil for missing keys/paths,
making it consistent with other Redis commands.

- Restore proper nil detection logic in JSONCmd.readReply
- Add comprehensive test coverage for JSON nil scenarios
- Handle both non-existent keys and non-existent paths consistently
- Distinguish between empty arrays and nil responses
- Add documentation for Val() and Expanded() methods

Original work and problem identification by Nic Gibson.
Enhanced implementation with comprehensive testing and fixes
for the broken nil detection logic.

Fixes #2987

* Fix JSON nil response handling - align with Redis behavior

- Non-existent keys return redis.Nil (consistent with other Redis commands)
- Non-existent paths in existing keys return empty array '[]'
- Fix broken test that was using wrong doc1 reference
- Add comprehensive test coverage for JSON nil scenarios

This aligns with official Redis JSON.GET behavior:
- Missing keys should return nil error like other Redis commands
- Missing paths should return empty JSON array, not error

* Fix JSONDel tests

---------

Co-authored-by: Nic Gibson <nic.gibson@redis.com>
Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
2025-08-12 14:28:07 +03:00
Elena Kolevska
b566dcacd6 chore(github): Removes dry run for stale issues policy (#3471) 2025-08-12 14:08:51 +03:00
ofekshenawa
436979f5c7 feat(options): Clean failing timeout implementation (#3472)
* Fix hard code of failing timeout

1. if not set failing time limit, default is 15 seconds.

* feat: Complete configurable FailingTimeoutSeconds implementation

---------

Co-authored-by: Shino Wu <shino_wu@trendmicro.com>
2025-08-12 14:08:28 +03:00
Hristo Temelski
6220024a38 chore(otel): Update otel metrics URL (#3474) 2025-08-12 14:07:17 +03:00
Nedyalko Dyakov
7b4a537aef chore(release): 9.12.1, failover client buffer size fixes (#3469) extra/rediscmd/v9.12.1 extra/rediscensus/v9.12.1 v9.12.1 extra/redisotel/v9.12.1 extra/redisprometheus/v9.12.1 2025-08-11 18:58:21 +03:00
Nedyalko Dyakov
94cfffa417 fix(options): Add buffer sizes to failover. Update README (#3468)
* fix(options): Add buffer sizes to failover. Update README

* fix(spellcheck): add KiB in wordlist

* fix(comment): fix defaul value in comment

* fixes #3465
2025-08-11 16:01:24 +03:00
Vladimir Mihailenco
2c29dedc2d chore(otel): upgrade otel example to Uptrace v2 (#3466)
Uptrace v2 comes with a new config file and new defaults.
Also updated dependencies to the latest versions.
2025-08-11 12:33:09 +03:00
Nedyalko Dyakov
b7838dc4e7 chore(release): 9.12.0 / redis 8.2 (#3464) extra/redisotel/v9.12.0 extra/rediscmd/v9.12.0 v9.12.0 extra/rediscensus/v9.12.0 extra/redisprometheus/v9.12.0 2025-08-05 16:50:25 +03:00
Monkey
6a48d3fec1 feat: recover addIdleConn may occur panic (#2445)
* feat: recover addIdleConn may occur panic

Signed-off-by: monkey92t <golang@88.com>

* fix test race

Signed-off-by: monkey92t <golang@88.com>

---------

Signed-off-by: monkey92t <golang@88.com>
Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
2025-08-05 15:31:58 +03:00
Cattī Crūdēlēs
4767d9dfaf fix(redisotel): fix buggy append in reportPoolStats (#3122)
The current append twice to `conf.attrs` approach in `reportPoolStats` may result in unexpected idleAttrs,
due to `append` [can mutate](https://github.com/golang/go/issues/29115#issuecomment-444669036) the underlying array of the original slice,
as demonstrated at <https://go.dev/play/p/jwRMofH91eQ?v=goprev>.

Also, I replaced `metric.WithAttributes` in `reportPoolStats` with `metric.WithAttributeSet`,
since `WithAttributes` is just `WithAttributeSet` with some extra works that are not needed here,
see <https://pkg.go.dev/go.opentelemetry.io/otel/metric@v1.22.0#WithAttributes>.

Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
2025-08-05 15:15:34 +03:00
Mykhailo Alipa
7158a8dad4 feat(ring): specify custom health check func via HeartbeatFn option (#2940)
* specify custom health check func via ShardHealthCheckFn option

* ShardHealthCheckFn renamed to HeartbeatFn

---------

Co-authored-by: Mykhailo Alipa <strobil@Mykhailos-MacBook-Air.local>
Co-authored-by: ofekshenawa <104765379+ofekshenawa@users.noreply.github.com>
Co-authored-by: Nedyalko Dyakov <nedyalko.dyakov@gmail.com>
Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
2025-08-05 15:00:33 +03:00
Elena Kolevska
8d15d03d4e chore(github): merges into one job with two steps (#3463)
Signed-off-by: Elena Kolevska <elena@kolevska.com>
2025-08-05 14:49:28 +03:00
cxljs
375fa5d083 chore(doc): improve code readability (#3446)
- replace two similar functions `appendUniqueNode` and `appendIfNotExists` with a generic function.

- simplify the implementation of the `get` method in `clusterNodes`

- keep the member name `_generation` of `clusterNodes` consistent with other types.

- rename a data member `_masterAddr` to `masterAddr`.

Signed-off-by: Xiaolong Chen <fukua95@gmail.com>
2025-08-04 17:22:16 +03:00
Nedyalko Dyakov
f006e941d9 chore(release): 9.12.0-beta.1 (#3460) extra/rediscmd/v9.12.0-beta.1 extra/redisprometheus/v9.12.0-beta.1 extra/rediscensus/v9.12.0-beta.1 v9.12.0-beta.1 extra/redisotel/v9.12.0-beta.1 2025-08-04 15:00:37 +03:00
ofekshenawa
f93bfa1f36 feat(search): Add Query Builder for RediSearch commands (#3436)
* Add search module builders and tests (#1)

* Add search module builders and tests

* Add tests

* Use builders and Actions in more clean way

* Update search_builders.go

Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>

* Update search_builders.go

Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>

---------

Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
2025-08-04 14:15:44 +03:00
andy-stark-redis
421c8a48b4 chore(doc): DOC-5472 time series doc examples (#3443)
* DOC-5472 added and fixed tests up to

* DOC-5472 added agg bucket examples

* DOC-5472 time series doc examples

* DOC-5472 removed black lines above error checks, following feedback

* DOC-5472 fixed param formatting, following feedback

---------

Co-authored-by: Nedyalko Dyakov <1547186+ndyakov@users.noreply.github.com>
2025-08-04 14:08:10 +03:00
ofekshenawa
2ff9249846 chore(tests): Add VAMANA compression algorithm tests (#3461) 2025-08-04 14:07:15 +03:00
ofekshenawa
1eed165f9d feat(proto): add configurable buffer sizes for Redis connections (#3453)
* add configurable buffer sizes for Redis connections

* add MiB to wordlist

* Add description for buffer size parameter
2025-08-04 09:16:54 +03:00
Elena Kolevska
c1f6a04d7c Improve stale issue workflow (#3458)
* updated stale issue policy

Signed-off-by: Elena Kolevska <elena@kolevska.com>

* Adds a temporary dry run

Signed-off-by: Elena Kolevska <elena@kolevska.com>

---------

Signed-off-by: Elena Kolevska <elena@kolevska.com>
2025-08-04 09:15:34 +03:00
ofekshenawa
3c85d090fe feat(search): Add VAMANA vector type to RediSearch (#3449)
* Add VAMANA vector type to redisearch

* Change to svs-vamana vector type && remove panics from search module

* fix tests

* fix tests

* fix tests
2025-08-01 15:41:40 +03:00