Browse Source

tsdb: shrink txRing with smaller integers

4 billion active transactions ought to be enough for anyone.

Signed-off-by: Bryan Boreham <bjboreham@gmail.com>
pull/13015/head
Bryan Boreham 1 year ago
parent
commit
6fe8217ce4
  1. 2
      tsdb/head_read.go
  2. 2
      tsdb/head_test.go
  3. 16
      tsdb/isolation.go

2
tsdb/head_read.go

@ -724,7 +724,7 @@ func (s *memSeries) iterator(id chunks.HeadChunkID, c chunkenc.Chunk, isoState *
// Removing the extra transactionIDs that are relevant for samples that
// come after this chunk, from the total transactionIDs.
appendIDsToConsider := s.txs.txIDCount - (totalSamples - (previousSamples + numSamples))
appendIDsToConsider := int(s.txs.txIDCount) - (totalSamples - (previousSamples + numSamples))
// Iterate over the appendIDs, find the first one that the isolation state says not
// to return.

2
tsdb/head_test.go

@ -2550,7 +2550,7 @@ func TestIsolationAppendIDZeroIsNoop(t *testing.T) {
ok, _ := s.append(0, 0, 0, cOpts)
require.True(t, ok, "Series append failed.")
require.Equal(t, 0, s.txs.txIDCount, "Series should not have an appendID after append with appendID=0.")
require.Equal(t, 0, int(s.txs.txIDCount), "Series should not have an appendID after append with appendID=0.")
}
func TestHeadSeriesChunkRace(t *testing.T) {

16
tsdb/isolation.go

@ -240,8 +240,8 @@ func (i *isolation) closeAppend(appendID uint64) {
// The transactionID ring buffer.
type txRing struct {
txIDs []uint64
txIDFirst int // Position of the first id in the ring.
txIDCount int // How many ids in the ring.
txIDFirst uint32 // Position of the first id in the ring.
txIDCount uint32 // How many ids in the ring.
}
func newTxRing(capacity int) *txRing {
@ -251,7 +251,7 @@ func newTxRing(capacity int) *txRing {
}
func (txr *txRing) add(appendID uint64) {
if txr.txIDCount == len(txr.txIDs) {
if int(txr.txIDCount) == len(txr.txIDs) {
// Ring buffer is full, expand by doubling.
newRing := make([]uint64, txr.txIDCount*2)
idx := copy(newRing, txr.txIDs[txr.txIDFirst:])
@ -260,12 +260,12 @@ func (txr *txRing) add(appendID uint64) {
txr.txIDFirst = 0
}
txr.txIDs[(txr.txIDFirst+txr.txIDCount)%len(txr.txIDs)] = appendID
txr.txIDs[int(txr.txIDFirst+txr.txIDCount)%len(txr.txIDs)] = appendID
txr.txIDCount++
}
func (txr *txRing) cleanupAppendIDsBelow(bound uint64) {
pos := txr.txIDFirst
pos := int(txr.txIDFirst)
for txr.txIDCount > 0 {
if txr.txIDs[pos] < bound {
@ -281,7 +281,7 @@ func (txr *txRing) cleanupAppendIDsBelow(bound uint64) {
}
}
txr.txIDFirst %= len(txr.txIDs)
txr.txIDFirst %= uint32(len(txr.txIDs))
}
func (txr *txRing) iterator() *txRingIterator {
@ -296,7 +296,7 @@ func (txr *txRing) iterator() *txRingIterator {
type txRingIterator struct {
ids []uint64
pos int
pos uint32
}
func (it *txRingIterator) At() uint64 {
@ -305,7 +305,7 @@ func (it *txRingIterator) At() uint64 {
func (it *txRingIterator) Next() {
it.pos++
if it.pos == len(it.ids) {
if int(it.pos) == len(it.ids) {
it.pos = 0
}
}

Loading…
Cancel
Save