diff --git a/cdc/owner/changefeed.go b/cdc/owner/changefeed.go index 94f8fee99fe..f5fd347b769 100644 --- a/cdc/owner/changefeed.go +++ b/cdc/owner/changefeed.go @@ -475,6 +475,9 @@ func (c *changefeed) updateStatus(currentTs int64, barrierTs model.Ts) { } c.state.PatchStatus(func(status *model.ChangeFeedStatus) (*model.ChangeFeedStatus, bool, error) { changed := false + if status == nil { + return nil, changed, nil + } if status.ResolvedTs != resolvedTs { status.ResolvedTs = resolvedTs changed = true diff --git a/cdc/owner/feed_state_manager.go b/cdc/owner/feed_state_manager.go index fe84913e7b4..b29b5c53bd6 100644 --- a/cdc/owner/feed_state_manager.go +++ b/cdc/owner/feed_state_manager.go @@ -136,6 +136,9 @@ func (m *feedStateManager) handleAdminJob() (jobsPending bool) { m.patchState(model.StateNormal) // remove error history to make sure the changefeed can running in next tick m.state.PatchInfo(func(info *model.ChangeFeedInfo) (*model.ChangeFeedInfo, bool, error) { + if info == nil { + return nil, false, nil + } if info.Error != nil || len(info.ErrorHis) != 0 { info.Error = nil info.ErrorHis = nil @@ -199,6 +202,9 @@ func (m *feedStateManager) patchState(feedState model.FeedState) { }) m.state.PatchInfo(func(info *model.ChangeFeedInfo) (*model.ChangeFeedInfo, bool, error) { changed := false + if info == nil { + return nil, changed, nil + } if info.State != feedState { info.State = feedState changed = true @@ -263,6 +269,9 @@ func (m *feedStateManager) handleError(errs ...*model.RunningError) { for _, err := range errs { if cerrors.ChangefeedFastFailErrorCode(errors.RFCErrorCode(err.Code)) { m.state.PatchInfo(func(info *model.ChangeFeedInfo) (*model.ChangeFeedInfo, bool, error) { + if info == nil { + return nil, false, nil + } info.Error = err info.ErrorHis = append(info.ErrorHis, time.Now().UnixNano()/1e6) info.CleanUpOutdatedErrorHistory() @@ -275,6 +284,9 @@ func (m *feedStateManager) handleError(errs ...*model.RunningError) { } m.state.PatchInfo(func(info *model.ChangeFeedInfo) (*model.ChangeFeedInfo, bool, error) { + if info == nil { + return nil, false, nil + } for _, err := range errs { info.Error = err info.ErrorHis = append(info.ErrorHis, time.Now().UnixNano()/1e6)