- 31 7月, 2012 2 次提交
-
-
由 antirez 提交于
-
由 antirez 提交于
When we are a Leader Sentinel in wait-start state, starting with this commit the failover is aborted if the master returns online. This improves the way we handle a notable case of net split, that is the split between Sentinels and Redis servers, that will be a very common case of split becase Sentinels will often be installed in the client's network and servers can be in a differnt arm of the network. When Sentinels and Redis servers are isolated the master is in ODOWN condition since the Sentinels can agree about this state, however the failover does not start since there are no good slaves to promote (in this specific case all the slaves are unreachable). However when the split is resolved, Sentinels may sense the slave back a moment before they sense the master is back, so the failover may start without a good reason (since the master is actually working too). Now this condition is reversible, so the failover will be aborted immediately after if the master is detected to be working again, that is, not in SDOWN nor in ODOWN condition.
-
- 29 7月, 2012 3 次提交
-
-
由 antirez 提交于
-
由 antirez 提交于
We no longer use a vanilla fork+execve but take a queue of jobs of scripts to execute, with retry on error, timeouts, and so forth. Currently this is used only for notifications but soon the ability to also call clients reconfiguration scripts will be added.
-
由 Jeremy Zawodny 提交于
improve English a bit. :-)
-
- 28 7月, 2012 2 次提交
-
-
由 Salvatore Sanfilippo 提交于
Include sys/wait.h to avoid compiler warning
-
由 Jan-Erik Rediger 提交于
gcc warned about an implicit declaration of function 'wait3'. Including this header fixes this.
-
- 27 7月, 2012 2 次提交
-
-
由 Salvatore Sanfilippo 提交于
Truncate short write from the AOF
-
由 Salvatore Sanfilippo 提交于
New in INFO: aof_last_bgrewrite_status
-
- 26 7月, 2012 1 次提交
-
-
由 antirez 提交于
-
- 25 7月, 2012 12 次提交
-
-
由 Salvatore Sanfilippo 提交于
comment fix
-
由 Jeremy Zawodny 提交于
improve English a bit. :-)
-
由 antirez 提交于
-
由 Salvatore Sanfilippo 提交于
Fix warning in redis.c for sentinel config load
-
由 Salvatore Sanfilippo 提交于
Some cleanup in sentinel.conf
-
由 mrb 提交于
-
由 mrb 提交于
-
由 antirez 提交于
The previous behavior of the state machine was to wait some time and retry the slave selection, but this is not robust enough against drastic changes in the conditions of the monitored instances. What we do now when the slave selection fails is to abort the failover and return back monitoring the master. If the ODOWN condition is still present a new failover will be triggered and so forth. This commit also refactors the code we use to abort a failover.
-
由 antirez 提交于
-
由 antirez 提交于
When we reset the master we should start with clean timestamps for ping replies otherwise we'll detect a spurious +sdown event, because on +master-switch event the previous master instance was probably in +sdown condition. Since we updated the address we should count time from scratch again. Also this commit makes sure to explicitly reset the count of pending commands, now we can do this because of the new way the hiredis link is closed.
-
由 antirez 提交于
-
由 antirez 提交于
We disconnect the Redis instances hiredis link in a more robust way now. Also we change the way we perform the redirection for the +switch-master event, that is not just an instance reset with an address change. Using the same system we now implement the +redirect-to-master event that is triggered by an instance that is configured to be master but found to be a slave at the first INFO reply. In that case we monitor the master instead, logging the incident as an event.
-
- 24 7月, 2012 2 次提交
-
-
由 antirez 提交于
We can't be sure the instance object still exists when the reply callback is called.
-
由 antirez 提交于
Sentinel observers detect failover checking if a slave attached to the monitored master turns into its replication state from slave to master. However while this change may in theory only happen after a SLAVEOF NO ONE command, in practie it is very easy to reboot a slave instance with a wrong configuration that turns it into a master, especially if it was a past master before a successfull failover. This commit changes the detection policy so that if an instance goes from slave to master, but at the same time the runid has changed, we sense a reboot, and in that case we don't detect a failover at all. This commit also introduces the "reboot" sentinel event, that is logged at "warning" level (so this will trigger an admin notification). The commit also fixes a problem in the disconnect handler that assumed that the instance object always existed, that is not the case. Now we no longer assume that redisAsyncFree() will call the disconnection handler before returning.
-
- 23 7月, 2012 3 次提交
-
-
由 antirez 提交于
-
由 antirez 提交于
-
由 antirez 提交于
This commit implements the first, beta quality implementation of Redis Sentinel, a distributed monitoring system for Redis with notification and automatic failover capabilities. More info at http://redis.io/topics/sentinel
-
- 22 7月, 2012 3 次提交
-
-
由 antirez 提交于
-
由 antirez 提交于
Redis loading data from disk, and a Redis slave disconnected from its master with serve-stale-data disabled, are two conditions where commands are normally refused by Redis, returning an error. However there is no reason to disable Pub/Sub commands as well, given that this layer does not interact with the dataset. To allow Pub/Sub in as many contexts as possible is especially interesting now that Redis Sentinel uses Pub/Sub of a Redis master as a communication channel between Sentinels. This commit allows Pub/Sub to be used in the above two contexts where it was previously denied.
-
由 Salvatore Sanfilippo 提交于
Check that we have connection before enabling pipe mode
-
- 18 7月, 2012 3 次提交
-
-
由 antirez 提交于
For the C standard char can be either signed or unsigned, it's up to the compiler, but Redis assumed that it was signed in a few places. The practical effect of this patch is that now Redis 2.6 will run correctly in every system where char is unsigned, notably the RaspBerry PI and other ARM systems with GCC. Thanks to Georgi Marinov (@eesn on twitter) that reported the problem and allowed me to use his RaspBerry via SSH to trace and fix the issue!
-
由 Saj Goonatilleke 提交于
If Redis only manages to write out a partial buffer, the AOF file won't load back into Redis the next time it starts up. It is better to discard the short write than waste time running redis-check-aof.
-
由 Saj Goonatilleke 提交于
Behaves like rdb_last_bgsave_status -- even down to reporting 'ok' when no rewrite has been done yet. (You might want to check that aof_last_rewrite_time_sec is not -1.)
-
- 15 7月, 2012 1 次提交
-
-
由 Steeve Lennmark 提交于
-
- 09 7月, 2012 1 次提交
-
-
由 Salvatore Sanfilippo 提交于
mark fd as writable when EPOLLERR or EPOLLHUP is returned by epoll_wait.
-
- 29 6月, 2012 1 次提交
-
-
由 jokea 提交于
-
- 27 6月, 2012 2 次提交
-
-
由 antirez 提交于
-
由 antirez 提交于
The REPLCONF command is an internal command (not designed to be directly used by normal clients) that allows a slave to set some replication related state in the master before issuing SYNC to start the replication. The initial motivation for this command, and the only reason currently it is used by the implementation, is to let the slave instance communicate its listening port to the slave, so that the master can show all the slaves with their listening ports in the "replication" section of the INFO output. This allows clients to auto discover and query all the slaves attached into a master. Currently only a single option of the REPLCONF command is supported, and it is called "listening-port", so the slave now starts the replication process with something like the following chat: REPLCONF listening-prot 6380 SYNC Note that this works even if the master is an older version of Redis and does not understand REPLCONF, because the slave ignores the REPLCONF error. In the future REPLCONF can be used for partial replication and other replication related features where there is the need to exchange information between master and slave. NOTE: This commit also fixes a bug: the INFO outout already carried information about slaves, but the port was broken, and was obtained with getpeername(2), so it was actually just the ephemeral port used by the slave to connect to the master as a client.
-
- 21 6月, 2012 2 次提交
-
-
由 antirez 提交于
-
由 antirez 提交于
The way we compared the authentication password using strcmp() allowed an attacker to gain information about the password using a well known class of attacks called "timing attacks". The bug appears to be practically not exploitable in most modern systems running Redis since even using multiple bytes of differences in the input at a time instead of one the difference in running time in in the order of 10 nanoseconds, making it hard to exploit even on LAN. However attacks always get better so we are providing a fix ASAP. The new implementation uses two fixed length buffers and a constant time comparison function, with the goal of: 1) Completely avoid leaking information about the content of the password, since the comparison is always performed between 512 characters and without conditionals. 2) Partially avoid leaking information about the length of the password. About "2" we still have a stage in the code where the real password and the user provided password are copied in the static buffers, we also run two strlen() operations against the two inputs, so the running time of the comparison is a fixed amount plus a time proportional to LENGTH(A)+LENGTH(B). This means that the absolute time of the operation performed is still related to the length of the password in some way, but there is no way to change the input in order to get a difference in the execution time in the comparison that is not just proportional to the string provided by the user (because the password length is fixed). Thus in practical terms the user should try to discover LENGTH(PASSWORD) looking at the whole execution time of the AUTH command and trying to guess a proportionality between the whole execution time and the password length: this appears to be mostly unfeasible in the real world. Also protecting from this attack is not very useful in the case of Redis as a brute force attack is anyway feasible if the password is too short, while with a long password makes it not an issue that the attacker knows the length.
-