mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-12-18 11:00:25 +00:00
rbd: check local image description for split-brain
In some corner case like `re-player shutdown` the local image will not be in error state. It would be also worth considering `description` field to make sure about split-brain. Signed-off-by: Madhu Rajanna <madhupr007@gmail.com>
This commit is contained in:
parent
7c4b29bd57
commit
0d51f6d833
@ -634,8 +634,7 @@ func (rs *ReplicationServer) ResyncVolume(ctx context.Context,
|
|||||||
ready = checkRemoteSiteStatus(ctx, mirrorStatus)
|
ready = checkRemoteSiteStatus(ctx, mirrorStatus)
|
||||||
}
|
}
|
||||||
|
|
||||||
// resync only if the image is in error state
|
if resyncRequired(localStatus) {
|
||||||
if strings.Contains(localStatus.State.String(), string(errorState)) {
|
|
||||||
err = rbdVol.resyncImage()
|
err = rbdVol.resyncImage()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.ErrorLog(ctx, err.Error())
|
log.ErrorLog(ctx, err.Error())
|
||||||
@ -664,3 +663,20 @@ func (rs *ReplicationServer) ResyncVolume(ctx context.Context,
|
|||||||
|
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// resyncRequired returns true if local image is in split-brain state and image
|
||||||
|
// needs resync.
|
||||||
|
func resyncRequired(localStatus librbd.SiteMirrorImageStatus) bool {
|
||||||
|
// resync is required if the image is in error state or the description
|
||||||
|
// contains split-brain message.
|
||||||
|
// In some corner cases like `re-player shutdown` the local image will not
|
||||||
|
// be in an error state. It would be also worth considering the `description`
|
||||||
|
// field to make sure about split-brain.
|
||||||
|
splitBrain := "split-brain"
|
||||||
|
if strings.Contains(localStatus.State.String(), string(errorState)) ||
|
||||||
|
strings.Contains(localStatus.Description, splitBrain) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user