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

2018-01-22 Thread Stefan Sperling

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 
Gerrit-Reviewer: Jenkins Builder


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

2018-01-22 Thread Stefan Sperling

Review at  https://gerrit.osmocom.org/5996

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
Depends: Icd6093b7b5d8db84b19a0aa47c68182566113ee2
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/1

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: newchange
Gerrit-Change-Id: I56cbe716e52b679c4b94f6cbb4a171306975be2e
Gerrit-PatchSet: 1
Gerrit-Project: osmo-msc
Gerrit-Branch: master
Gerrit-Owner: Stefan Sperling