support for marking point-of-interest in migration
This commit is contained in:
parent
ae899bd65c
commit
20f000833f
@ -79,6 +79,8 @@ type MigrationContext struct {
|
|||||||
LockTablesStartTime time.Time
|
LockTablesStartTime time.Time
|
||||||
RenameTablesStartTime time.Time
|
RenameTablesStartTime time.Time
|
||||||
RenameTablesEndTime time.Time
|
RenameTablesEndTime time.Time
|
||||||
|
pointOfInterestTime time.Time
|
||||||
|
pointOfInterestTimeMutex *sync.Mutex
|
||||||
CurrentLag int64
|
CurrentLag int64
|
||||||
TotalRowsCopied int64
|
TotalRowsCopied int64
|
||||||
TotalDMLEventsApplied int64
|
TotalDMLEventsApplied int64
|
||||||
@ -131,6 +133,7 @@ func newMigrationContext() *MigrationContext {
|
|||||||
throttleMutex: &sync.Mutex{},
|
throttleMutex: &sync.Mutex{},
|
||||||
ThrottleControlReplicaKeys: mysql.NewInstanceKeyMap(),
|
ThrottleControlReplicaKeys: mysql.NewInstanceKeyMap(),
|
||||||
configMutex: &sync.Mutex{},
|
configMutex: &sync.Mutex{},
|
||||||
|
pointOfInterestTimeMutex: &sync.Mutex{},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -216,16 +219,31 @@ func (this *MigrationContext) GetIteration() int64 {
|
|||||||
return atomic.LoadInt64(&this.Iteration)
|
return atomic.LoadInt64(&this.Iteration)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (this *MigrationContext) MarkPointOfInterest() int64 {
|
||||||
|
this.pointOfInterestTimeMutex.Lock()
|
||||||
|
defer this.pointOfInterestTimeMutex.Unlock()
|
||||||
|
|
||||||
|
this.pointOfInterestTime = time.Now()
|
||||||
|
return atomic.LoadInt64(&this.Iteration)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *MigrationContext) TimeSincePointOfInterest() time.Duration {
|
||||||
|
this.pointOfInterestTimeMutex.Lock()
|
||||||
|
defer this.pointOfInterestTimeMutex.Unlock()
|
||||||
|
|
||||||
|
return time.Now().Sub(this.pointOfInterestTime)
|
||||||
|
}
|
||||||
|
|
||||||
func (this *MigrationContext) SetThrottled(throttle bool, reason string) {
|
func (this *MigrationContext) SetThrottled(throttle bool, reason string) {
|
||||||
this.throttleMutex.Lock()
|
this.throttleMutex.Lock()
|
||||||
defer func() { this.throttleMutex.Unlock() }()
|
defer this.throttleMutex.Unlock()
|
||||||
this.isThrottled = throttle
|
this.isThrottled = throttle
|
||||||
this.throttleReason = reason
|
this.throttleReason = reason
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *MigrationContext) IsThrottled() (bool, string) {
|
func (this *MigrationContext) IsThrottled() (bool, string) {
|
||||||
this.throttleMutex.Lock()
|
this.throttleMutex.Lock()
|
||||||
defer func() { this.throttleMutex.Unlock() }()
|
defer this.throttleMutex.Unlock()
|
||||||
return this.isThrottled, this.throttleReason
|
return this.isThrottled, this.throttleReason
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -606,6 +606,8 @@ func (this *Migrator) printStatus() {
|
|||||||
shouldPrintStatus = (elapsedSeconds%5 == 0)
|
shouldPrintStatus = (elapsedSeconds%5 == 0)
|
||||||
} else if elapsedSeconds <= 180 {
|
} else if elapsedSeconds <= 180 {
|
||||||
shouldPrintStatus = (elapsedSeconds%5 == 0)
|
shouldPrintStatus = (elapsedSeconds%5 == 0)
|
||||||
|
} else if this.migrationContext.TimeSincePointOfInterest() <= 60 {
|
||||||
|
shouldPrintStatus = (elapsedSeconds%5 == 0)
|
||||||
} else {
|
} else {
|
||||||
shouldPrintStatus = (elapsedSeconds%30 == 0)
|
shouldPrintStatus = (elapsedSeconds%30 == 0)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user