From 9e3209f55f644f6c13e0d6a2e4cf2173bbae6ee5 Mon Sep 17 00:00:00 2001 From: karnem <mikhail.karnevskiy@desy.de> Date: Thu, 30 Nov 2023 15:43:08 +0100 Subject: [PATCH] Fix stream_delete functionality. Now stream metadata, auto_incrementing_id and list of streams are cleaned up. --- broker/src/asapo_broker/database/mongodb.go | 9 +++++++++ common/cpp/src/database/mongodb_client.cpp | 9 ++++++--- common/cpp/src/database/mongodb_client.h | 3 ++- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/broker/src/asapo_broker/database/mongodb.go b/broker/src/asapo_broker/database/mongodb.go index fa2052b28..ac3f5c643 100644 --- a/broker/src/asapo_broker/database/mongodb.go +++ b/broker/src/asapo_broker/database/mongodb.go @@ -79,6 +79,7 @@ const pointer_collection_name = "current_location" const pointer_field_name = "current_pointer" const last_message_collection_name = "last_messages" const last_message_field_name = "last_message" +const auto_id_counter_name = "auto_id_counters" const no_session_msg = "database client not created" const already_connected_msg = "already connected" @@ -1105,6 +1106,14 @@ func (db *Mongodb) deleteServiceMeta(request Request) error { if err != nil { return err } + db.deleteDocumentsInCollection(request, auto_id_counter_name, "_id", ".*_"+escapeQuery(request.Stream)+"$") + if err != nil { + return err + } + db.deleteDocumentsInCollection(request, streams_info, "name", escapeQuery(request.Stream)) + if err != nil { + return err + } return db.deleteDocumentsInCollection(request, pointer_collection_name, "_id", ".*_"+escapeQuery(request.Stream)+"$") } diff --git a/common/cpp/src/database/mongodb_client.cpp b/common/cpp/src/database/mongodb_client.cpp index 1f5b037f1..3723e1da5 100644 --- a/common/cpp/src/database/mongodb_client.cpp +++ b/common/cpp/src/database/mongodb_client.cpp @@ -861,11 +861,12 @@ Error MongoDBClient::DeleteCollection(const std::string& name) const { } Error MongoDBClient::DeleteDocumentsInCollection(const std::string& collection_name, - const std::string& querystr) const { + const std::string& querystr, + const std::string& field_name="_id") const { auto collection = mongoc_client_get_collection(client_, database_name_.c_str(), collection_name.c_str()); mongoc_collection_set_write_concern(collection, write_concern_); bson_error_t error; - auto query = BCON_NEW ("_id", BCON_REGEX(querystr.c_str(), "i")); + auto query = BCON_NEW (field_name.c_str(), BCON_REGEX(querystr.c_str(), "i")); if (!mongoc_collection_delete_many(collection, query, NULL, NULL, &error)) { return DBErrorTemplates::kDBError.Generate(error.message); } @@ -886,8 +887,10 @@ Error MongoDBClient::DeleteStream(const std::string& stream) const { DeleteCollections(acks_col); std::string querystr = ".*_" + EscapeQuery(stream_encoded) + "$"; DeleteDocumentsInCollection("current_location", querystr); + DeleteDocumentsInCollection("auto_id_counters", "^data_" + EscapeQuery(stream_encoded) + "$"); + DeleteDocumentsInCollection("streams", "^" + EscapeQuery(stream_encoded) + "$", "name"); } - DeleteDocumentsInCollection("meta", "^" + EscapeQuery(stream_encoded) + "$"); + DeleteDocumentsInCollection("meta", "^st_" + EscapeQuery(stream_encoded) + "$"); ModifyPersistedStreamsList(stream, false); return err; } diff --git a/common/cpp/src/database/mongodb_client.h b/common/cpp/src/database/mongodb_client.h index e45d79521..1681d597a 100644 --- a/common/cpp/src/database/mongodb_client.h +++ b/common/cpp/src/database/mongodb_client.h @@ -89,7 +89,8 @@ class MongoDBClient final : public Database { Error UpdateLastStreamInfo(const char* str, StreamInfo* info) const; Error DeleteCollection(const std::string& name) const; Error DeleteCollections(const std::string& prefix) const; - Error DeleteDocumentsInCollection(const std::string& collection_name, const std::string& querystr) const; + Error DeleteDocumentsInCollection(const std::string& collection_name, const std::string& querystr, + const std::string& field_name) const; Error InsertWithAutoId(const MessageMeta& file, uint64_t* id_inserted) const; Error ModifyPersistedStreamsList(const std::string& stream_name, bool add) const; }; -- GitLab