From b25ad81e678b7beeec97df898cbf65e2700ff436 Mon Sep 17 00:00:00 2001 From: Todd Gruben Date: Thu, 20 May 2021 10:44:36 -0500 Subject: [PATCH] restore without restart --- api.go | 26 ++++++++++++++++++++++++-- ctl/restore.go | 2 -- executor.go | 1 - field.go | 1 - index.go | 4 ++++ server.go | 1 - 6 files changed, 28 insertions(+), 7 deletions(-) diff --git a/api.go b/api.go index 9bf5c7555..64931a0a9 100644 --- a/api.go +++ b/api.go @@ -2265,9 +2265,31 @@ func (api *API) RestoreShard(ctx context.Context, indexName string, shard uint64 return err } api.holder.recalculateCaches() + err = db.OpenDB() + if err != nil { + return err + } + tx, err := db.NewTx(false, idx.name, Txo{}) + defer tx.Rollback() + //arguments idx,shard do not matter for rbf they + //are ignored + flvs, err := tx.GetSortedFieldViewList(idx, shard) + for _, flv := range flvs { + fld := idx.field(flv.Field) + view, ok := fld.viewMap[flv.View] + if !ok { + view, err = fld.createViewIfNotExists(flv.View) + if err != nil { + return err + } + } + _, err = view.CreateFragmentIfNotExists(shard) + if err != nil { + return err + } + } - return db.OpenDB() - + return nil } type serverInfo struct { diff --git a/ctl/restore.go b/ctl/restore.go index be706cccc..2df29d657 100644 --- a/ctl/restore.go +++ b/ctl/restore.go @@ -159,7 +159,6 @@ func (cmd *RestoreCommand) Run(ctx context.Context) error { if err != nil { return err } - case "idalloc": vprint.VV("Load ids") url := primary.URI.Path("/internal/idalloc/restore") @@ -182,7 +181,6 @@ func (cmd *RestoreCommand) Run(ctx context.Context) error { } vprint.VV("shard %v %v", shard, indexName) url := primary.URI.Path(fmt.Sprintf("/internal/restore/%v/%v", indexName, shard)) - vprint.VV("%v", url) //TODO (twg) cluster aware client _, err = c.Post(url, "application/octet-stream", tarReader) if err != nil { diff --git a/executor.go b/executor.go index 0f3ef6148..6c18bd7cd 100644 --- a/executor.go +++ b/executor.go @@ -3688,7 +3688,6 @@ func (e *executor) executeRowsShard(ctx context.Context, qcx *Qcx, index string, return nil, err } defer finisher(&err0) - for _, view := range views { if err := ctx.Err(); err != nil { return nil, err diff --git a/field.go b/field.go index 3f2c4c534..bbfe55227 100644 --- a/field.go +++ b/field.go @@ -1029,7 +1029,6 @@ func (f *Field) createViewIfNotExistsBase(cvm *CreateViewMessage) (*view, bool, return nil, false, errors.Wrap(err, "persisting view") } } - view := f.newView(f.viewPath(cvm.View), cvm.View) if err := view.openEmpty(); err != nil { diff --git a/index.go b/index.go index 18fa1d49e..5f8ca9f25 100644 --- a/index.go +++ b/index.go @@ -814,6 +814,10 @@ func (i *Index) DeleteField(name string) error { return i.translationSyncer.Reset() } +func (i *Index) UpdateAvailbleShards(field, view string, shard uint64) { + +} + type indexSlice []*Index func (p indexSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } diff --git a/server.go b/server.go index e940b092c..bb7f85c94 100644 --- a/server.go +++ b/server.go @@ -493,7 +493,6 @@ func NewServer(opts ...ServerOption) (*Server, error) { s.holder.schemator = s.schemator s.holder.sharder = s.sharder s.holder.serializer = s.serializer - return s, nil }