From 3c4703feb4ad10506d4ccb2cdf37a0d29f761c37 Mon Sep 17 00:00:00 2001 From: Andrew Bettison Date: Tue, 11 Nov 2014 17:11:33 +1030 Subject: [PATCH] Reduce DB locking issues in RESTful tests Add environment variable SERVALD_RHIZOME_DB_RETRY_LIMIT to extend the Rhizome DB retry period, set it to 60 seconds in RESTful tests to override the default 5 seconds --- rhizome_database.c | 6 +++++- tests/meshmsjava | 3 ++- tests/meshmsrestful | 12 +++++++++--- tests/rhizomejava | 3 ++- tests/rhizomerestful | 5 +++-- 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/rhizome_database.c b/rhizome_database.c index 18d52519..777952c1 100644 --- a/rhizome_database.c +++ b/rhizome_database.c @@ -46,6 +46,7 @@ static int create_rhizome_store_dir() sqlite3 *rhizome_db = NULL; serval_uuid_t rhizome_db_uuid; +static time_ms_t rhizomeRetryLimit = -1; int is_debug_rhizome() { @@ -219,6 +220,9 @@ int rhizome_opendb() sqlite3_profile(rhizome_db, sqlite_profile_callback, NULL); int loglevel = (config.debug.rhizome) ? LOG_LEVEL_DEBUG : LOG_LEVEL_SILENT; + const char *env = getenv("SERVALD_RHIZOME_DB_RETRY_LIMIT_MS"); + rhizomeRetryLimit = env ? atoi(env) : -1; + /* Read Rhizome configuration */ if (config.debug.rhizome) DEBUGF("Rhizome will use %"PRIu64"B of storage for its database.", (uint64_t) config.rhizome.database_size); @@ -414,7 +418,7 @@ int rhizome_close_db() sqlite_retry_state sqlite_retry_state_init(int serverLimit, int serverSleep, int otherLimit, int otherSleep) { return (sqlite_retry_state){ - .limit = serverMode ? (serverLimit < 0 ? 50 : serverLimit) : (otherLimit < 0 ? 5000 : otherLimit), + .limit = rhizomeRetryLimit >= 0 ? rhizomeRetryLimit : serverMode ? (serverLimit < 0 ? 50 : serverLimit) : (otherLimit < 0 ? 5000 : otherLimit), .sleep = serverMode ? (serverSleep < 0 ? 10 : serverSleep) : (otherSleep < 0 ? 100 : otherSleep), .elapsed = 0, .start = -1, diff --git a/tests/meshmsjava b/tests/meshmsjava index e223e826..5919dbed 100755 --- a/tests/meshmsjava +++ b/tests/meshmsjava @@ -34,6 +34,7 @@ setup() { set debug.meshms on set_extra_config create_identities 4 + export SERVALD_RHIZOME_DB_RETRY_LIMIT_MS=60000 start_servald_server } @@ -195,7 +196,7 @@ doc_MeshmsListMessagesNewSinceArrival="Java API list newly arriving MeshMS messa setup_MeshmsListMessagesNewSinceArrival() { set_extra_config() { executeOk_servald config set api.restful.newsince_timeout 60s \ - set api.restful.newsince_poll_ms 500 + set api.restful.newsince_poll_ms 1000 } setup meshms_add_messages $SIDA1 $SIDA2 '><>A>' diff --git a/tests/meshmsrestful b/tests/meshmsrestful index fe183755..4f2bba77 100755 --- a/tests/meshmsrestful +++ b/tests/meshmsrestful @@ -42,6 +42,7 @@ setup() { else create_identities $IDENTITY_COUNT fi + export SERVALD_RHIZOME_DB_RETRY_LIMIT_MS=60000 start_servald_instances +A wait_until servald_restful_http_server_started +A get_servald_restful_http_server_port PORTA +A @@ -342,8 +343,8 @@ doc_MeshmsListMessagesNewSinceArrival="HTTP RESTful list newly arriving MeshMS m setup_MeshmsListMessagesNewSinceArrival() { IDENTITY_COUNT=2 set_extra_config() { - executeOk_servald config set api.restful.newsince_timeout 60s \ - set api.restful.newsince_poll_ms 500 + executeOk_servald config set api.restful.newsince_timeout 360s \ + set api.restful.newsince_poll_ms 1000 } setup meshms_add_messages $SIDA1 $SIDA2 '><>A>' @@ -372,7 +373,12 @@ test_MeshmsListMessagesNewSinceArrival() { wait_until [ -e newsince1.json -a -e newsince2.json -a -e newsince3.json ] for message in '>Rumplestiltskin' 'A' 'Eulenspiegel'; do meshms_add_messages $SIDA1 $SIDA2 "${message:0:1}" "${message:1}" - wait_until --timeout=10 grepall "${message:1}" newsince{1,2,3}.json + case ${message:0:1} in + '<'|'>') waitfor="${message:1}";; + 'A') waitfor="ACK";; + *) error "message=${message}";; + esac + wait_until grepall "$waitfor" newsince{1,2,3}.json done fork_terminate_all fork_wait_all diff --git a/tests/rhizomejava b/tests/rhizomejava index 25a233aa..2de0280f 100755 --- a/tests/rhizomejava +++ b/tests/rhizomejava @@ -35,6 +35,7 @@ setup() { set debug.rhizome_manifest on set_extra_config create_identities 4 + export SERVALD_RHIZOME_DB_RETRY_LIMIT_MS=60000 start_servald_server } @@ -150,7 +151,7 @@ doc_RhizomeListNewSince="Java API list Rhizome bundles since token" setup_RhizomeListNewSince() { set_extra_config() { executeOk_servald config set api.restful.newsince_timeout 60s \ - set api.restful.newsince_poll_ms 500 + set api.restful.newsince_poll_ms 1000 } setup rhizome_add_bundles $SIDA1 0 5 diff --git a/tests/rhizomerestful b/tests/rhizomerestful index 319f92f1..b3e85584 100755 --- a/tests/rhizomerestful +++ b/tests/rhizomerestful @@ -43,6 +43,7 @@ setup() { else create_identities $IDENTITY_COUNT fi + export SERVALD_RHIZOME_DB_RETRY_LIMIT_MS=60000 start_servald_instances +A wait_until servald_restful_http_server_started +A get_servald_restful_http_server_port PORTA +A @@ -232,7 +233,7 @@ doc_RhizomeListNewSince="HTTP RESTful list Rhizome bundles since token as JSON" setup_RhizomeListNewSince() { set_extra_config() { executeOk_servald config set api.restful.newsince_timeout 60s \ - set api.restful.newsince_poll_ms 500 + set api.restful.newsince_poll_ms 1000 } setup rhizome_add_bundles $SIDA 0 5 @@ -259,7 +260,7 @@ test_RhizomeListNewSince() { wait_until [ -e newsince1.json -a -e newsince2.json -a -e newsince3.json ] rhizome_add_bundles $SIDA 6 10 for i in 1 2 3; do - wait_until --timeout=10 grep "${BID[10]}" newsince$i.json + wait_until grep "${BID[10]}" newsince$i.json done fork_terminate_all fork_wait_all