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

Function getShardKeyRange

fdbserver/storageserver.actor.cpp:3710–3738  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3708}
3709
3710KeyRange getShardKeyRange(StorageServer* data, const KeySelectorRef& sel)
3711// Returns largest range such that the shard state isReadable and selectorInRange(sel, range) or wrong_shard_server if
3712// no such range exists
3713{
3714 auto i = sel.isBackward() ? data->shards.rangeContainingKeyBefore(sel.getKey())
3715 : data->shards.rangeContaining(sel.getKey());
3716 auto fullRange = data->shards.ranges();
3717 if (!i->value()->isReadable())
3718 throw wrong_shard_server();
3719 ASSERT(selectorInRange(sel, i->range()));
3720 Key begin, end;
3721 if (sel.isBackward()) {
3722 end = i->range().end;
3723 while (i != fullRange.begin() && i.value()->isReadable()) {
3724 begin = i->range().begin;
3725 --i;
3726 }
3727 if (i.value()->isReadable()) {
3728 begin = i->range().begin;
3729 }
3730 } else {
3731 begin = i->range().begin;
3732 while (i != fullRange.end() && i.value()->isReadable()) {
3733 end = i->range().end;
3734 ++i;
3735 }
3736 }
3737 return KeyRangeRef(begin, end);
3738}
3739
3740ACTOR Future<Void> getKeyValuesQ(StorageServer* data, GetKeyValuesRequest req)
3741// Throws a wrong_shard_server if the keys in the request or result depend on data outside this server OR if a large

Calls 12

selectorInRangeFunction · 0.85
rangeContainingMethod · 0.80
rangesMethod · 0.80
getKeyMethod · 0.65
KeyRangeRefClass · 0.50
isBackwardMethod · 0.45
isReadableMethod · 0.45
valueMethod · 0.45
rangeMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected