mirror of
https://gitee.com/milvus-io/milvus.git
synced 2025-12-07 01:28:27 +08:00
issue: #38399 - fix the nil pointer bug - limit the resource usage for streaming e2e - enhance the go test - fix: rootcoord block when graceful stop --------- Signed-off-by: chyezh <chyezh@outlook.com>
85 lines
2.4 KiB
Go
85 lines
2.4 KiB
Go
package flusherimpl
|
|
|
|
import (
|
|
"fmt"
|
|
"math/rand"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/milvus-io/milvus/pkg/streaming/util/message"
|
|
"github.com/milvus-io/milvus/pkg/streaming/walimpls/impls/rmq"
|
|
)
|
|
|
|
func TestVChannelCheckpointManager(t *testing.T) {
|
|
exists, vchannels, minimumX := generateRandomExistsMessageID()
|
|
m := newVChannelCheckpointManager(exists)
|
|
assert.True(t, m.MinimumCheckpoint().EQ(minimumX))
|
|
|
|
err := m.Add("vchannel-999", rmq.NewRmqID(1000000))
|
|
assert.Error(t, err)
|
|
assert.True(t, m.MinimumCheckpoint().EQ(minimumX))
|
|
|
|
err = m.Drop("vchannel-1000")
|
|
assert.Error(t, err)
|
|
assert.True(t, m.MinimumCheckpoint().EQ(minimumX))
|
|
|
|
err = m.Update("vchannel-1000", rmq.NewRmqID(1000001))
|
|
assert.Error(t, err)
|
|
assert.True(t, m.MinimumCheckpoint().EQ(minimumX))
|
|
|
|
err = m.Add("vchannel-1000", rmq.NewRmqID(1000001))
|
|
assert.NoError(t, err)
|
|
assert.True(t, m.MinimumCheckpoint().EQ(minimumX))
|
|
|
|
for _, vchannel := range vchannels {
|
|
err = m.Update(vchannel, rmq.NewRmqID(1000001))
|
|
assert.NoError(t, err)
|
|
}
|
|
assert.False(t, m.MinimumCheckpoint().EQ(minimumX))
|
|
|
|
err = m.Update(vchannels[0], minimumX)
|
|
assert.Error(t, err)
|
|
|
|
err = m.Drop("vchannel-501")
|
|
assert.NoError(t, err)
|
|
lastMinimum := m.MinimumCheckpoint()
|
|
for i := 0; i < 1001; i++ {
|
|
m.Update(fmt.Sprintf("vchannel-%d", i), rmq.NewRmqID(rand.Int63n(9999999)+2))
|
|
newMinimum := m.MinimumCheckpoint()
|
|
assert.True(t, lastMinimum.LTE(newMinimum))
|
|
lastMinimum = newMinimum
|
|
}
|
|
for i := 0; i < 1001; i++ {
|
|
m.Drop(fmt.Sprintf("vchannel-%d", i))
|
|
newMinimum := m.MinimumCheckpoint()
|
|
if newMinimum != nil {
|
|
assert.True(t, lastMinimum.LTE(newMinimum))
|
|
lastMinimum = newMinimum
|
|
}
|
|
}
|
|
assert.Len(t, m.index, 0)
|
|
assert.Len(t, m.checkpointHeap, 0)
|
|
assert.Equal(t, m.Len(), 0)
|
|
assert.Nil(t, m.MinimumCheckpoint())
|
|
}
|
|
|
|
func generateRandomExistsMessageID() (map[string]message.MessageID, []string, message.MessageID) {
|
|
minimumX := int64(10000000)
|
|
var vchannel []string
|
|
exists := make(map[string]message.MessageID)
|
|
for i := 0; i < 1000; i++ {
|
|
x := rand.Int63n(999999) + 2
|
|
exists[fmt.Sprintf("vchannel-%d", i)] = rmq.NewRmqID(x)
|
|
if x < minimumX {
|
|
minimumX = x
|
|
vchannel = []string{fmt.Sprintf("vchannel-%d", i)}
|
|
} else if x == minimumX {
|
|
vchannel = append(vchannel, fmt.Sprintf("vchannel-%d", i))
|
|
}
|
|
}
|
|
vchannel = append(vchannel, "vchannel-1")
|
|
exists["vchannel-1"] = rmq.NewRmqID(minimumX)
|
|
return exists, vchannel, rmq.NewRmqID(minimumX)
|
|
}
|