Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
3bc119c1
Commit
3bc119c1
authored
May 02, 2014
by
antirez
Browse files
Cluster: Tcl cluster client: handle MOVED/ASK.
parent
fcd2065f
Changes
1
Hide whitespace changes
Inline
Side-by-side
tests/support/cluster.tcl
View file @
3bc119c1
...
...
@@ -166,12 +166,31 @@ proc ::redis_cluster::__dispatch__ {id method args} {
}
# Execute the command in the node we think is the slot owner.
set node
[
dict get $::redis_cluster::nodes
(
$id
)
$node_addr
]
set link
[
dict get $node link
]
if
{[
catch
{
$link
$method
{*}
$args
}
e
]}
{
# TODO: trap redirection error
set retry 10
while
{[
incr retry -1
]}
{
if
{
$retry
< 5
}
{
after 100
}
set node
[
dict get $::redis_cluster::nodes
(
$id
)
$node_addr
]
set link
[
dict get $node link
]
if
{[
catch
{
$link
$method
{*}
$args
}
e
]}
{
if
{[
string range $e 0 4
]
eq
{
MOVED
}}
{
# MOVED redirection.
::redis_cluster::__method__refresh_nodes_map $id
set node_addr
[
dict get $::redis_cluster::slots
(
$id
)
$slot
]
continue
}
elseif
{[
string range $e 0 2
]
eq
{
ASK
}}
{
# ASK redirection.
set node_addr
[
lindex $e 2
]
continue
}
else
{
# Non redirecting error.
error $e $::errorInfo $::errorCode
}
}
else
{
# OK query went fine
return $e
}
}
return $e
error
"Too many redirections or failures contacting Redis Cluster."
}
else
{
uplevel 1
[
list ::redis_cluster::__method__$method $id
]
$args
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment