mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-11-10 13:58:24 +01:00
shell: multi-target fs.mergeVolumes and volume.mark -readonlyCanDelete (#10706)
* shell: fs.mergeVolumes distributes one volume across multiple -toVolumeId targets * volume: volume.mark -readonlyCanDelete rejects writes but keeps accepting deletes * seaweed-volume: mirror readonlyCanDelete volume state
This commit is contained in:
1 parent
0b1f0cafee
commit
c6e1387f59
18 files changed
+782
-158
No files matched your search
@@ -256,7 +256,7 @@ func (vs *VolumeServer) VolumeConfigure(ctx context.Context, req *volume_server_
|
||||
|
||||
}
|
||||
|
||||
func (vs *VolumeServer) makeVolumeReadonly(ctx context.Context, v *storage.Volume, persist bool) error {
|
||||
func (vs *VolumeServer) makeVolumeReadonly(ctx context.Context, v *storage.Volume, canDelete bool, persist bool) error {
|
||||
if err := vs.CheckMaintenanceMode(); err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -269,7 +269,7 @@ func (vs *VolumeServer) makeVolumeReadonly(ctx context.Context, v *storage.Volum
|
||||
// rare case 1.5: it will be unlucky if heartbeat happened between step 1 and 2.
|
||||
|
||||
// step 2: mark local volume as readonly
|
||||
if err := vs.store.MarkVolumeReadonly(v.Id, persist); err != nil {
|
||||
if err := vs.store.MarkVolumeReadonly(v.Id, canDelete, persist); err != nil {
|
||||
glog.Errorf("mark volume %d readonly: %v", v.Id, err)
|
||||
return err
|
||||
} else {
|
||||
@@ -357,7 +357,7 @@ func (vs *VolumeServer) VolumeMarkReadonly(ctx context.Context, req *volume_serv
|
||||
return resp, fmt.Errorf("volume %d not found", req.VolumeId)
|
||||
}
|
||||
|
||||
if err := vs.makeVolumeReadonly(ctx, v, req.GetPersist()); err != nil {
|
||||
if err := vs.makeVolumeReadonly(ctx, v, req.GetCanDelete(), req.GetPersist()); err != nil {
|
||||
return resp, err
|
||||
}
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@ func (vs *VolumeServer) ScrubVolume(ctx context.Context, req *volume_server_pb.S
|
||||
errs := []error{}
|
||||
if req.GetMarkBrokenVolumesReadonly() {
|
||||
for _, v := range brokenVolumes {
|
||||
if err := vs.makeVolumeReadonly(ctx, v, true); err != nil {
|
||||
if err := vs.makeVolumeReadonly(ctx, v, false, true); err != nil {
|
||||
errs = append(errs, err)
|
||||
details = append(details, err.Error())
|
||||
} else {
|
||||
|
||||
Reference in new issue
Block a user