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

Function coalesceCacheRanges

fdbserver/StorageCache.actor.cpp:1145–1175  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1143// void setAssignedStatus( StorageServer* self, KeyRangeRef keys, bool nowAssigned );
1144
1145void coalesceCacheRanges(StorageCacheData* data, KeyRangeRef keys) {
1146 auto cacheRanges = data->cachedRangeMap.intersectingRanges(keys);
1147 auto fullRange = data->cachedRangeMap.ranges();
1148
1149 auto iter = cacheRanges.begin();
1150 if (iter != fullRange.begin())
1151 --iter;
1152 auto iterEnd = cacheRanges.end();
1153 if (iterEnd != fullRange.end())
1154 ++iterEnd;
1155
1156 bool lastReadable = false;
1157 bool lastNotAssigned = false;
1158 KeyRangeMap<Reference<CacheRangeInfo>>::iterator lastRange;
1159
1160 for (; iter != iterEnd; ++iter) {
1161 if (lastReadable && iter->value()->isReadable()) {
1162 KeyRange range = KeyRangeRef(lastRange->begin(), iter->end());
1163 data->addCacheRange(CacheRangeInfo::newReadWrite(range, data));
1164 iter = data->cachedRangeMap.rangeContaining(range.begin);
1165 } else if (lastNotAssigned && iter->value()->notAssigned()) {
1166 KeyRange range = KeyRangeRef(lastRange->begin(), iter->end());
1167 data->addCacheRange(CacheRangeInfo::newNotAssigned(range));
1168 iter = data->cachedRangeMap.rangeContaining(range.begin);
1169 }
1170
1171 lastReadable = iter->value()->isReadable();
1172 lastNotAssigned = iter->value()->notAssigned();
1173 lastRange = iter;
1174 }
1175}
1176
1177ACTOR Future<RangeResult> tryFetchRange(Database cx,
1178 Version version,

Callers 2

cacheWarmupFunction · 0.85

Calls 10

intersectingRangesMethod · 0.80
rangesMethod · 0.80
addCacheRangeMethod · 0.80
rangeContainingMethod · 0.80
KeyRangeRefClass · 0.50
beginMethod · 0.45
endMethod · 0.45
isReadableMethod · 0.45
valueMethod · 0.45
notAssignedMethod · 0.45

Tested by

no test coverage detected