- 11 Feb, 2014 2 commits
-
-
antirez authored
The actual goal of the function was to get the max configEpoch found in the cluster, so make it general by removing the assignment of the max epoch to currentEpoch that is useful only at startup.
-
antirez authored
Removed a stale conditional preventing the configEpoch from incrementing after the import in certain conditions. Since the master got a new slot it should always claim a new configuration.
-
- 10 Feb, 2014 22 commits
-
-
antirez authored
The node receiving the hash slot needs to have a version that wins over the other versions in order to force the ownership of the slot. However the current code is far from perfect since a failover can happen during the manual resharding. The fix is a work in progress but the bottom line is that the new version must either be voted as usually, set by redis-trib manually after it makes sure can't be used by other nodes, or reserved configEpochs could be used for manual operations (for example odd versions could be never used by slaves and are always used by CLUSTER SETSLOT NODE).
-
antirez authored
During slots migration redis-trib can send a number of SETSLOT commands. Fsyncing every time is a bit too much in production as verified empirically. To make sure configs are fsynced on all nodes after a resharding redis-trib may send something like CLUSTER CONFSYNC. In this case fsyncs were not providing too much value since anyway processes can crash in the middle of the resharding of an hash slot, and redis-trib should be able to recover from this condition anyway.
-
antirez authored
If the slot is manually assigned to another node, clear the migrating status regardless of the fact it was previously assigned to us or not, as long as we no longer have keys for this slot. This avoid a race during slots migration that may leave the slot in migrating status in the source node, since it received an update message from the destination node that is already claiming the slot. This way we are sure that redis-trib at the end of the slot migration is always able to close the slot correctly.
-
antirez authored
-
antirez authored
The case is the trivial one a single node claiming the slot as migrating, without nodes claiming it as importing.
-
antirez authored
-
antirez authored
There is no way we can update the slave's node->slaveof pointer if we don't know the master (no node with such an ID in our tables).
-
antirez authored
-
antirez authored
-
antirez authored
-
antirez authored
-
antirez authored
Masters without slots don't participate to the cluster but just do redirections, no need to take them in FAIL state if they are back reachable.
-
antirez authored
-
antirez authored
-
antirez authored
-
antirez authored
PUBLISH both published messages via Cluster bus and replication when cluster was enabled, resulting in duplicated message in the slave.
-
antirez authored
Sounds better after all.
-
antirez authored
-
antirez authored
-
antirez authored
-
antirez authored
-
antirez authored
-
- 07 Feb, 2014 3 commits
-
-
antirez authored
-
antirez authored
Currently this is marginally useful, only to make sure two keys are in the same hash slot when the cluster is stable (no rehashing in progress). In the future it is possible that support will be added to run mutli-keys operations with keys in the same hash slot.
-
antirez authored
-
- 05 Feb, 2014 6 commits
-
-
antirez authored
Sometime an osx master with a Linux server over a slow link caused a strange error where osx called the writable function for the socket but actually apparently there was no room in the socket buffer to accept the write: write(2) call returned an EAGAIN error, that was not checked, so we considered write(2) == 0 always as a connection reset, which was unfortunate since the bulk transfer has to start again. Also more errors are logged with the WARNING level in the same code path now.
-
antirez authored
For manual failover we need a manual failover in progress, and that mf_can_start is true (master offset received and matched).
-
antirez authored
-
antirez authored
Otherwise it is always detected as a manual failover timed out.
-
antirez authored
When a slave requests masters vote for a manual failover, the REQUEST_AUTH message is flagged in a special way in order to force the masters to give the authorization even if the master is not marked as failing.
-
antirez authored
-
- 04 Feb, 2014 1 commit
-
-
antirez authored
The API is one of the bulding blocks of CLUSTER FAILOVER command that executes a manual failover in Redis Cluster. However exposed as a command that the user can call directly, it makes much simpler to upgrade a standalone Redis instance using a slave in a safer way. The commands works like that: CLIENT PAUSE <milliesconds> All the clients that are not slaves and not in MONITOR state are paused for the specified number of milliesconds. This means that slaves are normally served in the meantime. At the end of the specified amount of time all the clients are unblocked and will continue operations normally. This command has no effects on the population of the slow log, since clients are not blocked in the middle of operations but only when there is to process new data. Note that while the clients are unblocked, still new commands are accepted and queued in the client buffer, so clients will likely not block while writing to the server while the pause is active.
-
- 03 Feb, 2014 5 commits
-
-
antirez authored
Keys expiring in the middle of the execution of Lua scripts are to create inconsistencies in masters and / or AOF files. See the following example: if redis.call("exists",KEYS[1]) == 1 then redis.call("incr","mycounter") end if redis.call("exists",KEYS[1]) == 1 then return redis.call("incr","mycounter") end The script executes two times the same *if key exists then incrementcounter* logic. However the two executions will work differently in the master and the slaves, provided some unlucky timing happens. In the master the first time the key may still exist, while the second time the key may no longer exist. This will result in the key incremented just one time. However as a side effect the master will generate a synthetic `DEL` command in the replication channel in order to force the slaves to expire the key (given that key expiration is master-driven). When the same script will run in the slave, the key will no longer be there, so the script will not increment the key. The key idea used to implement the expire-at-first-lookup semantics was provided by Marc Gravell.
-
antirez authored
-
antirez authored
server.lua_time_start is expressed in milliseconds. Use mstime_t instead of long long, and populate it with mstime() instead of ustime()/1000. Functionally identical but more natural.
-
Salvatore Sanfilippo authored
update copyright year
-
PatrickJS authored
-
- 31 Jan, 2014 1 commit
-
-
antirez authored
The Redis test uses a server-clients model in order to parallelize the execution of different tests. However in recent versions of osx not setting the channel to a binary encoding caused issues even if AFAIK no binary data is really sent via this channel. However now the channels are deliberately set to a binary encoding and this solves the issue. The exact issue was the test not terminating and giving the impression of running forever, since test clients or servers were unable to exchange the messages to continue.
-