diff --git a/api/impl/cactusDisk.c b/api/impl/cactusDisk.c index 5b74ef53e..e1bd18d50 100644 --- a/api/impl/cactusDisk.c +++ b/api/impl/cactusDisk.c @@ -606,7 +606,7 @@ void cactusDisk_addUpdateRequest(CactusDisk *cactusDisk, Flower *flower) { free(compressed); } -void cactusDisk_forceParameterUpdate(CactusDisk *cactusDisk) { +void cactusDisk_forceParameterUpdate(CactusDisk *cactusDisk, bool keyAlreadyExists) { int64_t recordSize; void *cactusDiskParameters = binaryRepresentation_makeBinaryRepresentation(cactusDisk, @@ -614,9 +614,15 @@ void cactusDisk_forceParameterUpdate(CactusDisk *cactusDisk) { &recordSize); //Compression cactusDiskParameters = compress(cactusDiskParameters, &recordSize); - stList_append(cactusDisk->updateRequests, - stKVDatabaseBulkRequest_constructUpdateRequest(CACTUS_DISK_PARAMETER_KEY, cactusDiskParameters, - recordSize)); + if (keyAlreadyExists) { + stList_append(cactusDisk->updateRequests, + stKVDatabaseBulkRequest_constructUpdateRequest(CACTUS_DISK_PARAMETER_KEY, cactusDiskParameters, + recordSize)); + } else { + stList_append(cactusDisk->updateRequests, + stKVDatabaseBulkRequest_constructInsertRequest(CACTUS_DISK_PARAMETER_KEY, cactusDiskParameters, + recordSize)); + } free(cactusDiskParameters); } @@ -675,7 +681,7 @@ void cactusDisk_write(CactusDisk *cactusDisk) { st_logDebug("Got the sequences we are going to add to the database.\n"); if (!containsRecord(cactusDisk, CACTUS_DISK_PARAMETER_KEY)) { //We only write the parameters once. - cactusDisk_forceParameterUpdate(cactusDisk); + cactusDisk_forceParameterUpdate(cactusDisk, false); } st_logDebug("Checked if need to write the initial parameters\n"); diff --git a/api/inc/cactusDisk.h b/api/inc/cactusDisk.h index 631f55e87..76a461cc4 100644 --- a/api/inc/cactusDisk.h +++ b/api/inc/cactusDisk.h @@ -103,8 +103,10 @@ EventTree *cactusDisk_getEventTree(CactusDisk *cactusDisk); /* * Forces an update of the cactusDisk base parameters (event tree, - * etc.) on the next write. + * etc.) on the next write. Set keyAlreadyExists to true if this is an + * update of the existing parameters, false if the parameters are + * being inserted for the first time. */ -void cactusDisk_forceParameterUpdate(CactusDisk *cactusDisk); +void cactusDisk_forceParameterUpdate(CactusDisk *cactusDisk, bool keyAlreadyExists); #endif diff --git a/phylogeny/cactus_phylogeny.c b/phylogeny/cactus_phylogeny.c index 025a17d19..bb749992f 100644 --- a/phylogeny/cactus_phylogeny.c +++ b/phylogeny/cactus_phylogeny.c @@ -877,7 +877,7 @@ int main(int argc, char *argv[]) { /////////////////////////////////////////////////////////////////////////// startTime = time(NULL); - cactusDisk_forceParameterUpdate(cactusDisk); + cactusDisk_forceParameterUpdate(cactusDisk, true); cactusDisk_write(cactusDisk); st_logInfo("Updated the flower on disk in: %" PRIi64 " seconds\n", time(NULL) - startTime);