It is incredibly important that any modifications to txnStateStore are done in such a way that the same operations will be done on all commit proxies at the same time. Otherwise, the data stored in txnStateStore will become corrupted.
| 54 | // will be done on all commit proxies at the same time. Otherwise, the data stored in txnStateStore will become |
| 55 | // corrupted. |
| 56 | class ApplyMetadataMutationsImpl { |
| 57 | |
| 58 | public: |
| 59 | ApplyMetadataMutationsImpl(const SpanContext& spanContext_, |
| 60 | const UID& dbgid_, |
| 61 | Arena& arena_, |
| 62 | const VectorRef<MutationRef>& mutations_, |
| 63 | IKeyValueStore* txnStateStore_, |
| 64 | Reference<AsyncVar<ServerDBInfo> const> db) |
| 65 | : spanContext(spanContext_), dbgid(dbgid_), arena(arena_), mutations(mutations_), txnStateStore(txnStateStore_), |
| 66 | confChange(dummyConfChange), dbInfo(db) {} |
| 67 | |
| 68 | ApplyMetadataMutationsImpl(const SpanContext& spanContext_, |
| 69 | Arena& arena_, |
| 70 | const VectorRef<MutationRef>& mutations_, |
| 71 | ProxyCommitData& proxyCommitData_, |
| 72 | Reference<ILogSystem> logSystem_, |
| 73 | LogPushData* toCommit_, |
| 74 | const std::unordered_map<EncryptCipherDomainId, Reference<BlobCipherKey>>* cipherKeys_, |
| 75 | bool& confChange_, |
| 76 | Version version, |
| 77 | Version popVersion_, |
| 78 | bool initialCommit_) |
| 79 | : spanContext(spanContext_), dbgid(proxyCommitData_.dbgid), arena(arena_), mutations(mutations_), |
| 80 | txnStateStore(proxyCommitData_.txnStateStore), toCommit(toCommit_), cipherKeys(cipherKeys_), |
| 81 | confChange(confChange_), logSystem(logSystem_), version(version), popVersion(popVersion_), |
| 82 | vecBackupKeys(&proxyCommitData_.vecBackupKeys), keyInfo(&proxyCommitData_.keyInfo), |
| 83 | cacheInfo(&proxyCommitData_.cacheInfo), |
| 84 | uid_applyMutationsData(proxyCommitData_.firstProxy ? &proxyCommitData_.uid_applyMutationsData : nullptr), |
| 85 | commit(proxyCommitData_.commit), cx(proxyCommitData_.cx), committedVersion(&proxyCommitData_.committedVersion), |
| 86 | storageCache(&proxyCommitData_.storageCache), tag_popped(&proxyCommitData_.tag_popped), |
| 87 | tssMapping(&proxyCommitData_.tssMapping), tenantMap(&proxyCommitData_.tenantMap), initialCommit(initialCommit_), |
| 88 | dbInfo(proxyCommitData_.db) {} |
| 89 | |
| 90 | ApplyMetadataMutationsImpl(const SpanContext& spanContext_, |
| 91 | ResolverData& resolverData_, |
| 92 | const VectorRef<MutationRef>& mutations_, |
| 93 | Reference<AsyncVar<ServerDBInfo> const> db) |
| 94 | : spanContext(spanContext_), dbgid(resolverData_.dbgid), arena(resolverData_.arena), mutations(mutations_), |
| 95 | txnStateStore(resolverData_.txnStateStore), toCommit(resolverData_.toCommit), |
| 96 | confChange(resolverData_.confChanges), logSystem(resolverData_.logSystem), popVersion(resolverData_.popVersion), |
| 97 | keyInfo(resolverData_.keyInfo), storageCache(resolverData_.storageCache), |
| 98 | initialCommit(resolverData_.initialCommit), forResolver(true), dbInfo(db) {} |
| 99 | |
| 100 | private: |
| 101 | // The following variables are incoming parameters |
| 102 | |
| 103 | const SpanContext& spanContext; |
| 104 | |
| 105 | const UID& dbgid; |
| 106 | |
| 107 | Arena& arena; |
| 108 | |
| 109 | const VectorRef<MutationRef>& mutations; |
| 110 | |
| 111 | // Transaction KV store |
| 112 | IKeyValueStore* txnStateStore; |
| 113 |
no test coverage detected