These commits are when the Protocol Buffers files have changed: (only the last 100 relevant commits are shown)
| Commit: | 1ac8e06 | |
|---|---|---|
| Author: | affonsov | |
feat(core): make cluster recovery queue size configurable - Add `recovery_requests_queue_size` parameter to `ClusterParams` and `ClusterClientBuilder` - Replace hard-coded recovery queue capacity (1000) with configurable value via `ConnectionRequest` - Add `DEFAULT_RECOVERY_REQUESTS_QUEUE_SIZE` constant (1000) for default behavior - Update protobuf `ConnectionRequest` to include optional `recovery_requests_queue_size` field - Modify `buffer_pending_requests_to_recovery_queue` to read queue size from cluster parameters - Update Python config module to expose recovery queue size configuration - Add comprehensive documentation for the new configuration parameter - Allows fine-tuning of memory usage during cluster reconnect scenarios while maintaining backward compatibility Signed-off-by: affonsov <67347924+affonsov@users.noreply.github.com>
| Commit: | 67790a3 | |
|---|---|---|
| Author: | Thomas Zhou | |
| Committer: | GitHub | |
feat(core/java): mTLS configuration with client cert reload (#6386) * feat(java): add mTLS client certificate and key to TlsAdvancedConfiguration Expose mutual TLS (mTLS) client authentication in the Java client by adding `clientCertificate` and `clientKey` (PEM `byte[]`) to `TlsAdvancedConfiguration`. When both are provided, the client presents its certificate during the TLS handshake, matching the Python client's `client_cert_pem` / `client_key_pem` (PRs #5092/#5123). Details: - `TlsConfigHelper` adds `extractClientCertificate`/`extractClientKey` with both-or-neither validation (cert without key, or key without cert, is a `ConfigurationError`) and rejection of empty (non-null, length 0) values, mirroring Python's `_validate_client_auth_tls` / `_apply_tls_config`. - `ConnectionManager` populates the protobuf connection request fields `client_cert` (22) and `client_key` (23), which already existed in connection_request.proto and are honored by glide-core. Unit tests cover both validation failures and the success/plumbing case. Part of #6149 (related Java issue #5315). Mirrors the Python implementation; protobuf fields 22/23 already existed. Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * feat(java): add PEM file loaders for mTLS certificates and key Add static convenience loaders on TlsAdvancedConfiguration that read a PEM file from disk and return byte[], mirroring the merged Python loaders (load_root_certificates_from_file / load_client_certificate_from_file / load_client_key_from_file): - loadRootCertificatesFromFile(String path) - loadClientCertificateFromFile(String path) - loadClientKeyFromFile(String path) Each delegates to a shared loadPemFile helper that reads the file via Files.readAllBytes and surfaces missing, unreadable, and empty files as ConfigurationError with a descriptive, type-specific message, matching how the existing rootCertificates / KeyStore loading reports config failures. Uses loadClientKeyFromFile naming (not loadClientPrivateKeyFromFile) to match the existing clientKey field and Python's load_client_key_from_file. Unit tests cover success (loads bytes from a temp file), not-found, and empty-file cases for each loader. Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * style(java): hand-format mTLS loader code to google-java-format canonical form Give each loader test a local `path` variable so the assertThrows lambdas format cleanly. The empty-clientCertificate validation message stays as a two-line string concatenation and the loadClientKeyFromFile assertions keep both assertThrows arguments on one line, matching google-java-format's output so spotlessJavaCheck passes. Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * feat(core): add automatic mTLS client certificate reloading Implement core-side, path-based reloading of the mTLS client certificate and private key (GitHub issue #6189), modeled on the existing IAM token manager. - Proto: additive `client_cert_path`, `client_key_path`, and `CertReloadConfig` fields on `ConnectionRequest`. The byte-based cert fields (20/22/23) keep working unchanged as static, non-reloading mTLS. `sanitized_request_string` updated to surface the path-based config and reload interval (never the material). - New `glide-core/src/tls_reload` module: `CertMaterialManager` + `CertMaterialHandle` re-read both files on a tokio interval (no new crates, no file watcher), parse via `retrieve_tls_certificates`, validate that the private key matches the leaf cert, and swap on success while keeping last-known-good on any failure (missing file, unparseable PEM, or torn cert/key rotation). Adoption/rejection is logged with a SHA-256 fingerprint of the cert-chain DER only. - redis-rs: `Client::update_tls_params` swaps the `ConnectionAddr::TcpTls` tls_params (sibling of `update_password`); `validate_client_tls_params` verifies key/cert consistency (rustls does not at parse time); new `CertParamsProvider` trait feeds the freshest params to the reconnect path. - Apply on reconnect: standalone `reconnecting_connection` and cluster `cluster_async` refresh the client TLS params before each reconnect attempt, exactly where IAM applies its token. Hot-swapping a live connection's TLS without reconnect is out of scope. - Root/CA cert reload is out of scope (deferred). Node/Go/Python surfaces are later PRs built on this proto + core work. Tests: reload manager adopt-valid-rotation, keep-last-known-good on unparseable material and on torn cert/key rotation, interval re-read, and `update_tls_params` structural behavior. Part of #6189 Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * feat(java): expose mTLS certificate reload configuration Extend the Java client surface to drive the new core-side certificate reloading (GitHub issue #6189). - `TlsAdvancedConfiguration` gains `clientCertPath`, `clientKeyPath`, `certReloadEnabled`, and `certReloadIntervalSeconds`. Path-based config is mutually exclusive with the existing byte-based `clientCertificate`/`clientKey`. - `TlsConfigHelper` validates path-based config (cert/key paths provided together, not mixed with byte-based config, reload requires a cert path) and extracts the values. - `ConnectionManager` plumbs the paths and `CertReloadConfig` into the connection request. Tests extend `TlsAdvancedConfigurationTest` and `TlsConfigHelperTest` for the new fields, path validation, mixing rules, and reload options. Part of #6189 Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * no-mistakes(review): fix mTLS changelog dup, Java reload validation, cluster cert TOCTOU Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * no-mistakes(review): fix benchmark get_async_connection call for new cert_params_provider arg Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * no-mistakes(review): add cert_params_provider arg to redis-rs cluster get_async_connection callers Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * no-mistakes(lint): fix rustfmt and Java spotless formatting in changed files Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * docs(changelog): consolidate mTLS entries into one for #6386 The Pending 2.6 Changes section had two lines for this single PR (static client cert/key mTLS support and automatic cert reloading). Merge them into one entry covering both, referencing #6386 and issues #6149 and #6189. Addresses review feedback on #6386. Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * test(core): cover cert reload adoption on the reconnect path The existing async reload tests assert adoption/last-known-good through the manager's fingerprint view. Add a test that exercises the seam the reconnect loop actually uses: reading TLS params through the shared CertMaterialHandle (via the CertParamsProvider trait). It asserts a reconnect consumes rotated material after a successful reload and retains last-known-good after a failed one. Reloads are driven directly so the sequence is deterministic (no timer sleeps). Addresses review feedback on #6386. Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * docs(core): clarify mTLS cert-reload docs and reference tracking issue Address currantw's documentation review on #6386: - proto CertReloadConfig doc: describe the message's purpose without naming specific attributes, point interval_seconds's default at DEFAULT_RELOAD_INTERVAL_SECONDS instead of hardcoding "300 (5 minutes)", and link the root/CA reload tracking issue (#6189). - tls_reload module doc: simplify the "periodic re-read" bullet (drop the Kubernetes-secret-projection and debouncing jargon) and spell out why we compare key material early (rustls parses cert and key independently and only detects a mismatch at handshake time). - Replace "vend" jargon in the manager doc with plain language. - Make DEFAULT_RELOAD_INTERVAL_SECONDS the single source of truth for the default interval; other comments reference the constant. - Add TODO(#6189) markers where root/CA reload would land. No code behavior change. Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> (cherry picked from commit 927a2234fff887e0ffb4ffd07896aff2f0e94142) * refactor(core): rename cert-reload types to name client-cert scope Mechanical renames from currantw's review on #6386; no behavior change. - CertReloadState -> ClientCertReloadState: it only ever holds client cert/key paths (root/CA reload is out of scope, #6189). - CertMaterialManager -> CertReloadManager and CertMaterialHandle -> CertReloadHandle: "material" was unclear; the types manage reloading. - proto message CertReloadConfig -> ClientCertReloadConfig. Field names and numbers are unchanged, so this is wire-compatible. Updated the Java client reference to the generated class accordingly. cargo doc --no-deps builds clean (no broken intra-doc links after the handle rename). Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> (cherry picked from commit 89626cbaf9ea0edc5343bc69be749220d58166d6) * refactor(core): async cert reads, dedup mTLS cert setup, fail fast on empty roots Address currantw's code review on #6386: - load_and_validate now uses tokio::fs::read (async) instead of std::fs::read. Every caller is already async, so this avoids blocking a runtime worker on disk I/O. Torn-rotation protection comes from validating the cert/key pair, not from read atomicity, so semantics are unchanged. Enables the tokio "fs" feature and updates the unit tests to #[tokio::test]. - Extract the root-cert combining loop and the cert/key pairing validation into shared helpers (combine_root_certs, validate_client_cert_config) in client/mod.rs, used by both the standalone and cluster connection paths. - Validate the root certs (reject empty entries) BEFORE building the cert-reload manager, so the manager never sees unvalidated root material (fail fast). - Remove the dead update_connection_tls_params method: the reconnect loop calls redis::Client::update_tls_params directly, so the #[allow(dead_code)] seam was never used (YAGNI). Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> (cherry picked from commit a05b07ccacd2a8a354be7d88196f9c6501c97b99) * test(core): mTLS cert-rotation + reconnect integration test Add the end-to-end mTLS scenario jeremyprime requested on PR #6386: connect with path-based client cert/key and reload enabled, rotate the cert and key files on disk, force a reconnect, and verify re-authentication succeeds with the rotated material. The test lives beside the existing mTLS cluster tests in test_cluster_async.rs and reuses the established TLS fixture (TestClusterContext::new_with_mtls) and the reconnection-test pattern (CLIENT KILL SKIPME NO, per test_client.rs test_username_persistence_after_reconnection). Because the redis crate cannot depend on glide-core's CertMaterialManager, the test drives the same redis-rs integration seam the manager uses in production: a path-based CertParamsProvider whose current_tls_params re-reads the watched cert/key files, which the cluster reconnect loop consults before each connection attempt. Rotation writes a brand-new CA-signed leaf to the watched paths; a genuine reconnect (asserted via a changed server-side client id) then adopts it, and a SET/GET round-trip confirms re-auth. The provider's served certificate DER is asserted to change across the rotation. Adds a support helper rotate_client_cert_and_key that re-signs a fresh leaf with the existing test CA (mirroring build_keys_and_certs_for_tls), and async-trait as a dev-dependency to implement the async CertParamsProvider trait in test code. This complements the reload unit test (tls_reload::reconnect_reads_rotated_then_retains_last_known_good) with integration-level coverage against a real TLS cluster. Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> (cherry picked from commit 36d33da4fa6f1087c398ee956e524d7874b93ab1) * docs(core): update root/CA reload TODOs from #6189 to #6529 A dedicated follow-up issue was filed (#6529: "Core: automatic root/CA certificate reload"). Update all TODO and doc references from the parent issue #6189 to the specific follow-up #6529. Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> (cherry picked from commit 5fcca6b43730dbc90e68acd7b1cfe6746c7c0167) * fix(core): update CertMaterialManager doc reference missed in rename cherry-pick The integration test added in 36d33da4 referenced the pre-rename type name because the cherry-pick order placed the test after the rename. Fix the one remaining CertMaterialManager -> CertReloadManager reference. Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * fix: apply rustfmt to tls_reload/mod.rs Fixes the CI lint-rust failure by applying the canonical rustfmt formatting to the client_cert and client_key let-bindings. Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * docs: use project CHANGELOG prefix style for mTLS entry Change from conventional-commit 'feat(core/java):' to the project's own 'Core, Java:' prefix form per reviewer feedback. Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * style(java): fix spotless formatting after proto rename Collapse reloadBuilder declaration to a single line to satisfy spotlessJavaCheck (line was split during the type-rename commit). Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * test(core): add standalone mTLS cert-rotation + reconnect integration test Add a parametrized test (use_cluster=false/true) that exercises the full mTLS certificate rotation and reconnect flow at the glide-core client layer. The standalone arm starts a TLS server with client-cert auth, creates a client with path-based cert reload (1s interval), rotates the client cert on disk, waits for the reload manager to adopt the new material, kills the connection, and asserts the reconnect succeeds with a new CLIENT ID. The cluster arm is skipped with an explanatory message since cluster_manager.py does not support --tls-auth-clients yes; cluster mTLS cert rotation is already exercised in the redis-rs layer test. Harness plumbing added to TestConfiguration and create_connection_request to support optional path-based mTLS with cert reload. A rotate_client_cert_and_key helper and ca_crt_path() accessor are added to the test utilities for cert rotation scenarios. Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * Add TODO(#6532) comment at cluster-arm skip in mTLS cert rotation test Document why the cluster arm of test_mtls_cert_rotation_reconnect returns early and link the tracking issue for teaching cluster_manager.py to optionally require client certs. Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * refactor(java): validate TlsAdvancedConfiguration invariants at build time Move five self-contained validation checks from TlsConfigHelper (runtime) into TlsAdvancedConfiguration's constructor so they fire at .build() time, following the CompressionConfiguration precedent: 1. cert/key pairing: clientCertificate and clientKey both-or-neither 2. path pairing: clientCertPath and clientKeyPath both-or-neither 3. bytes-vs-path exclusivity: clientCertPath + clientCertificate cannot both be set 4. empty-array rejection: clientCertificate/clientKey may not be empty byte arrays 5. reload-requires-path: certReloadEnabled requires clientCertPath The cross-field check (useInsecureTLS requires useTLS) stays in TlsConfigHelper since it references the enclosing BaseClientConfiguration. The existing helper checks are retained as defense-in-depth. Also adds Javadoc contrast notes to loadClientCertificateFromFile and loadClientKeyFromFile, clarifying the difference from path-based config. Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> (cherry picked from commit cb50e4c9ff0f138c59c04e75ced7055117fec029) Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * feat(java): mTLS builder API with single useMutualTls and core-owned reload default Adds mutual TLS configuration to TlsAdvancedConfiguration via a single intent-revealing useMutualTls builder (byte, path, and path+interval overloads), keeps invalid combinations unrepresentable, and defers the reload cadence default to the GLIDE core (nullable Integer override). Includes Javadoc and unit tests. Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * refactor(java): reshape mTLS builder to useMutualTls(bytes) + file loaders + useMutualTlsWithReload Reshapes the TlsAdvancedConfigurationBuilder mTLS surface: - useMutualTls(byte[], byte[]) remains the single static in-memory overload. - Adds loadClientCertificateFromFile(String) / loadClientKeyFromFile(String) static helpers that read a PEM file into bytes, mirroring the Go and Python convenience loaders, for static-from-file mTLS via useMutualTls(bytes, bytes). - Renames the path-based reload overloads to useMutualTlsWithReload(path, path) (default cadence, deferred to the core) and useMutualTlsWithReload(path, path, int) (custom interval, rejects <= 0). - Removes the path-based load-once useMutualTls(String, String) and the 3-arg useMutualTls(String, String, Integer); useMutualTls now has only the (byte[], byte[]) overload, and all reload paths are named useMutualTlsWithReload. Internal wiring (certReloadRequested flag + optional interval, ClientCertReloadConfig wire contract) and validation are unchanged. Javadoc updated to describe the current surface and cross-reference the loaders. Tests updated for the new surface. Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * refactor(java): drop redundant certReloadRequested flag Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * style(java): apply google-java-format Javadoc wrapping Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> * style(java): correct google-java-format Javadoc wrapping in TlsAdvancedConfiguration Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> --------- Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> Signed-off-by: Thomas Zhou <54688146+xShinnRyuu@users.noreply.github.com>
| Commit: | 68c14c2 | |
|---|---|---|
| Author: | Thomas Zhou | |
| Committer: | Thomas Zhou | |
docs(core): update root/CA reload TODOs from #6189 to #6529 A dedicated follow-up issue was filed (#6529: "Core: automatic root/CA certificate reload"). Update all TODO and doc references from the parent issue #6189 to the specific follow-up #6529. Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> (cherry picked from commit 5fcca6b43730dbc90e68acd7b1cfe6746c7c0167)
| Commit: | 8ef4824 | |
|---|---|---|
| Author: | Thomas Zhou | |
| Committer: | Thomas Zhou | |
refactor(core): rename cert-reload types to name client-cert scope Mechanical renames from currantw's review on #6386; no behavior change. - CertReloadState -> ClientCertReloadState: it only ever holds client cert/key paths (root/CA reload is out of scope, #6189). - CertMaterialManager -> CertReloadManager and CertMaterialHandle -> CertReloadHandle: "material" was unclear; the types manage reloading. - proto message CertReloadConfig -> ClientCertReloadConfig. Field names and numbers are unchanged, so this is wire-compatible. Updated the Java client reference to the generated class accordingly. cargo doc --no-deps builds clean (no broken intra-doc links after the handle rename). Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> (cherry picked from commit 89626cbaf9ea0edc5343bc69be749220d58166d6)
| Commit: | c48159c | |
|---|---|---|
| Author: | Thomas Zhou | |
| Committer: | Thomas Zhou | |
docs(core): clarify mTLS cert-reload docs and reference tracking issue Address currantw's documentation review on #6386: - proto CertReloadConfig doc: describe the message's purpose without naming specific attributes, point interval_seconds's default at DEFAULT_RELOAD_INTERVAL_SECONDS instead of hardcoding "300 (5 minutes)", and link the root/CA reload tracking issue (#6189). - tls_reload module doc: simplify the "periodic re-read" bullet (drop the Kubernetes-secret-projection and debouncing jargon) and spell out why we compare key material early (rustls parses cert and key independently and only detects a mismatch at handshake time). - Replace "vend" jargon in the manager doc with plain language. - Make DEFAULT_RELOAD_INTERVAL_SECONDS the single source of truth for the default interval; other comments reference the constant. - Add TODO(#6189) markers where root/CA reload would land. No code behavior change. Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com> (cherry picked from commit 927a2234fff887e0ffb4ffd07896aff2f0e94142)
| Commit: | e76b68f | |
|---|---|---|
| Author: | Thomas Zhou | |
| Committer: | Thomas Zhou | |
feat(core): add automatic mTLS client certificate reloading Implement core-side, path-based reloading of the mTLS client certificate and private key (GitHub issue #6189), modeled on the existing IAM token manager. - Proto: additive `client_cert_path`, `client_key_path`, and `CertReloadConfig` fields on `ConnectionRequest`. The byte-based cert fields (20/22/23) keep working unchanged as static, non-reloading mTLS. `sanitized_request_string` updated to surface the path-based config and reload interval (never the material). - New `glide-core/src/tls_reload` module: `CertMaterialManager` + `CertMaterialHandle` re-read both files on a tokio interval (no new crates, no file watcher), parse via `retrieve_tls_certificates`, validate that the private key matches the leaf cert, and swap on success while keeping last-known-good on any failure (missing file, unparseable PEM, or torn cert/key rotation). Adoption/rejection is logged with a SHA-256 fingerprint of the cert-chain DER only. - redis-rs: `Client::update_tls_params` swaps the `ConnectionAddr::TcpTls` tls_params (sibling of `update_password`); `validate_client_tls_params` verifies key/cert consistency (rustls does not at parse time); new `CertParamsProvider` trait feeds the freshest params to the reconnect path. - Apply on reconnect: standalone `reconnecting_connection` and cluster `cluster_async` refresh the client TLS params before each reconnect attempt, exactly where IAM applies its token. Hot-swapping a live connection's TLS without reconnect is out of scope. - Root/CA cert reload is out of scope (deferred). Node/Go/Python surfaces are later PRs built on this proto + core work. Tests: reload manager adopt-valid-rotation, keep-last-known-good on unparseable material and on torn cert/key rotation, interval re-read, and `update_tls_params` structural behavior. Part of #6189 Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com>
| Commit: | 4e41b45 | |
|---|---|---|
| Author: | Thomas Zhou | |
| Committer: | Thomas Zhou | |
feat(core): add automatic mTLS client certificate reloading Implement core-side, path-based reloading of the mTLS client certificate and private key (GitHub issue #6189), modeled on the existing IAM token manager. - Proto: additive `client_cert_path`, `client_key_path`, and `CertReloadConfig` fields on `ConnectionRequest`. The byte-based cert fields (20/22/23) keep working unchanged as static, non-reloading mTLS. `sanitized_request_string` updated to surface the path-based config and reload interval (never the material). - New `glide-core/src/tls_reload` module: `CertMaterialManager` + `CertMaterialHandle` re-read both files on a tokio interval (no new crates, no file watcher), parse via `retrieve_tls_certificates`, validate that the private key matches the leaf cert, and swap on success while keeping last-known-good on any failure (missing file, unparseable PEM, or torn cert/key rotation). Adoption/rejection is logged with a SHA-256 fingerprint of the cert-chain DER only. - redis-rs: `Client::update_tls_params` swaps the `ConnectionAddr::TcpTls` tls_params (sibling of `update_password`); `validate_client_tls_params` verifies key/cert consistency (rustls does not at parse time); new `CertParamsProvider` trait feeds the freshest params to the reconnect path. - Apply on reconnect: standalone `reconnecting_connection` and cluster `cluster_async` refresh the client TLS params before each reconnect attempt, exactly where IAM applies its token. Hot-swapping a live connection's TLS without reconnect is out of scope. - Root/CA cert reload is out of scope (deferred). Node/Go/Python surfaces are later PRs built on this proto + core work. Tests: reload manager adopt-valid-rotation, keep-last-known-good on unparseable material and on torn cert/key rotation, interval re-read, and `update_tls_params` structural behavior. Part of #6189 Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com>
| Commit: | c4bd059 | |
|---|---|---|
| Author: | Thomas Zhou | |
| Committer: | Thomas Zhou | |
feat(core): add automatic mTLS client certificate reloading Implement core-side, path-based reloading of the mTLS client certificate and private key (GitHub issue #6189), modeled on the existing IAM token manager. - Proto: additive `client_cert_path`, `client_key_path`, and `CertReloadConfig` fields on `ConnectionRequest`. The byte-based cert fields (20/22/23) keep working unchanged as static, non-reloading mTLS. `sanitized_request_string` updated to surface the path-based config and reload interval (never the material). - New `glide-core/src/tls_reload` module: `CertMaterialManager` + `CertMaterialHandle` re-read both files on a tokio interval (no new crates, no file watcher), parse via `retrieve_tls_certificates`, validate that the private key matches the leaf cert, and swap on success while keeping last-known-good on any failure (missing file, unparseable PEM, or torn cert/key rotation). Adoption/rejection is logged with a SHA-256 fingerprint of the cert-chain DER only. - redis-rs: `Client::update_tls_params` swaps the `ConnectionAddr::TcpTls` tls_params (sibling of `update_password`); `validate_client_tls_params` verifies key/cert consistency (rustls does not at parse time); new `CertParamsProvider` trait feeds the freshest params to the reconnect path. - Apply on reconnect: standalone `reconnecting_connection` and cluster `cluster_async` refresh the client TLS params before each reconnect attempt, exactly where IAM applies its token. Hot-swapping a live connection's TLS without reconnect is out of scope. - Root/CA cert reload is out of scope (deferred). Node/Go/Python surfaces are later PRs built on this proto + core work. Tests: reload manager adopt-valid-rotation, keep-last-known-good on unparseable material and on torn cert/key rotation, interval re-read, and `update_tls_params` structural behavior. Part of #6189 Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com>
| Commit: | 4395772 | |
|---|---|---|
| Author: | Thomas Zhou | |
| Committer: | Thomas Zhou | |
feat(core): add automatic mTLS client certificate reloading Implement core-side, path-based reloading of the mTLS client certificate and private key (GitHub issue #6189), modeled on the existing IAM token manager. - Proto: additive `client_cert_path`, `client_key_path`, and `CertReloadConfig` fields on `ConnectionRequest`. The byte-based cert fields (20/22/23) keep working unchanged as static, non-reloading mTLS. `sanitized_request_string` updated to surface the path-based config and reload interval (never the material). - New `glide-core/src/tls_reload` module: `CertMaterialManager` + `CertMaterialHandle` re-read both files on a tokio interval (no new crates, no file watcher), parse via `retrieve_tls_certificates`, validate that the private key matches the leaf cert, and swap on success while keeping last-known-good on any failure (missing file, unparseable PEM, or torn cert/key rotation). Adoption/rejection is logged with a SHA-256 fingerprint of the cert-chain DER only. - redis-rs: `Client::update_tls_params` swaps the `ConnectionAddr::TcpTls` tls_params (sibling of `update_password`); `validate_client_tls_params` verifies key/cert consistency (rustls does not at parse time); new `CertParamsProvider` trait feeds the freshest params to the reconnect path. - Apply on reconnect: standalone `reconnecting_connection` and cluster `cluster_async` refresh the client TLS params before each reconnect attempt, exactly where IAM applies its token. Hot-swapping a live connection's TLS without reconnect is out of scope. - Root/CA cert reload is out of scope (deferred). Node/Go/Python surfaces are later PRs built on this proto + core work. Tests: reload manager adopt-valid-rotation, keep-last-known-good on unparseable material and on torn cert/key rotation, interval re-read, and `update_tls_params` structural behavior. Part of #6189 Signed-off-by: Thomas Zhou <thomaszhou64@gmail.com>
| 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: | 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: | 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: | 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: | 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: | 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: | 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: | 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: | 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: | 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>