From 852e98fb516f6486d3621a7831d170dc11fbf44b Mon Sep 17 00:00:00 2001
From: jbajic <jure.bajic@memgraph.com>
Date: Thu, 2 Feb 2023 14:00:08 +0100
Subject: [PATCH] Fix split logic

---
 src/storage/v3/splitter.cpp | 34 ++++++++++++++++------------------
 1 file changed, 16 insertions(+), 18 deletions(-)

diff --git a/src/storage/v3/splitter.cpp b/src/storage/v3/splitter.cpp
index d61b7a0a9..e5a8b9dd0 100644
--- a/src/storage/v3/splitter.cpp
+++ b/src/storage/v3/splitter.cpp
@@ -160,17 +160,6 @@ void Splitter::AdjustClonedTransaction(Transaction &cloned_transaction, const Tr
       // Align next ptr
       // Get cloned_delta->next transaction, using delta->next original transaction
       AdjustDeltaNext(*delta, *cloned_delta, cloned_transactions);
-      // auto cloned_transaction_it =
-      //     cloned_transactions.find(delta->next->commit_info->start_or_commit_timestamp.logical_id);
-      // MG_ASSERT(cloned_transaction_it != cloned_transactions.end(), "Cloned transaction not found");
-      // // Find cloned delta in delta list of cloned transaction
-      // auto found_cloned_delta_it = std::ranges::find_if(
-      //     cloned_transaction_it->second->deltas, [delta](const auto &elem) { return elem.uuid == delta->next->uuid;
-      //     });
-      // MG_ASSERT(found_cloned_delta_it != cloned_transaction_it->second->deltas.end(),
-      //           "Delta with given uuid must exist!");
-
-      // cloned_delta->next = &*found_cloned_delta_it;
 
       // Align prev ptr
       auto ptr = delta->prev.Get();
@@ -180,18 +169,24 @@ void Splitter::AdjustClonedTransaction(Transaction &cloned_transaction, const Tr
           break;
         }
         case PreviousPtr::Type::DELTA: {
-          auto cloned_transaction_it =
-              cloned_transactions.find(ptr.delta->commit_info->start_or_commit_timestamp.logical_id);
+          // Same as for deltas except don't align next but prev
+          // auto cloned_transaction_it =
+          //     cloned_transactions.find(ptr.delta->commit_info->start_or_commit_timestamp.logical_id);
+          auto cloned_transaction_it = std::ranges::find_if(cloned_transactions, [&ptr](const auto &elem) {
+            return elem.second->start_timestamp == ptr.delta->commit_info->start_or_commit_timestamp ||
+                   elem.second->commit_info->start_or_commit_timestamp ==
+                       ptr.delta->commit_info->start_or_commit_timestamp;
+          });
           MG_ASSERT(cloned_transaction_it != cloned_transactions.end(), "Cloned transaction not found");
           // Find cloned delta in delta list of cloned transaction
           auto found_cloned_delta_it =
               std::ranges::find_if(cloned_transaction_it->second->deltas,
-                                   [delta = ptr.delta](const auto &elem) { return elem.uuid == delta->next->uuid; });
+                                   [delta = ptr.delta](const auto &elem) { return elem.uuid == delta->uuid; });
           MG_ASSERT(found_cloned_delta_it != cloned_transaction_it->second->deltas.end(),
                     "Delta with given uuid must exist!");
 
-          // cloned_delta->next = &*found_cloned_delta_it;
-          ptr.delta.break;
+          cloned_delta->prev.Set(&*found_cloned_delta_it);
+          break;
         }
         case PreviousPtr::Type::VERTEX: {
           // What if the vertex is already moved to garbage collection...
@@ -223,8 +218,11 @@ void Splitter::AdjustClonedTransaction(Transaction &cloned_transaction, const Tr
 void Splitter::AdjustDeltaNext(const Delta &original, Delta &cloned,
                                std::map<uint64_t, std::unique_ptr<Transaction>> &cloned_transactions) {
   // Get cloned_delta->next transaction, using delta->next original transaction
-  auto cloned_transaction_it =
-      cloned_transactions.find(original.next->commit_info->start_or_commit_timestamp.logical_id);
+  auto cloned_transaction_it = std::ranges::find_if(cloned_transactions, [&original](const auto &elem) {
+    return elem.second->start_timestamp == original.next->commit_info->start_or_commit_timestamp ||
+           elem.second->commit_info->start_or_commit_timestamp == original.next->commit_info->start_or_commit_timestamp;
+  });
+
   MG_ASSERT(cloned_transaction_it != cloned_transactions.end(), "Cloned transaction not found");
   // Find cloned delta in delta list of cloned transaction
   auto found_cloned_delta_it =