valkey-glide 2.1.0rc2__tar.gz → 2.1.0rc4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of valkey-glide might be problematic. Click here for more details.

Files changed (118) hide show
  1. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/Cargo.lock +28 -28
  2. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/PKG-INFO +1 -1
  3. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/src/client/mod.rs +1 -1
  4. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/tests/test_cluster_client.rs +102 -0
  5. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/tests/test_standalone_client.rs +0 -8
  6. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/tests/utilities/mod.rs +82 -0
  7. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/cluster.rs +1 -1
  8. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/cluster_client.rs +12 -0
  9. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/cluster_routing.rs +3 -2
  10. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/pyproject.toml +1 -1
  11. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/python/glide/async_commands/standalone_commands.py +22 -0
  12. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/.cargo/config.toml +0 -0
  13. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/Cargo.toml +0 -0
  14. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/THIRD_PARTY_LICENSES_PYTHON_ASYNC +0 -0
  15. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/.cargo/config.toml +0 -0
  16. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/.ort.yml +0 -0
  17. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/Cargo.toml +0 -0
  18. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/README.md +0 -0
  19. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/THIRD_PARTY_LICENSES_RUST +0 -0
  20. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/benches/connections_benchmark.rs +0 -0
  21. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/benches/memory_benchmark.rs +0 -0
  22. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/benches/rotating_buffer_benchmark.rs +0 -0
  23. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/build.rs +0 -0
  24. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/src/client/reconnecting_connection.rs +0 -0
  25. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/src/client/standalone_client.rs +0 -0
  26. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/src/client/types.rs +0 -0
  27. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/src/client/value_conversion.rs +0 -0
  28. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/src/cluster_scan_container.rs +0 -0
  29. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/src/errors.rs +0 -0
  30. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/src/lib.rs +0 -0
  31. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/src/protobuf/command_request.proto +0 -0
  32. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/src/protobuf/connection_request.proto +0 -0
  33. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/src/protobuf/response.proto +0 -0
  34. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/src/request_type.rs +0 -0
  35. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/src/rotating_buffer.rs +0 -0
  36. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/src/scripts_container.rs +0 -0
  37. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/src/socket_listener.rs +0 -0
  38. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/tests/test_client.rs +0 -0
  39. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/tests/test_socket_listener.rs +0 -0
  40. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/tests/utilities/cluster.rs +0 -0
  41. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/glide-core/tests/utilities/mocks.rs +0 -0
  42. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/logger_core/Cargo.toml +0 -0
  43. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/logger_core/src/lib.rs +0 -0
  44. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/logger_core/tests/test_logger.rs +0 -0
  45. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/CHANGELOG.md +0 -0
  46. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/Cargo.toml +0 -0
  47. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/LICENSE +0 -0
  48. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/benches/bench_basic.rs +0 -0
  49. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/benches/bench_cluster.rs +0 -0
  50. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/benches/bench_cluster_async.rs +0 -0
  51. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/examples/async-await.rs +0 -0
  52. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/examples/async-multiplexed.rs +0 -0
  53. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/examples/async-pub-sub.rs +0 -0
  54. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/examples/async-scan.rs +0 -0
  55. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/examples/basic.rs +0 -0
  56. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/release.toml +0 -0
  57. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/aio/connection.rs +0 -0
  58. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/aio/connection_manager.rs +0 -0
  59. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/aio/mod.rs +0 -0
  60. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/aio/multiplexed_connection.rs +0 -0
  61. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/aio/runtime.rs +0 -0
  62. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/aio/tokio.rs +0 -0
  63. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/client.rs +0 -0
  64. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/cluster_async/LICENSE +0 -0
  65. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/cluster_async/connections_container.rs +0 -0
  66. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/cluster_async/connections_logic.rs +0 -0
  67. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/cluster_async/mod.rs +0 -0
  68. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/cluster_async/pipeline_routing.rs +0 -0
  69. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/cluster_pipeline.rs +0 -0
  70. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/cluster_slotmap.rs +0 -0
  71. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/cluster_topology.rs +0 -0
  72. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/cmd.rs +0 -0
  73. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/commands/cluster_scan.rs +0 -0
  74. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/commands/macros.rs +0 -0
  75. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/commands/mod.rs +0 -0
  76. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/connection.rs +0 -0
  77. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/lib.rs +0 -0
  78. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/macros.rs +0 -0
  79. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/parser.rs +0 -0
  80. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/pipeline.rs +0 -0
  81. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/push_manager.rs +0 -0
  82. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/retry_strategies.rs +0 -0
  83. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/sentinel.rs +0 -0
  84. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/tls.rs +0 -0
  85. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/src/types.rs +0 -0
  86. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/tests/auth.rs +0 -0
  87. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/tests/parser.rs +0 -0
  88. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/tests/support/cluster.rs +0 -0
  89. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/tests/support/mock_cluster.rs +0 -0
  90. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/tests/support/mod.rs +0 -0
  91. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/tests/support/sentinel.rs +0 -0
  92. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/tests/support/util.rs +0 -0
  93. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/tests/test_async.rs +0 -0
  94. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/tests/test_async_cluster_connections_logic.rs +0 -0
  95. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/tests/test_basic.rs +0 -0
  96. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/tests/test_cluster.rs +0 -0
  97. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/tests/test_cluster_async.rs +0 -0
  98. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/tests/test_cluster_pipeline.rs +0 -0
  99. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/tests/test_cluster_scan.rs +0 -0
  100. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/tests/test_sentinel.rs +0 -0
  101. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/redis/tests/test_types.rs +0 -0
  102. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/telemetrylib/Cargo.toml +0 -0
  103. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/telemetrylib/src/lib.rs +0 -0
  104. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/telemetrylib/src/metrics_exporter_file.rs +0 -0
  105. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/telemetrylib/src/open_telemetry.rs +0 -0
  106. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/local_dependencies/telemetrylib/src/span_exporter_file.rs +0 -0
  107. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/python/glide/__init__.py +0 -0
  108. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/python/glide/async_commands/__init__.py +0 -0
  109. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/python/glide/async_commands/cluster_commands.py +0 -0
  110. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/python/glide/async_commands/core.py +0 -0
  111. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/python/glide/async_commands/ft.py +0 -0
  112. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/python/glide/async_commands/glide_json.py +0 -0
  113. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/python/glide/glide.pyi +0 -0
  114. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/python/glide/glide_client.py +0 -0
  115. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/python/glide/logger.py +0 -0
  116. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/python/glide/opentelemetry.py +0 -0
  117. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/requirements.txt +0 -0
  118. {valkey_glide-2.1.0rc2 → valkey_glide-2.1.0rc4}/src/lib.rs +0 -0
@@ -26,12 +26,6 @@ dependencies = [
26
26
  "memchr",
27
27
  ]
28
28
 
29
- [[package]]
30
- name = "android-tzdata"
31
- version = "0.1.1"
32
- source = "registry+https://github.com/rust-lang/crates.io-index"
33
- checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
34
-
35
29
  [[package]]
36
30
  name = "android_system_properties"
37
31
  version = "0.1.5"
@@ -265,16 +259,15 @@ checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9"
265
259
 
266
260
  [[package]]
267
261
  name = "chrono"
268
- version = "0.4.41"
262
+ version = "0.4.42"
269
263
  source = "registry+https://github.com/rust-lang/crates.io-index"
270
- checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d"
264
+ checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2"
271
265
  dependencies = [
272
- "android-tzdata",
273
266
  "iana-time-zone",
274
267
  "js-sys",
275
268
  "num-traits",
276
269
  "wasm-bindgen",
277
- "windows-link 0.1.3",
270
+ "windows-link 0.2.0",
278
271
  ]
279
272
 
280
273
  [[package]]
@@ -452,12 +445,12 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
452
445
 
453
446
  [[package]]
454
447
  name = "errno"
455
- version = "0.3.13"
448
+ version = "0.3.14"
456
449
  source = "registry+https://github.com/rust-lang/crates.io-index"
457
- checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad"
450
+ checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
458
451
  dependencies = [
459
452
  "libc",
460
- "windows-sys 0.60.2",
453
+ "windows-sys 0.61.0",
461
454
  ]
462
455
 
463
456
  [[package]]
@@ -690,7 +683,7 @@ dependencies = [
690
683
  "futures-core",
691
684
  "futures-sink",
692
685
  "http",
693
- "indexmap 2.11.0",
686
+ "indexmap 2.11.1",
694
687
  "slab",
695
688
  "tokio",
696
689
  "tokio-util",
@@ -985,9 +978,9 @@ dependencies = [
985
978
 
986
979
  [[package]]
987
980
  name = "indexmap"
988
- version = "2.11.0"
981
+ version = "2.11.1"
989
982
  source = "registry+https://github.com/rust-lang/crates.io-index"
990
- checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9"
983
+ checksum = "206a8042aec68fa4a62e8d3f7aa4ceb508177d9324faf261e1959e495b7a1921"
991
984
  dependencies = [
992
985
  "equivalent",
993
986
  "hashbrown 0.15.5",
@@ -1148,6 +1141,12 @@ version = "0.9.4"
1148
1141
  source = "registry+https://github.com/rust-lang/crates.io-index"
1149
1142
  checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12"
1150
1143
 
1144
+ [[package]]
1145
+ name = "linux-raw-sys"
1146
+ version = "0.11.0"
1147
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1148
+ checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
1149
+
1151
1150
  [[package]]
1152
1151
  name = "litemap"
1153
1152
  version = "0.8.0"
@@ -1590,7 +1589,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
1590
1589
  checksum = "b4aeaa1f2460f1d348eeaeed86aea999ce98c1bded6f089ff8514c9d9dbdc973"
1591
1590
  dependencies = [
1592
1591
  "anyhow",
1593
- "indexmap 2.11.0",
1592
+ "indexmap 2.11.1",
1594
1593
  "log",
1595
1594
  "protobuf",
1596
1595
  "protobuf-support",
@@ -1906,15 +1905,16 @@ dependencies = [
1906
1905
 
1907
1906
  [[package]]
1908
1907
  name = "rustix"
1909
- version = "1.0.8"
1908
+ version = "1.1.1"
1910
1909
  source = "registry+https://github.com/rust-lang/crates.io-index"
1911
- checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8"
1910
+ checksum = "9621e389a110cae094269936383d69b869492f03e5c1ed2d575a53c029d4441d"
1912
1911
  dependencies = [
1913
1912
  "bitflags",
1914
1913
  "errno",
1915
1914
  "libc",
1915
+ "linux-raw-sys 0.11.0",
1916
1916
  "linux-raw-sys 0.9.4",
1917
- "windows-sys 0.60.2",
1917
+ "windows-sys 0.61.0",
1918
1918
  ]
1919
1919
 
1920
1920
  [[package]]
@@ -2024,11 +2024,11 @@ dependencies = [
2024
2024
 
2025
2025
  [[package]]
2026
2026
  name = "schannel"
2027
- version = "0.1.27"
2027
+ version = "0.1.28"
2028
2028
  source = "registry+https://github.com/rust-lang/crates.io-index"
2029
- checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d"
2029
+ checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1"
2030
2030
  dependencies = [
2031
- "windows-sys 0.59.0",
2031
+ "windows-sys 0.61.0",
2032
2032
  ]
2033
2033
 
2034
2034
  [[package]]
@@ -2039,9 +2039,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
2039
2039
 
2040
2040
  [[package]]
2041
2041
  name = "security-framework"
2042
- version = "3.3.0"
2042
+ version = "3.4.0"
2043
2043
  source = "registry+https://github.com/rust-lang/crates.io-index"
2044
- checksum = "80fb1d92c5028aa318b4b8bd7302a5bfcf48be96a37fc6fc790f806b0004ee0c"
2044
+ checksum = "60b369d18893388b345804dc0007963c99b7d665ae71d275812d828c6f089640"
2045
2045
  dependencies = [
2046
2046
  "bitflags",
2047
2047
  "core-foundation",
@@ -2052,9 +2052,9 @@ dependencies = [
2052
2052
 
2053
2053
  [[package]]
2054
2054
  name = "security-framework-sys"
2055
- version = "2.14.0"
2055
+ version = "2.15.0"
2056
2056
  source = "registry+https://github.com/rust-lang/crates.io-index"
2057
- checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32"
2057
+ checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0"
2058
2058
  dependencies = [
2059
2059
  "core-foundation-sys",
2060
2060
  "libc",
@@ -2253,7 +2253,7 @@ dependencies = [
2253
2253
  "fastrand",
2254
2254
  "getrandom 0.3.3",
2255
2255
  "once_cell",
2256
- "rustix 1.0.8",
2256
+ "rustix 1.1.1",
2257
2257
  "windows-sys 0.60.2",
2258
2258
  ]
2259
2259
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: valkey-glide
3
- Version: 2.1.0rc2
3
+ Version: 2.1.0rc4
4
4
  Classifier: Topic :: Database
5
5
  Classifier: Topic :: Utilities
6
6
  Classifier: License :: OSI Approved :: Apache Software License
@@ -902,6 +902,7 @@ async fn create_cluster_client(
902
902
  builder = builder.periodic_topology_checks(interval_duration);
903
903
  }
904
904
  builder = builder.use_protocol(request.protocol.unwrap_or_default());
905
+ builder = builder.database_id(redis_connection_info.db);
905
906
  if let Some(client_name) = redis_connection_info.client_name {
906
907
  builder = builder.client_name(client_name);
907
908
  }
@@ -979,7 +980,6 @@ async fn create_cluster_client(
979
980
  }
980
981
  }
981
982
  }
982
-
983
983
  Ok(con)
984
984
  }
985
985
 
@@ -365,6 +365,108 @@ mod cluster_client_tests {
365
365
  total_clients
366
366
  }
367
367
 
368
+ #[rstest]
369
+ #[serial_test::serial]
370
+ #[timeout(SHORT_CLUSTER_TEST_TIMEOUT)]
371
+ /// Test that verifies the client maintains the correct database ID after an automatic reconnection.
372
+ /// This test:
373
+ /// 1. Creates a client connected to database 4
374
+ /// 2. Verifies the initial connection is to the correct database
375
+ /// 3. Simulates a connection drop by killing the connection
376
+ /// 4. Sends another command which either:
377
+ /// - Fails due to the dropped connection, then retries and verifies reconnection to db=4
378
+ /// - Succeeds with a new client ID (indicating reconnection) and verifies still on db=4
379
+ /// This ensures that database selection persists across reconnections.
380
+ fn test_set_database_id_after_reconnection() {
381
+ let mut client_info_cmd = redis::cmd("CLIENT");
382
+ client_info_cmd.arg("INFO");
383
+ block_on_all(async {
384
+ // First create a basic client to check server version
385
+ let mut version_check_basics = setup_test_basics_internal(TestConfiguration {
386
+ cluster_mode: ClusterMode::Enabled,
387
+ shared_server: true,
388
+ ..Default::default()
389
+ })
390
+ .await;
391
+
392
+ // Skip test if server version is less than 9.0 (database isolation not supported)
393
+ if !utilities::version_greater_or_equal(&mut version_check_basics.client, "9.0.0").await
394
+ {
395
+ return;
396
+ }
397
+ let mut test_basics = setup_test_basics_internal(TestConfiguration {
398
+ cluster_mode: ClusterMode::Enabled,
399
+ shared_server: true,
400
+ database_id: 4, // Set a specific database ID
401
+ ..Default::default()
402
+ })
403
+ .await;
404
+
405
+ let client_info = test_basics
406
+ .client
407
+ .send_command(&client_info_cmd, None)
408
+ .await
409
+ .unwrap();
410
+ let client_info_str = match client_info {
411
+ redis::Value::BulkString(bytes) => String::from_utf8_lossy(&bytes).to_string(),
412
+ redis::Value::VerbatimString { text, .. } => text,
413
+ _ => panic!("Unexpected CLIENT INFO response type: {:?}", client_info),
414
+ };
415
+ assert!(client_info_str.contains("db=4"));
416
+
417
+ // Extract initial client ID
418
+ let initial_client_id =
419
+ extract_client_id(&client_info_str).expect("Failed to extract initial client ID");
420
+
421
+ kill_connection(&mut test_basics.client).await;
422
+
423
+ let res = test_basics
424
+ .client
425
+ .send_command(&client_info_cmd, None)
426
+ .await;
427
+ match res {
428
+ Err(err) => {
429
+ // Connection was dropped as expected
430
+ assert!(
431
+ err.is_connection_dropped() || err.is_timeout(),
432
+ "Expected connection dropped or timeout error, got: {err:?}",
433
+ );
434
+ let client_info = repeat_try_create(|| async {
435
+ let mut client = test_basics.client.clone();
436
+ let response = client.send_command(&client_info_cmd, None).await.ok()?;
437
+ match response {
438
+ redis::Value::BulkString(bytes) => {
439
+ Some(String::from_utf8_lossy(&bytes).to_string())
440
+ }
441
+ redis::Value::VerbatimString { text, .. } => Some(text),
442
+ _ => None,
443
+ }
444
+ })
445
+ .await;
446
+ assert!(client_info.contains("db=4"));
447
+ }
448
+ Ok(response) => {
449
+ // Command succeeded, extract new client ID and compare
450
+ let new_client_info = match response {
451
+ redis::Value::BulkString(bytes) => {
452
+ String::from_utf8_lossy(&bytes).to_string()
453
+ }
454
+ redis::Value::VerbatimString { text, .. } => text,
455
+ _ => panic!("Unexpected CLIENT INFO response type: {:?}", response),
456
+ };
457
+ let new_client_id = extract_client_id(&new_client_info)
458
+ .expect("Failed to extract new client ID");
459
+ assert_ne!(
460
+ initial_client_id, new_client_id,
461
+ "Client ID should change after reconnection if command succeeds"
462
+ );
463
+ // Check that the database ID is still 4
464
+ assert!(new_client_info.contains("db=4"));
465
+ }
466
+ }
467
+ });
468
+ }
469
+
368
470
  #[rstest]
369
471
  #[serial_test::serial]
370
472
  #[timeout(LONG_CLUSTER_TEST_TIMEOUT)]
@@ -524,14 +524,6 @@ mod standalone_client_tests {
524
524
  });
525
525
  }
526
526
 
527
- fn extract_client_id(client_info: &str) -> Option<String> {
528
- client_info
529
- .split_whitespace()
530
- .find(|part| part.starts_with("id="))
531
- .and_then(|id_part| id_part.strip_prefix("id="))
532
- .map(|id| id.to_string())
533
- }
534
-
535
527
  #[rstest]
536
528
  #[serial_test::serial]
537
529
  #[timeout(LONG_STANDALONE_TEST_TIMEOUT)]
@@ -19,6 +19,7 @@ use std::{
19
19
  };
20
20
  use tempfile::TempDir;
21
21
  use tokio::sync::mpsc;
22
+ use versions::Versioning;
22
23
 
23
24
  pub mod cluster;
24
25
  pub mod mocks;
@@ -769,3 +770,84 @@ pub enum BackingServer {
769
770
  Standalone(Option<RedisServer>),
770
771
  Cluster(Option<cluster::RedisCluster>),
771
772
  }
773
+
774
+ /// Get the server version from a client connection
775
+ pub async fn get_server_version(
776
+ client: &mut impl glide_core::client::GlideClientForTests,
777
+ ) -> (u16, u16, u16) {
778
+ let mut info_cmd = redis::cmd("INFO");
779
+ info_cmd.arg("SERVER");
780
+
781
+ let info_result = client.send_command(&info_cmd, None).await.unwrap();
782
+ let info_string = match info_result {
783
+ Value::BulkString(bytes) => String::from_utf8_lossy(&bytes).to_string(),
784
+ Value::VerbatimString { text, .. } => text,
785
+ Value::Map(node_results) => {
786
+ // In cluster mode, INFO returns a map of node -> info string
787
+ // We just need to get the version from any node (they should all be the same)
788
+ if let Some((_, node_info)) = node_results.first() {
789
+ match node_info {
790
+ Value::VerbatimString { text, .. } => text.clone(),
791
+ Value::BulkString(bytes) => String::from_utf8_lossy(bytes).to_string(),
792
+ _ => panic!(
793
+ "Unexpected node info type in cluster INFO response: {:?}",
794
+ node_info
795
+ ),
796
+ }
797
+ } else {
798
+ panic!("Empty cluster INFO response");
799
+ }
800
+ }
801
+ _ => panic!("Unexpected INFO response type: {:?}", info_result),
802
+ };
803
+
804
+ // Parse the INFO response to extract version
805
+ // First try to find valkey_version, then fall back to redis_version
806
+ for line in info_string.lines() {
807
+ if let Some(version_str) = line.strip_prefix("valkey_version:") {
808
+ return parse_version_string(version_str);
809
+ }
810
+ }
811
+
812
+ // If no valkey_version found, look for redis_version
813
+ for line in info_string.lines() {
814
+ if let Some(version_str) = line.strip_prefix("redis_version:") {
815
+ return parse_version_string(version_str);
816
+ }
817
+ }
818
+
819
+ panic!("Could not find version information in INFO response");
820
+ }
821
+
822
+ /// Parse a version string like "8.1.3" into (8, 1, 3)
823
+ fn parse_version_string(version_str: &str) -> (u16, u16, u16) {
824
+ let parts: Vec<&str> = version_str.split('.').collect();
825
+ if parts.len() >= 3 {
826
+ let major = parts[0].parse().unwrap_or(0);
827
+ let minor = parts[1].parse().unwrap_or(0);
828
+ let patch = parts[2].parse().unwrap_or(0);
829
+ (major, minor, patch)
830
+ } else {
831
+ panic!("Invalid version format: {}", version_str);
832
+ }
833
+ }
834
+
835
+ /// Check if the server version is greater than or equal to the specified version
836
+ pub async fn version_greater_or_equal(
837
+ client: &mut impl glide_core::client::GlideClientForTests,
838
+ version: &str,
839
+ ) -> bool {
840
+ let (major, minor, patch) = get_server_version(client).await;
841
+ let server_version = Versioning::new(format!("{major}.{minor}.{patch}")).unwrap();
842
+ let compared_version = Versioning::new(version).unwrap();
843
+ server_version >= compared_version
844
+ }
845
+
846
+ /// Extract client ID from CLIENT INFO response string
847
+ pub fn extract_client_id(client_info: &str) -> Option<String> {
848
+ client_info
849
+ .split_whitespace()
850
+ .find(|part| part.starts_with("id="))
851
+ .and_then(|id_part| id_part.strip_prefix("id="))
852
+ .map(|id| id.to_string())
853
+ }
@@ -992,7 +992,7 @@ pub(crate) fn get_connection_info(
992
992
  username: cluster_params.username,
993
993
  client_name: cluster_params.client_name,
994
994
  protocol: cluster_params.protocol,
995
- db: 0,
995
+ db: cluster_params.database_id,
996
996
  pubsub_subscriptions: cluster_params.pubsub_subscriptions,
997
997
  },
998
998
  })
@@ -44,6 +44,7 @@ struct BuilderParams {
44
44
  protocol: ProtocolVersion,
45
45
  pubsub_subscriptions: Option<PubSubSubscriptionInfo>,
46
46
  reconnect_retry_strategy: Option<RetryStrategy>,
47
+ database_id: i64,
47
48
  }
48
49
 
49
50
  #[derive(Clone)]
@@ -144,6 +145,7 @@ pub struct ClusterParams {
144
145
  pub(crate) protocol: ProtocolVersion,
145
146
  pub(crate) pubsub_subscriptions: Option<PubSubSubscriptionInfo>,
146
147
  pub(crate) reconnect_retry_strategy: Option<RetryStrategy>,
148
+ pub(crate) database_id: i64,
147
149
  }
148
150
 
149
151
  impl ClusterParams {
@@ -173,6 +175,7 @@ impl ClusterParams {
173
175
  protocol: value.protocol,
174
176
  pubsub_subscriptions: value.pubsub_subscriptions,
175
177
  reconnect_retry_strategy: value.reconnect_retry_strategy,
178
+ database_id: value.database_id,
176
179
  })
177
180
  }
178
181
  }
@@ -489,6 +492,15 @@ impl ClusterClientBuilder {
489
492
  self
490
493
  }
491
494
 
495
+ /// Sets the database ID for the new ClusterClient.
496
+ ///
497
+ /// Note: Database selection in cluster mode requires server support for multiple databases.
498
+ /// Most cluster configurations only support database 0.
499
+ pub fn database_id(mut self, database_id: i64) -> ClusterClientBuilder {
500
+ self.builder_params.database_id = database_id;
501
+ self
502
+ }
503
+
492
504
  /// Use `build()`.
493
505
  #[deprecated(since = "0.22.0", note = "Use build()")]
494
506
  pub fn open(self) -> RedisResult<ClusterClient> {
@@ -545,8 +545,8 @@ impl ResponsePolicy {
545
545
  | b"CLIENT SETINFO" | b"CONFIG SET" | b"CONFIG RESETSTAT" | b"CONFIG REWRITE"
546
546
  | b"FLUSHALL" | b"FLUSHDB" | b"FUNCTION DELETE" | b"FUNCTION FLUSH"
547
547
  | b"FUNCTION LOAD" | b"FUNCTION RESTORE" | b"MEMORY PURGE" | b"MSET" | b"JSON.MSET"
548
- | b"PING" | b"SCRIPT FLUSH" | b"SCRIPT LOAD" | b"SLOWLOG RESET" | b"UNWATCH"
549
- | b"WATCH" => Some(ResponsePolicy::AllSucceeded),
548
+ | b"PING" | b"SCRIPT FLUSH" | b"SCRIPT LOAD" | b"SELECT" | b"SLOWLOG RESET"
549
+ | b"UNWATCH" | b"WATCH" => Some(ResponsePolicy::AllSucceeded),
550
550
 
551
551
  b"KEYS"
552
552
  | b"FT._ALIASLIST"
@@ -601,6 +601,7 @@ fn base_routing(cmd: &[u8]) -> RouteBy {
601
601
  | b"ACL SAVE"
602
602
  | b"CLIENT SETNAME"
603
603
  | b"CLIENT SETINFO"
604
+ | b"SELECT"
604
605
  | b"SLOWLOG GET"
605
606
  | b"SLOWLOG LEN"
606
607
  | b"SLOWLOG RESET"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "valkey-glide"
3
- version = "2.1.0-rc2"
3
+ version = "2.1.0-rc4"
4
4
  description = "Valkey GLIDE Async client. Supports Valkey and Redis OSS."
5
5
  requires-python = ">=3.9"
6
6
  dependencies = [
@@ -166,6 +166,28 @@ class StandaloneCommands(CoreCommands):
166
166
  """
167
167
  Change the currently selected database.
168
168
 
169
+ **WARNING**: This command is NOT RECOMMENDED for production use.
170
+ Upon reconnection, the client will revert to the database_id specified
171
+ in the client configuration (default: 0), NOT the database selected
172
+ via this command.
173
+
174
+ **RECOMMENDED APPROACH**: Use the database_id parameter in client
175
+ configuration instead:
176
+
177
+ ```python
178
+ client = await GlideClient.create_client(
179
+ GlideClientConfiguration(
180
+ addresses=[NodeAddress("localhost", 6379)],
181
+ database_id=5 # Recommended: persists across reconnections
182
+ )
183
+ )
184
+ ```
185
+
186
+ **RECONNECTION BEHAVIOR**: After any reconnection (due to network issues,
187
+ timeouts, etc.), the client will automatically revert to the database_id
188
+ specified during client creation, losing any database selection made via
189
+ this SELECT command.
190
+
169
191
  See [valkey.io](https://valkey.io/commands/select/) for details.
170
192
 
171
193
  Args: