diff --git a/ChangeLog.txt b/ChangeLog.txt index 6ce25841..0bf0c0f4 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -64,6 +64,7 @@ Broker: - Add built-in websockets support that doesn't use libwebsockets. This is the preferred websockets implementation. - Add support for X-Forwarded-For header for built in websockets. +- Report persistence stats when starting. Plugins / plugin interface: - Add persist-sqlite plugin. diff --git a/apps/db_dump/stubs.c b/apps/db_dump/stubs.c index d9b5592d..353044ec 100644 --- a/apps/db_dump/stubs.c +++ b/apps/db_dump/stubs.c @@ -159,3 +159,9 @@ int session_expiry__add_from_persistence(struct mosquitto *context, time_t expir UNUSED(expiry_time); return 0; } + +void mosquitto_log_printf(int level, const char *fmt, ...) +{ + UNUSED(level); + UNUSED(fmt); +} diff --git a/src/persist_read.c b/src/persist_read.c index 7e189361..c442348c 100644 --- a/src/persist_read.c +++ b/src/persist_read.c @@ -42,6 +42,11 @@ Contributors: uint32_t db_version; const unsigned char magic[15] = {0x00, 0xB5, 0x00, 'm','o','s','q','u','i','t','t','o',' ','d','b'}; +static long base_msg_count = 0; +static long retained_count = 0; +static long client_count = 0; +static long subscription_count = 0; +static long client_msg_count = 0; static int persist__restore_sub(const char *client_id, const char *sub, uint8_t qos, uint32_t identifier, int options); @@ -215,6 +220,7 @@ static int persist__client_chunk_restore(FILE *db_fptr) mosquitto__FREE(chunk.client_id); mosquitto__FREE(chunk.username); + if(rc == 0) client_count++; return rc; } @@ -238,6 +244,7 @@ static int persist__client_msg_chunk_restore(FILE *db_fptr, uint32_t length) rc = persist__client_msg_restore(&chunk); mosquitto__FREE(chunk.client_id); + if(rc == 0) client_msg_count++; return rc; } @@ -313,6 +320,7 @@ static int persist__base_msg_chunk_restore(FILE *db_fptr, uint32_t length) mosquitto__FREE(chunk.source.username); if(rc == MOSQ_ERR_SUCCESS){ + base_msg_count++; return MOSQ_ERR_SUCCESS; }else{ mosquitto__FREE(base_msg); @@ -345,6 +353,7 @@ static int persist__retain_chunk_restore(FILE *db_fptr) retain__store(msg->topic, msg, split_topics, true); mosquitto__FREE(local_topic); mosquitto__FREE(split_topics); + retained_count++; }else{ /* Can't find the message - probably expired */ } @@ -371,6 +380,7 @@ static int persist__sub_chunk_restore(FILE *db_fptr) mosquitto__FREE(chunk.client_id); mosquitto__FREE(chunk.topic); + if(rc == 0) subscription_count++; return rc; } @@ -405,6 +415,11 @@ int persist__restore(void) } db.msg_store = NULL; + base_msg_count = 0; + retained_count = 0; + client_count = 0; + subscription_count = 0; + client_msg_count = 0; fptr = mosquitto__fopen(db.config->persistence_filepath, "rb", false); if(fptr == NULL) return MOSQ_ERR_SUCCESS; @@ -510,6 +525,12 @@ int persist__restore(void) fclose(fptr); + mosquitto_log_printf(MOSQ_LOG_INFO, "Restored %ld base messages", base_msg_count); + mosquitto_log_printf(MOSQ_LOG_INFO, "Restored %ld retained messages", retained_count); + mosquitto_log_printf(MOSQ_LOG_INFO, "Restored %ld clients", client_count); + mosquitto_log_printf(MOSQ_LOG_INFO, "Restored %ld subscriptions", subscription_count); + mosquitto_log_printf(MOSQ_LOG_INFO, "Restored %ld client messages", client_msg_count); + return rc; error: err = strerror(errno); diff --git a/test/unit/persist_read_stubs.c b/test/unit/persist_read_stubs.c index 6d3fbf22..5720d204 100644 --- a/test/unit/persist_read_stubs.c +++ b/test/unit/persist_read_stubs.c @@ -256,3 +256,9 @@ int session_expiry__add_from_persistence(struct mosquitto *context, time_t expir UNUSED(expiry_time); return 0; } + +void mosquitto_log_printf(int level, const char *fmt, ...) +{ + UNUSED(level); + UNUSED(fmt); +} diff --git a/test/unit/persist_write_stubs.c b/test/unit/persist_write_stubs.c index c661b185..639a3c6e 100644 --- a/test/unit/persist_write_stubs.c +++ b/test/unit/persist_write_stubs.c @@ -229,3 +229,9 @@ int session_expiry__add_from_persistence(struct mosquitto *context, time_t expir UNUSED(expiry_time); return 0; } + +void mosquitto_log_printf(int level, const char *fmt, ...) +{ + UNUSED(level); + UNUSED(fmt); +}