| 118 | } |
| 119 | |
| 120 | void 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 | |
| 176 | void decodeKeyServersValue(RangeResult result, |
| 177 | const ValueRef& value, |
no test coverage detected