[PATCH] osmo-msc[master]: Delete expired SMS automatically.

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
Mon Jan 22 17:42:07 UTC 2018


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



More information about the gerrit-log mailing list