Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 23 additions & 2 deletions go/vt/vttablet/onlineddl/executor.go
Original file line number Diff line number Diff line change
Expand Up @@ -621,10 +621,20 @@ func (e *Executor) terminateVReplMigration(ctx context.Context, uuid string) err
if _, err := e.vreplicationExec(ctx, tablet.Tablet, query); err != nil {
log.Errorf("FAIL vreplicationExec: uuid=%s, query=%v, error=%v", uuid, query, err)
}
return nil
}

if err := e.deleteVReplicationEntry(ctx, uuid); err != nil {
func (e *Executor) startVreplication(ctx context.Context, tablet *topodatapb.Tablet, workflow string) (err error) {
query, err := sqlparser.ParseAndBind(sqlStartVReplStream,
sqltypes.StringBindVariable(e.dbName),
sqltypes.StringBindVariable(workflow),
)
if err != nil {
return err
}
if _, err := e.vreplicationExec(ctx, tablet, query); err != nil {
return vterrors.Wrapf(err, "FAIL vreplicationExec: uuid=%s, query=%v", workflow, query)
}
return nil
}

Expand Down Expand Up @@ -1071,6 +1081,16 @@ func (e *Executor) cutOverVReplMigration(ctx context.Context, s *VReplStream, sh
}
go log.Infof("cutOverVReplMigration %v: stopped vreplication", s.workflow)

defer func() {
if !renameWasSuccessful {
// Restarting vreplication
if err := e.startVreplication(ctx, tablet.Tablet, s.workflow); err != nil {
log.Errorf("cutOverVReplMigration %v: failed restarting vreplication after cutover failure: %v", s.workflow, err)
}
go log.Infof("cutOverVReplMigration %v: started vreplication after cutover failure", s.workflow)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why to start a goroutine for calling in log function?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

because in this critical section I don't want to block on writing a log line, as silly as it may be.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@shlomi-noach Is it then essential to log at all? Starting a goroutine also has some cost 😄.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dbussink , yeah, I'd like this entry to appear in the logs. If it appears, it means vreplication has definitely started, which is an important info

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will not be the only go log.Infof call in the cutOverVReplMigration function. There's a bunch of other such calls.

}
}()

// rename tables atomically (remember, writes on source tables are stopped)
{
if isVreplicationTestSuite {
Expand Down Expand Up @@ -3137,6 +3157,7 @@ func (e *Executor) reviewRunningMigrations(ctx context.Context) (countRunnning i
cancellable = append(cancellable, newCancellableMigration(uuid, s.message))
}
if !s.isRunning() {
log.Infof("migration %s in 'running' state but vreplication state is '%s'", uuid, s.state.String())
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just some added visibility.

return nil
}
// This VRepl migration may have started from outside this tablet, so
Expand Down Expand Up @@ -4128,7 +4149,7 @@ func (e *Executor) ForceCutOverPendingMigrations(ctx context.Context) (result *s
if err != nil {
return result, err
}
log.Infof("ForceCutOverPendingMigrations: iterating %v migrations %s", len(uuids))
log.Infof("ForceCutOverPendingMigrations: iterating %v migrations", len(uuids))

result = &sqltypes.Result{}
for _, uuid := range uuids {
Expand Down
Loading