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

Method readRange

fdbserver/KeyValueStoreMemory.actor.cpp:235–279  ·  view source on GitHub ↗

If rowLimit>=0, reads first rows sorted ascending, otherwise reads last rows sorted descending The total size of the returned value (less the last entry) will be less than byteLimit

Source from the content-addressed store, hash-verified

233 // If rowLimit>=0, reads first rows sorted ascending, otherwise reads last rows sorted descending
234 // The total size of the returned value (less the last entry) will be less than byteLimit
235 Future<RangeResult> readRange(KeyRangeRef keys, int rowLimit, int byteLimit, IKeyValueStore::ReadType) override {
236 if (recovering.isError())
237 throw recovering.getError();
238 if (!recovering.isReady())
239 return waitAndReadRange(this, keys, rowLimit, byteLimit);
240
241 RangeResult result;
242 if (rowLimit == 0) {
243 return result;
244 }
245
246 if (rowLimit > 0) {
247 auto it = data.lower_bound(keys.begin);
248 while (it != data.end() && rowLimit && byteLimit > 0) {
249 StringRef tempKey = it.getKey(reserved_buffer);
250 if (tempKey >= keys.end)
251 break;
252
253 byteLimit -= sizeof(KeyValueRef) + tempKey.size() + it.getValue().size();
254 result.push_back_deep(result.arena(), KeyValueRef(tempKey, it.getValue()));
255 ++it;
256 --rowLimit;
257 }
258 } else {
259 rowLimit = -rowLimit;
260 auto it = data.previous(data.lower_bound(keys.end));
261 while (it != data.end() && rowLimit && byteLimit > 0) {
262 StringRef tempKey = it.getKey(reserved_buffer);
263 if (tempKey < keys.begin)
264 break;
265
266 byteLimit -= sizeof(KeyValueRef) + tempKey.size() + it.getValue().size();
267 result.push_back_deep(result.arena(), KeyValueRef(tempKey, it.getValue()));
268 it = data.previous(it);
269 --rowLimit;
270 }
271 }
272
273 result.more = rowLimit == 0 || byteLimit <= 0;
274 if (result.more) {
275 ASSERT(result.size() > 0);
276 result.readThrough = result[result.size() - 1].key;
277 }
278 return result;
279 }
280
281 void resyncLog() override {
282 ASSERT(recovering.isReady());

Callers 1

Calls 11

getKeyMethod · 0.65
KeyValueRefClass · 0.50
isErrorMethod · 0.45
getErrorMethod · 0.45
isReadyMethod · 0.45
lower_boundMethod · 0.45
endMethod · 0.45
sizeMethod · 0.45
getValueMethod · 0.45
push_back_deepMethod · 0.45
previousMethod · 0.45

Tested by

no test coverage detected