Proto commits in valkey-io/valkey-glide

These commits are when the Protocol Buffers files have changed: (only the last 100 relevant commits are shown)

Commit:78f7c87
Author:James Duong

feat: cross-language client pool and isolated execution scopes (Core + Java + FFI) Implements client-instance pooling and isolated execution scopes with shared Rust core logic in glide-core. Java bindings via JNI. FFI layer for Go/Python. Feature 1: ClientPool — bounded LIFO pool with state reset on release Feature 2: IsolatedScope — dedicated connections for WATCH/MULTI/EXEC See docs/pooling-and-scopes.md for full documentation. Signed-off-by: James Duong <duong.james@gmail.com>

Commit:449f61a
Author:Jeremy Parr-Pearson
Committer:GitHub

Core, Java, Python, Node, Go: Add client-wide circuit breaker (#6050) Signed-off-by: Jeremy Parr-Pearson <jeremy.parr-pearson@improving.com>

Commit:67feff5
Author:affonsov
Committer:GitHub

Core: Phase 2 client-side caching - server-assisted invalidation via CLIENT TRACKING (#5962) * Core: Phase 2 client-side caching - server-assisted invalidation via CLIENT TRACKING --------- Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:ddd9e51
Author:affonsov
Committer:GitHub

Cheery-Pick (#5876) to release 2.4 : Python: Support custom socket address resolution (#5898) Python: Support custom socket address resolution (#5876) * Python: Support custom socket address resolution --------- Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:b4b34a1
Author:affonsov
Committer:GitHub

Python: Support custom socket address resolution (#5876) * Python: Support custom socket address resolution --------- Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:97611f8
Author:Alex Rehnby-Martin
Committer:GitHub

Add Support for Compression in Java batch commands and add max compression size (#5823) * fix(compression): add batch response decompression to Java and FFI layers - Add decompress_batch_response() public function to compression.rs - Update socket_listener.rs to use the new centralized function - Add batch decompression to java/src/lib.rs after send_transaction/send_pipeline - Add batch decompression to ffi/src/lib.rs batch() function - Add test_decompress_batch_response unit test Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * fix(java): add batch compression support to executeBatchAsync The executeBatchAsync JNI function was missing compression support, causing batch operations to bypass compression even when enabled. Changes: - Add compression processing for each command in batch operations - Add decompression for batch responses - Add batch compression integration tests for Java: - compression_batch_set_get: Tests batch SET/GET with compression - compression_batch_mixed_commands: Tests mixed SET/GET in single batch - compression_cluster_batch_set_get: Tests cluster batch with compression - compression_transaction_set_get: Tests transaction with compression Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * test(node): add batch/transaction compression tests Add tests to verify compression works correctly within transactions: - compression_transaction_set_get_standalone - compression_transaction_batch_many_keys_standalone - compression_cluster_transaction_set_get - compression_transaction_mixed_commands - compression_transaction_below_threshold_not_compressed Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * fix(ffi): add decompress_batch_response to mock compression module Add the missing decompress_batch_response function to the mock compression module used by miri-tests. This is a no-op that returns the value unchanged, matching the mock behavior of other compression functions. Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * fix(compression): recursively decompress nested arrays in batch responses - Fix decompress_batch_response to handle nested arrays like MGET results - Add MSET/MGET batch compression tests for Java and Python - Add Rust unit tests for nested array decompression Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * style(rust): fix formatting in compression tests Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * style(python): fix black formatting in compression tests Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * style: fix formatting and type annotations in compression tests Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * security(compression): add max_decompressed_size limit to prevent DoS - Add max_decompressed_size field to CompressionConfig (default 512MB) - ZSTD: Use streaming decompression with size limit check - LZ4: Validate original_size header before allocation - Add protobuf field for max_decompressed_size configuration - Add comprehensive tests for size limit enforcement This prevents decompression bomb attacks where an attacker could craft a small compressed payload that expands to an arbitrarily large size, causing OOM on clients with compression enabled. Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * fix(compression): add max_decompressed_size limit to prevent decompression bombs Add configurable max_decompressed_size parameter to CompressionConfiguration in Python and Java to prevent denial of service attacks via decompression bombs. - Python: Add max_decompressed_size field to CompressionConfiguration dataclass with 512MB default (matching Valkey's proto-max-bulk-len) - Java: Add maxDecompressedSize field to CompressionConfiguration with validation - Update ConnectionManager to pass maxDecompressedSize to protobuf - Add unit tests for configuration validation in both languages - Add integration test for client creation with custom max_decompressed_size The Rust core already implements the size limit enforcement during decompression. This change exposes the configuration to Python and Java clients. Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * fix(compression): add max_decompressed_size to Node.js and Go Add configurable maxDecompressedSize parameter to CompressionConfiguration in Node.js and Go to prevent denial of service attacks via decompression bombs. Node.js: - Add maxDecompressedSize field to CompressionConfiguration interface - Support null value to disable the limit - Add validation for positive values - Update compressionConfigToProtobuf to pass the field - Add unit tests for configuration validation Go: - Add maxDecompressedSize field to CompressionConfiguration struct - Add WithMaxDecompressedSize builder method - Add validation for positive values (nil disables limit) - Update toProtobuf to pass the field - Add unit tests for configuration validation Both default to 512MB (matching Valkey's proto-max-bulk-len). Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * refactor(compression): remove clone in batch decompression and factor out helper - Add try_decompress_batch_response helper function in glide-core - Remove value.clone() from batch decompression in ffi/src/lib.rs - Remove value.clone() from batch decompression in java/src/lib.rs - Simplify both FFI layers to use the new helper function - decompress_batch_response now takes ownership to avoid cloning Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * test(node): add empty batch compression test Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * fix(compression): use unwrap_or instead of unwrap_or_else for clippy Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * docs(python): add max_decompressed_size to sphinx duplicate exclusions Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * fix(compression): remove unused variable in test Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * docs(compression): escape generic type in doc comment Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * style(go): add missing blank line between functions Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * fix(compression): simplify max_decompressed_size handling across clients - Remove 'disable limit' (0 value) concept from all clients - Use optional protobuf field: not set = use Rust default (512MB) - All clients now default to nil/undefined/null = use Rust default - Positive values are used as-is - Zero is now invalid (must be positive if set) This simplifies the API and aligns all clients with a consistent pattern. Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * test(python): update max_decompressed_size tests for new default behavior Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * fix(compression): improve error message when decompression exceeds size limit Add guidance to configure max_decompressed_size when the limit is exceeded, helping users understand how to handle larger values if needed. Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * fix(go): fix maxDecompressedSize protobuf assignment type The protobuf field is optional uint64, which generates as *uint64 in Go. Assign the pointer directly instead of dereferencing. Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * fix(ffi): add missing try_decompress_batch_response to miri mock Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * fix(go): update tests for optional uint64 protobuf field type The protobuf field MaxDecompressedSize is optional uint64, which generates as *uint64 in Go. Update tests to use pointer assertions. Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * fix(ffi): fix miri-tests mock compression and remove unused import - Define MIN_COMPRESSED_SIZE directly in mock instead of circular import - Remove unused Routable import that caused warning-as-error in CI Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * fix(ffi): restore Routable import with allow(unused_imports) The Routable trait is needed for the command() method used in response policy lookup. Added allow(unused_imports) to suppress warning in miri-tests where mock implementations don't use the trait methods. Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * refactor(java): use log_warn_lazy! for lazy logging Replace log::warn! with log_warn_lazy! macro for better performance by avoiding string formatting when log level is not enabled. Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * fix(java): add tracing dependency for log_warn_lazy! macro The log_warn_lazy! macro from logger_core requires tracing crate to check if the log level is enabled before formatting the message. Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * test(python): add sync tests for max_decompressed_size config Add TestCompressionMaxDecompressedSize class to sync tests to match the async tests, fixing the test_api_consistency check. Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> --------- Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com>

Commit:222edf5
Author:Alex Rehnby-Martin

fix(compression): simplify max_decompressed_size handling across clients - Remove 'disable limit' (0 value) concept from all clients - Use optional protobuf field: not set = use Rust default (512MB) - All clients now default to nil/undefined/null = use Rust default - Positive values are used as-is - Zero is now invalid (must be positive if set) This simplifies the API and aligns all clients with a consistent pattern. Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com>

Commit:8def289
Author:Alex Rehnby-Martin
Committer:Alex Rehnby-Martin

security(compression): add max_decompressed_size limit to prevent DoS - Add max_decompressed_size field to CompressionConfig (default 512MB) - ZSTD: Use streaming decompression with size limit check - LZ4: Validate original_size header before allocation - Add protobuf field for max_decompressed_size configuration - Add comprehensive tests for size limit enforcement This prevents decompression bomb attacks where an attacker could craft a small compressed payload that expands to an arbitrarily large size, causing OOM on clients with compression enabled. Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com>

Commit:223c182
Author:Alex Rehnby-Martin

security(compression): add max_decompressed_size limit to prevent DoS - Add max_decompressed_size field to CompressionConfig (default 512MB) - ZSTD: Use streaming decompression with size limit check - LZ4: Validate original_size header before allocation - Add protobuf field for max_decompressed_size configuration - Add comprehensive tests for size limit enforcement This prevents decompression bomb attacks where an attacker could craft a small compressed payload that expands to an arbitrarily large size, causing OOM on clients with compression enabled. Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com>

Commit:a501788
Author:James Xin
Committer:GitHub

Add replica discovery and static mode for standalone servers (#5724) --------- Signed-off-by: James Xin <james.xin@improving.com>

Commit:a931079
Author:Shoham Elias
Committer:GitHub

Core/Python: add initial client-side-caching support (#5127) * Core/Python: add initial client-side-caching support Signed-off-by: Shoham Elias <shohame@amazon.com> * save cache before changes Signed-off-by: Shoham Elias <shohame@amazon.com> * save option 2 Signed-off-by: Shoham Elias <shohame@amazon.com> * Address PR #5127 review feedback for client-side caching - Add total_lookups metric (full stack: proto, Rust, socket listener, Python API, tests) - Remove alarming "Important"/"Currently" docs from config.py and cache.py, reword neutrally - Deduplicate cache.py docstrings (class vs create method) - Switch cache logging from logger_core functions to tracing macros for lazy evaluation - Extract HOUSEKEEPING_INTERVAL constant in cache registry - Rename key_for_routable to key_for_command - Clarify expirations docstring (due to TTL) - Remove redundant test_cache_max_memory_limit test - Add total_lookups assertions to all Rust and Python cache tests Signed-off-by: Shoham Elias <shohame@amazon.com> * fix Signed-off-by: Shoham Elias <shohame@amazon.com> * fix api consistancy Signed-off-by: Shoham Elias <shohame@amazon.com> * fix re-export test Signed-off-by: Shoham Elias <shohame@amazon.com> * fix CI Signed-off-by: Shoham Elias <shohame@amazon.com> * fix CI: add Zlib license to deny.toml and add missing constants module - Allow Zlib license (used by foldhash, transitive dep of lru crate) - Add mod constants to test_cache.rs (required by utilities/mod.rs) Signed-off-by: Shoham Elias <shohame@amazon.com> * fix lint Signed-off-by: Shoham Elias <shohame@amazon.com> * Address final comments Signed-off-by: Shoham Elias <shohame@amazon.com> --------- Signed-off-by: Shoham Elias <shohame@amazon.com>

Commit:ec246f7
Author:Alex Rehnby-Martin
Committer:GitHub

ALL_NODES support (#5216) * Core implementation of ALL_NODES Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Continued implementation of ALL_NODES Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Java support Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Node support Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Go support Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * fmt Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Format Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * format java Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * format Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Fix test Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Add python sync test Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Fix Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Fix java 8 issues Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Fix Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * format Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Address PR comments Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * refactor(core): improve AllNodes strategy consistency and add unit tests - Add round_robin_read_from_all_nodes() function in connections_container.rs for consistent AllNodes routing across primary and replicas - Add unit tests for AllNodes strategy in connections_container - Fix Java test: use try-with-resources for GlideClusterClient to prevent leaks - Fix Java test: use async pattern for GET calls with CompletableFuture.allOf() - Remove unused variables in Java and Python tests - Remove unused _get_num_replicas method from TestReadFromStrategy class Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Format Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Update test to handle timing difference Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Skip replica-reliant test on windows (no replica configured in env) Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> --------- Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com>

Commit:f86f220
Author:Alex Rehnby-Martin
Committer:Alex Rehnby-Martin

Core implementation of ALL_NODES Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com>

Commit:933c0cb
Author:Alex Rehnby-Martin
Committer:GitHub

Read only mode (#5485) * Core and python change to add read only mode Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Add java support for readOnly Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Add node impl, tests Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Go support Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Cleanup Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * format Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Add sync tests Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Address PR feedback Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Update changelog Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> --------- Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com>

Commit:ca2ae5f
Author:Alex Rehnby-Martin
Committer:GitHub

Update Release 2.3 Branch from latest main (#5312) * feat(Java): Implement server management acl commands (#5132) * Implement server management acl commands Signed-off-by: Sasidharan Gopal <sasidharan.gopal94@gmail.com> * Updated tests Signed-off-by: Sasidharan Gopal <sasidharan.gopal94@gmail.com> * Adding tests for acl load and acl save Signed-off-by: Sasidharan Gopal <sasidharan.gopal94@gmail.com> * Addressing review comments Signed-off-by: Sasidharan Gopal <sasidharan.gopal94@gmail.com> * Applying spotlessApply changes Signed-off-by: Sasidharan Gopal <sasidharan.gopal94@gmail.com> --------- Signed-off-by: Sasidharan Gopal <sasidharan.gopal94@gmail.com> Co-authored-by: Thomas Zhou <54688146+xShinnRyuu@users.noreply.github.com> * [Node] Fix to handle non-string types in toBuffersArray (#5166) Fix to handle non-string types in toBuffersArray Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * Make sure we handle IPV6 properly when extracting host and port. (#5104) Signed-off-by: Sylvain Royer <sylvain.royer@smartnews.com> * Update ffi to support register and unregister of pubsub callback post connection (#5178) * Update ffi to support register and unregister of pubsub callback post connection Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * fmt Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Run clippy Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * fmt Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Fix test Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Fix for wrong pass error type handling Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * fmt Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> --------- Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Python: Fix flaky pubsub tests, fix black lint (#5180) * fixed sync cleanup Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * fixed config interval test, increased workflow timeout Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * adjested lint to new black version Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * fixed interval test Signed-off-by: Lior Sventitzky <liorsve@amazon.com> --------- Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * Core: Fix topology refresh reconnection issue when using refreshTopologyFromInitialNodes (#5155) --------- Signed-off-by: Shoham Elias <shohame@amazon.com> * Add CLAUDE.md for AI agent context (#5197) - Hard constraints section (non-negotiable rules upfront) - Rules grouped by trigger (always, when writing, before push, before PR) - Project structure and architecture overview - Context retrieval with triggers, start-with, and depends-on for just-in-time RAG Signed-off-by: Avi Fenesh <aviarchi1994@gmail.com> * Re-enable tests that were skipped due to issue #2277 (#5208) * Fix: Remove DEFAULT_CLIENT_CREATION_TIMEOUT and honor user-provided connection timeout by centralizing timeout logic in ConnectionRequest (#5198) * Core: Fix unnecessary unwrap() warning in test utilities (#5214) Signed-off-by: James Duong <duong.james@gmail.com> * Core: Fix unnecessary unwrap() warning in connection.rs (#5215) - Replace `is_some()` check followed by `unwrap()` with `if let Some()` pattern matching Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com> * Python: Add inflight request limit support to sync client (#5201) Extends the FFI layer and Python sync client to support the inflight_requests_limit configuration parameter, bringing feature parity with the async client. Changes: - FFI: Add reserve/release inflight request checks in command() - Python sync config: Add inflight_requests_limit parameter to GlideClientConfiguration and GlideClusterClientConfiguration - Tests: Add comprehensive tests at FFI and Python layers - FFI: test_inflight_request_limit_sync_client verifies config passing - Python: test_sync_inflight_request_limit with 12 test combinations (3 limits × 2 cluster modes × 2 protocols) The inflight request limit prevents memory exhaustion and server overload by restricting the number of concurrent in-flight requests. When the limit is exceeded, commands return immediately with a "Reached maximum inflight requests" error. Signed-off-by: James Duong <duong.james@gmail.com> * Python: Add OpenTelemetry support to sync client (#5204) Adds OpenTelemetry support to the Python sync client, bringing it to feature parity with the async client. Includes comprehensive refactoring to share configuration classes and test utilities between async and sync implementations. ## Changes ### Core Implementation - Added opentelemetry.py module with OpenTelemetry singleton class for both async and sync clients - Implemented span creation in _execute_command() and _execute_batch() methods - Uses FFI create_named_otel_span() and create_batch_otel_span() functions - Proper span cleanup with try/finally blocks - Added runtime sampling control via get_sample_percentage() and set_sample_percentage() static methods ### Code Reuse & Refactoring - **Shared Configuration**: Moved OpenTelemetryConfig, OpenTelemetryTracesConfig, and OpenTelemetryMetricsConfig to glide_shared module - **Async Client Refactoring**: Added PyO3 conversion layer (_convert_to_pyo3_config()) to transform shared config to Rust FFI types at the boundary - **Simplified API**: Both async and sync clients now use identical public APIs for OpenTelemetry configuration - **Consolidated Test Utilities**: Created otel_test_utils.py with shared helper functions (read_and_parse_span_file, check_spans_ready, build_timeout_error) ### Documentation - Added OpenTelemetry section to README.md with configuration examples ## Migration Notes - Existing async client code continues to work without changes - Both clients now share the same configuration classes from glide_shared.opentelemetry - OpenTelemetry can be initialized once per process and used by both async and sync clients Signed-off-by: James Duong <duong.james@gmail.com> * Set default route for CLIENT LIST to be Random (#5234) Signed-off-by: Maayan Shani <maayan.shani@mail.huji.ac.il> * Fix the default connection timeout for test usage to be 10000ms (#5236) * Fix the default connection timeout for test usage to be 10000ms (10 seconds) Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * trigger CI Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> --------- Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * Enhance pull request template with additional sections (#5171) * Enhance pull request template with additional sections Added sections for summary, issue link, features, implementation, limitations, and testing to the pull request template. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com> * Update .github/pull_request_template.md Co-authored-by: Taylor Curran <taylor.curran@improving.com> Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com> --------- Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com> Co-authored-by: Thomas Zhou <54688146+xShinnRyuu@users.noreply.github.com> Co-authored-by: Taylor Curran <taylor.curran@improving.com> * Node: Migrate NAPI-RS from v2 to v3 (#5203) * Node: Migrate NAPI-RS from v2 to v3 Migrate the Node.js client from NAPI-RS v2 to v3, including both the Rust crate and CLI tooling. Rust crate changes (napi 2 → 3.5): - Type renames: JsUnknown → Unknown, JsObject → Object - Function signatures: Env → &'a Env for lifetime-bound returns - API changes: env.get_null() → Null.into_unknown(&env) - Deprecated APIs replaced: create_buffer_with_data() → BufferSlice::from_data() - Removed compat-mode by migrating to_unknown() → into_unknown(&env) CLI changes (@napi-rs/cli 2 → 3.5.1): - Config: napi.name → napi.binaryName, napi.triples → napi.targets - Build flags: --zig --zig-abi-suffix=2.17 → --use-napi-cross (GNU) - Build flags: --zig → --cross-compile (musl) - Node.js requirement: >=16 → >=18 Signed-off-by: Avi Fenesh <aviarchi1994@gmail.com> * Update Node.js version requirement to 18 or higher Signed-off-by: Avi Fenesh <55848801+avifenesh@users.noreply.github.com> --------- Signed-off-by: Avi Fenesh <aviarchi1994@gmail.com> Signed-off-by: Avi Fenesh <55848801+avifenesh@users.noreply.github.com> * perf: Reduce mutex contention and avoid batch clone (#5230) * perf: Reduce mutex contention and avoid batch clone Two performance improvements: 1. Lock Optimization (glide-core cluster_async) Release mutex immediately after mem::take() instead of holding it during the entire request processing loop. This eliminates contention when multiple clients share the tokio runtime. Before: Mutex held while iterating and spawning futures After: Mutex released immediately after draining the queue 2. Clone Removal (java executeBatchAsync) Take ownership of batch instead of cloning it before the async spawn. For large batches, this avoids expensive deep clones of command data. Before: let batch_clone = batch.clone(); // Expensive for large batches After: Move batch directly into the async block Both changes are safe: - Lock optimization: mem::take atomically moves all requests out - Clone removal: batch is consumed by the async block anyway Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> Signed-off-by: Avi Fenesh <aviarchi1994@gmail.com> * Clean up verbose comments Signed-off-by: Ubuntu <ubuntu@ip-172-31-25-236.us-east-2.compute.internal> Signed-off-by: Avi Fenesh <aviarchi1994@gmail.com> * fix: Use expect() for mutex lock consistency Address Copilot review comment - use .expect(MUTEX_WRITE_ERR) instead of if let Ok() for consistency with line 3079 and the rest of the codebase. Mutex poisoning should not be silently ignored. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> Signed-off-by: Avi Fenesh <aviarchi1994@gmail.com> * perf(java): Optimize UTF-8 string decoding Replace decode().toString() with new String(bytes, UTF_8) for simpler and more consistent decoding. Benchmarks show this is equivalent in performance while being cleaner code. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> Signed-off-by: Avi Fenesh <aviarchi1994@gmail.com> * fix(java): Ensure consistent byte order for direct buffer decoding Set explicit BIG_ENDIAN byte order on duplicated buffer to ensure consistent behavior across platforms. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> Signed-off-by: Avi Fenesh <aviarchi1994@gmail.com> --------- Signed-off-by: Avi Fenesh <aviarchi1994@gmail.com> Signed-off-by: Ubuntu <ubuntu@ip-172-31-25-236.us-east-2.compute.internal> Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> * Fix scriptKill_unkillable test with waitForNotBusy to prevent connection refused error (#5237) Fix scriptKill_unkillable test with waitForNotBusy to prevent connection timeout Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * Core: improve topology refresh reliability and handle ReadOnly errors (cherry-pick) (#5242) --------- Signed-off-by: Shoham Elias <shohame@amazon.com> * [Backport from 2.2] Java: add topology periodic checks config (#5229) (#5247) Java: add topology periodic checks config (#5229) Signed-off-by: Shoham Elias <shohame@amazon.com> * Enable Windows integration test in workflow through WSL (#5112) - Add x86_64-pc-windows-msvc target to install-engine workflow - Configure WSL (Windows Subsystem for Linux) for Windows CI runners - Update shell execution to use wsl-bash for Windows targets - Fix environment variable passing with WSLENV for cross-platform compatibility - Add WSL system configuration for cluster mode (vm.overcommit_memory, transparent_hugepage) - Update Valkey installation verification to use absolute paths - Enable engine installation on Windows by removing OS exclusion - Update cache key generation to use step outputs instead of env variables - Add parallel build flag (-j4) to Valkey make command for faster compilation - Update Java CD workflow to support Windows builds - Modify integration tests to work with Windows environment - Update cluster manager and test utilities for cross-platform compatibility Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com> * Core: Disable aws-lc-rs CPU jitter entropy to fix TLS connection latency regression (#5223) The aws-lc-rs library (used by rustls for TLS) introduced CPU jitter entropy as the default entropy source in v1.14.1. This causes ~3x slower TLS connection setup (~280ms vs ~90ms). Since Cargo.lock is gitignored, each CI build resolves the latest aws-lc-rs version, causing a performance regression starting with packages built after aws-lc-rs 1.14.1 was released. The fix adds AWS_LC_SYS_NO_JITTER_ENTROPY=1 to the root .cargo/config.toml, which is inherited by all client builds and disables jitter entropy at compile time. This falls back to OS entropy sources (/dev/urandom, getrandom, RDRAND) which are sufficient for cryptographic purposes. Reference: https://github.com/aws/aws-lc-rs/issues/899 Signed-off-by: Avi Fenesh <aviarchi1994@gmail.com> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Thomas Zhou <54688146+xShinnRyuu@users.noreply.github.com> * Add missing CHANGELOG for java internal statistics support (#5251) * Add missing CHANGELOG for java internal statistics support Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * Update CHANGELOG.md Co-authored-by: James Duong <duong.james@gmail.com> Signed-off-by: Thomas Zhou <54688146+xShinnRyuu@users.noreply.github.com> --------- Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> Signed-off-by: Thomas Zhou <54688146+xShinnRyuu@users.noreply.github.com> Co-authored-by: James Duong <duong.james@gmail.com> * Pin usage of CodeQL 2.23.9 to prevent Rust analyzer hanging (#5268) Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * Fix fcall_readonly_function flaky test by removing unreliable wait assertion and adding in retry loop (#5246) * Fix fcall_readonly_function flaky test by removing unreliable WAIT assertion and adding in retry loop Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * Address feedback, lower poll time and increase retry count Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> --------- Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * Reduce upper inflight limit for Python from 1500 to 500 (#5266) Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * Java: Add Windows setup instructions for GLIDE Java development (#5253) docs(java): Add Windows setup instructions for GLIDE Java development - Add note about WSL requirement for Windows users at the top of dependencies section - Add Windows dependencies installation section with two options (winget and Chocolatey) - Include detailed WSL installation and Valkey setup instructions for Windows users - Add Windows-specific protoc installation instructions with PowerShell commands - Clarify platform-specific PATH configuration notes for Linux/MacOS vs Windows - Improve documentation clarity by adding "For Linux-x86_64:" label to existing protoc instructions - Update PATH persistence notes to reflect platform differences Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com> * Reduce upper inflight limit for Python from 500 to 250 and increase blocking time (#5278) Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * feat(java): add support for KEYS, MIGRATE, and WAITAOF commands (#5107) * fix(java): enforce immediate timeouts (#5264) --------- Signed-off-by: Avi Fenesh <aviarchi1994@gmail.com> * Drop support for Node.js 16.x and 18.x. Minimum supported version is now Node.js 20.x. (#5292) Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * Refresh AWS credentials inside IAM token manager (#5282) Signed-off-by: Maayan Shani <maayan.shani@mail.huji.ac.il> * Core: parallelize DNS lookups during slot refresh (#5281) --------- Signed-off-by: Shoham Elias <shohame@amazon.com> * Python: Add dynamic PubSub support to sync client (#5272) Implements dynamic PubSub functionality for the Python sync client, achieving feature parity with the async client. This allows sync users to dynamically subscribe/unsubscribe to channels at runtime and monitor subscription health. Update the Rust FFI layer to report new pubsub statistics. Unify config.py classes since there aren't differences in support between sync and async. Support the pubsub_reconciliation_interval_ms option. Note that lazy subscription requests are not supported by design for the sync client. Signed-off-by: James Duong <duong.james@gmail.com> * Go: Add ALLOW_NON_COVERED_SLOTS to cluster scan (#5277) * Go: Support ALLOW_NON_COVERED_SLOTS flag - Support scanning even if some slots are not covered - Add test to verify that using an invalid cursor ID throws an error - Add test to verify that terminating a cursor early does not leak memory Signed-off-by: James Duong <duong.james@gmail.com> * Go: Update CHANGELOG and README for cluster scan AllowNonCoveredSlots option - Add entry to CHANGELOG.md for ALLOW_NON_COVERED_SLOTS flag support - Add cluster scan documentation section to go/README.md with examples - Document the new SetAllowNonCoveredSlots() option and its use case Signed-off-by: James Duong <duong.james@gmail.com> * Go: Fix linter formatting issues - Fix field alignment in ClusterScanOptions struct - Remove extra blank line in test file Signed-off-by: James Duong <duong.james@gmail.com> --------- Signed-off-by: James Duong <duong.james@gmail.com> * Go: Support statistics and dynamic pubsub (#5280) Implement support for dynamic pubsub commands and retrieval of statistics, inlcuding pubsub statistics. Add support for setting the pubsub reconciliation interval. Closes #5254 Signed-off-by: James Duong <duong.james@gmail.com> * Java: Add dynamic pubsub APIs and pubsub stats (#5269) * Add support for dynamic subscription and unsubscription in Java. * Add methods for retrieving subscription metrics. * Add the pubsub reconciliation interval advanced option. Fixes #5267. Signed-off-by: James Duong <duong.james@gmail.com> * Update default connectionTImeout for Java test client from 2000ms to 10000ms (#5309) Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> --------- Signed-off-by: Sasidharan Gopal <sasidharan.gopal94@gmail.com> Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> Signed-off-by: Sylvain Royer <sylvain.royer@smartnews.com> Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> Signed-off-by: Lior Sventitzky <liorsve@amazon.com> Signed-off-by: Shoham Elias <shohame@amazon.com> Signed-off-by: Avi Fenesh <aviarchi1994@gmail.com> Signed-off-by: James Duong <duong.james@gmail.com> Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com> Signed-off-by: Maayan Shani <maayan.shani@mail.huji.ac.il> Signed-off-by: Avi Fenesh <55848801+avifenesh@users.noreply.github.com> Signed-off-by: Ubuntu <ubuntu@ip-172-31-25-236.us-east-2.compute.internal> Signed-off-by: Thomas Zhou <54688146+xShinnRyuu@users.noreply.github.com> Co-authored-by: Sasidharan3094 <sasidharan.gopal94@gmail.com> Co-authored-by: Thomas Zhou <54688146+xShinnRyuu@users.noreply.github.com> Co-authored-by: Sylvain Royer <Sylvain-Royer@users.noreply.github.com> Co-authored-by: Lior Sventitzky <liorsve@amazon.com> Co-authored-by: Shoham Elias <116083498+shohamazon@users.noreply.github.com> Co-authored-by: Avi Fenesh <55848801+avifenesh@users.noreply.github.com> Co-authored-by: James Duong <duong.james@gmail.com> Co-authored-by: affonsov <67347924+affonsov@users.noreply.github.com> Co-authored-by: Maayan Shani <161942026+Maayanshani25@users.noreply.github.com> Co-authored-by: Taylor Curran <taylor.curran@improving.com> Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>

Commit:8c5240a
Author:Sasidharan3094
Committer:GitHub

feat(Java): Implement server management acl commands (#5132) * Implement server management acl commands Signed-off-by: Sasidharan Gopal <sasidharan.gopal94@gmail.com> * Updated tests Signed-off-by: Sasidharan Gopal <sasidharan.gopal94@gmail.com> * Adding tests for acl load and acl save Signed-off-by: Sasidharan Gopal <sasidharan.gopal94@gmail.com> * Addressing review comments Signed-off-by: Sasidharan Gopal <sasidharan.gopal94@gmail.com> * Applying spotlessApply changes Signed-off-by: Sasidharan Gopal <sasidharan.gopal94@gmail.com> --------- Signed-off-by: Sasidharan Gopal <sasidharan.gopal94@gmail.com> Co-authored-by: Thomas Zhou <54688146+xShinnRyuu@users.noreply.github.com>

Commit:dc02d02
Author:Lior Sventitzky
Committer:GitHub

Core/Python - add dynamic PubSub sycnhronizer to core & python async PubSub API (#5156) * Core: Add fenced command logic (#4945) * added fenced command logic and tests Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * add sunsubscribe intercepting Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * fixed existing lint issue to get tests to run Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * addressed comments Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * addressed comments 2 Signed-off-by: Lior Sventitzky <liorsve@amazon.com> --------- Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * Dynamic pubsub: added pubsub API in python (#4948) * added api pubsub methods Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * addressed comments Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * addressed comments 2 Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * exclude SubscriptionStatus symbol from re-export test Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * addressed comments 3 Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * changed types of TO and get_subscriptions Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * renamed to param Signed-off-by: Lior Sventitzky <liorsve@amazon.com> --------- Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * Add pubsub mock impl and python tests for dynamic pubsub(#4986) * added python tests and rust pubsub mock Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * added mock-pubsub rust feature, changed workflow Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * fix timeout error handling in mock Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * updated mock with trait Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * Added synchronizer to core cluster and standalone, remove push_sender from creator Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * added more integration point, added trait methods, fixed cd Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * added address to current update, added handle_topology function Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * added applier trait Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * started addressed comments 1 Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * made channels and patterns use existing vec struct Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * moved reconcile out, lint and other minor fixes Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * changed most trait methods to sync Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * addressed comment 2 Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * moved metrics update to synchronizer in mock Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * fix push manager types after moved to constructor Signed-off-by: Lior Sventitzky <liorsve@amazon.com> --------- Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * Dynamic Pubsub - Add synchronizer implementation (#5109) * fixed the client weak ref to be of ClientWrapper Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * fixed some tests, added many channels tests Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * added synchronizer, removed existing pubsub logic, added python tests Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * added topology tests, removed set_synchronizer_internal_client Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * refactored tests, added wait_for_initial_sync, made notify non-arc Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * removed leftover pubsub_subscription from cluster_params Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * fixed node cleanup, added reconcilliation in wait_for_state function, fixed lint Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * final tweaks Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * added custom command test Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * removed remove subscription on disconnect to drop pipelinesink Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * changed compute sync state to be 1 pass Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * changed standalone unsubscribe to handle all tests Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * fix address in PushManager to be updated upon refresh_slots DNS lookup Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * changed wait_for_initial_sync for wait_for_sync Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * added reconcilliation interval config in python AdvancedConfigurations Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * reverted future wrap logic to update_push_manager_node_address, fixed to changing it directly Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * removed excess logging Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * fixed request timeout for non blocking operations Signed-off-by: Lior Sventitzky <liorsve@amazon.com> --------- Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * Fix pubsub configuration errors in Java and Python Signed-off-by: Lior Sventitzky <liorsve@amazon.com> --------- Signed-off-by: Lior Sventitzky <liorsve@amazon.com>

Commit:16f703e
Author:Lior Sventitzky
Committer:Lior Sventitzky

Dynamic Pubsub - Add synchronizer implementation (#5109) * fixed the client weak ref to be of ClientWrapper Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * fixed some tests, added many channels tests Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * added synchronizer, removed existing pubsub logic, added python tests Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * added topology tests, removed set_synchronizer_internal_client Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * refactored tests, added wait_for_initial_sync, made notify non-arc Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * removed leftover pubsub_subscription from cluster_params Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * fixed node cleanup, added reconcilliation in wait_for_state function, fixed lint Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * final tweaks Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * added custom command test Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * removed remove subscription on disconnect to drop pipelinesink Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * changed compute sync state to be 1 pass Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * changed standalone unsubscribe to handle all tests Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * fix address in PushManager to be updated upon refresh_slots DNS lookup Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * changed wait_for_initial_sync for wait_for_sync Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * added reconcilliation interval config in python AdvancedConfigurations Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * reverted future wrap logic to update_push_manager_node_address, fixed to changing it directly Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * removed excess logging Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * fixed request timeout for non blocking operations Signed-off-by: Lior Sventitzky <liorsve@amazon.com> --------- Signed-off-by: Lior Sventitzky <liorsve@amazon.com>

Commit:c5f8926
Author:Lior Sventitzky
Committer:Lior Sventitzky

Add pubsub mock impl and python tests for dynamic pubsub(#4986) * added python tests and rust pubsub mock Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * added mock-pubsub rust feature, changed workflow Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * fix timeout error handling in mock Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * updated mock with trait Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * Added synchronizer to core cluster and standalone, remove push_sender from creator Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * added more integration point, added trait methods, fixed cd Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * added address to current update, added handle_topology function Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * added applier trait Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * started addressed comments 1 Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * made channels and patterns use existing vec struct Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * moved reconcile out, lint and other minor fixes Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * changed most trait methods to sync Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * addressed comment 2 Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * moved metrics update to synchronizer in mock Signed-off-by: Lior Sventitzky <liorsve@amazon.com> * fix push manager types after moved to constructor Signed-off-by: Lior Sventitzky <liorsve@amazon.com> --------- Signed-off-by: Lior Sventitzky <liorsve@amazon.com>

Commit:ca98403
Author:James Xin
Committer:GitHub

[backport][2.2] Add TCPNoDelay option (#5100) (#5134) * [All clients] Add TCPNoDelay option (#5100) * init commit with core and java Signed-off-by: James Xin <james.xin@improving.com> * linters Signed-off-by: James Xin <james.xin@improving.com> * node change Signed-off-by: James Xin <james.xin@improving.com> * python changes Signed-off-by: James Xin <james.xin@improving.com> * python linter Signed-off-by: James Xin <james.xin@improving.com> * go changes Signed-off-by: James Xin <james.xin@improving.com> * address comment, add missing cluster client code Signed-off-by: James Xin <james.xin@improving.com> * fix python tests Signed-off-by: James Xin <james.xin@improving.com> --------- Signed-off-by: James Xin <james.xin@improving.com> * merge fix, excluding code from PR 4759 and 5093 Signed-off-by: James Xin <james.xin@improving.com> * python test fix Signed-off-by: James Xin <james.xin@improving.com> --------- Signed-off-by: James Xin <james.xin@improving.com>

Commit:7aef569
Author:James Xin
Committer:GitHub

[All clients] Add TCPNoDelay option (#5100) * init commit with core and java Signed-off-by: James Xin <james.xin@improving.com> * linters Signed-off-by: James Xin <james.xin@improving.com> * node change Signed-off-by: James Xin <james.xin@improving.com> * python changes Signed-off-by: James Xin <james.xin@improving.com> * python linter Signed-off-by: James Xin <james.xin@improving.com> * go changes Signed-off-by: James Xin <james.xin@improving.com> * address comment, add missing cluster client code Signed-off-by: James Xin <james.xin@improving.com> * fix python tests Signed-off-by: James Xin <james.xin@improving.com> --------- Signed-off-by: James Xin <james.xin@improving.com>

Commit:b2c9679
Author:oxy-star
Committer:GitHub

Add parameters to set mtls client cert and key (#5093) Signed-off-by: oxy-star <rimantas@oxylabs.io> Co-authored-by: Thomas Zhou <54688146+xShinnRyuu@users.noreply.github.com>

Commit:969fbd3
Author:xdk-amz
Committer:GitHub

Transparent Compression Feature (#4759) - This commit adds the basic implementation of a transparent compression feature - Includes lz4 and zstd support - Only python client support initially - interactive session example for manual testing of the feature Signed-off-by: Dante Knowles <xdk@amazon.com>

Commit:d396317
Author:Alex Rehnby-Martin
Committer:GitHub

Core support for custom certs (#4909) * Initial TLS impl Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Fix impl, make redis function available Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Tests Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Cluster tests Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Cleanup Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Add multi cert test Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Format Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Format Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Address feedback Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Attempted fix for intermittent error Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Add invalid cert test Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Fmt Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Address PR feedback Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> * Address PR feedback Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com> --------- Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com>

Commit:28a4592
Author:Alex Rehnby-Martin
Committer:Thomas Zhou

Initial TLS impl Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com>

Commit:679ea75
Author:Alex Rehnby-Martin
Committer:Thomas Zhou

Initial TLS impl Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com>

Commit:49213e6
Author:Alex Rehnby-Martin
Committer:Thomas Zhou

Initial TLS impl Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com>

Commit:c314b89
Author:Thomas Zhou
Committer:Thomas Zhou

Implement TLS support for Java client Signed-off-by: Thomas Zhou <thomas.zhou@improving.com>

Commit:41ad867
Author:Alex Rehnby-Martin

Initial TLS impl Signed-off-by: Alex Rehnby-Martin <alex.rehnby-martin@improving.com>

Commit:15c535e
Author:prateek-kumar-improving
Committer:GitHub

Java: Add lib name to configuration (#4869) * Java: Add lib name to configuration Signed-off-by: Prateek Kumar <prateek.kumar@improving.com>

The documentation is generated from this commit.

Commit:498e5ba
Author:Prateek Kumar

Rust: Add test Signed-off-by: Prateek Kumar <prateek.kumar@improving.com>

The documentation is generated from this commit.

Commit:11b9a43
Author:Prateek Kumar

Java: Add lib name to configuration Signed-off-by: Prateek Kumar <prateek.kumar@improving.com>

Commit:30fee5f
Author:Shoham Elias
Committer:GitHub

Core: refresh topology from initial nodes (#4669)

Commit:9f0afdf
Author:Maayan Shani
Committer:GitHub

Support IAM auth in Core (#4525) * iam first structure * Generate correct token and glideIAMError * get_redis_information, strum, tests * Callback auth func * Lazy, iam_token_manager type, creds field * Add docuementation * Socket listener, move callback to constructor, fix tests and refresh * kill ond node test * Fix callback * Rearrange tests2 * exponential backoff when generating Signed-off-by: Maayan Shani <maayans@amazon.com> Signed-off-by: Maayan Shani <maayan.shani@mail.huji.ac.il>

Commit:a79d0d5
Author:Edward Liang
Committer:GitHub

Go: Valkey 9 Commands (#4554) * wip Signed-off-by: Edward Liang <edward.liang@improving.com> * add tests and remove pointer params Signed-off-by: Edward Liang <edward.liang@improving.com> * test using rc Signed-off-by: Edward Liang <edward.liang@improving.com> * address comments Signed-off-by: Edward Liang <edward.liang@improving.com> * fix typing Signed-off-by: Edward Liang <edward.liang@improving.com> * fix return docs Signed-off-by: Edward Liang <edward.liang@improving.com> * fix docs Signed-off-by: Edward Liang <edward.liang@improving.com> * go: refactor hash field expiration commands and fix return types - Change HSetEx return type from bool to int64 to match Redis protocol - Move command argument builders from options package to internal package - Fix conditional option handling to only include when explicitly set - Update documentation formatting for better readability - Update all tests and examples to use new int64 return type - Consolidate hash field expiration logic in internal/command_helpers.go Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com> * changelog.md change Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com> * fixing documentation Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com> --------- Signed-off-by: Edward Liang <edward.liang@improving.com> Signed-off-by: Edward Liang <76571219+edlng@users.noreply.github.com> Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com> Co-authored-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:48076c4
Author:affonsov
Committer:affonsov

Fix naming consistency and improve command validation for hash field expiration - Rename HSetex/HGetex to HSetEx/HGetEx for consistent PascalCase naming - Fix HSETEX to reject hash-level conditional changes (NX/XX) - only field-level conditions supported - Fix HGETEX to reject KEEPTTL option - not supported by the command - Update test expectations to match actual server return values (numeric codes vs booleans) - Improve error handling for empty field arrays in hash expiration commands - Fix code formatting and indentation inconsistencies - Update documentation examples with correct expected outputs - Enhance command validation with clearer error messages Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:255bcb1
Author:affonsov
Committer:affonsov

add hash field expiration commands to glide-core Add support for 10 new Redis hash field expiration commands: - HSETEX, HGETEX: Set field with expiration and get field with expiration - HEXPIRE, HPEXPIRE: Set field expiration in seconds/milliseconds - HEXPIREAT, HPEXPIREAT: Set field expiration at timestamp - HTTL, HPTTL: Get field TTL in seconds/milliseconds - HEXPIRETIME, HPEXPIRETIME: Get field expiration timestamp - HPERSIST: Remove field expiration Updates protobuf definitions and Rust request type mappings with request types 617-627. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:427438f
Author:affonsov
Committer:affonsov

java: Fix hash field expiration command naming and return types - Rename HSetex/HGetex to HSetEx/HGetEx for consistent PascalCase naming - Change return types from Boolean[] to Long[] for hash expiration commands to match Valkey server response format: * 1: expiration successfully set/removed * 0: condition not met * -1: field exists but has no expiration (hpersist) * -2: field/key does not exist * 2: called with 0 seconds/milliseconds - Update documentation and examples to reflect new return value semantics - Fix command string casing in request_type.rs (HSetEx/HGetEx instead of HSETEX/HGETEX) - Add FIELDS_VALKEY_API constant for consistent "FIELDS" keyword usage - Update integration tests to verify correct return values and TTL behavior - Rename test file from HashFieldExpirationCommandsTest to HashFieldExpirationOptionsCommandsTest - Use ExpireOptions enum instead of custom ExpirationCondition enum for consistency Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:d6b51f4
Author:affonsov
Committer:affonsov

JAVA: implement hash field expiration query commands (HPTTL, HEXPIRETIME, HPEXPIRETIME) Add support for Valkey 9.0+ hash field expiration query commands: - HPTTL: Get remaining TTL of hash fields in milliseconds - HEXPIRETIME: Get absolute expiration timestamp of hash fields in seconds - HPEXPIRETIME: Get absolute expiration timestamp of hash fields in milliseconds Changes include: * Add new RequestType enums (HPTtl=625, HExpireTime=626, HPExpireTime=627) * Implement client methods in BaseClient with String and GlideString support * Add comprehensive interface definitions in HashBaseCommands * Support batch operations in BaseBatch * Add extensive integration tests covering: - Basic functionality with mixed field states - Non-existent keys and expired fields - Binary parameter support - Batch operation testing All commands return Long[] arrays with standard Redis semantics: - Positive values: TTL/timestamp for fields with expiration - -1: Field exists but has no expiration - -2: Field does not exist Requires Valkey 9.0.0 or higher. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:0a7aedd
Author:affonsov
Committer:affonsov

JAVA: implement HTTL command for hash field TTL queries Add support for the HTTL command to query remaining time-to-live of hash fields in seconds. This command is available in Valkey 9.0+. Changes: - Add HTtl request type (624) to protobuf and core request handling - Implement httl() methods in BaseClient and BaseBatch for both String and GlideString parameter types - Add comprehensive test coverage including basic functionality, expired fields, mixed field scenarios, and batch operations - Support for non-existent keys and fields with proper return codes (-1 for no expiration, -2 for non-existent fields) The implementation follows existing patterns for hash field expiration commands and maintains consistency with the codebase architecture. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:14ceb26
Author:affonsov
Committer:affonsov

JAVA: implement HPEXPIREAT command for hash field expiration Add support for HPEXPIREAT command which sets expiration time for hash fields using Unix timestamp in milliseconds, complementing the existing HEXPIREAT command that uses seconds. Changes: - Add HPExpireAt (623) request type to protobuf and Rust core - Implement hpexpireat() methods in BaseClient and BaseBatch classes - Add interface documentation with examples - Support both String and GlideString parameter variants - Include full integration test coverage for all scenarios The implementation follows the same patterns as existing hash expiration commands and requires Valkey 9.0.0 or higher. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:e9c095c
Author:affonsov
Committer:affonsov

JAVA: implement HPEXPIRE command for hash field expiration in milliseconds - Add HPEXPIRE request type (621) to protobuf and Rust request handling - Implement HPEXPIRE in Java BaseClient and HashBaseCommands interface - Add batch support for HPEXPIRE operations - Include comprehensive integration tests covering: * Basic functionality with multiple fields * Conditional expiration options (NX, XX, GT, LT) * Immediate deletion with 0ms expiration * Binary parameter support with GlideString * Batch operation functionality This complements the existing HEXPIRE command by providing millisecond precision for hash field expiration, following Valkey 9.0+ specifications. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:fbc60b0
Author:affonsov
Committer:affonsov

JAVA: implement HEXPIREAT command for hash field expiration Add support for the HEXPIREAT command which sets expiration time for hash fields using absolute Unix timestamps in seconds. This complements the existing HEXPIRE command by allowing timestamp-based expiration. Changes: - Add HExpireAt (622) request type to protobuf and Rust core - Implement hexpireat() methods in BaseClient and HashBaseCommands - Add batch support for hexpireat operations - Support both String and GlideString parameter variants - Include test coverage for all scenarios Features: - Sets expiration using Unix timestamp in seconds - Supports HashFieldExpirationOptions for conditional expiration - Handles immediate deletion for past timestamps - Creates hash if it doesn't exist - Returns Boolean array indicating success per field Requires Valkey 9.0.0 or higher. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:5ea4705
Author:affonsov
Committer:affonsov

JAVA: implement HPERSIST command for hash field expiration Add support for the HPERSIST command which removes expiration time from hash fields, making them persistent. Changes: - Add HPersist request type to protobuf and core request handling - Implement hpersist() methods in BaseClient and HashBaseCommands - Add batch support for HPERSIST operations - Support both String and GlideString parameter types - Add test coverage including edge cases and binary support Requires Valkey 9.0.0 or higher. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:4b67a87
Author:affonsov
Committer:affonsov

JAVA: implement HEXPIRE command for hash field expiration Add support for the HEXPIRE command which sets expiration time in seconds for specified fields in a hash. This command is available in Valkey 9.0+. Changes: - Add HExpire (619) to protobuf command request types - Implement hexpire() methods in BaseClient and HashBaseCommands - Support both String and GlideString parameter variants - Add batch operation support in BaseBatch - Include test coverage for: * Basic functionality with multiple fields * Conditional expiration options (NX, XX, GT, LT) * Immediate deletion with 0 seconds * Binary parameter support * Batch operation functionality The implementation follows existing patterns and maintains compatibility with the HashFieldExpirationOptions for conditional expiration logic. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:80dca66
Author:affonsov
Committer:affonsov

JAVA: implement HGETEX command for hash field expiration Add support for the HGETEX command which retrieves hash field values and optionally sets their expiration or removes it. Changes: - Add HGetex request type to protobuf and Rust core - Implement hgetex() methods in BaseClient and HashBaseCommands - Add batch support for hgetex operations - Extend HashFieldExpirationOptions with Persist() option - Add comprehensive integration tests covering: * Basic functionality with expiry setting * PERSIST option to remove field expiration * Binary parameter support (GlideString) * Batch operation support The implementation supports both String and GlideString parameters and includes proper validation for the PERSIST option which cannot be combined with conditional options. Requires Valkey 9.0.0 or higher. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:63bf35a
Author:affonsov
Committer:affonsov

JAVA: implement hash field expiration commands Add support for HSETEX command in Java client. - Add HashFieldExpirationOptions class with builder pattern for command options - Implement hash field expiration methods in HashBaseCommands interface - Add unit tests for all new commands and options - Add integration tests to verify command functionality - Update protobuf definitions and Rust request types - Add batch operation support for all new commands This implementation provides full support for hash field expiration functionality. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:8acfad7
Author:affonsov
Committer:affonsov

add hash field expiration commands to glide-core Add support for 10 new Redis hash field expiration commands: - HSETEX, HGETEX: Set field with expiration and get field with expiration - HEXPIRE, HPEXPIRE: Set field expiration in seconds/milliseconds - HEXPIREAT, HPEXPIREAT: Set field expiration at timestamp - HTTL, HPTTL: Get field TTL in seconds/milliseconds - HEXPIRETIME, HPEXPIRETIME: Get field expiration timestamp - HPERSIST: Remove field expiration Updates protobuf definitions and Rust request type mappings with request types 617-627. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:733c5b5
Author:affonsov
Committer:affonsov

Fix naming consistency and improve command validation for hash field expiration - Rename HSetex/HGetex to HSetEx/HGetEx for consistent PascalCase naming - Fix HSETEX to reject hash-level conditional changes (NX/XX) - only field-level conditions supported - Fix HGETEX to reject KEEPTTL option - not supported by the command - Update test expectations to match actual server return values (numeric codes vs booleans) - Improve error handling for empty field arrays in hash expiration commands - Fix code formatting and indentation inconsistencies - Update documentation examples with correct expected outputs - Enhance command validation with clearer error messages Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:64d7328
Author:affonsov
Committer:affonsov

add hash field expiration commands to glide-core Add support for 10 new Redis hash field expiration commands: - HSETEX, HGETEX: Set field with expiration and get field with expiration - HEXPIRE, HPEXPIRE: Set field expiration in seconds/milliseconds - HEXPIREAT, HPEXPIREAT: Set field expiration at timestamp - HTTL, HPTTL: Get field TTL in seconds/milliseconds - HEXPIRETIME, HPEXPIRETIME: Get field expiration timestamp - HPERSIST: Remove field expiration Updates protobuf definitions and Rust request type mappings with request types 617-627. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:1bf04de
Author:affonsov

add hash field expiration commands to glide-core Add support for 10 new Redis hash field expiration commands: - HSETEX, HGETEX: Set field with expiration and get field with expiration - HEXPIRE, HPEXPIRE: Set field expiration in seconds/milliseconds - HEXPIREAT, HPEXPIREAT: Set field expiration at timestamp - HTTL, HPTTL: Get field TTL in seconds/milliseconds - HEXPIRETIME, HPEXPIRETIME: Get field expiration timestamp - HPERSIST: Remove field expiration Updates protobuf definitions and Rust request type mappings with request types 617-627. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:963bfd3
Author:affonsov
Committer:affonsov

add hash field expiration commands to glide-core Add support for 10 new Redis hash field expiration commands: - HSETEX, HGETEX: Set field with expiration and get field with expiration - HEXPIRE, HPEXPIRE: Set field expiration in seconds/milliseconds - HEXPIREAT, HPEXPIREAT: Set field expiration at timestamp - HTTL, HPTTL: Get field TTL in seconds/milliseconds - HEXPIRETIME, HPEXPIRETIME: Get field expiration timestamp - HPERSIST: Remove field expiration Updates protobuf definitions and Rust request type mappings with request types 617-627. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:cc4c942
Author:affonsov

java: Fix hash field expiration command naming and return types - Rename HSetex/HGetex to HSetEx/HGetEx for consistent PascalCase naming - Change return types from Boolean[] to Long[] for hash expiration commands to match Valkey server response format: * 1: expiration successfully set/removed * 0: condition not met * -1: field exists but has no expiration (hpersist) * -2: field/key does not exist * 2: called with 0 seconds/milliseconds - Update documentation and examples to reflect new return value semantics - Fix command string casing in request_type.rs (HSetEx/HGetEx instead of HSETEX/HGETEX) - Add FIELDS_VALKEY_API constant for consistent "FIELDS" keyword usage - Update integration tests to verify correct return values and TTL behavior - Rename test file from HashFieldExpirationCommandsTest to HashFieldExpirationOptionsCommandsTest - Use ExpireOptions enum instead of custom ExpirationCondition enum for consistency Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:f1764ad
Author:affonsov
Committer:affonsov

JAVA: implement hash field expiration query commands (HPTTL, HEXPIRETIME, HPEXPIRETIME) Add support for Valkey 9.0+ hash field expiration query commands: - HPTTL: Get remaining TTL of hash fields in milliseconds - HEXPIRETIME: Get absolute expiration timestamp of hash fields in seconds - HPEXPIRETIME: Get absolute expiration timestamp of hash fields in milliseconds Changes include: * Add new RequestType enums (HPTtl=625, HExpireTime=626, HPExpireTime=627) * Implement client methods in BaseClient with String and GlideString support * Add comprehensive interface definitions in HashBaseCommands * Support batch operations in BaseBatch * Add extensive integration tests covering: - Basic functionality with mixed field states - Non-existent keys and expired fields - Binary parameter support - Batch operation testing All commands return Long[] arrays with standard Redis semantics: - Positive values: TTL/timestamp for fields with expiration - -1: Field exists but has no expiration - -2: Field does not exist Requires Valkey 9.0.0 or higher. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:e15c248
Author:affonsov
Committer:affonsov

JAVA: implement HTTL command for hash field TTL queries Add support for the HTTL command to query remaining time-to-live of hash fields in seconds. This command is available in Valkey 9.0+. Changes: - Add HTtl request type (624) to protobuf and core request handling - Implement httl() methods in BaseClient and BaseBatch for both String and GlideString parameter types - Add comprehensive test coverage including basic functionality, expired fields, mixed field scenarios, and batch operations - Support for non-existent keys and fields with proper return codes (-1 for no expiration, -2 for non-existent fields) The implementation follows existing patterns for hash field expiration commands and maintains consistency with the codebase architecture. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:8d1ab73
Author:affonsov
Committer:affonsov

JAVA: implement HEXPIREAT command for hash field expiration Add support for the HEXPIREAT command which sets expiration time for hash fields using absolute Unix timestamps in seconds. This complements the existing HEXPIRE command by allowing timestamp-based expiration. Changes: - Add HExpireAt (622) request type to protobuf and Rust core - Implement hexpireat() methods in BaseClient and HashBaseCommands - Add batch support for hexpireat operations - Support both String and GlideString parameter variants - Include test coverage for all scenarios Features: - Sets expiration using Unix timestamp in seconds - Supports HashFieldExpirationOptions for conditional expiration - Handles immediate deletion for past timestamps - Creates hash if it doesn't exist - Returns Boolean array indicating success per field Requires Valkey 9.0.0 or higher. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:731f802
Author:affonsov
Committer:affonsov

JAVA: implement HPEXPIREAT command for hash field expiration Add support for HPEXPIREAT command which sets expiration time for hash fields using Unix timestamp in milliseconds, complementing the existing HEXPIREAT command that uses seconds. Changes: - Add HPExpireAt (623) request type to protobuf and Rust core - Implement hpexpireat() methods in BaseClient and BaseBatch classes - Add interface documentation with examples - Support both String and GlideString parameter variants - Include full integration test coverage for all scenarios The implementation follows the same patterns as existing hash expiration commands and requires Valkey 9.0.0 or higher. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:de9cf38
Author:affonsov
Committer:affonsov

JAVA: implement HPEXPIRE command for hash field expiration in milliseconds - Add HPEXPIRE request type (621) to protobuf and Rust request handling - Implement HPEXPIRE in Java BaseClient and HashBaseCommands interface - Add batch support for HPEXPIRE operations - Include comprehensive integration tests covering: * Basic functionality with multiple fields * Conditional expiration options (NX, XX, GT, LT) * Immediate deletion with 0ms expiration * Binary parameter support with GlideString * Batch operation functionality This complements the existing HEXPIRE command by providing millisecond precision for hash field expiration, following Valkey 9.0+ specifications. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:6a20977
Author:affonsov
Committer:affonsov

JAVA: implement HPERSIST command for hash field expiration Add support for the HPERSIST command which removes expiration time from hash fields, making them persistent. Changes: - Add HPersist request type to protobuf and core request handling - Implement hpersist() methods in BaseClient and HashBaseCommands - Add batch support for HPERSIST operations - Support both String and GlideString parameter types - Add test coverage including edge cases and binary support Requires Valkey 9.0.0 or higher. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:7c96809
Author:affonsov
Committer:affonsov

JAVA: implement HEXPIRE command for hash field expiration Add support for the HEXPIRE command which sets expiration time in seconds for specified fields in a hash. This command is available in Valkey 9.0+. Changes: - Add HExpire (619) to protobuf command request types - Implement hexpire() methods in BaseClient and HashBaseCommands - Support both String and GlideString parameter variants - Add batch operation support in BaseBatch - Include test coverage for: * Basic functionality with multiple fields * Conditional expiration options (NX, XX, GT, LT) * Immediate deletion with 0 seconds * Binary parameter support * Batch operation functionality The implementation follows existing patterns and maintains compatibility with the HashFieldExpirationOptions for conditional expiration logic. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:cd58bf7
Author:affonsov
Committer:affonsov

JAVA: implement HGETEX command for hash field expiration Add support for the HGETEX command which retrieves hash field values and optionally sets their expiration or removes it. Changes: - Add HGetex request type to protobuf and Rust core - Implement hgetex() methods in BaseClient and HashBaseCommands - Add batch support for hgetex operations - Extend HashFieldExpirationOptions with Persist() option - Add comprehensive integration tests covering: * Basic functionality with expiry setting * PERSIST option to remove field expiration * Binary parameter support (GlideString) * Batch operation support The implementation supports both String and GlideString parameters and includes proper validation for the PERSIST option which cannot be combined with conditional options. Requires Valkey 9.0.0 or higher. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:5651c0f
Author:affonsov
Committer:affonsov

JAVA: implement hash field expiration commands Add support for HSETEX command in Java client. - Add HashFieldExpirationOptions class with builder pattern for command options - Implement hash field expiration methods in HashBaseCommands interface - Add unit tests for all new commands and options - Add integration tests to verify command functionality - Update protobuf definitions and Rust request types - Add batch operation support for all new commands This implementation provides full support for hash field expiration functionality. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:9302648
Author:affonsov
Committer:affonsov

JAVA: implement hash field expiration query commands (HPTTL, HEXPIRETIME, HPEXPIRETIME) Add support for Valkey 9.0+ hash field expiration query commands: - HPTTL: Get remaining TTL of hash fields in milliseconds - HEXPIRETIME: Get absolute expiration timestamp of hash fields in seconds - HPEXPIRETIME: Get absolute expiration timestamp of hash fields in milliseconds Changes include: * Add new RequestType enums (HPTtl=625, HExpireTime=626, HPExpireTime=627) * Implement client methods in BaseClient with String and GlideString support * Add comprehensive interface definitions in HashBaseCommands * Support batch operations in BaseBatch * Add extensive integration tests covering: - Basic functionality with mixed field states - Non-existent keys and expired fields - Binary parameter support - Batch operation testing All commands return Long[] arrays with standard Redis semantics: - Positive values: TTL/timestamp for fields with expiration - -1: Field exists but has no expiration - -2: Field does not exist Requires Valkey 9.0.0 or higher. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:11a355e
Author:affonsov
Committer:affonsov

JAVA: implement HTTL command for hash field TTL queries Add support for the HTTL command to query remaining time-to-live of hash fields in seconds. This command is available in Valkey 9.0+. Changes: - Add HTtl request type (624) to protobuf and core request handling - Implement httl() methods in BaseClient and BaseBatch for both String and GlideString parameter types - Add comprehensive test coverage including basic functionality, expired fields, mixed field scenarios, and batch operations - Support for non-existent keys and fields with proper return codes (-1 for no expiration, -2 for non-existent fields) The implementation follows existing patterns for hash field expiration commands and maintains consistency with the codebase architecture. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:4733346
Author:affonsov
Committer:affonsov

JAVA: implement HEXPIREAT command for hash field expiration Add support for the HEXPIREAT command which sets expiration time for hash fields using absolute Unix timestamps in seconds. This complements the existing HEXPIRE command by allowing timestamp-based expiration. Changes: - Add HExpireAt (622) request type to protobuf and Rust core - Implement hexpireat() methods in BaseClient and HashBaseCommands - Add batch support for hexpireat operations - Support both String and GlideString parameter variants - Include test coverage for all scenarios Features: - Sets expiration using Unix timestamp in seconds - Supports HashFieldExpirationOptions for conditional expiration - Handles immediate deletion for past timestamps - Creates hash if it doesn't exist - Returns Boolean array indicating success per field Requires Valkey 9.0.0 or higher. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:d27a319
Author:affonsov
Committer:affonsov

JAVA: implement HPEXPIREAT command for hash field expiration Add support for HPEXPIREAT command which sets expiration time for hash fields using Unix timestamp in milliseconds, complementing the existing HEXPIREAT command that uses seconds. Changes: - Add HPExpireAt (623) request type to protobuf and Rust core - Implement hpexpireat() methods in BaseClient and BaseBatch classes - Add interface documentation with examples - Support both String and GlideString parameter variants - Include full integration test coverage for all scenarios The implementation follows the same patterns as existing hash expiration commands and requires Valkey 9.0.0 or higher. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:c6dfd03
Author:affonsov
Committer:affonsov

JAVA: implement HPEXPIRE command for hash field expiration in milliseconds - Add HPEXPIRE request type (621) to protobuf and Rust request handling - Implement HPEXPIRE in Java BaseClient and HashBaseCommands interface - Add batch support for HPEXPIRE operations - Include comprehensive integration tests covering: * Basic functionality with multiple fields * Conditional expiration options (NX, XX, GT, LT) * Immediate deletion with 0ms expiration * Binary parameter support with GlideString * Batch operation functionality This complements the existing HEXPIRE command by providing millisecond precision for hash field expiration, following Valkey 9.0+ specifications. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:ecc23db
Author:affonsov
Committer:affonsov

JAVA: implement HPERSIST command for hash field expiration Add support for the HPERSIST command which removes expiration time from hash fields, making them persistent. Changes: - Add HPersist request type to protobuf and core request handling - Implement hpersist() methods in BaseClient and HashBaseCommands - Add batch support for HPERSIST operations - Support both String and GlideString parameter types - Add test coverage including edge cases and binary support Requires Valkey 9.0.0 or higher. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:3e505cf
Author:affonsov
Committer:affonsov

JAVA: implement HEXPIRE command for hash field expiration Add support for the HEXPIRE command which sets expiration time in seconds for specified fields in a hash. This command is available in Valkey 9.0+. Changes: - Add HExpire (619) to protobuf command request types - Implement hexpire() methods in BaseClient and HashBaseCommands - Support both String and GlideString parameter variants - Add batch operation support in BaseBatch - Include test coverage for: * Basic functionality with multiple fields * Conditional expiration options (NX, XX, GT, LT) * Immediate deletion with 0 seconds * Binary parameter support * Batch operation functionality The implementation follows existing patterns and maintains compatibility with the HashFieldExpirationOptions for conditional expiration logic. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:1c88f94
Author:affonsov
Committer:affonsov

JAVA: implement HGETEX command for hash field expiration Add support for the HGETEX command which retrieves hash field values and optionally sets their expiration or removes it. Changes: - Add HGetex request type to protobuf and Rust core - Implement hgetex() methods in BaseClient and HashBaseCommands - Add batch support for hgetex operations - Extend HashFieldExpirationOptions with Persist() option - Add comprehensive integration tests covering: * Basic functionality with expiry setting * PERSIST option to remove field expiration * Binary parameter support (GlideString) * Batch operation support The implementation supports both String and GlideString parameters and includes proper validation for the PERSIST option which cannot be combined with conditional options. Requires Valkey 9.0.0 or higher. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:2d1af1b
Author:affonsov
Committer:affonsov

JAVA: implement hash field expiration commands Add support for HSETEX command in Java client. - Add HashFieldExpirationOptions class with builder pattern for command options - Implement hash field expiration methods in HashBaseCommands interface - Add unit tests for all new commands and options - Add integration tests to verify command functionality - Update protobuf definitions and Rust request types - Add batch operation support for all new commands This implementation provides full support for hash field expiration functionality. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:2cd6ac1
Author:affonsov
Committer:affonsov

JAVA: implement hash field expiration query commands (HPTTL, HEXPIRETIME, HPEXPIRETIME) Add support for Valkey 9.0+ hash field expiration query commands: - HPTTL: Get remaining TTL of hash fields in milliseconds - HEXPIRETIME: Get absolute expiration timestamp of hash fields in seconds - HPEXPIRETIME: Get absolute expiration timestamp of hash fields in milliseconds Changes include: * Add new RequestType enums (HPTtl=625, HExpireTime=626, HPExpireTime=627) * Implement client methods in BaseClient with String and GlideString support * Add comprehensive interface definitions in HashBaseCommands * Support batch operations in BaseBatch * Add extensive integration tests covering: - Basic functionality with mixed field states - Non-existent keys and expired fields - Binary parameter support - Batch operation testing All commands return Long[] arrays with standard Redis semantics: - Positive values: TTL/timestamp for fields with expiration - -1: Field exists but has no expiration - -2: Field does not exist Requires Valkey 9.0.0 or higher. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:fbdd060
Author:affonsov
Committer:affonsov

JAVA: implement HTTL command for hash field TTL queries Add support for the HTTL command to query remaining time-to-live of hash fields in seconds. This command is available in Valkey 9.0+. Changes: - Add HTtl request type (624) to protobuf and core request handling - Implement httl() methods in BaseClient and BaseBatch for both String and GlideString parameter types - Add comprehensive test coverage including basic functionality, expired fields, mixed field scenarios, and batch operations - Support for non-existent keys and fields with proper return codes (-1 for no expiration, -2 for non-existent fields) The implementation follows existing patterns for hash field expiration commands and maintains consistency with the codebase architecture. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:95c5cc9
Author:affonsov
Committer:affonsov

JAVA: implement HPEXPIREAT command for hash field expiration Add support for HPEXPIREAT command which sets expiration time for hash fields using Unix timestamp in milliseconds, complementing the existing HEXPIREAT command that uses seconds. Changes: - Add HPExpireAt (623) request type to protobuf and Rust core - Implement hpexpireat() methods in BaseClient and BaseBatch classes - Add interface documentation with examples - Support both String and GlideString parameter variants - Include full integration test coverage for all scenarios The implementation follows the same patterns as existing hash expiration commands and requires Valkey 9.0.0 or higher. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:c88d17d
Author:affonsov
Committer:affonsov

JAVA: implement HEXPIREAT command for hash field expiration Add support for the HEXPIREAT command which sets expiration time for hash fields using absolute Unix timestamps in seconds. This complements the existing HEXPIRE command by allowing timestamp-based expiration. Changes: - Add HExpireAt (622) request type to protobuf and Rust core - Implement hexpireat() methods in BaseClient and HashBaseCommands - Add batch support for hexpireat operations - Support both String and GlideString parameter variants - Include test coverage for all scenarios Features: - Sets expiration using Unix timestamp in seconds - Supports HashFieldExpirationOptions for conditional expiration - Handles immediate deletion for past timestamps - Creates hash if it doesn't exist - Returns Boolean array indicating success per field Requires Valkey 9.0.0 or higher. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:c50eeb8
Author:affonsov
Committer:affonsov

JAVA: implement HPEXPIRE command for hash field expiration in milliseconds - Add HPEXPIRE request type (621) to protobuf and Rust request handling - Implement HPEXPIRE in Java BaseClient and HashBaseCommands interface - Add batch support for HPEXPIRE operations - Include comprehensive integration tests covering: * Basic functionality with multiple fields * Conditional expiration options (NX, XX, GT, LT) * Immediate deletion with 0ms expiration * Binary parameter support with GlideString * Batch operation functionality This complements the existing HEXPIRE command by providing millisecond precision for hash field expiration, following Valkey 9.0+ specifications. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:bb777dd
Author:affonsov
Committer:affonsov

JAVA: implement HPERSIST command for hash field expiration Add support for the HPERSIST command which removes expiration time from hash fields, making them persistent. Changes: - Add HPersist request type to protobuf and core request handling - Implement hpersist() methods in BaseClient and HashBaseCommands - Add batch support for HPERSIST operations - Support both String and GlideString parameter types - Add test coverage including edge cases and binary support Requires Valkey 9.0.0 or higher. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:3b0cf9b
Author:affonsov
Committer:affonsov

JAVA: implement HEXPIRE command for hash field expiration Add support for the HEXPIRE command which sets expiration time in seconds for specified fields in a hash. This command is available in Valkey 9.0+. Changes: - Add HExpire (619) to protobuf command request types - Implement hexpire() methods in BaseClient and HashBaseCommands - Support both String and GlideString parameter variants - Add batch operation support in BaseBatch - Include test coverage for: * Basic functionality with multiple fields * Conditional expiration options (NX, XX, GT, LT) * Immediate deletion with 0 seconds * Binary parameter support * Batch operation functionality The implementation follows existing patterns and maintains compatibility with the HashFieldExpirationOptions for conditional expiration logic. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:69cb13d
Author:affonsov
Committer:affonsov

JAVA: implement HGETEX command for hash field expiration Add support for the HGETEX command which retrieves hash field values and optionally sets their expiration or removes it. Changes: - Add HGetex request type to protobuf and Rust core - Implement hgetex() methods in BaseClient and HashBaseCommands - Add batch support for hgetex operations - Extend HashFieldExpirationOptions with Persist() option - Add comprehensive integration tests covering: * Basic functionality with expiry setting * PERSIST option to remove field expiration * Binary parameter support (GlideString) * Batch operation support The implementation supports both String and GlideString parameters and includes proper validation for the PERSIST option which cannot be combined with conditional options. Requires Valkey 9.0.0 or higher. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:729d68d
Author:affonsov
Committer:affonsov

JAVA: implement hash field expiration commands Add support for HSETEX command in Java client. - Add HashFieldExpirationOptions class with builder pattern for command options - Implement hash field expiration methods in HashBaseCommands interface - Add unit tests for all new commands and options - Add integration tests to verify command functionality - Update protobuf definitions and Rust request types - Add batch operation support for all new commands This implementation provides full support for hash field expiration functionality. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:5de46ea
Author:affonsov

JAVA: implement hash field expiration commands Add support for HSETEX command in Java client. - Add HashFieldExpirationOptions class with builder pattern for command options - Implement hash field expiration methods in HashBaseCommands interface - Add unit tests for all new commands and options - Add integration tests to verify command functionality - Update protobuf definitions and Rust request types - Add batch operation support for all new commands This implementation provides full support for hash field expiration functionality. Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>

Commit:c3686e6
Author:avifenesh

feat: Add protobuf definitions for command, connection, and response requests Signed-off-by: avifenesh <aviarchi1994@gmail.com>

Commit:024ec85
Author:copilot-swe-agent[bot]

Implement script retry logic with fallback code Co-authored-by: avifenesh <55848801+avifenesh@users.noreply.github.com>

Commit:51be639
Author:avifenesh

Implement GlideJniClient with direct JNI integration, replacing Unix Domain Sockets for performance. Introduce Command and CommandType classes for command representation and management. Remove BasicExample and add CommandManager for streamlined command execution. Signed-off-by: avifenesh <aviarchi1994@gmail.com>

This commit does not contain any .proto files.

Commit:e6deb17
Author:Joseph Brinkman
Committer:GitHub

Backport 2.0 release to main (#4219) Release 2.0 Backport --------- Signed-off-by: Joseph Brinkman <joe.brinkman@improving.com> Co-authored-by: Avi Fenesh <55848801+avifenesh@users.noreply.github.com>

Commit:2b3a30b
Author:Muhammad Awawdi
Committer:GitHub

Lazy connect (#3748) * Lazy connect Signed-off-by: Muhammad Awawdi <mawawdi@amazon.com> Signed-off-by: GilboaAWS <gilboabg@amazon.com>

Commit:065f478
Author:Muhammad Awawdi
Committer:ikolomi

Lazy connect Signed-off-by: Muhammad Awawdi <mawawdi@amazon.com>

Commit:873ce59
Author:adarovadya
Committer:GitHub

Node/ Core: added openTelemetry traces and metrics support (#3900) * Node: add span command to measure command latency (#3391) * create ffi call to create and drop a span from node * handle span transaction and pipeline * Core/Node: add open telemetry config for metrics and traces * Core: OpenTelemetry metrics infrastructure (#3466) * Rust: add OpenTelemetry metrics infra * add timeout_error metric * add metrics file exporter * Node/Core: makes OTEL configs global (#3771) * change otel config to a static global object * Node: Create spans statistic only - according to samplePercentage OTEL config (#3830) * Node: use the exiting life time if exist (#3912) --------- Signed-off-by: Adar Ovadia <adarov@amazon.com> Signed-off-by: adarovadya <adarovadya@gmail.com> Co-authored-by: Adar Ovadia <adarov@amazon.com> Co-authored-by: barshaul <barshaul@amazon.com>

Commit:b893d21
Author:adarovadya
Committer:Adar Ovadia

Core: unnecessary configurations were removed (#3850) * removed unessecery configs due moved to a global config Signed-off-by: Adar Ovadia <adarov@amazon.com> --------- Signed-off-by: Adar Ovadia <adarov@amazon.com> Co-authored-by: Adar Ovadia <adarov@amazon.com>

Commit:7939046
Author:adarovadya
Committer:Adar Ovadia

Core: OpenTelemetry metrics infrastructure (#3466) * Rust: add OpenTelemetry metrics infra * add timeout_error metric * add metrics file exporter Signed-off-by: Adar Ovadia <adarov@amazon.com> --------- Signed-off-by: Adar Ovadia <adarov@amazon.com> Co-authored-by: Adar Ovadia <adarov@amazon.com>

Commit:0ecc355
Author:adarovadya
Committer:Adar Ovadia

Node: add span command to measure command latency (#3391) * create ffi call to create and drop a span from node * handle span transaction and pipeline * Core/Node: add open telemetry config for metrics and traces --------- Signed-off-by: Adar Ovadia <adarov@amazon.com> Co-authored-by: Adar Ovadia <adarov@amazon.com>

Commit:bb01bf6
Author:Gilboab
Committer:GitHub

Move retry_strategies into the redis-rs + Add optional Jitter param. (#3701) --------- Signed-off-by: GilboaAWS <gilboabg@amazon.com>

Commit:300514c
Author:adarovadya
Committer:GitHub

Core: OpenTelemetry metrics infrastructure (#3466) * Rust: add OpenTelemetry metrics infra * add timeout_error metric * add metrics file exporter Signed-off-by: Adar Ovadia <adarov@amazon.com> --------- Signed-off-by: Adar Ovadia <adarov@amazon.com> Co-authored-by: Adar Ovadia <adarov@amazon.com>

Commit:2460401
Author:Adar Ovadia
Committer:James Xin

fix tests Signed-off-by: Adar Ovadia <adarov@amazon.com>

Commit:5306164
Author:Adar Ovadia
Committer:James Xin

handle span transaction Signed-off-by: Adar Ovadia <adarov@amazon.com>

Commit:ddd84bf
Author:Adar Ovadia
Committer:Adar Ovadia

add otel metrics Signed-off-by: Adar Ovadia <adarov@amazon.com>

Commit:86bcb77
Author:adarovadya
Committer:GitHub

Node: add span command to measure command latency (#3391) * create ffi call to create and drop a span from node * handle span transaction and pipeline * Core/Node: add open telemetry config for metrics and traces --------- Signed-off-by: Adar Ovadia <adarov@amazon.com> Co-authored-by: Adar Ovadia <adarov@amazon.com>

Commit:aef332a
Author:Shoham Elias
Committer:Shoham Elias

Pipeline: add support for error handling (#3359) --------- Signed-off-by: Shoham Elias <shohame@amazon.com>

Commit:0df8557
Author:Shoham Elias
Committer:Shoham Elias

Core: Add initial Pipeline support (#2954) --------- Signed-off-by: Shoham Elias <shohame@amazon.com>

Commit:556828d
Author:Shoham Elias
Committer:BoazBD

add raise on error flag Signed-off-by: Shoham Elias <shohame@amazon.com>