Skip to content

v4.3.0 - Address open issues#1063

Merged
petergoldstein merged 13 commits intomainfrom
feature/v4.3.0-bugfixes
Feb 4, 2026
Merged

v4.3.0 - Address open issues#1063
petergoldstein merged 13 commits intomainfrom
feature/v4.3.0-bugfixes

Conversation

@petergoldstein
Copy link
Owner

#1034 - Timeval Architecture Fix ✅

  • Added platform detection for struct timeval format in lib/dalli/socket.rb
  • Detects correct pack format (l_l_, q_l_, or q_q_) by reading current socket option size
  • Fixes timeout issues on architectures with 64-bit time_t

#1019 - Configurable Namespace Separator ✅

  • Added namespace_separator option to KeyManager in lib/dalli/key_manager.rb
  • Default is : for backward compatibility
  • Works with both static and Proc namespaces
  • Added comprehensive tests in test/test_key_manager.rb

petergoldstein and others added 2 commits January 26, 2026 20:39
- Fix architecture-dependent struct timeval packing (#1034)
  Detects correct pack format for time_t/suseconds_t on each platform

- Add configurable namespace_separator option (#1019)
  Must be a single non-alphanumeric character (default: ':')

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@petergoldstein petergoldstein changed the title Feature/v4.3.0 bugfixes v4.3.0 - Address open issues Jan 27, 2026
petergoldstein and others added 11 commits January 27, 2026 18:13
JRuby doesn't support the _ modifier after q (64-bit) type.
Use fixed-size formats ll (8 bytes) and qq (16 bytes) instead.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use private_method_defined? instead of private_instance_methods.include?

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add interleaved read/write for pipelined gets to prevent socket buffer
deadlock when fetching many keys. For batches over 10,000 keys per server,
requests are now sent in chunks with response draining between chunks.

This prevents the scenario where the client's send buffer fills up waiting
for the server to read, while the server's send buffer fills up waiting
for the client to read, causing deadlock.

Key changes:
- Add pipelined_get_interleaved method that writes in chunks and drains
- Add drain_pipeline_responses for non-blocking response collection
- Add ensure_ready to ResponseBuffer to preserve partial buffered data
- Pass results hash directly to avoid allocation/merge overhead

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
When using `raw: true`, only String values are now accepted. Previously,
non-string values were silently converted via `to_s`, causing issues like
`nil` becoming `""` and integers losing their type information.

This matches the behavior of client-level `raw: true` mode (StringMarshaller)
and aligns with the expectation that raw mode means "pass-through, no magic".

Breaking change: `set(key, nil, raw: true)` and `set(key, 123, raw: true)`
now raise MarshalError. Use string values for counters: `set('counter', '0', raw: true)`.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Clear response buffer at start of pipelined_get to remove stale data
from interrupted operations. Uses clear() instead of reset() to maintain
proper pipeline state detection (pipeline_complete? remains true until
pipeline_response_setup is called).

This fixes intermittent test failures on JRuby where Thread#raise or
Thread#kill during get_multi could leave corrupted buffer data that
affected subsequent operations.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Prevents cancelled jobs from appearing as failures when new pushes
cancel in-progress workflows. Each workflow now uses a unique
concurrency group based on the branch/PR reference.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Benchmarks take ~4 minutes to run. When multiple commits are pushed
during development, previous runs get cancelled and show as failures.

Changed to only run benchmarks on:
- Pushes to main (after PR merge)
- Manual trigger via workflow_dispatch

This ensures benchmark data is collected for released code without
causing false failures during development.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@petergoldstein petergoldstein merged commit c5d0dd4 into main Feb 4, 2026
36 of 37 checks passed
@petergoldstein petergoldstein deleted the feature/v4.3.0-bugfixes branch February 4, 2026 05:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants