Skip to content

Commit 4c3486e

Browse files
feat(restore): create views in parallel
Since alternator views are created in parallel, it's a good opportunity to create cql views in parallel as well. This commit is not a full fix for #4287, because it should also be applied for 1-1-restore. Refs #4287
1 parent f266e00 commit 4c3486e

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

pkg/service/restore/worker_views.go

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"github.com/pkg/errors"
1111
"github.com/scylladb/scylla-manager/v3/pkg/metrics"
1212
"github.com/scylladb/scylla-manager/v3/pkg/scyllaclient"
13+
"golang.org/x/sync/errgroup"
1314
)
1415

1516
func (w *worker) stageDropViews(ctx context.Context) error {
@@ -42,18 +43,24 @@ func (w *worker) stageRecreateViews(ctx context.Context) error {
4243
return err
4344
}
4445

45-
for i, v := range w.run.Views {
46-
if !aw.isAlternatorView(v) {
47-
if err := w.CreateView(ctx, v); err != nil {
48-
return errors.Wrapf(err, "recreate %s.%s with statement %s", v.Keyspace, v.View, v.CreateStmt)
49-
}
46+
for _, v := range w.run.Views {
47+
if aw.isAlternatorView(v) {
48+
continue
5049
}
5150

52-
if err := w.WaitForViewBuilding(ctx, &w.run.Views[i]); err != nil {
53-
return errors.Wrapf(err, "wait for %s.%s", v.Keyspace, v.View)
51+
if err := w.CreateView(ctx, v); err != nil {
52+
return errors.Wrapf(err, "recreate %s.%s with statement %s", v.Keyspace, v.View, v.CreateStmt)
5453
}
5554
}
56-
return nil
55+
// Since we are waiting for view building with scylla rest api,
56+
// we can do it in the same way for cql and alternator views.
57+
eg, egCtx := errgroup.WithContext(ctx)
58+
for i := range w.run.Views {
59+
eg.Go(func() error {
60+
return w.WaitForViewBuilding(egCtx, &w.run.Views[i])
61+
})
62+
}
63+
return eg.Wait()
5764
}
5865

5966
// DropView drops specified Materialized View or Secondary Index.

0 commit comments

Comments
 (0)