|
|
|
@ -141,8 +141,9 @@ func (t *TombstoneGC) nextExpires() time.Time {
|
|
|
|
|
return adj |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// expireTime is used to expire the entries at the given time.
|
|
|
|
|
func (t *TombstoneGC) expireTime(expires time.Time) { |
|
|
|
|
// purgeBin gets the index for the given bin and then deletes the bin. If there
|
|
|
|
|
// is no bin then this will return 0 for the index, which is ok.
|
|
|
|
|
func (t *TombstoneGC) purgeBin(expires time.Time) uint64 { |
|
|
|
|
t.Lock() |
|
|
|
|
defer t.Unlock() |
|
|
|
|
|
|
|
|
@ -152,8 +153,18 @@ func (t *TombstoneGC) expireTime(expires time.Time) {
|
|
|
|
|
// is no work to do.
|
|
|
|
|
exp, ok := t.expires[expires] |
|
|
|
|
if !ok { |
|
|
|
|
return |
|
|
|
|
return 0 |
|
|
|
|
} |
|
|
|
|
delete(t.expires, expires) |
|
|
|
|
t.expireCh <- exp.maxIndex |
|
|
|
|
return exp.maxIndex |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// expireTime is used to expire the entries at the given time.
|
|
|
|
|
func (t *TombstoneGC) expireTime(expires time.Time) { |
|
|
|
|
// This is careful to take the lock only while we are fetching the index
|
|
|
|
|
// since the channel write might get blocked for reasons that could also
|
|
|
|
|
// need to hint GC (see #3700).
|
|
|
|
|
if index := t.purgeBin(expires); index > 0 { |
|
|
|
|
t.expireCh <- index |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|