Spaces:
Sleeping
Sleeping
| // _ _ | |
| // __ _____ __ ___ ___ __ _| |_ ___ | |
| // \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ | |
| // \ 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, | |
| } | |
| } | |