restore without restart

This commit is contained in:
Todd Gruben 2021-05-20 10:44:36 -05:00
parent cc0c1b829a
commit b25ad81e67
6 changed files with 28 additions and 7 deletions

26
api.go
View file

@ -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 {

View file

@ -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 {

View file

@ -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

View file

@ -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 {

View file

@ -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] }

View file

@ -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
}