| 1143 | // void setAssignedStatus( StorageServer* self, KeyRangeRef keys, bool nowAssigned ); |
| 1144 | |
| 1145 | void 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 | |
| 1177 | ACTOR Future<RangeResult> tryFetchRange(Database cx, |
| 1178 | Version version, |
no test coverage detected