diff --git a/cluster.go b/cluster.go index 9e2f504e2..1a2622eef 100644 --- a/cluster.go +++ b/cluster.go @@ -2368,7 +2368,7 @@ func (c *cluster) translateFieldKeys(ctx context.Context, field *Field, keys []s if err == nil { return ids, nil } - return ids, errors.Wrap(err, "translating keys on coordinator") + return ids, errors.Wrap(err, "translating field keys on coordinator") } return ids, err } @@ -2392,9 +2392,11 @@ func (c *cluster) translateIndexKeys(ctx context.Context, indexName string, keys return nil, err } - ids := make([]uint64, len(keys)) - for i := range keys { - ids[i] = keyMap[keys[i]] + ids := make([]uint64, 0, len(keys)) + for _, k := range keys { + if id := keyMap[k]; id != 0 { + ids = append(ids, id) + } } return ids, nil } @@ -2435,12 +2437,12 @@ func (c *cluster) translateIndexKeySet(ctx context.Context, indexName string, ke } mu.Lock() - defer mu.Unlock() - for i := range keys { - if id := ids[i]; id != 0 { + for i, id := range ids { + if id != 0 { keyMap[keys[i]] = id } } + mu.Unlock() return nil }) } diff --git a/translator_test.go b/translator_test.go index f38ea5706..73200e180 100644 --- a/translator_test.go +++ b/translator_test.go @@ -331,7 +331,7 @@ func TestTranslation_KeyNotFound(t *testing.T) { node0 := c.GetNode(0) node1 := c.GetNode(1) - node2 := c.GetNode(2) + // node2 := c.GetNode(2) node3 := c.GetNode(3) ctx := context.Background() @@ -381,10 +381,10 @@ func TestTranslation_KeyNotFound(t *testing.T) { if err = node3.API.Serializer.Unmarshal(buf, &resp); err != nil { t.Fatal(err) } else if resp.IDs != nil { - t.Fatalf("TranslateKeys(%+v): expected: nil, got: %d", req, resp) + t.Fatalf("TranslateKeys(%+v): expected: nil, got: %d", string(req), resp) } - req, err = node2.API.Serializer.Marshal(&pilosa.TranslateKeysRequest{ + req, err = node1.API.Serializer.Marshal(&pilosa.TranslateKeysRequest{ Index: idx, Keys: []string{"k2"}, NotWritable: true, @@ -392,10 +392,10 @@ func TestTranslation_KeyNotFound(t *testing.T) { if err != nil { t.Fatal(err) } - if buf, err = node2.API.TranslateKeys(ctx, bytes.NewReader(req)); err != nil { + if buf, err = node1.API.TranslateKeys(ctx, bytes.NewReader(req)); err != nil { t.Fatal(err) } - if err = node2.API.Serializer.Unmarshal(buf, &resp); err != nil { + if err = node1.API.Serializer.Unmarshal(buf, &resp); err != nil { t.Fatal(err) } else if resp.IDs != nil { t.Fatalf("TranslateKeys(%+v): expected: nil, got: %d", req, resp)