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

Method getCachedLocations

fdbclient/NativeAPI.actor.cpp:1855–1895  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1853}
1854
1855bool DatabaseContext::getCachedLocations(const Optional<TenantNameRef>& tenantName,
1856 const KeyRangeRef& range,
1857 std::vector<KeyRangeLocationInfo>& result,
1858 int limit,
1859 Reverse reverse) {
1860 result.clear();
1861
1862 TenantMapEntry tenantEntry;
1863 Arena arena;
1864 KeyRangeRef resolvedRange = range;
1865
1866 if (tenantName.present()) {
1867 auto itr = tenantCache.find(tenantName.get());
1868 if (itr != tenantCache.end()) {
1869 tenantEntry = itr->second;
1870 resolvedRange = resolvedRange.withPrefix(tenantEntry.prefix, arena);
1871 } else {
1872 return false;
1873 }
1874 }
1875
1876 auto begin = locationCache.rangeContaining(resolvedRange.begin);
1877 auto end = locationCache.rangeContainingKeyBefore(resolvedRange.end);
1878
1879 loop {
1880 auto r = reverse ? end : begin;
1881 if (!r->value()) {
1882 CODE_PROBE(result.size(), "had some but not all cached locations");
1883 result.clear();
1884 return false;
1885 }
1886 result.emplace_back(tenantEntry, toRelativeRange(r->range() & resolvedRange, tenantEntry.prefix), r->value());
1887 if (result.size() == limit || begin == end) {
1888 break;
1889 }
1890
1891 if (reverse)
1892 --end;
1893 else
1894 ++begin;
1895 }
1896
1897 return true;
1898}

Callers 1

getKeyRangeLocationsFunction · 0.80

Calls 13

toRelativeRangeFunction · 0.85
rangeContainingMethod · 0.80
emplace_backMethod · 0.80
clearMethod · 0.65
getMethod · 0.65
presentMethod · 0.45
findMethod · 0.45
endMethod · 0.45
withPrefixMethod · 0.45
valueMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected