Jelajahi Sumber

feat: wire vector WAL entries in PersistenceManager

fszontagh 4 bulan lalu
induk
melakukan
354ae562b5

+ 28 - 0
service/src/persistence/persistence_manager.cpp

@@ -149,6 +149,17 @@ bool PersistenceManager::recover(MemoryStore& store) {
                                        (*entry.data)["member"].get<std::string>());
                     }
                     break;
+
+                case WalOpType::VEC_PUT:
+                    if (entry.vectorData.has_value()) {
+                        store.loadVector(entry.collection, entry.documentId, *entry.vectorData);
+                    }
+                    break;
+
+                case WalOpType::VEC_DELETE:
+                    // Vector deletion is handled when the document is deleted
+                    // during normal recovery (DELETE entries). No separate action needed.
+                    break;
             }
         });
 
@@ -211,6 +222,23 @@ void PersistenceManager::logDropCollection(const std::string& collection) {
     collectionSequences_.erase(collection);
 }
 
+uint64_t PersistenceManager::logVecPut(const std::string& collection, const std::string& docId,
+                                        const std::vector<float>& vec) {
+    if (!running_.load()) return 0;
+    auto entry = WriteAheadLog::makeVecPutEntry(collection, docId, vec);
+    uint64_t seq = wal_->append(entry);
+    updateCollectionSequence(collection, seq);
+    return seq;
+}
+
+uint64_t PersistenceManager::logVecDelete(const std::string& collection, const std::string& docId) {
+    if (!running_.load()) return 0;
+    auto entry = WriteAheadLog::makeVecDeleteEntry(collection, docId);
+    uint64_t seq = wal_->append(entry);
+    updateCollectionSequence(collection, seq);
+    return seq;
+}
+
 void PersistenceManager::forceSnapshot(const MemoryStore& store) {
     {
         std::lock_guard<std::mutex> lock(storeMutex_);

+ 11 - 0
service/src/persistence/persistence_manager.hpp

@@ -96,6 +96,17 @@ public:
      */
     void logDropCollection(const std::string& collection);
 
+    /**
+     * Log a vector put operation.
+     */
+    uint64_t logVecPut(const std::string& collection, const std::string& docId,
+                       const std::vector<float>& vec);
+
+    /**
+     * Log a vector delete operation.
+     */
+    uint64_t logVecDelete(const std::string& collection, const std::string& docId);
+
     /**
      * Force an immediate snapshot.
      * Blocks until snapshot is complete.