RangeResult or MappedRangeResult
| 4177 | // TODO: Client should add mapped keys to conflict ranges. |
| 4178 | template <class RangeResultFamily> // RangeResult or MappedRangeResult |
| 4179 | void getRangeFinished(Reference<TransactionState> trState, |
| 4180 | double startTime, |
| 4181 | KeySelector begin, |
| 4182 | KeySelector end, |
| 4183 | Snapshot snapshot, |
| 4184 | Promise<std::pair<Key, Key>> conflictRange, |
| 4185 | Reverse reverse, |
| 4186 | RangeResultFamily result) { |
| 4187 | int64_t bytes = getRangeResultFamilyBytes(result); |
| 4188 | |
| 4189 | trState->cx->transactionBytesRead += bytes; |
| 4190 | trState->cx->transactionKeysRead += result.size(); |
| 4191 | |
| 4192 | if (trState->trLogInfo) { |
| 4193 | trState->trLogInfo->addLog(FdbClientLogEvents::EventGetRange(startTime, |
| 4194 | trState->cx->clientLocality.dcId(), |
| 4195 | now() - startTime, |
| 4196 | bytes, |
| 4197 | begin.getKey(), |
| 4198 | end.getKey(), |
| 4199 | trState->tenant())); |
| 4200 | } |
| 4201 | |
| 4202 | if (!snapshot) { |
| 4203 | Key rangeBegin; |
| 4204 | Key rangeEnd; |
| 4205 | |
| 4206 | if (result.readToBegin) { |
| 4207 | rangeBegin = allKeys.begin; |
| 4208 | } else if (((!reverse || !result.more || begin.offset > 1) && begin.offset > 0) || result.size() == 0) { |
| 4209 | rangeBegin = Key(begin.getKey(), begin.arena()); |
| 4210 | } else { |
| 4211 | rangeBegin = reverse ? result.end()[-1].key : result[0].key; |
| 4212 | } |
| 4213 | |
| 4214 | if (end.offset > begin.offset && end.getKey() < rangeBegin) { |
| 4215 | rangeBegin = Key(end.getKey(), end.arena()); |
| 4216 | } |
| 4217 | |
| 4218 | if (result.readThroughEnd) { |
| 4219 | rangeEnd = allKeys.end; |
| 4220 | } else if (((reverse || !result.more || end.offset <= 0) && end.offset <= 1) || result.size() == 0) { |
| 4221 | rangeEnd = Key(end.getKey(), end.arena()); |
| 4222 | } else { |
| 4223 | rangeEnd = keyAfter(reverse ? result[0].key : result.end()[-1].key); |
| 4224 | } |
| 4225 | |
| 4226 | if (begin.offset < end.offset && begin.getKey() > rangeEnd) { |
| 4227 | rangeEnd = Key(begin.getKey(), begin.arena()); |
| 4228 | } |
| 4229 | |
| 4230 | conflictRange.send(std::make_pair(rangeBegin, rangeEnd)); |
| 4231 | } |
| 4232 | } |
| 4233 | |
| 4234 | ACTOR template <class GetKeyValuesFamilyRequest, // GetKeyValuesRequest or GetMappedKeyValuesRequest |
| 4235 | class GetKeyValuesFamilyReply, // GetKeyValuesReply or GetMappedKeyValuesReply (It would be nice if |
no test coverage detected