Browse Source
Block RPC write operations on volume servers when maintenance mode is enabled (#8115)
Block RPC write operations on volume servers when maintenance mode is enabled (#8115)
* Boostrap persistent state for volume servers. This PR implements logic load/save persistent state information for storages associated with volume servers, and reporting state changes back to masters via heartbeat messages. More work ensues! See https://github.com/seaweedfs/seaweedfs/issues/7977 for details. * Block RPC operations writing to volume servers when maintenance mode is on.master
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 169 additions and 16 deletions
-
15weed/pb/volume_server_pb/volume_server.pb.go
-
25weed/server/volume_grpc_admin.go
-
5weed/server/volume_grpc_batch_delete.go
-
7weed/server/volume_grpc_copy.go
-
19weed/server/volume_grpc_erasure_coding.go
-
5weed/server/volume_grpc_read_write.go
-
4weed/server/volume_grpc_remote.go
-
1weed/server/volume_grpc_tail.go
-
3weed/server/volume_grpc_tier_upload.go
-
12weed/server/volume_grpc_vacuum.go
-
17weed/server/volume_server.go
-
72weed/server/volume_server_test.go
@ -0,0 +1,72 @@ |
|||
package weed_server |
|||
|
|||
import ( |
|||
"testing" |
|||
|
|||
"github.com/seaweedfs/seaweedfs/weed/pb/volume_server_pb" |
|||
"github.com/seaweedfs/seaweedfs/weed/storage" |
|||
) |
|||
|
|||
func TestMaintenanceMode(t *testing.T) { |
|||
testCases := []struct { |
|||
name string |
|||
pb *volume_server_pb.VolumeServerState |
|||
want bool |
|||
wantCheckErr string |
|||
}{ |
|||
{ |
|||
name: "non-initialized state", |
|||
pb: nil, |
|||
want: false, |
|||
wantCheckErr: "", |
|||
}, |
|||
{ |
|||
name: "maintenance mode disabled", |
|||
pb: &volume_server_pb.VolumeServerState{ |
|||
Maintenance: false, |
|||
}, |
|||
want: false, |
|||
wantCheckErr: "", |
|||
}, |
|||
{ |
|||
name: "maintenance mode enabled", |
|||
pb: &volume_server_pb.VolumeServerState{ |
|||
Maintenance: true, |
|||
}, |
|||
want: true, |
|||
wantCheckErr: "volume server test_1234 is in maintenance mode", |
|||
}, |
|||
} |
|||
|
|||
for _, tc := range testCases { |
|||
t.Run(tc.name, func(t *testing.T) { |
|||
vs := VolumeServer{ |
|||
store: &storage.Store{ |
|||
Id: "test_1234", |
|||
State: &storage.State{ |
|||
FilePath: "/some/path.pb", |
|||
Pb: tc.pb, |
|||
}, |
|||
}, |
|||
} |
|||
|
|||
if got, want := vs.MaintenanceMode(), tc.want; got != want { |
|||
t.Errorf("MaintenanceMode() returned %v, want %v", got, want) |
|||
} |
|||
|
|||
err, wantErrStr := vs.CheckMaintenanceMode(), tc.wantCheckErr |
|||
if err != nil { |
|||
if wantErrStr == "" { |
|||
t.Errorf("CheckMaintenanceMode() returned error %v, want nil", err) |
|||
} |
|||
if errStr := err.Error(); errStr != wantErrStr { |
|||
t.Errorf("CheckMaintenanceMode() returned error %q, want %q", errStr, wantErrStr) |
|||
} |
|||
} else { |
|||
if wantErrStr != "" { |
|||
t.Errorf("CheckMaintenanceMode() returned no error, want %q", wantErrStr) |
|||
} |
|||
} |
|||
}) |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue