mirror of
https://github.com/minio/minio.git
synced 2025-11-13 15:21:36 -05:00
objectLayer: Check for format.json in a wrapped disk. (#3311)
This is needed to validate if the `format.json` indeed exists when a fresh node is brought online. This wrapped implementation also connects to the remote node by attempting a re-login. Subsequently after a successful connect `format.json` is validated as well. Fixes #3207
This commit is contained in:
@@ -97,13 +97,12 @@ type authConfig struct {
|
||||
|
||||
// AuthRPCClient is a wrapper type for RPCClient which provides JWT based authentication across reconnects.
|
||||
type AuthRPCClient struct {
|
||||
mu sync.Mutex
|
||||
config *authConfig
|
||||
rpc *RPCClient // reconnect'able rpc client built on top of net/rpc Client
|
||||
isLoggedIn bool // Indicates if the auth client has been logged in and token is valid.
|
||||
serverToken string // Disk rpc JWT based token.
|
||||
serverVersion string // Server version exchanged by the RPC.
|
||||
serverIOErrCnt int // Keeps track of total errors occurred for each RPC call.
|
||||
mu sync.Mutex
|
||||
config *authConfig
|
||||
rpc *RPCClient // reconnect'able rpc client built on top of net/rpc Client
|
||||
isLoggedIn bool // Indicates if the auth client has been logged in and token is valid.
|
||||
serverToken string // Disk rpc JWT based token.
|
||||
serverVersion string // Server version exchanged by the RPC.
|
||||
}
|
||||
|
||||
// newAuthClient - returns a jwt based authenticated (go) rpc client, which does automatic reconnect.
|
||||
@@ -133,20 +132,6 @@ func (authClient *AuthRPCClient) Login() (err error) {
|
||||
// As soon as the function returns unlock,
|
||||
defer authClient.mu.Unlock()
|
||||
|
||||
// Take remote disk offline if the total server errors
|
||||
// are more than maximum allowable IO error limit.
|
||||
if authClient.serverIOErrCnt > maxAllowedIOError {
|
||||
return errFaultyRemoteDisk
|
||||
}
|
||||
|
||||
// In defer sequence this is called first, so error
|
||||
// increment happens well with in the lock.
|
||||
defer func() {
|
||||
if err != nil {
|
||||
authClient.serverIOErrCnt++
|
||||
}
|
||||
}()
|
||||
|
||||
// Return if already logged in.
|
||||
if authClient.isLoggedIn {
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user