KevinStephenson
Adding in weaviate code
b110593
raw
history blame
2.89 kB
// _ _
// __ _____ __ ___ ___ __ _| |_ ___
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
// \ V V / __/ (_| |\ V /| | (_| | || __/
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
//
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
//
// CONTACT: [email protected]
//
package replica
import (
"sort"
"strconv"
"testing"
"github.com/go-openapi/strfmt"
"github.com/stretchr/testify/assert"
"github.com/weaviate/weaviate/entities/models"
"github.com/weaviate/weaviate/entities/storobj"
)
func TestBatchInput(t *testing.T) {
var (
N = 9
ids = make([]strfmt.UUID, N)
data = make([]*storobj.Object, N)
)
for i := 0; i < N; i++ {
uuid := strfmt.UUID(strconv.Itoa(i))
ids[i] = uuid
data[i] = objectEx(uuid, 1, "S1", "N1")
}
parts := cluster(createBatch(data))
assert.Len(t, parts, 1)
assert.Equal(t, parts[0], shardPart{
Shard: "S1",
Node: "N1",
Data: data,
Index: []int{0, 1, 2, 3, 4, 5, 6, 7, 8},
})
assert.Equal(t, parts[0].ObjectIDs(), ids)
data[0].BelongsToShard = "S2"
data[0].BelongsToNode = "N2"
data[2].BelongsToShard = "S2"
data[2].BelongsToNode = "N2"
data[3].BelongsToShard = "S2"
data[4].BelongsToNode = "N2"
data[5].BelongsToShard = "S2"
data[5].BelongsToNode = "N2"
parts = cluster(createBatch(data))
sort.Slice(parts, func(i, j int) bool { return len(parts[i].Index) < len(parts[j].Index) })
assert.Len(t, parts, 2)
assert.ElementsMatch(t, parts[0].ObjectIDs(), []strfmt.UUID{ids[0], ids[2], ids[3], ids[5]})
assert.Equal(t, parts[0].Shard, "S2")
assert.Equal(t, parts[0].Node, "N2")
assert.ElementsMatch(t, parts[1].ObjectIDs(), []strfmt.UUID{ids[1], ids[4], ids[6], ids[7], ids[8]})
assert.Equal(t, parts[1].Shard, "S1")
assert.Equal(t, parts[1].Node, "N1")
}
func genInputs(node, shard string, updateTime int64, ids []strfmt.UUID) ([]*storobj.Object, []RepairResponse) {
xs := make([]*storobj.Object, len(ids))
digestR := make([]RepairResponse, len(ids))
for i, id := range ids {
xs[i] = &storobj.Object{
Object: models.Object{
ID: id,
LastUpdateTimeUnix: updateTime,
},
BelongsToShard: shard,
BelongsToNode: node,
}
digestR[i] = RepairResponse{ID: ids[i].String(), UpdateTime: updateTime}
}
return xs, digestR
}
func setObjectsConsistency(xs []*storobj.Object, isConsistent bool) []*storobj.Object {
want := make([]*storobj.Object, len(xs))
for i, x := range xs {
cp := *x
cp.IsConsistent = isConsistent
want[i] = &cp
}
return want
}
func objectEx(id strfmt.UUID, lastTime int64, shard, node string) *storobj.Object {
return &storobj.Object{
Object: models.Object{
ID: id,
LastUpdateTimeUnix: lastTime,
},
BelongsToShard: shard,
BelongsToNode: node,
}
}