| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|\ |
|
| |
| |
| | |
Co-authored-by: dvora-h <67596500+dvora-h@users.noreply.github.com>
|
| | |
|
| | |
|
| |
| |
| |
| | |
compatibility
|
| |
| |
| |
| | |
connection_error_retry_attempts from RedisCluster, default retry changed to no retries
|
| | |
|
| | |
|
| | |
|
| | |
|
|/
|
|
| |
the cluster loop, fixed "cannot pickle '_thread.lock' object" bug, added client's side failover handling improvements
|
|
|
|
|
|
|
|
|
|
|
| |
* Remove buffering from asyncio SocketBuffer and rely on on the underlying StreamReader
* Skip the use of SocketBuffer in PythonParser
* Remove SocketBuffer altogether
* Code cleanup
* Fix unittest mocking when SocketBuffer is gone
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
`PubSub.get_message()` to wait forever (#2295)
* Avoid an extra "can_read" call and use timeout directly.
* Remove low-level read timeouts from the Parser, now handled in the Connection
* Allow pubsub.get_message(time=None) to block.
* update Changes
* increase test timeout for robustness
* expand with statement to avoid invoking null context managers.
remove nullcontext
* Remove unused import
|
|
|
|
|
|
|
|
| |
* make can_read() destructive for simplicity, and rename the method.
Remove timeout argument, always timeout immediately.
* don't use can_read in pubsub
* connection.connect() now has its own retry, don't need it inside a retry loop
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Don't wait for disconnect() when handling errors.
This can result in other errors such as timeouts.
* add CHANGES
* Update redis/asyncio/connection.py
Co-authored-by: Aarni Koskela <akx@iki.fi>
* await a task to try to diagnose unittest failures in CI
Co-authored-by: Aarni Koskela <akx@iki.fi>
|
|
|
|
|
|
|
| |
* Add failing unittests for passing BaseException through
* Resolve failing unittest
* Remove redundant checks for asyncio.CancelledError
|
|
|
|
|
| |
* Remove async lock in asyncio.Connection.read_response
* Skip concurrent-commands test on non-pooled connections
|
| |
|
|
|
|
|
| |
* Replace `ensure_future` with `create_task`
* linters
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* optimistic default info on test sessionstart.
Makes test discovery work, even without a redis connection.
* Add unittests verifying that (non-async) PubSub will automatically reconnect
* Add tests for asyncio pubsub subsciription auto-reconnect
* automatically connect for blocking reads (asyncio)
* fix automatic connect on blocking pubsub read (non-async)
* lint & format
* Perform `connect()` call in PubSub code rather than `read_response`.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* async_cluster: fix max_connections/ssl & improve args
- set proper connection_class if ssl = True
- pass max_connections/connection_class to ClusterNode
- recreate startup_nodes to properly initialize
- pass parser_class to Connection instead of changing it in on_connect
- only pass redis_connect_func if read_from_replicas = True
- add connection_error_retry_attempts parameter
- skip is_connected check in acquire_connection as it is already checked in send_packed_command
BREAKING:
- RedisCluster args except host & port are kw-only now
- RedisCluster will no longer accept unknown arguments
- RedisCluster will no longer accept url as an argument. Use RedisCluster.from_url
- RedisCluster.require_full_coverage defaults to True
- ClusterNode args except host, port, & server_type are kw-only now
* async_cluster: remove kw-only requirement from client
Co-authored-by: dvora-h <67596500+dvora-h@users.noreply.github.com>
|
|
|
| |
- each pipeline should create separate stacks for each node
|
|
|
| |
Fixes #2237
|
| |
|
| |
|
|
|
|
|
|
| |
- allow passing target_nodes to pipeline commands
- move READ_COMMANDS to commands/cluster to avoid import cycle
- add types to list_or_args
|
|
|
|
|
|
|
|
|
| |
* Avoid mutating a global retry_on_error list
* Make retries config consistent in sync and async
* Fix async retries
* Add new TestConnectionConstructorWithRetry tests
|
|
|
| |
- close startup_nodes too during client.close(), in case they are different
|
| |
|
|
|
|
| |
- move response_callbacks kwarg inside __init__ to hide it from docs
- use :member-order: bysource to group similar commands together
|
|
|
|
|
|
|
|
|
|
| |
- return true from execute_pipeline if there are any errors
- use todo list to speedup retries
- store initialisation node in CommandsParser object
- add sync context manager for pipeline
- use if/else instead of try/except
- make command a function argument in _determine_nodes & _determine_slot
- add async cluster pipeline benchmark script
|
|
|
| |
Co-authored-by: dvora-h <67596500+dvora-h@users.noreply.github.com>
|
| |
|
|
|
|
|
|
|
| |
* async_cluster: add/update typing
* async_cluster: update cleanup_kwargs with kwargs from async Connection
* async_cluster: properly remove old nodes
|
|
|
|
|
|
|
|
|
| |
* set default response_callbacks to redis.asyncio.cluster.ClusterNode
* add test case for ClusterNode class
* fix lint error
* merge test case into `test_startup_nodes`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Copy Cluster Client, Commands, Commands Parser, Tests for asyncio
* Async Cluster Tests: Async/Await
* Add Async RedisCluster
* cluster: use ERRORS_ALLOW_RETRY from self.__class__
* async_cluster: rework redis_connection, initialize, & close
- move redis_connection from NodesManager to ClusterNode & handle all related logic in ClusterNode class
- use Locks while initializing or closing
- in case of error, close connections instead of instantly reinitializing
- create ResourceWarning instead of manually deleting client object
- use asyncio.gather to run commands/initialize/close in parallel
- inline single use functions
- fix test_acl_log for py3.6
* async_cluster: add types
* async_cluster: add docs
* docs: update sphinx & add sphinx_autodoc_typehints
* async_cluster: move TargetNodesT to cluster module
* async_cluster/commands: inherit commands from sync class if possible
* async_cluster: add benchmark script with aredis & aioredis-cluster
* async_cluster: remove logging
* async_cluster: inline functions
* async_cluster: manage Connection instead of Redis Client
* async_cluster/commands: optimize parser
* async_cluster: use ensure_future & generators for gather
* async_conn: optimize
* async_cluster: optimize determine_slot
* async_cluster: optimize determine_nodes
* async_cluster/parser: optimize _get_moveable_keys
* async_cluster: inlined check_slots_coverage
* async_cluster: update docstrings
* async_cluster: add concurrent test & use read_response/_update_moved_slots without lock
Co-authored-by: Chayim <chayim@users.noreply.github.com>
|
|
|
|
|
|
|
| |
* Replace OSError exceptions from `can_read` with `redis.ConnectionError`
* Fix formatting
* Revert unintended formatting change
|
| |
|
|
|
|
|
| |
NoReturn should be used only when the function never returns. In this case, the awaitable returns None if releasing the lock succeeds, so `Awaitable[None]` is right.
Noticed this while reviewing python/typeshed#7676
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Add async supoort for SEARCH commands
* linters
* linters
* linters
* linters
* linters
|
|
|
|
|
|
|
| |
* Support negative `retries` value
* Add unit test
* Add unittest for blocking api
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* test async commands
* test async json commands
* test async timeseries commands
* test async bloom commands
* linters
* linters
* skip on cluster
* linters
* linters
* isort
* flynt
* remove print
|
|
|
|
|
|
|
| |
* fix asynic/client.py's import
Lock and Retry should be from redis.asyncio
* for code linters
|
|
|
|
|
| |
* always clear reference to reader/writer
* add #2065 to changes
|
|
|
| |
Co-authored-by: dvora-h <67596500+dvora-h@users.noreply.github.com>
|
|
|
|
|
|
|
|
|
| |
* ssl string cert
* fix async test
* linters
* change test name
|
| |
|