This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
Stefan Sperling gerrit-no-reply at lists.osmocom.orgDelete expired SMS automatically. Delete expired SMS whenever we are done processing an SMS-related signal. In order to minimize additional latency only one SMS is removed at a time. Change-Id: I56cbe716e52b679c4b94f6cbb4a171306975be2e Related: OS#2354 --- M include/osmocom/msc/db.h M src/libmsc/db.c M src/libmsc/sms_queue.c 3 files changed, 48 insertions(+), 14 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-msc refs/changes/96/5996/2 diff --git a/include/osmocom/msc/db.h b/include/osmocom/msc/db.h index 2105d38..a1de7d6 100644 --- a/include/osmocom/msc/db.h +++ b/include/osmocom/msc/db.h @@ -51,6 +51,7 @@ int db_sms_delete_by_msisdn(const char *msisdn); int db_sms_delete_sent_message_by_id(unsigned long long sms_id); int db_sms_delete_expired_message_by_id(unsigned long long sms_id); +void db_sms_delete_oldest_expired_message(void); /* Statistics counter storage */ struct osmo_counter; diff --git a/src/libmsc/db.c b/src/libmsc/db.c index ccd659e..972bc5f 100644 --- a/src/libmsc/db.c +++ b/src/libmsc/db.c @@ -989,22 +989,11 @@ return 0; } -int db_sms_delete_expired_message_by_id(unsigned long long sms_id) + +static int delete_expired_sms(unsigned long long sms_id, time_t created, time_t validity_timestamp) { dbi_result result; - time_t created, validity_timestamp, now, min_created; - - result = dbi_conn_queryf(conn, "SELECT created,valid_until FROM SMS WHERE id = %llu", sms_id); - if (!result) - return -1; - if (!next_row(result)) { - dbi_result_free(result); - return -1; - } - - created = dbi_result_get_datetime(result, "created"); - validity_timestamp = dbi_result_get_datetime(result, "valid_until"); - dbi_result_free(result); + time_t now, min_created; now = time(NULL); if (validity_timestamp > now) @@ -1026,6 +1015,47 @@ return 0; } +int db_sms_delete_expired_message_by_id(unsigned long long sms_id) +{ + dbi_result result; + time_t created, validity_timestamp; + + result = dbi_conn_queryf(conn, "SELECT created,valid_until FROM SMS WHERE id = %llu", sms_id); + if (!result) + return -1; + if (!next_row(result)) { + dbi_result_free(result); + return -1; + } + + created = dbi_result_get_datetime(result, "created"); + validity_timestamp = dbi_result_get_datetime(result, "valid_until"); + + dbi_result_free(result); + return delete_expired_sms(sms_id, created, validity_timestamp); +} + +void db_sms_delete_oldest_expired_message(void) +{ + dbi_result result; + + result = dbi_conn_queryf(conn, "SELECT id,created,valid_until FROM SMS ORDER BY created LIMIT 1"); + if (!result) + return; + + if (next_row(result)) { + unsigned long long sms_id; + time_t created, validity_timestamp; + + sms_id = dbi_result_get_ulonglong(result, "id"); + created = dbi_result_get_datetime(result, "created"); + validity_timestamp = dbi_result_get_datetime(result, "valid_until"); + delete_expired_sms(sms_id, created, validity_timestamp); + } + + dbi_result_free(result); +} + int db_store_counter(struct osmo_counter *ctr) { dbi_result result; diff --git a/src/libmsc/sms_queue.c b/src/libmsc/sms_queue.c index 8cc9eb3..6db8ba9 100644 --- a/src/libmsc/sms_queue.c +++ b/src/libmsc/sms_queue.c @@ -530,6 +530,9 @@ sig_sms->paging_result); } + /* While here, attempt to remove an expired SMS from the DB. */ + db_sms_delete_oldest_expired_message(); + return 0; } -- To view, visit https://gerrit.osmocom.org/5996 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: I56cbe716e52b679c4b94f6cbb4a171306975be2e Gerrit-PatchSet: 2 Gerrit-Project: osmo-msc Gerrit-Branch: master Gerrit-Owner: Stefan Sperling <ssperling at sysmocom.de> Gerrit-Reviewer: Jenkins Builder