Skip to content

Commit 98f54a4

Browse files
committed
presence: Fix database purge of activewatchers (clustering, no fallback2db)
When clustering sharing_tags were added to presence, they were added to the fallback2db "on" case only: There are a couple of dimensions with differing behaviours: +------------+------------+ | fallback2- | fallback2- | | -db = on | -db = off | +-clustering:-+------------+------------+ | - no | OK | OK | | - tagless | PR-2519 | PR-2519 | | - active | OK | this | +-------------+------------+------------+ The non-OK behaviour above refers to the activewatcher table getting filled up with stale/expired items. fallback2db on or off: ``` modparam("presence", "fallback2db", 0) # or 1=on ``` The no-clustering case: ``` handle_subscribe(); ``` The tagless case: ``` modparam("presence", "cluster_id", 1) modparam("clusterer", "my_node_id", 2) handle_subscribe(); ``` The active case: ``` modparam("presence", "cluster_id", 1) modparam("clusterer", "my_node_id", 2) modparam("clusterer", "sharing_tag", "node2/1=active") handle_subscribe("0", "node2"); ``` Where PR OpenSIPS#2519 fixes the tagless case, this PR fixes the fallback2db=0 case by writing the sharing_tag to the database so the records can get found and cleaned up. (Sidenote: subscriptions which ended with a timeout or 481 *would* get cleaned up. This makes sense in all cases: if they have an error before their expiry, it makes sense to purge them from the DB immediately. And it's not a problem if the perioding cleanup had cleaned those records already.)
1 parent 7f7118b commit 98f54a4

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

modules/presence/subscribe.c

+18-6
Original file line numberDiff line numberDiff line change
@@ -1364,9 +1364,10 @@ void update_db_subs(db_con_t *db,db_func_t *dbf, shtable_t hash_table,
13641364
db_op_t update_ops[2];
13651365
subs_t* del_s;
13661366
int pres_uri_col, to_user_col, to_domain_col, from_user_col, from_domain_col,
1367-
callid_col, totag_col, fromtag_col, event_col,status_col, event_id_col,
1367+
callid_col, totag_col, fromtag_col, event_col, status_col, event_id_col,
13681368
local_cseq_col, remote_cseq_col, expires_col, record_route_col,
1369-
contact_col, local_contact_col, version_col,socket_info_col,reason_col;
1369+
contact_col, local_contact_col, version_col, socket_info_col,
1370+
sharing_tag_col, reason_col;
13701371
int u_expires_col, u_local_cseq_col, u_remote_cseq_col, u_version_col,
13711372
u_reason_col, u_status_col, u_contact_col;
13721373
int i;
@@ -1472,14 +1473,19 @@ void update_db_subs(db_con_t *db,db_func_t *dbf, shtable_t hash_table,
14721473
query_vals[local_contact_col].nul = 0;
14731474
n_query_cols++;
14741475

1476+
query_cols[version_col= n_query_cols]=&str_version_col;
1477+
query_vals[version_col].type = DB_INT;
1478+
query_vals[version_col].nul = 0;
1479+
n_query_cols++;
1480+
14751481
query_cols[socket_info_col= n_query_cols] =&str_socket_info_col;
14761482
query_vals[socket_info_col].type = DB_STR;
14771483
query_vals[socket_info_col].nul = 0;
14781484
n_query_cols++;
14791485

1480-
query_cols[version_col= n_query_cols]=&str_version_col;
1481-
query_vals[version_col].type = DB_INT;
1482-
query_vals[version_col].nul = 0;
1486+
query_cols[sharing_tag_col= n_query_cols] =&str_sharing_tag_col;
1487+
query_vals[sharing_tag_col].type = DB_STR;
1488+
query_vals[sharing_tag_col].nul = 0;
14831489
n_query_cols++;
14841490

14851491
/* cols and values used for update */
@@ -1639,10 +1645,16 @@ void update_db_subs(db_con_t *db,db_func_t *dbf, shtable_t hash_table,
16391645
query_vals[socket_info_col].val.str_val.s = 0;
16401646
query_vals[socket_info_col].val.str_val.len = 0;
16411647
}
1648+
if (s->sh_tag.len == 0) {
1649+
query_vals[sharing_tag_col].nul = 1;
1650+
} else {
1651+
query_vals[sharing_tag_col].nul = 0;
1652+
query_vals[sharing_tag_col].val.str_val = s->sh_tag;
1653+
}
16421654

16431655
CON_SET_CURR_PS(db, &my_ps_insert);
16441656
if (dbf->insert( db, query_cols, query_vals,
1645-
n_query_cols) < 0)
1657+
n_query_cols) < 0)
16461658
{
16471659
LM_ERR("unsuccessful sql insert\n");
16481660
}

0 commit comments

Comments
 (0)