diff options
Diffstat (limited to 'zenserver')
| -rw-r--r-- | zenserver/projectstore.cpp | 46 |
1 files changed, 26 insertions, 20 deletions
diff --git a/zenserver/projectstore.cpp b/zenserver/projectstore.cpp index 280e5ab07..95fb2d3f8 100644 --- a/zenserver/projectstore.cpp +++ b/zenserver/projectstore.cpp @@ -572,8 +572,15 @@ ProjectStore::Oplog::AddDerivedDataMapping(const RwLock::ExclusiveLockScope&, if (Id == ValueId) { Cid = ValueObj["RawHash"sv].AsHash(); + break; } } + + if (Cid == IoHash::Zero) + { + // Failed to map Value id to content ID + return false; + } } } @@ -613,26 +620,6 @@ ProjectStore::Oplog::RegisterOplogEntry(CbObject Core, const OplogEntry& OpEntry if (PkgObj["meta"]) { CbObjectView MetaObj = PkgObj["meta"sv].AsObjectView(); - - for (CbFieldView& Entry : MetaObj["deriveddata"sv]) - { - CbObjectView DerivedDataObj = Entry.AsObjectView(); - std::string_view Namespace = DerivedDataObj["namespace"sv].AsString(std::string_view("ue.ddc")); - CbObjectView CacheKey = DerivedDataObj["cachekey"sv].AsObjectView(); - std::string_view Bucket = CacheKey["Bucket"sv].AsString(); - const IoHash Hash = CacheKey["Hash"sv].AsHash(); - const Oid ValueId = DerivedDataObj["valueid"sv].AsObjectId(); - const Oid ChunkId = DerivedDataObj["chunkid"sv].AsObjectId(); - - if (AddDerivedDataMapping(OplogLock, Namespace, Bucket, Hash, ValueId, ChunkId)) - { - ZEN_DEBUG("derived data {} -> '{}/{}/{}'", ChunkId, Namespace, Bucket, Hash); - } - else - { - ZEN_WARN("invalid derived data reference"); - } - } } } @@ -688,6 +675,25 @@ ProjectStore::Oplog::RegisterOplogEntry(CbObject Core, const OplogEntry& OpEntry NiceTimeSpanMs(Timer.GetElapsedTimeMs())); } + for (CbFieldView& Entry : Core["ddcreferences"sv]) + { + CbObjectView RefObj = Entry.AsObjectView(); + std::string_view Namespace = RefObj["namespace"sv].AsString(std::string_view("ue.ddc")); + std::string_view Bucket = RefObj["bucket"sv].AsString(); + const IoHash Key = RefObj["key"sv].AsHash(); + const Oid ValueId = RefObj["valueid"sv].AsObjectId(); + const Oid ChunkId = RefObj["chunkid"sv].AsObjectId(); + + if (AddDerivedDataMapping(OplogLock, Namespace, Bucket, Key, ValueId, ChunkId)) + { + ZEN_DEBUG("derived data {} -> '{}/{}/{}'", ChunkId, Namespace, Bucket, Key); + } + else + { + ZEN_WARN("invalid derived data reference"); + } + } + for (CbFieldView& Entry : Core["meta"sv]) { CbObjectView MetaObj = Entry.AsObjectView(); |