From d055495b4444a302dc1ba4579bd8f7488b63a375 Mon Sep 17 00:00:00 2001 From: Josip Mrden Date: Tue, 27 Feb 2024 13:22:47 +0100 Subject: [PATCH] Take just main lock over the storage --- src/query/interpreter.cpp | 18 +++++------------- src/storage/v2/inmemory/storage.cpp | 2 -- 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/src/query/interpreter.cpp b/src/query/interpreter.cpp index ec84c10c4..3aebade6e 100644 --- a/src/query/interpreter.cpp +++ b/src/query/interpreter.cpp @@ -3190,20 +3190,12 @@ Callback SwitchMemoryDevice(storage::StorageMode current_mode, storage::StorageM Callback DropGraph(memgraph::dbms::DatabaseAccess &db) { Callback callback; callback.fn = [&db]() mutable { - if (!db.try_exclusively([](auto &in) { - spdlog::info("Woohooooo!!"); - auto current_storage_mode = in.GetStorageMode(); - if (current_storage_mode != storage::StorageMode::IN_MEMORY_ANALYTICAL) { - throw utils::BasicException("Drop graph can not be used without IN_MEMORY_ANALYTICAL storage mode!"); - } - - std::this_thread::sleep_for(std::chrono::seconds(10)); - in.UniqueAccess()->DropGraph(); - })) { // Try exclusively failed - throw utils::BasicException( - "Drop graph command failed! Ensure that you're the only transaction currently running!"); + auto storage = db->UniqueAccess(); + auto storage_mode = db->GetStorageMode(); + if (storage_mode != storage::StorageMode::IN_MEMORY_ANALYTICAL) { + throw utils::BasicException("Drop graph can not be used without IN_MEMORY_ANALYTICAL storage mode!"); } - + storage->DropGraph(); return std::vector>(); }; diff --git a/src/storage/v2/inmemory/storage.cpp b/src/storage/v2/inmemory/storage.cpp index 8134be070..45dc7a9c2 100644 --- a/src/storage/v2/inmemory/storage.cpp +++ b/src/storage/v2/inmemory/storage.cpp @@ -2162,8 +2162,6 @@ void InMemoryStorage::FreeMemory(std::unique_lock main_guar } void InMemoryStorage::DropGraph() { - std::unique_lock main_guard{main_lock_}; - auto const unlink_remove_clear = [&](std::deque &deltas) { for (auto &delta : deltas) { auto prev = delta.prev.Get();