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
This commit is contained in:
Andrew Bettison 2014-11-11 17:11:33 +10:30
parent 005489ab40
commit 3c4703feb4
5 changed files with 21 additions and 8 deletions

View File

@ -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,

View File

@ -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>'

View File

@ -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' '<Howdydoody' '>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

View File

@ -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

View File

@ -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