MCPcopy
hub / github.com/etcd-io/bbolt / mergeWithExistingSpan

Method mergeWithExistingSpan

internal/freelist/hashmap.go:222–247  ·  view source on GitHub ↗

mergeWithExistingSpan merges free span [start, end] with adjacent existing free spans (both backward and forward).

(start, end common.Pgid)

Source from the content-addressed store, hash-verified

220
221// mergeWithExistingSpan merges free span [start, end] with adjacent existing free spans (both backward and forward).
222func (f *hashMap) mergeWithExistingSpan(start, end common.Pgid) {
223 prev := start - 1
224 next := end + 1
225
226 preSize, mergeWithPrev := f.backwardMap[prev]
227 nextSize, mergeWithNext := f.forwardMap[next]
228 newStart := start
229 newSize := uint64(end - start + 1)
230
231 if mergeWithPrev {
232 // merge with previous span
233 prevStart := prev + 1 - common.Pgid(preSize)
234 f.delSpan(prevStart, preSize)
235
236 newStart -= common.Pgid(preSize)
237 newSize += preSize
238 }
239
240 if mergeWithNext {
241 // merge with next span
242 f.delSpan(next, nextSize)
243 newSize += nextSize
244 }
245
246 f.addSpan(newStart, newSize)
247}
248
249// idsFromFreemaps get all free page IDs from f.freemaps.
250// used by test only.

Callers 3

mergeSpansMethod · 0.95

Calls 3

delSpanMethod · 0.95
addSpanMethod · 0.95
PgidTypeAlias · 0.92