From cbb01193a0d102fd3b74d160f66a6a78f708ccc2 Mon Sep 17 00:00:00 2001 From: "Roger A. Light" Date: Tue, 1 Mar 2022 20:30:26 +0000 Subject: [PATCH] Rename persist retain_add to retain_set --- include/mosquitto_broker.h | 10 +++++----- .../plugin-event-stats/mosquitto_plugin_event_stats.c | 2 +- plugins/persist-sqlite/init.c | 4 ++-- plugins/persist-sqlite/persist_sqlite.h | 4 ++-- plugins/persist-sqlite/plugin.c | 4 ++-- plugins/persist-sqlite/restore.c | 2 +- plugins/persist-sqlite/retain_msgs.c | 10 +++++----- src/linker-macosx.syms | 2 +- src/linker.syms | 2 +- src/mosquitto_broker_internal.h | 4 ++-- src/plugin_callbacks.c | 8 ++++---- src/plugin_persist.c | 6 +++--- src/retain.c | 7 ++++--- test/unit/persist_read_stubs.c | 2 +- test/unit/persist_write_stubs.c | 2 +- test/unit/stubs.c | 6 +++--- 16 files changed, 38 insertions(+), 37 deletions(-) diff --git a/include/mosquitto_broker.h b/include/mosquitto_broker.h index 3f065ef5..7e0b2a62 100644 --- a/include/mosquitto_broker.h +++ b/include/mosquitto_broker.h @@ -79,7 +79,7 @@ enum mosquitto_plugin_event { MOSQ_EVT_PERSIST_BASE_MSG_ADD = 14, MOSQ_EVT_PERSIST_BASE_MSG_DELETE = 15, MOSQ_EVT_PERSIST_BASE_MSG_LOAD = 16, - MOSQ_EVT_PERSIST_RETAIN_MSG_ADD = 17, + MOSQ_EVT_PERSIST_RETAIN_MSG_SET = 17, MOSQ_EVT_PERSIST_RETAIN_MSG_DELETE = 18, MOSQ_EVT_PERSIST_CLIENT_ADD = 19, MOSQ_EVT_PERSIST_CLIENT_DELETE = 20, @@ -296,7 +296,7 @@ struct mosquitto_evt_persist_base_msg { }; -/* Data for the MOSQ_EVT_PERSIST_RETAIN/_DELETE event */ +/* Data for the MOSQ_EVT_PERSIST_RETAIN_MSG_SET/_DELETE event */ /* NOTE: The persistence interface is currently marked as unstable, which means * it may change in a future minor release. */ struct mosquitto_evt_persist_retain_msg { @@ -1059,9 +1059,9 @@ int mosquitto_subscription_add(const char *client_id, const char *topic, uint8_t int mosquitto_subscription_delete(const char *client_id, const char *topic); -/* Function: mosquitto_persist_retain_msg_add +/* Function: mosquitto_persist_retain_msg_set * - * Use to add a retained message. It is not required to delete a retained + * Use to set a retained message. It is not required to delete a retained * message for an existing topic first. * * Parameters: @@ -1074,7 +1074,7 @@ int mosquitto_subscription_delete(const char *client_id, const char *topic); * MOSQ_ERR_NOT_FOUND - the referenced base message was not found * MOSQ_ERR_NOMEM - on out of memory */ -int mosquitto_persist_retain_msg_add(const char *topic, uint64_t store_id); +int mosquitto_persist_retain_msg_set(const char *topic, uint64_t store_id); /* Function: mosquitto_persist_retain_msg_delete diff --git a/plugins/examples/plugin-event-stats/mosquitto_plugin_event_stats.c b/plugins/examples/plugin-event-stats/mosquitto_plugin_event_stats.c index 4fe6b1eb..f511b029 100644 --- a/plugins/examples/plugin-event-stats/mosquitto_plugin_event_stats.c +++ b/plugins/examples/plugin-event-stats/mosquitto_plugin_event_stats.c @@ -68,7 +68,7 @@ const char evt_topics[][60] = { TOPIC_BASE "persist/message/base/add", /* MOSQ_EVT_PERSIST_MSG_ADD */ TOPIC_BASE "persist/message/base/delete", /* MOSQ_EVT_PERSIST_MSG_DELETE */ TOPIC_BASE "persist/message/base/load", /* MOSQ_EVT_PERSIST_MSG_LOAD */ - TOPIC_BASE "persist/message/retain/add", /* MOSQ_EVT_PERSIST_RETAIN_ADD */ + TOPIC_BASE "persist/message/retain/set", /* MOSQ_EVT_PERSIST_RETAIN_SET */ TOPIC_BASE "persist/message/retain/delete", /* MOSQ_EVT_PERSIST_RETAIN_DELETE */ TOPIC_BASE "persist/client/add", /* MOSQ_EVT_PERSIST_CLIENT_ADD */ TOPIC_BASE "persist/client/delete", /* MOSQ_EVT_PERSIST_CLIENT_DELETE */ diff --git a/plugins/persist-sqlite/init.c b/plugins/persist-sqlite/init.c index 19683645..81b9f06d 100644 --- a/plugins/persist-sqlite/init.c +++ b/plugins/persist-sqlite/init.c @@ -233,7 +233,7 @@ static int prepare_statements(struct mosquitto_sqlite *ms) "(topic, store_id)" "VALUES(?,?)", -1, SQLITE_PREPARE_PERSISTENT, - &ms->retain_msg_add_stmt, NULL); + &ms->retain_msg_set_stmt, NULL); if(rc) goto fail; rc = sqlite3_prepare_v3(ms->db, @@ -300,7 +300,7 @@ void persist_sqlite__cleanup(struct mosquitto_sqlite *ms) sqlite3_finalize(ms->base_msg_add_stmt); sqlite3_finalize(ms->base_msg_remove_stmt); sqlite3_finalize(ms->base_msg_load_stmt); - sqlite3_finalize(ms->retain_msg_add_stmt); + sqlite3_finalize(ms->retain_msg_set_stmt); sqlite3_finalize(ms->retain_msg_remove_stmt); if(ms->db){ diff --git a/plugins/persist-sqlite/persist_sqlite.h b/plugins/persist-sqlite/persist_sqlite.h index 2afb59fe..0811cc06 100644 --- a/plugins/persist-sqlite/persist_sqlite.h +++ b/plugins/persist-sqlite/persist_sqlite.h @@ -42,7 +42,7 @@ struct mosquitto_sqlite { sqlite3_stmt *base_msg_add_stmt; sqlite3_stmt *base_msg_remove_stmt; sqlite3_stmt *base_msg_load_stmt; - sqlite3_stmt *retain_msg_add_stmt; + sqlite3_stmt *retain_msg_set_stmt; sqlite3_stmt *retain_msg_remove_stmt; time_t last_transaction; int synchronous; @@ -64,7 +64,7 @@ int persist_sqlite__client_msg_update_cb(int event, void *event_data, void *user int persist_sqlite__base_msg_add_cb(int event, void *event_data, void *userdata); int persist_sqlite__base_msg_load_cb(int event, void *event_data, void *userdata); int persist_sqlite__base_msg_remove_cb(int event, void *event_data, void *userdata); -int persist_sqlite__retain_msg_add_cb(int event, void *event_data, void *userdata); +int persist_sqlite__retain_msg_set_cb(int event, void *event_data, void *userdata); int persist_sqlite__retain_msg_remove_cb(int event, void *event_data, void *userdata); int persist_sqlite__subscription_add_cb(int event, void *event_data, void *userdata); int persist_sqlite__subscription_remove_cb(int event, void *event_data, void *userdata); diff --git a/plugins/persist-sqlite/plugin.c b/plugins/persist-sqlite/plugin.c index 67b77534..93661f66 100644 --- a/plugins/persist-sqlite/plugin.c +++ b/plugins/persist-sqlite/plugin.c @@ -96,7 +96,7 @@ int mosquitto_plugin_init(mosquitto_plugin_id_t *identifier, void **user_data, s if(rc) goto fail; rc = mosquitto_callback_register(plg_id, MOSQ_EVT_PERSIST_BASE_MSG_LOAD, persist_sqlite__base_msg_load_cb, NULL, &plg_data); if(rc) goto fail; - rc = mosquitto_callback_register(plg_id, MOSQ_EVT_PERSIST_RETAIN_MSG_ADD, persist_sqlite__retain_msg_add_cb, NULL, &plg_data); + rc = mosquitto_callback_register(plg_id, MOSQ_EVT_PERSIST_RETAIN_MSG_SET, persist_sqlite__retain_msg_set_cb, NULL, &plg_data); if(rc) goto fail; rc = mosquitto_callback_register(plg_id, MOSQ_EVT_PERSIST_RETAIN_MSG_DELETE, persist_sqlite__retain_msg_remove_cb, NULL, &plg_data); if(rc) goto fail; @@ -145,7 +145,7 @@ int mosquitto_plugin_cleanup(void *user_data, struct mosquitto_opt *options, int mosquitto_callback_unregister(plg_id, MOSQ_EVT_PERSIST_BASE_MSG_ADD, persist_sqlite__base_msg_add_cb, NULL); mosquitto_callback_unregister(plg_id, MOSQ_EVT_PERSIST_BASE_MSG_DELETE, persist_sqlite__base_msg_remove_cb, NULL); mosquitto_callback_unregister(plg_id, MOSQ_EVT_PERSIST_BASE_MSG_LOAD, persist_sqlite__base_msg_load_cb, NULL); - mosquitto_callback_unregister(plg_id, MOSQ_EVT_PERSIST_RETAIN_MSG_ADD, persist_sqlite__retain_msg_add_cb, NULL); + mosquitto_callback_unregister(plg_id, MOSQ_EVT_PERSIST_RETAIN_MSG_SET, persist_sqlite__retain_msg_set_cb, NULL); mosquitto_callback_unregister(plg_id, MOSQ_EVT_PERSIST_RETAIN_MSG_DELETE, persist_sqlite__retain_msg_remove_cb, NULL); mosquitto_callback_unregister(plg_id, MOSQ_EVT_PERSIST_CLIENT_ADD, persist_sqlite__client_add_cb, NULL); mosquitto_callback_unregister(plg_id, MOSQ_EVT_PERSIST_CLIENT_DELETE, persist_sqlite__client_remove_cb, NULL); diff --git a/plugins/persist-sqlite/restore.c b/plugins/persist-sqlite/restore.c index a7fe70ba..5f0a0f97 100644 --- a/plugins/persist-sqlite/restore.c +++ b/plugins/persist-sqlite/restore.c @@ -343,7 +343,7 @@ static int retain_restore(struct mosquitto_sqlite *ms) } store_id = (uint64_t)sqlite3_column_int64(stmt, 1); - rc = mosquitto_persist_retain_msg_add(topic, store_id); + rc = mosquitto_persist_retain_msg_set(topic, store_id); if(rc == MOSQ_ERR_SUCCESS){ count++; }else{ diff --git a/plugins/persist-sqlite/retain_msgs.c b/plugins/persist-sqlite/retain_msgs.c index b117a875..b1544e52 100644 --- a/plugins/persist-sqlite/retain_msgs.c +++ b/plugins/persist-sqlite/retain_msgs.c @@ -23,7 +23,7 @@ Contributors: #include "mosquitto_broker.h" #include "persist_sqlite.h" -int persist_sqlite__retain_msg_add_cb(int event, void *event_data, void *userdata) +int persist_sqlite__retain_msg_set_cb(int event, void *event_data, void *userdata) { struct mosquitto_evt_persist_retain_msg *ed = event_data; struct mosquitto_sqlite *ms = userdata; @@ -31,19 +31,19 @@ int persist_sqlite__retain_msg_add_cb(int event, void *event_data, void *userdat UNUSED(event); - if(sqlite3_bind_text(ms->retain_msg_add_stmt, 1, ed->topic, (int)strlen(ed->topic), SQLITE_STATIC) == SQLITE_OK - && sqlite3_bind_int64(ms->retain_msg_add_stmt, 2, (int64_t)ed->store_id) == SQLITE_OK + if(sqlite3_bind_text(ms->retain_msg_set_stmt, 1, ed->topic, (int)strlen(ed->topic), SQLITE_STATIC) == SQLITE_OK + && sqlite3_bind_int64(ms->retain_msg_set_stmt, 2, (int64_t)ed->store_id) == SQLITE_OK ){ ms->event_count++; - rc = sqlite3_step(ms->retain_msg_add_stmt); + rc = sqlite3_step(ms->retain_msg_set_stmt); if(rc == SQLITE_DONE){ rc = MOSQ_ERR_SUCCESS; }else{ rc = MOSQ_ERR_UNKNOWN; } } - sqlite3_reset(ms->retain_msg_add_stmt); + sqlite3_reset(ms->retain_msg_set_stmt); return rc; } diff --git a/src/linker-macosx.syms b/src/linker-macosx.syms index 0b94ec38..51ea2efe 100644 --- a/src/linker-macosx.syms +++ b/src/linker-macosx.syms @@ -30,7 +30,7 @@ _mosquitto_persist_client_msg_add _mosquitto_persist_client_msg_delete _mosquitto_persist_client_msg_update _mosquitto_persist_client_update -_mosquitto_persist_retain_msg_add +_mosquitto_persist_retain_msg_set _mosquitto_persist_retain_msg_delete _mosquitto_plugin_set_info _mosquitto_property_add_binary diff --git a/src/linker.syms b/src/linker.syms index 5237536d..fb5ecf07 100644 --- a/src/linker.syms +++ b/src/linker.syms @@ -31,7 +31,7 @@ mosquitto_persist_client_msg_delete; mosquitto_persist_client_msg_update; mosquitto_persist_client_update; - mosquitto_persist_retain_msg_add; + mosquitto_persist_retain_msg_set; mosquitto_persist_retain_msg_delete; mosquitto_plugin_set_info; mosquitto_property_add_binary; diff --git a/src/mosquitto_broker_internal.h b/src/mosquitto_broker_internal.h index 19113018..5274f305 100644 --- a/src/mosquitto_broker_internal.h +++ b/src/mosquitto_broker_internal.h @@ -177,7 +177,7 @@ struct plugin__callbacks{ struct mosquitto__callback *persist_base_msg_add; struct mosquitto__callback *persist_base_msg_delete; struct mosquitto__callback *persist_base_msg_load; - struct mosquitto__callback *persist_retain_msg_add; + struct mosquitto__callback *persist_retain_msg_set; struct mosquitto__callback *persist_retain_msg_delete; }; @@ -871,7 +871,7 @@ void plugin_persist__handle_client_msg_update(struct mosquitto *context, const s void plugin_persist__handle_client_msg_clear(struct mosquitto *context, uint8_t direction); void plugin_persist__handle_base_msg_add(struct mosquitto_base_msg *base_msg); void plugin_persist__handle_base_msg_delete(struct mosquitto_base_msg *base_msg); -void plugin_persist__handle_retain_msg_add(struct mosquitto_base_msg *base_msg); +void plugin_persist__handle_retain_msg_set(struct mosquitto_base_msg *base_msg); void plugin_persist__handle_retain_msg_delete(struct mosquitto_base_msg *base_msg); /* ============================================================ diff --git a/src/plugin_callbacks.c b/src/plugin_callbacks.c index f7c33f07..c08f9bc7 100644 --- a/src/plugin_callbacks.c +++ b/src/plugin_callbacks.c @@ -55,8 +55,8 @@ static const char *get_event_name(int event) return "persist-base-msg-delete"; case MOSQ_EVT_PERSIST_BASE_MSG_LOAD: return "persist-base-msg-load"; - case MOSQ_EVT_PERSIST_RETAIN_MSG_ADD: - return "persist-retain-msg-add"; + case MOSQ_EVT_PERSIST_RETAIN_MSG_SET: + return "persist-retain-msg-set"; case MOSQ_EVT_PERSIST_RETAIN_MSG_DELETE: return "persist-retain-msg-delete"; case MOSQ_EVT_PERSIST_CLIENT_ADD: @@ -147,8 +147,8 @@ static struct mosquitto__callback **plugin__get_callback_base(struct mosquitto__ return &security_options->plugin_callbacks.persist_base_msg_delete; case MOSQ_EVT_PERSIST_BASE_MSG_LOAD: return &security_options->plugin_callbacks.persist_base_msg_load; - case MOSQ_EVT_PERSIST_RETAIN_MSG_ADD: - return &security_options->plugin_callbacks.persist_retain_msg_add; + case MOSQ_EVT_PERSIST_RETAIN_MSG_SET: + return &security_options->plugin_callbacks.persist_retain_msg_set; case MOSQ_EVT_PERSIST_RETAIN_MSG_DELETE: return &security_options->plugin_callbacks.persist_retain_msg_delete; default: diff --git a/src/plugin_persist.c b/src/plugin_persist.c index 7025486d..c055db0e 100644 --- a/src/plugin_persist.c +++ b/src/plugin_persist.c @@ -349,7 +349,7 @@ void plugin_persist__handle_base_msg_delete(struct mosquitto_base_msg *msg) } -void plugin_persist__handle_retain_msg_add(struct mosquitto_base_msg *msg) +void plugin_persist__handle_retain_msg_set(struct mosquitto_base_msg *msg) { struct mosquitto_evt_persist_retain_msg event_data; struct mosquitto__callback *cb_base; @@ -363,8 +363,8 @@ void plugin_persist__handle_retain_msg_add(struct mosquitto_base_msg *msg) event_data.store_id = msg->db_id; event_data.topic = msg->topic; - DL_FOREACH(opts->plugin_callbacks.persist_retain_msg_add, cb_base){ - cb_base->cb(MOSQ_EVT_PERSIST_RETAIN_MSG_ADD, &event_data, cb_base->userdata); + DL_FOREACH(opts->plugin_callbacks.persist_retain_msg_set, cb_base){ + cb_base->cb(MOSQ_EVT_PERSIST_RETAIN_MSG_SET, &event_data, cb_base->userdata); } } diff --git a/src/retain.c b/src/retain.c index 38383503..1e2db194 100644 --- a/src/retain.c +++ b/src/retain.c @@ -71,7 +71,7 @@ int retain__init(void) return MOSQ_ERR_SUCCESS; } -int mosquitto_persist_retain_msg_add(const char *topic, uint64_t base_msg_id) +int mosquitto_persist_retain_msg_set(const char *topic, uint64_t base_msg_id) { struct mosquitto_base_msg *base_msg; int rc = MOSQ_ERR_UNKNOWN; @@ -157,7 +157,8 @@ int retain__store(const char *topic, struct mosquitto_base_msg *base_msg, char * #endif if(retainhier->retained){ - if(persist && retainhier->retained->topic[0] != '$'){ + if(persist && retainhier->retained->topic[0] != '$' && base_msg->payloadlen == 0){ + /* Only delete if another retained message isn't replacing this one */ plugin_persist__handle_retain_msg_delete(retainhier->retained); } db__msg_store_ref_dec(&retainhier->retained); @@ -173,7 +174,7 @@ int retain__store(const char *topic, struct mosquitto_base_msg *base_msg, char * db__msg_store_ref_inc(retainhier->retained); if(persist && retainhier->retained->topic[0] != '$'){ plugin_persist__handle_base_msg_add(retainhier->retained); - plugin_persist__handle_retain_msg_add(retainhier->retained); + plugin_persist__handle_retain_msg_set(retainhier->retained); } #ifdef WITH_SYS_TREE db.retained_count++; diff --git a/test/unit/persist_read_stubs.c b/test/unit/persist_read_stubs.c index 32db75b6..25ffc869 100644 --- a/test/unit/persist_read_stubs.c +++ b/test/unit/persist_read_stubs.c @@ -227,7 +227,7 @@ void context__add_to_by_id(struct mosquitto *context) } } -void plugin_persist__handle_retain_msg_add(struct mosquitto_base_msg *msg) +void plugin_persist__handle_retain_msg_set(struct mosquitto_base_msg *msg) { UNUSED(msg); } diff --git a/test/unit/persist_write_stubs.c b/test/unit/persist_write_stubs.c index ab94cd12..cdb6aa49 100644 --- a/test/unit/persist_write_stubs.c +++ b/test/unit/persist_write_stubs.c @@ -198,7 +198,7 @@ void plugin_persist__handle_base_msg_delete(struct mosquitto_base_msg *msg) { UNUSED(msg); } -void plugin_persist__handle_retain_msg_add(struct mosquitto_base_msg *msg) +void plugin_persist__handle_retain_msg_set(struct mosquitto_base_msg *msg) { UNUSED(msg); } diff --git a/test/unit/stubs.c b/test/unit/stubs.c index 3dcd5992..660dfe0f 100644 --- a/test/unit/stubs.c +++ b/test/unit/stubs.c @@ -13,7 +13,7 @@ struct mosquitto_db{ }; -struct mosquitto_msg_store{ +struct mosquitto_base_msg{ }; @@ -95,12 +95,12 @@ ssize_t net__write(struct mosquitto *mosq, const void *buf, size_t count) return 1; } -void plugin_persist__handle_retain_add(struct mosquitto_msg_store *msg) +void plugin_persist__handle_retain_set(struct mosquitto_base_msg *msg) { UNUSED(msg); } -void plugin_persist__handle_retain_remove(struct mosquitto_msg_store *msg) +void plugin_persist__handle_retain_remove(struct mosquitto_base_msg *msg) { UNUSED(msg); }