Commit Graph

260 Commits

Author SHA1 Message Date
Vladimir Mihailenco f7094544a5 Process pipeline commands concurrently 2018-09-11 13:30:51 +03:00
zhanyr a9e329d3bc execute commans concurrently on each cluster node in method `defaultProcessPipeline` (#861)
Execute commands concurrently on each cluster node
2018-09-11 12:37:57 +03:00
Vladimir Mihailenco 0197108027 Use bufio.Writer 2018-08-17 14:14:02 +03:00
Vladimir Mihailenco 5146fb0c57 Cleanup buffers manipulation 2018-08-15 11:53:15 +03:00
Vladimir Mihailenco 7c26d1ceb6 Pass cn.Rd where possible 2018-08-15 09:38:58 +03:00
Vladimir Mihailenco ef3e0e9827
Merge pull request #839 from go-redis/fix/cluster-loopback-fix
Fix cluster loopback handling. Fixes #589
2018-08-15 08:52:04 +03:00
Vladimir Mihailenco 0d132966a4 Add missing options to UniversalOptions 2018-08-15 08:44:06 +03:00
Vladimir Mihailenco c1c2753ae8 Fix cluster loopback handling. Fixes #589 2018-08-14 15:57:17 +03:00
Vladimir Mihailenco d5fc79d4ee Add Client.Do 2018-08-12 11:20:24 +03:00
Vladimir Mihailenco 651e9fef1d Add MaxConnAge 2018-08-12 10:25:16 +03:00
Vladimir Mihailenco b576fe91a1 Use single read and write buffer where possible 2018-08-04 13:09:22 +03:00
Vladimir Mihailenco ea9da7c2e8 Rework ReceiveMessage 2018-07-23 17:10:58 +03:00
Vladimir Mihailenco 2559f32464 cluster: optimize newClusterState 2018-07-22 14:17:42 +03:00
Vladimir Mihailenco b92dacbfa7 Conn timeout should be higher than read timeout 2018-07-22 08:49:48 +03:00
Vladimir Mihailenco ee41b90923 Improve docs 2018-07-18 15:28:51 +03:00
Vladimir Mihailenco 1f59be5cc0 cluster: add manual setup 2018-06-29 10:46:12 +03:00
Vladimir Mihailenco bdf8f06904 cluster: preload commands info 2018-06-18 12:55:26 +03:00
Puneeth Gadangi 0269263441 Use cmdSlotAndNode() to route read-only ClusterClient pipeline commands 2018-05-31 17:04:36 -07:00
Vladimir Mihailenco 4237a34c31 cluster: fix origin addr check 2018-05-31 10:25:40 +03:00
Vladimir Mihailenco faf5666fbd Cleanup pool 2018-05-29 17:29:47 +03:00
Nathan Ziebart d790448589 reset cmdable.process when copying cluster client 2018-05-23 17:30:50 -07:00
Jeffrey Hutchins 471caa3d91 cluster: reload state for ForEach functions and every 1 minute 2018-05-21 16:40:06 +03:00
Vladimir Mihailenco 5c742fff78 cluster: cleanup tests 2018-05-21 16:17:57 +03:00
Vladimir Mihailenco 18b2e30835 Cleanup cmds info 2018-05-17 15:21:51 +03:00
Vladimir Mihailenco 092971361b cluster: retry same node on retryable error 2018-05-17 15:02:35 +03:00
Vladimir Mihailenco 34facee367 Add more race tests 2018-05-17 14:55:00 +03:00
Vadim Liman 09b9a99666 Add TLS configuration support for Universal Client 2018-05-11 09:46:09 +03:00
superkinglabs 877867d284 Remove costly 'appendIfNotExists' and 'remove' call from PubSub (#743)
* remove costly 'appendIfNotExists' and 'remove' call from pubsub
2018-03-14 12:42:51 +02:00
Gabriel Aszalos 731dd72b84
{cluster,ring}: add support for context to ClusterClient and Ring 2018-03-07 14:41:18 +01:00
Vladimir Mihailenco 4fe9f93940 Re-order atomic field to please race detector 2018-03-07 14:38:18 +02:00
Vladimir Mihailenco d6cb688ea7 Cleanup context implementation 2018-03-07 13:50:14 +02:00
Vladimir Mihailenco a64d3e1ef1 Fix build on 32bit arch 2018-03-07 12:41:11 +02:00
T. Thyer 063393987a Add option to balance load between master node and replica nodes (#729)
* Add option to balance load between master node and replica nodes
2018-03-07 12:23:38 +02:00
Vladimir Mihailenco 5e72be1cbf Extract clusterStateHolder 2018-03-07 12:09:45 +02:00
Vladimir Mihailenco f13fc5381c Extract commands info cache 2018-03-07 12:09:45 +02:00
Vladimir Mihailenco 68362cfda1 Fix doc 2018-02-27 16:11:25 +02:00
Vladimir Mihailenco cac7aa8c36 Reduce ClusterOptions.MaxRedirects from 16 to 8 2018-02-27 16:10:17 +02:00
Vladimir Mihailenco cc47cf2439 Use fresh cluster state after sleeping 2018-02-27 16:10:17 +02:00
Vladimir Mihailenco 9df09066e2 Store all created cluster nodes in allNodes 2018-02-27 14:48:59 +02:00
Vladimir Mihailenco fa7f64f7f2 Rework retrying 2018-02-16 13:40:23 +02:00
Vladimir Mihailenco 1a4d34448d Update cluster node latency asynchronously 2018-02-13 11:42:06 +02:00
yifei.huang 8b4fa6d443 Add WrapProcessPipeline 2018-01-30 16:47:29 +02:00
Vladimir Mihailenco a84876237b Retry if node is closed; close nodes with delay 2018-01-17 13:00:11 +02:00
Vladimir Mihailenco 3de5605ab2 Pick random node when command does not have keys 2017-12-28 16:47:08 +02:00
Vladimir Mihailenco 7cb146a31b Increase read timeout for blocking commands and don't retry such commands 2017-09-29 16:12:43 +03:00
Vladimir Mihailenco 2a5293c99c Export Cmder.Args 2017-09-26 11:29:22 +03:00
Vladimir Mihailenco f9307ab2fe Add TxPipeline to Cmdable 2017-09-25 11:48:44 +03:00
Vladimir Mihailenco bc5f9a6878 Replace PoolStats.Requests with PoolStats.Misses 2017-09-22 12:28:08 +03:00
Vladimir Mihailenco 5294b5dae1 Add PoolStats.StaleConns and enable logging by default 2017-09-11 09:10:17 +03:00
Vladimir Mihailenco 1173a9589f Cleanup code 2017-09-11 08:58:56 +03:00
Vladimir Mihailenco dbd2c99ba9 Rework pipeline retrying 2017-09-01 14:56:00 +03:00
Vladimir Mihailenco 63e3bc58c7 Retry cluster down errors 2017-08-15 10:12:43 +03:00
wenjun.yan 4e1d2a01db Make readOnly a private field so that only cluster client can use it 2017-07-25 10:35:41 +09:00
Vladimir Mihailenco 3ddda73a05 Close connections to unused nodes 2017-07-11 11:19:40 +03:00
Vladimir Mihailenco 6060f097e1 Add PubSub support to Cluster client 2017-07-09 10:07:20 +03:00
Vladimir Mihailenco 9dbcc5ae80 Vendor syncutil.Once 2017-07-01 12:51:46 +03:00
Dimitrij Denissenko 94ea195dc1 Use node address instead of relying on loopback reported by redis 2017-07-01 12:31:41 +03:00
Vladimir Mihailenco 5132e15c93 Fix cmd info race. Fixes #578 2017-06-17 12:34:39 +03:00
Vladimir Mihailenco 4a3a300665 Add Options.OnConnect 2017-05-26 14:56:18 +03:00
Vladimir Mihailenco 7e8890b644 Embed Cmdable into StatefulCmdable 2017-05-25 13:38:04 +03:00
Vladimir Mihailenco 6307b95039 Export Cmder.Name 2017-05-09 12:45:30 +03:00
Felipe Cavalcanti eeb4d09198 rename Pipelineable to Pipeliner 2017-05-02 12:00:53 -03:00
Felipe Cavalcanti 6fca4d5ad0 pipeline now has its own interface "Pipelineable" 2017-05-01 12:42:58 -03:00
Vladimir Mihailenco 9ebd89772a Rework PubSub conn management 2017-04-24 13:41:03 +03:00
Yuval Pavel Zholkover 8c21ec0006 Fix typo in ClusterClient.TxPipelined()
It should be using ClusterClient.TxPipeline() and not ClusterClient.Pipeline().
2017-04-21 15:50:32 +03:00
Poloskin Valentin Georgievich 80673992e6 gofmt 2017-04-02 17:10:47 +03:00
Vladimir Mihailenco ef95182d29 Code cleanup 2017-03-31 15:11:11 +03:00
Vladimir Mihailenco 2cf5af9928 Merge branch 'v5' 2017-03-20 12:23:42 +02:00
Vladimir Mihailenco ab1e8de9ea Add ability to read client options 2017-03-20 12:15:21 +02:00
Vladimir Mihailenco f33571c93c Merge branch 'v5' 2017-03-04 13:38:55 +02:00
Vladimir Mihailenco 15998effbe Don't panic if cluster state is nil. 2017-03-04 13:27:34 +02:00
Dimitrij Denissenko 30412d7652 Added support for universal client 2017-02-20 10:46:22 +00:00
Vladimir Mihailenco 8040d63c4f Remove gopkg.in 2017-02-19 09:49:21 +02:00
Vladimir Mihailenco 69554c0ec5 Reduce number of allocations. 2017-01-13 13:39:59 +02:00
Vladimir Mihailenco cd7431c40a Fix cluster pipeline tests. 2016-12-20 17:59:38 +02:00
Vladimir Mihailenco b49d47eb4d Merge pull request #449 from go-redis/fix/use-first-slot-when-there-are-no-keys
Use first slot/shard when key is not defined.
2016-12-16 15:38:35 +02:00
Vladimir Mihailenco 6cd7a09b22 Use first slot/shard when key is not defined. 2016-12-16 14:30:23 +02:00
Vladimir Mihailenco 4ba635e15f Add func doc. 2016-12-16 14:19:53 +02:00
Vladimir Mihailenco 152cc1ee34 Merge pull request #444 from go-redis/feature/tx-pipeline
Add TxPipeline.
2016-12-16 11:40:46 +02:00
Vladimir Mihailenco 865d501d07 Add TxPipeline. 2016-12-16 11:25:58 +02:00
Vladimir Mihailenco 34122bffa8 Check that clients implement scripter interface. 2016-12-14 12:12:50 +02:00
Vladimir Mihailenco c7dfbb54af Fix nil ptr in case when all nodes are unavailable. 2016-12-12 17:30:08 +02:00
Vladimir Mihailenco 420337dc4a Simplify cmdInfo check. 2016-12-09 15:52:36 +02:00
zezhou.yu fb584d25db
fix cmdInfo nil pointer panic 2016-12-08 01:34:22 +08:00
Vladimir Mihailenco b4efc45f1c Set read/write timeouts more consistently. 2016-12-03 17:30:13 +02:00
Vladimir Mihailenco 83208a1d9b Use consistent cluster state when executing pipeline. 2016-11-08 11:46:44 +02:00
Vladimir Mihailenco 8558a92fa4 Retry multiple commands more conservatively. 2016-10-13 13:56:24 +03:00
yyoshiki41 236c021d4c simplify if condition 2016-10-13 17:27:43 +09:00
Vladimir Mihailenco 2c5b239ecb Remove internal errors package that clashes with std lib. 2016-10-09 11:44:31 +00:00
Vladimir Mihailenco 639950777c More cluster tests. 2016-10-09 11:27:38 +00:00
Vladimir Mihailenco f5245efa73 Prepare v5 release. 2016-10-09 10:56:53 +00:00
Vladimir Mihailenco eeba1d7db1 Select random node when there are no keys. 2016-10-09 10:30:45 +00:00
Vladimir Mihailenco fcf53a2a78 Better cluster loading handling. 2016-10-09 08:18:57 +00:00
lijunfei 3cc9b99fb8 if readonly, read from master when slave is loading 2016-10-09 11:30:01 +08:00
yyoshiki41 84ae986659 Remove Addr field from clusterNode 2016-10-06 05:24:28 +09:00
Vladimir Mihailenco 7cbee9d337 Enable reaper on ClusterClient and add tests. 2016-10-02 12:44:01 +00:00
Vladimir Mihailenco e57ac63b6e Simplify resubscribing in PubSub. 2016-09-29 12:33:47 +00:00
Vladimir Mihailenco bb84d84aea Merge pull request #375 from go-redis/fix/cluster-without-nodes
Don't panic when cluster does not have valid nodes.
2016-09-27 12:38:15 +03:00
Vladimir Mihailenco 0b706418d9 Add Pipeline to Cmdable. 2016-09-27 09:29:21 +00:00
evalphobia 8f5aeb7065 Disable idle checks for cluster connection 2016-09-27 14:13:33 +09:00
Vladimir Mihailenco c0b792a059 Don't panic when cluster does not have valid nodes. 2016-09-23 11:52:19 +00:00
Vladimir Mihailenco 261cf7ae70 Fix Del command case. 2016-07-08 09:30:38 +00:00
Dimitrij Denissenko 7d856c5595 Make proto/parser an internal package 2016-07-02 13:52:10 +01:00
Vladimir Mihailenco 4761c24218 Add ForEachMaster API. 2016-06-17 12:09:38 +00:00
Vladimir Mihailenco 4e64d5aa6e Run cluster tests on Client with RouteByLatency option. 2016-06-06 09:43:29 +00:00
Vladimir Mihailenco 079b7ce393 Rework Options initialisation. 2016-06-05 11:10:30 +00:00
Vladimir Mihailenco ac162eb843 Move Select to stateful commands and make it available only via Pipeline and Tx. 2016-06-05 09:45:39 +00:00
Joris Minjat 487feebef1 Add latency based routing to Redis Cluster client. 2016-05-23 12:49:55 +03:00
Vladimir Mihailenco 092698ecd3 Tweak transaction API. 2016-05-02 15:54:15 +03:00
Vladimir Mihailenco 31abb18d9a Move logger to internal package. 2016-04-09 14:52:01 +03:00
Vladimir Mihailenco 38d30a4bab Use redis.v4 that is in alpha/beta state. 2016-04-09 13:27:16 +03:00
Vladimir Mihailenco 96650c0e91 Merge pull request #302 from go-redis/fix/export-cluster-node-id
Expose cluster node id in ClusterSlots.
2016-04-09 13:16:55 +03:00
Vladimir Mihailenco ae217e0444 Expose cluster node id in ClusterSlots. 2016-04-09 12:52:43 +03:00
Vladimir Mihailenco d79074eadb Remove PMessage. 2016-04-09 11:51:13 +03:00
Vladimir Mihailenco 1fbb1098f2 Merge branch 'v4' of github.com:go-redis/redis into v4 2016-04-09 11:41:01 +03:00
Vladimir Mihailenco 7a03514d7f Rename Multi to Tx to better reflect the purpose. Fixes #194. 2016-04-09 11:23:58 +03:00
Vladimir Mihailenco 3b051d2374 Reuse single Pipeline type in Client, ClusterClient and Ring. 2016-04-09 10:47:15 +03:00
Vladimir Mihailenco 04b6c9d3ad Improve comment. 2016-04-06 13:13:03 +03:00
Vladimir Mihailenco 30ce5ebd57 Cleanup error handling code. 2016-03-19 16:33:14 +02:00
Vladimir Mihailenco 6e1aef39ea Faster and simpler pool. 2016-03-19 11:49:13 +02:00
Vladimir Mihailenco 46790aa060 Add race test for big vals. Copy connection to avoid race with PubSub. 2016-03-14 16:34:15 +02:00
Vladimir Mihailenco ebf51e1a1b Add prefix to package logger. 2016-02-06 12:16:09 +02:00
Francisco Souza d3ee281748 Declare and use a package-level Logger
This allow users of the API to override the Logger. Fix #250.
2016-02-03 12:30:39 -05:00
Vladimir Mihailenco 6c7b789b3a Tweak pool stats. 2016-01-25 15:57:09 +02:00
Anatolii Mihailenco f7a4bd5023 Add pool instrumentation. 2016-01-19 20:08:22 +02:00
Anatolii Mihailenco 0bf3759a6d Create hashtag package. 2015-12-31 16:25:20 +02:00
Vladimir Mihailenco 36487d8462 Stabilize build. 2015-12-22 12:08:35 +02:00
Vladimir Mihailenco 9079a66323 cluster: add Watch support. 2015-12-16 16:15:01 +02:00
Vladimir Mihailenco fb44c891dd Fix sporadic pool timeouts with IdleTimeout != 0. Fixes #195. 2015-11-27 13:52:35 +02:00
Vladimir Mihailenco c809246d8b Clarify thread safety. Fixes #166. 2015-09-12 09:36:03 +03:00
Vladimir Mihailenco 1608a33e55 ring: fix key hashing in Ring pipeline. 2015-06-24 15:37:41 +03:00
Vladimir Mihailenco 46f49a17a5 Add Redis Ring. 2015-06-03 14:25:52 +03:00
Vladimir Mihailenco b70f364fcc Merge pull request #99 from go-redis/fix/release-reloading-with-delay
cluster: release reloading with delay.
2015-05-26 12:08:48 +03:00
Vladimir Mihailenco 40b429df49 Reduce number of various options structs. Slightly reword comments. 2015-05-23 17:56:18 +03:00
Vladimir Mihailenco f6ef0fd342 Add basic example how to use Redis Cluster. Unify comments. 2015-05-23 16:35:30 +03:00
Vladimir Mihailenco 40bad36dfb cluster: don't reload slots if address already changed. 2015-05-14 16:37:12 +03:00
Vladimir Mihailenco 84cd16e214 cluster: user ClusterInfo instead of Ping to find live node. 2015-05-13 12:38:34 +03:00
Vladimir Mihailenco 7f1eb05ba8 cluster: don't reset command when there no attempts left. 2015-05-10 16:01:38 +03:00
Vladimir Mihailenco 2507be6cd2 Merge pull request #96 from go-redis/fix/reload-slots-in-background
Reload slots in background goroutine.
2015-05-05 12:44:43 +03:00
Vladimir Mihailenco 121cfc5792 Remove deprecated funcs. 2015-05-02 16:22:06 +03:00
Vladimir Mihailenco 84dc1f963e Reload slots in background goroutine. 2015-05-01 14:22:49 +03:00
Vladimir Mihailenco 7da995891e Lower ticker duration. 2015-05-01 13:24:24 +03:00
Vladimir Mihailenco cc0ee10019 Fix deadlock. Stop time.Ticker. Add a test that closed client is not deadlocked. 2015-05-01 11:01:01 +03:00
Vladimir Mihailenco d00fb6ead9 Implement Close and fix reaper goroutine leak. 2015-05-01 09:37:59 +03:00
Vladimir Mihailenco 46527c872d cluster: don't reset clients when slots are changed. 2015-04-28 18:17:33 +03:00
Vladimir Mihailenco d3fb658fef Fix pool waiting for connection that was removed. 2015-04-17 15:42:35 +03:00
Dimitrij Denissenko 51f0a7b0a7 Ensure slots are initialised. Return non-failing connections to pool 2015-04-13 14:33:44 +01:00
Vladimir Mihailenco 99fe9114b1 Add ClusterPipeline. 2015-04-13 09:31:30 +03:00
Vladimir Mihailenco fc0565a85b Remove getAddrs. 2015-04-08 12:28:50 +03:00
Vladimir Mihailenco 52a9dd52b7 Store addresses of replicas again. 2015-04-08 12:28:21 +03:00