Skip to content

Commit 9bf8c88

Browse files
committed
PBM-921: ensure system.views before "creating" views/timeseries
1 parent 5accc6d commit 9bf8c88

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

pbm/oplog/restore.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -661,6 +661,7 @@ func (o *OplogRestore) handleNonTxnOp(op db.Oplog) error {
661661
return errors.Wrap(err, "filtering UUIDs from oplog")
662662
}
663663

664+
dbName, collName, _ := strings.Cut(op.Namespace, ".")
664665
if op.Operation == "c" {
665666
if len(op.Object) == 0 {
666667
return errors.Errorf("empty object value for op: %v", op)
@@ -671,9 +672,6 @@ func (o *OplogRestore) handleNonTxnOp(op db.Oplog) error {
671672
return errors.Errorf("unknown oplog command name %v: %v", cmdName, op)
672673
}
673674

674-
ns := strings.Split(op.Namespace, ".")
675-
dbName := ns[0]
676-
677675
switch cmdName {
678676
case "commitIndexBuild":
679677
// commitIndexBuild was introduced in 4.4, one "commitIndexBuild" command can contain several
@@ -793,6 +791,12 @@ func (o *OplogRestore) handleNonTxnOp(op db.Oplog) error {
793791
return errors.Wrap(err, "oplog: drop collection before create")
794792
}
795793
}
794+
} else if op.Operation == "i" && collName == "system.views" {
795+
// PBM-921: ensure the collection exists before "creating" views or timeseries
796+
err := o.dst.Database(dbName).CreateCollection(context.TODO(), "system.views")
797+
if err != nil {
798+
return errors.Wrapf(err, "ensure %s.system.views collection", dbName)
799+
}
796800
}
797801

798802
err = o.applyOps([]interface{}{op})

0 commit comments

Comments
 (0)