ctdb-daemon: Reset database statistics when resetting statistics
authorAmitay Isaacs <amitay@gmail.com>
Thu, 2 Apr 2015 02:53:09 +0000 (13:53 +1100)
committerAmitay Isaacs <amitay@samba.org>
Fri, 7 Aug 2015 03:33:29 +0000 (05:33 +0200)
When the ctdb statistics is reset, reset per database statistics to keep
it consistent with ctdb statistics.

Signed-off-by: Amitay Isaacs <amitay@gmail.com>
Reviewed-by: Martin Schwenke <martin@meltin.net>
ctdb/include/ctdb_private.h
ctdb/server/ctdb_control.c
ctdb/server/ctdb_ltdb_server.c

index c172909ac15d03e888d3806f536d880bcebb0906..1d91923663047fc08dfcc54e5d457f837ac8d70e 100644 (file)
@@ -1446,6 +1446,8 @@ int ctdb_fetch_func(struct ctdb_call_info *call);
 
 int ctdb_fetch_with_header_func(struct ctdb_call_info *call);
 
+void ctdb_db_statistics_reset(struct ctdb_db_context *ctdb_db);
+
 int32_t ctdb_control_get_db_statistics(struct ctdb_context *ctdb,
                                uint32_t db_id,
                                TDB_DATA *outdata);
index fda4c29134a1a9e97050d036a480c78440c4c907..59b7d098671ee7e6a1cf48c553a32f81a88b3e74 100644 (file)
@@ -151,8 +151,15 @@ static int32_t ctdb_control_dispatch(struct ctdb_context *ctdb,
        }
 
        case CTDB_CONTROL_STATISTICS_RESET: {
+               struct ctdb_db_context *ctdb_db;
+
                CHECK_CONTROL_DATA_SIZE(0);
                ZERO_STRUCT(ctdb->statistics);
+               for (ctdb_db = ctdb->db_list;
+                    ctdb_db != NULL;
+                    ctdb_db = ctdb_db->next) {
+                       ctdb_db_statistics_reset(ctdb_db);
+               }
                ctdb->statistics.statistics_start_time = timeval_current();
                return 0;
        }
index 5357c6c7f16631e89bf96529a777ab447c296e9b..ad61f1437d16fec8d625cfe09d24a7f33a0fef44 100644 (file)
@@ -1600,6 +1600,20 @@ int ctdb_set_db_sticky(struct ctdb_context *ctdb, struct ctdb_db_context *ctdb_d
        return 0;
 }
 
+void ctdb_db_statistics_reset(struct ctdb_db_context *ctdb_db)
+{
+       struct ctdb_db_statistics *s = &ctdb_db->statistics;
+       int i;
+
+       for (i=0; i<MAX_HOT_KEYS; i++) {
+               if (s->hot_keys[i].key.dsize > 0) {
+                       talloc_free(s->hot_keys[i].key.dptr);
+               }
+       }
+
+       ZERO_STRUCT(ctdb_db->statistics);
+}
+
 int32_t ctdb_control_get_db_statistics(struct ctdb_context *ctdb,
                                uint32_t db_id,
                                TDB_DATA *outdata)