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.org
Delete 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