Merge pull request #1015 from alanbernstein/dont-create-keys-directory

Check index.keys before opening translate store to avoid unnecessary keys directory
This commit is contained in:
Matthew Jaffee 2020-11-20 14:30:37 -07:00 committed by GitHub
commit 7271fbf396
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 28 additions and 22 deletions

View file

@ -2918,6 +2918,10 @@ func (c *cluster) createIndexKeys(ctx context.Context, indexName string, keys ..
return nil, ErrIndexNotFound
}
if !idx.keys {
return nil, errors.Errorf("can't create index keys on unkeyed index %s", indexName)
}
// Split keys by partition.
keysByPartition := make(map[int][]string, c.partitionN)
for _, key := range keys {

View file

@ -575,7 +575,7 @@ func TestExecutor_Execute_Set(t *testing.T) {
})
t.Run("ErrInvalidColValueType", func(t *testing.T) {
if _, err := cmd.API.Query(context.Background(), &pilosa.QueryRequest{Index: "i", Query: `Set("foo", f=1)`}); err == nil || !hasCause(err, pilosa.ErrTranslatingKeyNotFound) || !strings.Contains(err.Error(), "unkeyed index") {
if _, err := cmd.API.Query(context.Background(), &pilosa.QueryRequest{Index: "i", Query: `Set("foo", f=1)`}); err == nil || !strings.Contains(err.Error(), "unkeyed index") {
t.Fatalf("The error is: '%v'", err)
}
})
@ -977,7 +977,7 @@ func TestExecutor_Execute_SetValue(t *testing.T) {
})
t.Run("ColumnBSIGroupValue", func(t *testing.T) {
if _, err := c.GetNode(0).API.Query(context.Background(), &pilosa.QueryRequest{Index: "i", Query: `Set("bad_column", f=100)`}); err == nil || !hasCause(err, pilosa.ErrTranslatingKeyNotFound) || !strings.Contains(err.Error(), "unkeyed index") {
if _, err := c.GetNode(0).API.Query(context.Background(), &pilosa.QueryRequest{Index: "i", Query: `Set("bad_column", f=100)`}); err == nil || !strings.Contains(err.Error(), "unkeyed index") {
t.Fatalf("unexpected error: %s", err)
}
})

View file

@ -205,30 +205,32 @@ func (i *Index) open(withTimestamp bool) (err error) {
return errors.Wrap(err, "opening attrstore")
}
i.holder.Logger.Debugf("open translate store for index: %s", i.name)
if i.keys {
i.holder.Logger.Debugf("open translate store for index: %s", i.name)
var g errgroup.Group
var mu sync.Mutex
for partitionID := 0; partitionID < i.holder.partitionN; partitionID++ {
partitionID := partitionID
var g errgroup.Group
var mu sync.Mutex
for partitionID := 0; partitionID < i.holder.partitionN; partitionID++ {
partitionID := partitionID
g.Go(func() error {
store, err := i.OpenTranslateStore(i.TranslateStorePath(partitionID), i.name, "", partitionID, i.holder.partitionN)
if err != nil {
return errors.Wrapf(err, "opening index translate store: partition=%d", partitionID)
}
g.Go(func() error {
store, err := i.OpenTranslateStore(i.TranslateStorePath(partitionID), i.name, "", partitionID, i.holder.partitionN)
if err != nil {
return errors.Wrapf(err, "opening index translate store: partition=%d", partitionID)
}
mu.Lock()
defer mu.Unlock()
mu.Lock()
defer mu.Unlock()
i.mu.Lock()
defer i.mu.Unlock()
i.translateStores[partitionID] = store
return nil
})
}
if err := g.Wait(); err != nil {
return err
i.mu.Lock()
defer i.mu.Unlock()
i.translateStores[partitionID] = store
return nil
})
}
if err := g.Wait(); err != nil {
return err
}
}
_ = testhook.Opened(i.holder.Auditor, i, nil)