mirror of
https://github.com/fluencelabs/redis
synced 2025-04-01 15:21:03 +00:00
blocking SAVE implemented
This commit is contained in:
parent
43574a72c3
commit
cc2750670f
@ -474,7 +474,7 @@ werr:
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int dsRdbSave(char *filename) {
|
int dsRdbSaveBackground(char *filename) {
|
||||||
pthread_t thread;
|
pthread_t thread;
|
||||||
|
|
||||||
if (pthread_create(&thread,NULL,dsRdbSave_thread,zstrdup(filename)) != 0) {
|
if (pthread_create(&thread,NULL,dsRdbSave_thread,zstrdup(filename)) != 0) {
|
||||||
@ -486,3 +486,24 @@ int dsRdbSave(char *filename) {
|
|||||||
return REDIS_OK;
|
return REDIS_OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int dsRdbSave(char *filename) {
|
||||||
|
/* A blocking save is actually a non blocking save... just we wait
|
||||||
|
* for it to terminate in a non-busy loop. */
|
||||||
|
|
||||||
|
redisLog(REDIS_NOTICE,"Starting a blocking SAVE (BGSAVE + blocking wait)");
|
||||||
|
server.dirty_before_bgsave = server.dirty;
|
||||||
|
if (dsRdbSaveBackground(filename) == REDIS_ERR) return REDIS_ERR;
|
||||||
|
while(1) {
|
||||||
|
usleep(1000);
|
||||||
|
int state;
|
||||||
|
|
||||||
|
pthread_mutex_lock(&server.bgsavethread_mutex);
|
||||||
|
state = server.bgsavethread_state;
|
||||||
|
pthread_mutex_unlock(&server.bgsavethread_mutex);
|
||||||
|
|
||||||
|
if (state == REDIS_BGSAVE_THREAD_DONE_OK ||
|
||||||
|
state == REDIS_BGSAVE_THREAD_DONE_ERR) break;
|
||||||
|
}
|
||||||
|
return REDIS_OK;
|
||||||
|
}
|
||||||
|
@ -504,7 +504,7 @@ int rdbSaveBackground(char *filename) {
|
|||||||
|
|
||||||
if (server.ds_enabled) {
|
if (server.ds_enabled) {
|
||||||
cacheForcePointInTime();
|
cacheForcePointInTime();
|
||||||
return dsRdbSave(filename);
|
return dsRdbSaveBackground(filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((childpid = fork()) == 0) {
|
if ((childpid = fork()) == 0) {
|
||||||
|
@ -802,6 +802,7 @@ robj *dsGet(redisDb *db, robj *key, time_t *expire);
|
|||||||
int dsDel(redisDb *db, robj *key);
|
int dsDel(redisDb *db, robj *key);
|
||||||
int dsExists(redisDb *db, robj *key);
|
int dsExists(redisDb *db, robj *key);
|
||||||
void dsFlushDb(int dbid);
|
void dsFlushDb(int dbid);
|
||||||
|
int dsRdbSaveBackground(char *filename);
|
||||||
int dsRdbSave(char *filename);
|
int dsRdbSave(char *filename);
|
||||||
|
|
||||||
/* Disk Store Cache */
|
/* Disk Store Cache */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user