diff --git a/src/config.c b/src/config.c index c64c4a9fcc2a4e54ff9c2ad2f0acbf2e2ce8e793..0d168c03f98c335e7fca56eb89ca43dcc08b8591 100644 --- a/src/config.c +++ b/src/config.c @@ -1807,15 +1807,7 @@ void configCommand(redisClient *c) { configGetCommand(c); } else if (!strcasecmp(c->argv[1]->ptr,"resetstat")) { if (c->argc != 2) goto badarity; - server.stat_keyspace_hits = 0; - server.stat_keyspace_misses = 0; - server.stat_numcommands = 0; - server.ops_sec_last_sample_ops = 0; - server.stat_numconnections = 0; - server.stat_expiredkeys = 0; - server.stat_rejected_conn = 0; - server.stat_fork_time = 0; - server.aof_delayed_fsync = 0; + resetServerStats(); resetCommandTableStats(); addReply(c,shared.ok); } else if (!strcasecmp(c->argv[1]->ptr,"rewrite")) { diff --git a/src/redis.c b/src/redis.c index c24828c07540a12ed07b69e35eb6f037332768d3..da70266c5847d1fc99449751689f0fb8fe427e7e 100644 --- a/src/redis.c +++ b/src/redis.c @@ -1590,6 +1590,27 @@ int listenToPort(int port, int *fds, int *count) { return REDIS_OK; } +/* Resets the stats that we expose via INFO or other means that we want + * to reset via CONFIG RESETSTAT. The function is also used in order to + * initialize these fields in initServer() at server startup. */ +void resetServerStats(void) { + server.stat_numcommands = 0; + server.stat_numconnections = 0; + server.stat_expiredkeys = 0; + server.stat_evictedkeys = 0; + server.stat_keyspace_misses = 0; + server.stat_keyspace_hits = 0; + server.stat_fork_time = 0; + server.stat_rejected_conn = 0; + server.stat_sync_full = 0; + server.stat_sync_partial_ok = 0; + server.stat_sync_partial_err = 0; + memset(server.ops_sec_samples,0,sizeof(server.ops_sec_samples)); + server.ops_sec_idx = 0; + server.ops_sec_last_sample_time = mstime(); + server.ops_sec_last_sample_ops = 0; +} + void initServer() { int j; @@ -1665,23 +1686,10 @@ void initServer() { server.rdb_save_time_last = -1; server.rdb_save_time_start = -1; server.dirty = 0; - server.stat_numcommands = 0; - server.stat_numconnections = 0; - server.stat_expiredkeys = 0; - server.stat_evictedkeys = 0; + resetServerStats(); + /* A few stats we don't want to reset: server startup time, and peak mem. */ server.stat_starttime = time(NULL); - server.stat_keyspace_misses = 0; - server.stat_keyspace_hits = 0; server.stat_peak_memory = 0; - server.stat_fork_time = 0; - server.stat_rejected_conn = 0; - server.stat_sync_full = 0; - server.stat_sync_partial_ok = 0; - server.stat_sync_partial_err = 0; - memset(server.ops_sec_samples,0,sizeof(server.ops_sec_samples)); - server.ops_sec_idx = 0; - server.ops_sec_last_sample_time = mstime(); - server.ops_sec_last_sample_ops = 0; server.lastbgsave_status = REDIS_OK; server.aof_last_write_status = REDIS_OK; server.aof_last_write_errno = 0; diff --git a/src/redis.h b/src/redis.h index e92db52b7b5e8194ae9ef8bdebafb6775251dfe5..85ca3eacba466ad7e9a778e601fb2dab9fbe7055 100644 --- a/src/redis.h +++ b/src/redis.h @@ -1154,7 +1154,8 @@ void populateCommandTable(void); void resetCommandTableStats(void); void adjustOpenFilesLimit(void); void closeListeningSockets(int unlink_unix_socket); -void updateCachedTime(); +void updateCachedTime(void); +void resetServerStats(void); /* Set data type */ robj *setTypeCreate(robj *value);