X-Git-Url: https://git.saurik.com/redis.git/blobdiff_plain/d288ee655fef467a7c1f14a13af9485f5c0c0862..8e2a225aa6cd1848a282d3d96742759cc24fc7e8:/src/redis.h?ds=sidebyside diff --git a/src/redis.h b/src/redis.h index 0ed439c5..6fe6cfc6 100644 --- a/src/redis.h +++ b/src/redis.h @@ -163,25 +163,30 @@ #define REDIS_RDB_ENC_INT32 2 /* 32 bit signed integer */ #define REDIS_RDB_ENC_LZF 3 /* string compressed with FASTLZ */ +/* MDB states */ +#define REDIS_MDB_OFF 0 /* MDB is off */ +#define REDIS_MDB_ON 1 /* MDB is on */ + /* AOF states */ #define REDIS_AOF_OFF 0 /* AOF is off */ #define REDIS_AOF_ON 1 /* AOF is on */ #define REDIS_AOF_WAIT_REWRITE 2 /* AOF waits rewrite to start appending */ /* Client flags */ -#define REDIS_SLAVE 1 /* This client is a slave server */ -#define REDIS_MASTER 2 /* This client is a master server */ -#define REDIS_MONITOR 4 /* This client is a slave monitor, see MONITOR */ -#define REDIS_MULTI 8 /* This client is in a MULTI context */ -#define REDIS_BLOCKED 16 /* The client is waiting in a blocking operation */ -#define REDIS_DIRTY_CAS 64 /* Watched keys modified. EXEC will fail. */ -#define REDIS_CLOSE_AFTER_REPLY 128 /* Close after writing entire reply. */ -#define REDIS_UNBLOCKED 256 /* This client was unblocked and is stored in - server.unblocked_clients */ -#define REDIS_LUA_CLIENT 512 /* This is a non connected client used by Lua */ -#define REDIS_ASKING 1024 /* Client issued the ASKING command */ -#define REDIS_CLOSE_ASAP 2048 /* Close this client ASAP */ -#define REDIS_UNIX_SOCKET 4096 /* Client connected via Unix domain socket */ +#define REDIS_SLAVE (1<<0) /* This client is a slave server */ +#define REDIS_MASTER (1<<1) /* This client is a master server */ +#define REDIS_MONITOR (1<<2) /* This client is a slave monitor, see MONITOR */ +#define REDIS_MULTI (1<<3) /* This client is in a MULTI context */ +#define REDIS_BLOCKED (1<<4) /* The client is waiting in a blocking operation */ +#define REDIS_DIRTY_CAS (1<<5) /* Watched keys modified. EXEC will fail. */ +#define REDIS_CLOSE_AFTER_REPLY (1<<6) /* Close after writing entire reply. */ +#define REDIS_UNBLOCKED (1<<7) /* This client was unblocked and is stored in + server.unblocked_clients */ +#define REDIS_LUA_CLIENT (1<<8) /* This is a non connected client used by Lua */ +#define REDIS_ASKING (1<<9) /* Client issued the ASKING command */ +#define REDIS_CLOSE_ASAP (1<<10)/* Close this client ASAP */ +#define REDIS_UNIX_SOCKET (1<<11) /* Client connected via Unix domain socket */ +#define REDIS_DIRTY_EXEC (1<<12) /* EXEC will fail for errors while queueing */ /* Client request types */ #define REDIS_REQ_INLINE 1 @@ -309,7 +314,8 @@ #define REDIS_LRU_CLOCK_RESOLUTION 10 /* LRU clock resolution in seconds */ typedef struct redisObject { unsigned type:4; - unsigned notused:2; /* Not used */ + unsigned archived:1; + unsigned notused:1; /* Not used */ unsigned encoding:4; unsigned lru:22; /* lru time (relative to server.lruclock) */ int refcount; @@ -349,9 +355,8 @@ typedef struct multiState { } multiState; typedef struct blockingState { - robj **keys; /* The key we are waiting to terminate a blocking + dict *keys; /* The keys we are waiting to terminate a blocking * operation such as BLPOP. Otherwise NULL. */ - int count; /* Number of blocking keys */ time_t timeout; /* Blocking operation timeout. If UNIX current time * is >= timeout then the operation timed out. */ robj *target; /* The key that should receive the element, @@ -425,7 +430,7 @@ struct sharedObjectsStruct { *colon, *nullbulk, *nullmultibulk, *queued, *emptymultibulk, *wrongtypeerr, *nokeyerr, *syntaxerr, *sameobjecterr, *outofrangeerr, *noscripterr, *loadingerr, *slowscripterr, *bgsaveerr, - *masterdownerr, *roslaveerr, + *masterdownerr, *roslaveerr, *execaborterr, *oomerr, *plus, *messagebulk, *pmessagebulk, *subscribebulk, *unsubscribebulk, *psubscribebulk, *punsubscribebulk, *del, *rpop, *lpop, *lpush, @@ -589,6 +594,10 @@ struct redisServer { time_t rdb_save_time_start; /* Current RDB save start time. */ int lastbgsave_status; /* REDIS_OK or REDIS_ERR */ int stop_writes_on_bgsave_err; /* Don't allow writes if can't BGSAVE */ + /* MDB archival */ + int mdb_state; /* REDIS_MDB_(ON|OFF) */ + char *mdb_environment; /* Name of the MDB file */ + size_t mdb_mapsize; /* Map size for use with MDB */ /* Propagation of commands in AOF / replication */ redisOpArray also_propagate; /* Additional command to propagate. */ /* Logging */ @@ -754,6 +763,7 @@ extern struct sharedObjectsStruct shared; extern dictType setDictType; extern dictType zsetDictType; extern dictType dbDictType; +extern dictType shaScriptObjectDictType; extern double R_Zero, R_PosInf, R_NegInf, R_Nan; extern dictType hashDictType; @@ -845,6 +855,7 @@ void queueMultiCommand(redisClient *c); void touchWatchedKey(redisDb *db, robj *key); void touchWatchedKeysOnFlush(int dbid); void discardTransaction(redisClient *c); +void flagTransaction(redisClient *c); /* Redis object implementation */ void decrRefCount(void *o); @@ -1022,6 +1033,10 @@ void signalModifiedKey(redisDb *db, robj *key); void signalFlushedDb(int dbid); unsigned int GetKeysInSlot(unsigned int hashslot, robj **keys, unsigned int count); +/* external database archival */ +robj *recover(redisDb *db, robj *key); +int archive(redisDb *db, robj *key); + /* API to get key arguments from commands */ #define REDIS_GETKEYS_ALL 0 #define REDIS_GETKEYS_PRELOAD 1