fix: handle meta backup offset errors safely (#9818)

* fix: log meta backup offset errors

* fix: log meta backup offset errors

* fix: exit on meta backup offset errors

Exit with a non-zero status when the initial metadata backup offset cannot be persisted.

Classify offset-read failures during streaming so the backup process exits instead of retrying forever, allowing supervisors to restart and bootstrap from a missing checkpoint.

* meta backup: read offset in the loop, drop offset error type

Reading the saved offset inside the retry loop makes an offset read
failure a clean exit and a stream error a retry, without a typed error
to tell them apart. streamMetadataBackup now takes the start time.

---------

Co-authored-by: Chris Lu <chris.lu@gmail.com>
This commit is contained in:
7y-9
2026-06-05 01:53:23 +08:00
committed by GitHub
parent 3e8ec879c4
commit 6e8002f065
+8 -8
View File
@@ -115,15 +115,19 @@ func runFilerMetaBackup(cmd *Command, args []string) bool {
glog.Errorf("traverse meta data: %v", err)
return true
}
glog.V(0).Infof("metadata copied up to %v", startTime)
if err := metaBackup.setOffset(startTime); err != nil {
startTime = time.Now()
glog.Exitf("set metadata backup offset: %v", err)
return true
}
glog.V(0).Infof("metadata copied up to %v", startTime)
}
for {
err := metaBackup.streamMetadataBackup()
startTime, err := metaBackup.getOffset()
if err != nil {
glog.Exitf("read metadata backup offset from %s: %v", *metaBackup.filerAddress, err)
}
if err := metaBackup.streamMetadataBackup(startTime); err != nil {
glog.Errorf("filer meta backup from %s: %v", *metaBackup.filerAddress, err)
time.Sleep(1747 * time.Millisecond)
}
@@ -177,12 +181,8 @@ var (
MetaBackupKey = []byte("metaBackup")
)
func (metaBackup *FilerMetaBackupOptions) streamMetadataBackup() error {
func (metaBackup *FilerMetaBackupOptions) streamMetadataBackup(startTime time.Time) error {
startTime, err := metaBackup.getOffset()
if err != nil {
startTime = time.Now()
}
glog.V(0).Infof("streaming from %v", startTime)
store := metaBackup.store