MCPcopy Create free account
hub / github.com/apple/foundationdb / decodeKeyServersValue

Function decodeKeyServersValue

fdbclient/SystemData.cpp:120–174  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

118}
119
120void decodeKeyServersValue(RangeResult result,
121 const ValueRef& value,
122 std::vector<UID>& src,
123 std::vector<UID>& dest,
124 bool missingIsError) {
125 if (value.size() == 0) {
126 src.clear();
127 dest.clear();
128 return;
129 }
130
131 BinaryReader rd(value, IncludeVersion());
132 if (rd.protocolVersion().hasShardEncodeLocationMetaData()) {
133 UID srcId, destId;
134 decodeKeyServersValue(result, value, src, dest, srcId, destId);
135 return;
136 }
137 if (!rd.protocolVersion().hasKeyServerValueV2()) {
138 rd >> src >> dest;
139 return;
140 }
141
142 std::vector<Tag> srcTag, destTag;
143 rd >> srcTag >> destTag;
144
145 src.clear();
146 dest.clear();
147
148 for (const KeyValueRef& kv : result) {
149 Tag tag = decodeServerTagValue(kv.value);
150 if (std::find(srcTag.begin(), srcTag.end(), tag) != srcTag.end()) {
151 src.push_back(decodeServerTagKey(kv.key));
152 }
153 if (std::find(destTag.begin(), destTag.end(), tag) != destTag.end()) {
154 dest.push_back(decodeServerTagKey(kv.key));
155 }
156 }
157 std::sort(src.begin(), src.end());
158 std::sort(dest.begin(), dest.end());
159 if (missingIsError && (src.size() != srcTag.size() || dest.size() != destTag.size())) {
160 TraceEvent(SevError, "AttemptedToDecodeMissingTag").log();
161 for (const KeyValueRef& kv : result) {
162 Tag tag = decodeServerTagValue(kv.value);
163 UID serverID = decodeServerTagKey(kv.key);
164 TraceEvent("TagUIDMap").detail("Tag", tag.toString()).detail("UID", serverID.toString());
165 }
166 for (auto& it : srcTag) {
167 TraceEvent("SrcTag").detail("Tag", it.toString());
168 }
169 for (auto& it : destTag) {
170 TraceEvent("DestTag").detail("Tag", it.toString());
171 }
172 ASSERT(false);
173 }
174}
175
176void decodeKeyServersValue(RangeResult result,
177 const ValueRef& value,

Calls 15

IncludeVersionFunction · 0.85
decodeServerTagValueFunction · 0.85
findFunction · 0.85
decodeServerTagKeyFunction · 0.85
TraceEventClass · 0.85
UIDClass · 0.85
detailMethod · 0.80
assertEndMethod · 0.80
rewindMethod · 0.80
clearMethod · 0.65
sizeMethod · 0.45
protocolVersionMethod · 0.45

Tested by

no test coverage detected