Compare commits
9
Commits
3.0.5
...
waitpid-fix
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
077a196501 | ||
|
|
4f7d1e46cf | ||
|
|
3626699f1f | ||
|
|
fe71dffbf2 | ||
|
|
8e491b1708 | ||
|
|
3da69a9f22 | ||
|
|
d4f55990f8 | ||
|
|
28fb193ccd | ||
|
|
c5f9f199df |
+9
-5
@@ -12,15 +12,17 @@ each source file that you contribute.
|
||||
|
||||
PLEASE DO NOT POST GENERAL QUESTIONS that are not about bugs or suspected
|
||||
bugs in the Github issues system. We'll be very happy to help you and provide
|
||||
all the support in the Redis Google Group.
|
||||
all the support Reddit sub:
|
||||
|
||||
Redis Google Group address:
|
||||
|
||||
https://groups.google.com/forum/?fromgroups#!forum/redis-db
|
||||
http://reddit.com/r/redis
|
||||
|
||||
There is also an active community of Redis users at Stack Overflow:
|
||||
|
||||
http://stackoverflow.com/questions/tagged/redis
|
||||
|
||||
# How to provide a patch for a new feature
|
||||
|
||||
1. Drop a message to the Redis Google Group with a proposal of semantics/API.
|
||||
1. If it is a major feature or a semantical change, please post it as a new submission in r/redis on Reddit at http://reddit.com/r/redis. Try to be passionate about why the feature is needed, make users upvote your proposal to gain traction and so forth. Read feedbacks about the community. But in this first step **please don't write code yet**.
|
||||
|
||||
2. If in step 1 you get an acknowledge from the project leaders, use the
|
||||
following procedure to submit a patch:
|
||||
@@ -31,4 +33,6 @@ each source file that you contribute.
|
||||
d. Initiate a pull request on github ( http://help.github.com/send-pull-requests/ )
|
||||
e. Done :)
|
||||
|
||||
For minor fixes just open a pull request on Github.
|
||||
|
||||
Thanks!
|
||||
|
||||
@@ -152,6 +152,7 @@ void *bioProcessBackgroundJobs(void *arg) {
|
||||
* receive the watchdog signal. */
|
||||
sigemptyset(&sigset);
|
||||
sigaddset(&sigset, SIGALRM);
|
||||
sigaddset(&sigset, SIGCHLD);
|
||||
if (pthread_sigmask(SIG_BLOCK, &sigset, NULL))
|
||||
redisLog(REDIS_WARNING,
|
||||
"Warning: can't mask SIGALRM in bio.c thread: %s", strerror(errno));
|
||||
|
||||
+3
-1
@@ -2625,7 +2625,9 @@ void clusterLogCantFailover(int reason) {
|
||||
|
||||
switch(reason) {
|
||||
case REDIS_CLUSTER_CANT_FAILOVER_DATA_AGE:
|
||||
msg = "Disconnected from master for longer than allowed.";
|
||||
msg = "Disconnected from master for longer than allowed. "
|
||||
"Please check the 'cluster-slave-validity-factor' configuration "
|
||||
"option.";
|
||||
break;
|
||||
case REDIS_CLUSTER_CANT_FAILOVER_WAITING_DELAY:
|
||||
msg = "Waiting the delay before I can start a new failover.";
|
||||
|
||||
+180
-8
@@ -1,4 +1,4 @@
|
||||
/* Automatically generated by utils/generate-command-help.rb, do not edit. */
|
||||
/* Automatically generated by generate-command-help.rb, do not edit. */
|
||||
|
||||
#ifndef __REDIS_HELP_H
|
||||
#define __REDIS_HELP_H
|
||||
@@ -15,7 +15,9 @@ static char *commandGroups[] = {
|
||||
"connection",
|
||||
"server",
|
||||
"scripting",
|
||||
"hyperloglog"
|
||||
"hyperloglog",
|
||||
"cluster",
|
||||
"geo"
|
||||
};
|
||||
|
||||
struct commandHelp {
|
||||
@@ -46,7 +48,7 @@ struct commandHelp {
|
||||
9,
|
||||
"1.0.0" },
|
||||
{ "BITCOUNT",
|
||||
"key [start] [end]",
|
||||
"key [start end]",
|
||||
"Count set bits in a string",
|
||||
1,
|
||||
"2.6.0" },
|
||||
@@ -81,7 +83,7 @@ struct commandHelp {
|
||||
9,
|
||||
"2.6.9" },
|
||||
{ "CLIENT KILL",
|
||||
"ip:port",
|
||||
"[ip:port] [ID client-id] [TYPE normal|slave|pubsub] [ADDR ip:port] [SKIPME yes/no]",
|
||||
"Kill the connection of a client",
|
||||
9,
|
||||
"2.4.0" },
|
||||
@@ -100,6 +102,116 @@ struct commandHelp {
|
||||
"Set the current connection name",
|
||||
9,
|
||||
"2.6.9" },
|
||||
{ "CLUSTER ADDSLOTS",
|
||||
"slot [slot ...]",
|
||||
"Assign new hash slots to receiving node",
|
||||
12,
|
||||
"3.0.0" },
|
||||
{ "CLUSTER COUNT-FAILURE-REPORTS",
|
||||
"node-id",
|
||||
"Return the number of failure reports active for a given node",
|
||||
12,
|
||||
"3.0.0" },
|
||||
{ "CLUSTER COUNTKEYSINSLOT",
|
||||
"slot",
|
||||
"Return the number of local keys in the specified hash slot",
|
||||
12,
|
||||
"3.0.0" },
|
||||
{ "CLUSTER DELSLOTS",
|
||||
"slot [slot ...]",
|
||||
"Set hash slots as unbound in receiving node",
|
||||
12,
|
||||
"3.0.0" },
|
||||
{ "CLUSTER FAILOVER",
|
||||
"[FORCE|TAKEOVER]",
|
||||
"Forces a slave to perform a manual failover of its master.",
|
||||
12,
|
||||
"3.0.0" },
|
||||
{ "CLUSTER FORGET",
|
||||
"node-id",
|
||||
"Remove a node from the nodes table",
|
||||
12,
|
||||
"3.0.0" },
|
||||
{ "CLUSTER GETKEYSINSLOT",
|
||||
"slot count",
|
||||
"Return local key names in the specified hash slot",
|
||||
12,
|
||||
"3.0.0" },
|
||||
{ "CLUSTER INFO",
|
||||
"-",
|
||||
"Provides info about Redis Cluster node state",
|
||||
12,
|
||||
"3.0.0" },
|
||||
{ "CLUSTER KEYSLOT",
|
||||
"key",
|
||||
"Returns the hash slot of the specified key",
|
||||
12,
|
||||
"3.0.0" },
|
||||
{ "CLUSTER MEET",
|
||||
"ip port",
|
||||
"Force a node cluster to handshake with another node",
|
||||
12,
|
||||
"3.0.0" },
|
||||
{ "CLUSTER NODES",
|
||||
"-",
|
||||
"Get Cluster config for the node",
|
||||
12,
|
||||
"3.0.0" },
|
||||
{ "CLUSTER REPLICATE",
|
||||
"node-id",
|
||||
"Reconfigure a node as a slave of the specified master node",
|
||||
12,
|
||||
"3.0.0" },
|
||||
{ "CLUSTER RESET",
|
||||
"[HARD|SOFT]",
|
||||
"Reset a Redis Cluster node",
|
||||
12,
|
||||
"3.0.0" },
|
||||
{ "CLUSTER SAVECONFIG",
|
||||
"-",
|
||||
"Forces the node to save cluster state on disk",
|
||||
12,
|
||||
"3.0.0" },
|
||||
{ "CLUSTER SET-CONFIG-EPOCH",
|
||||
"config-epoch",
|
||||
"Set the configuration epoch in a new node",
|
||||
12,
|
||||
"3.0.0" },
|
||||
{ "CLUSTER SETSLOT",
|
||||
"slot IMPORTING|MIGRATING|STABLE|NODE [node-id]",
|
||||
"Bind an hash slot to a specific node",
|
||||
12,
|
||||
"3.0.0" },
|
||||
{ "CLUSTER SLAVES",
|
||||
"node-id",
|
||||
"List slave nodes of the specified master node",
|
||||
12,
|
||||
"3.0.0" },
|
||||
{ "CLUSTER SLOTS",
|
||||
"-",
|
||||
"Get array of Cluster slot to node mappings",
|
||||
12,
|
||||
"3.0.0" },
|
||||
{ "COMMAND",
|
||||
"-",
|
||||
"Get array of Redis command details",
|
||||
9,
|
||||
"2.8.13" },
|
||||
{ "COMMAND COUNT",
|
||||
"-",
|
||||
"Get total number of Redis commands",
|
||||
9,
|
||||
"2.8.13" },
|
||||
{ "COMMAND GETKEYS",
|
||||
"-",
|
||||
"Extract keys given a full Redis command",
|
||||
9,
|
||||
"2.8.13" },
|
||||
{ "COMMAND INFO",
|
||||
"command-name [command-name ...]",
|
||||
"Get array of specific Redis command details",
|
||||
9,
|
||||
"2.8.13" },
|
||||
{ "CONFIG GET",
|
||||
"parameter",
|
||||
"Get the value of a configuration parameter",
|
||||
@@ -181,7 +293,7 @@ struct commandHelp {
|
||||
7,
|
||||
"1.2.0" },
|
||||
{ "EXISTS",
|
||||
"key",
|
||||
"key [key ...]",
|
||||
"Determine if a key exists",
|
||||
0,
|
||||
"1.0.0" },
|
||||
@@ -205,6 +317,36 @@ struct commandHelp {
|
||||
"Remove all keys from the current database",
|
||||
9,
|
||||
"1.0.0" },
|
||||
{ "GEOADD",
|
||||
"key longitude latitude member [longitude latitude member ...]",
|
||||
"Add one or more geospatial items in the geospatial index represented using a sorted set",
|
||||
13,
|
||||
"" },
|
||||
{ "GEODIST",
|
||||
"key member1 member2 [unit]",
|
||||
"Returns the distance between two members of a geospatial index",
|
||||
13,
|
||||
"" },
|
||||
{ "GEOHASH",
|
||||
"key member [member ...]",
|
||||
"Returns members of a geospatial index as standard geohash strings",
|
||||
13,
|
||||
"" },
|
||||
{ "GEOPOS",
|
||||
"key member [member ...]",
|
||||
"Returns longitude and latitude of members of a geospatial index",
|
||||
13,
|
||||
"" },
|
||||
{ "GEORADIUS",
|
||||
"key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]",
|
||||
"Query a sorted set representing a geospatial index to fetch members matching a given maximum distance from a point",
|
||||
13,
|
||||
"" },
|
||||
{ "GEORADIUSBYMEMBER",
|
||||
"key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]",
|
||||
"Query a sorted set representing a geospatial index to fetch members matching a given maximum distance from a member",
|
||||
13,
|
||||
"" },
|
||||
{ "GET",
|
||||
"key",
|
||||
"Get the value of a key",
|
||||
@@ -290,6 +432,11 @@ struct commandHelp {
|
||||
"Set the value of a hash field, only if the field does not exist",
|
||||
5,
|
||||
"2.0.0" },
|
||||
{ "HSTRLEN",
|
||||
"key field",
|
||||
"Get the length of the value of a hash field",
|
||||
5,
|
||||
"3.2.0" },
|
||||
{ "HVALS",
|
||||
"key",
|
||||
"Get all the values in a hash",
|
||||
@@ -490,6 +637,16 @@ struct commandHelp {
|
||||
"Return a random key from the keyspace",
|
||||
0,
|
||||
"1.0.0" },
|
||||
{ "READONLY",
|
||||
"-",
|
||||
"Enables read queries for a connection to a cluster slave node",
|
||||
12,
|
||||
"3.0.0" },
|
||||
{ "READWRITE",
|
||||
"-",
|
||||
"Disables read queries for a connection to a cluster slave node",
|
||||
12,
|
||||
"3.0.0" },
|
||||
{ "RENAME",
|
||||
"key newkey",
|
||||
"Rename a key",
|
||||
@@ -501,10 +658,15 @@ struct commandHelp {
|
||||
0,
|
||||
"1.0.0" },
|
||||
{ "RESTORE",
|
||||
"key ttl serialized-value",
|
||||
"key ttl serialized-value [REPLACE]",
|
||||
"Create a key using the provided serialized value, previously obtained using DUMP.",
|
||||
0,
|
||||
"2.6.0" },
|
||||
{ "ROLE",
|
||||
"-",
|
||||
"Return the role of the instance in the context of replication",
|
||||
9,
|
||||
"2.8.12" },
|
||||
{ "RPOP",
|
||||
"key",
|
||||
"Remove and get the last element in a list",
|
||||
@@ -512,7 +674,7 @@ struct commandHelp {
|
||||
"1.0.0" },
|
||||
{ "RPOPLPUSH",
|
||||
"source destination",
|
||||
"Remove the last element in a list, append it to another list and return it",
|
||||
"Remove the last element in a list, prepend it to another list and return it",
|
||||
2,
|
||||
"1.2.0" },
|
||||
{ "RPUSH",
|
||||
@@ -720,13 +882,18 @@ struct commandHelp {
|
||||
"Forget about all watched keys",
|
||||
7,
|
||||
"2.2.0" },
|
||||
{ "WAIT",
|
||||
"numslaves timeout",
|
||||
"Wait for the synchronous replication of all the write commands sent in the context of the current connection",
|
||||
0,
|
||||
"3.0.0" },
|
||||
{ "WATCH",
|
||||
"key [key ...]",
|
||||
"Watch the given keys to determine execution of the MULTI/EXEC block",
|
||||
7,
|
||||
"2.2.0" },
|
||||
{ "ZADD",
|
||||
"key score member [score member ...]",
|
||||
"key [NX|XX] [CH] [INCR] score member [score member ...]",
|
||||
"Add one or more members to a sorted set, or update its score if it already exists",
|
||||
4,
|
||||
"1.2.0" },
|
||||
@@ -800,6 +967,11 @@ struct commandHelp {
|
||||
"Return a range of members in a sorted set, by index, with scores ordered from high to low",
|
||||
4,
|
||||
"1.2.0" },
|
||||
{ "ZREVRANGEBYLEX",
|
||||
"key max min [LIMIT offset count]",
|
||||
"Return a range of members in a sorted set, by lexicographical range, ordered from higher to lower strings.",
|
||||
4,
|
||||
"2.8.9" },
|
||||
{ "ZREVRANGEBYSCORE",
|
||||
"key max min [WITHSCORES] [LIMIT offset count]",
|
||||
"Return a range of members in a sorted set, by score, with scores ordered from high to low",
|
||||
|
||||
+11
-4
@@ -261,7 +261,7 @@ struct redisCommand redisCommandTable[] = {
|
||||
{"cluster",clusterCommand,-2,"ar",0,NULL,0,0,0,0,0},
|
||||
{"restore",restoreCommand,-4,"wm",0,NULL,1,1,1,0,0},
|
||||
{"restore-asking",restoreCommand,-4,"wmk",0,NULL,1,1,1,0,0},
|
||||
{"migrate",migrateCommand,-6,"w",0,NULL,0,0,0,0,0},
|
||||
{"migrate",migrateCommand,-6,"w",0,NULL,3,3,1,0,0},
|
||||
{"asking",askingCommand,1,"r",0,NULL,0,0,0,0,0},
|
||||
{"readonly",readonlyCommand,1,"rF",0,NULL,0,0,0,0,0},
|
||||
{"readwrite",readwriteCommand,1,"rF",0,NULL,0,0,0,0,0},
|
||||
@@ -1172,7 +1172,13 @@ int serverCron(struct aeEventLoop *eventLoop, long long id, void *clientData) {
|
||||
|
||||
if (WIFSIGNALED(statloc)) bysignal = WTERMSIG(statloc);
|
||||
|
||||
if (pid == server.rdb_child_pid) {
|
||||
if (pid == -1) {
|
||||
redisLog(LOG_WARNING,"wait3() returned an error: %s. "
|
||||
"rdb_child_pid = %d, aof_child_pid = %d",
|
||||
strerror(errno),
|
||||
(int) server.rdb_child_pid,
|
||||
(int) server.aof_child_pid);
|
||||
} else if (pid == server.rdb_child_pid) {
|
||||
backgroundSaveDoneHandler(exitcode,bysignal);
|
||||
} else if (pid == server.aof_child_pid) {
|
||||
backgroundRewriteDoneHandler(exitcode,bysignal);
|
||||
@@ -1755,7 +1761,8 @@ void initServer(void) {
|
||||
int j;
|
||||
|
||||
signal(SIGHUP, SIG_IGN);
|
||||
signal(SIGPIPE, SIG_IGN);
|
||||
signal(SIGPIPE, SIG_IGN); /* No write(2) generated signals. */
|
||||
signal(SIGCHLD, SIG_DFL); /* We want zombies to queue for waitpid(). */
|
||||
setupSignalHandlers();
|
||||
|
||||
if (server.syslog_enabled) {
|
||||
@@ -2259,7 +2266,7 @@ int processCommand(redisClient *c) {
|
||||
c->cmd->proc != unsubscribeCommand &&
|
||||
c->cmd->proc != psubscribeCommand &&
|
||||
c->cmd->proc != punsubscribeCommand) {
|
||||
addReplyError(c,"only (P)SUBSCRIBE / (P)UNSUBSCRIBE / QUIT allowed in this context");
|
||||
addReplyError(c,"only (P)SUBSCRIBE / (P)UNSUBSCRIBE / PING / QUIT allowed in this context");
|
||||
return REDIS_OK;
|
||||
}
|
||||
|
||||
|
||||
@@ -12,7 +12,9 @@ GROUPS = [
|
||||
"connection",
|
||||
"server",
|
||||
"scripting",
|
||||
"hyperloglog"
|
||||
"hyperloglog",
|
||||
"cluster",
|
||||
"geo"
|
||||
].freeze
|
||||
|
||||
GROUPS_BY_NAME = Hash[*
|
||||
|
||||
Reference in New Issue
Block a user