mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2025-09-19 10:28:00 +08:00
ensure cached client with updated storage conf
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"fmt"
|
||||
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
|
||||
"github.com/chrislusf/seaweedfs/weed/pb/remote_pb"
|
||||
"github.com/golang/protobuf/proto"
|
||||
"io"
|
||||
"strings"
|
||||
"sync"
|
||||
@@ -76,9 +77,14 @@ type RemoteStorageClientMaker interface {
|
||||
HasBucket() bool
|
||||
}
|
||||
|
||||
type CachedRemoteStorageClient struct {
|
||||
*remote_pb.RemoteConf
|
||||
RemoteStorageClient
|
||||
}
|
||||
|
||||
var (
|
||||
RemoteStorageClientMakers = make(map[string]RemoteStorageClientMaker)
|
||||
remoteStorageClients = make(map[string]RemoteStorageClient)
|
||||
remoteStorageClients = make(map[string]CachedRemoteStorageClient)
|
||||
remoteStorageClientsLock sync.Mutex
|
||||
)
|
||||
|
||||
@@ -107,8 +113,8 @@ func GetRemoteStorage(remoteConf *remote_pb.RemoteConf) (RemoteStorageClient, er
|
||||
defer remoteStorageClientsLock.Unlock()
|
||||
|
||||
existingRemoteStorageClient, found := remoteStorageClients[remoteConf.Name]
|
||||
if found {
|
||||
return existingRemoteStorageClient, nil
|
||||
if found && proto.Equal(existingRemoteStorageClient.RemoteConf, remoteConf) {
|
||||
return existingRemoteStorageClient.RemoteStorageClient, nil
|
||||
}
|
||||
|
||||
newRemoteStorageClient, err := makeRemoteStorageClient(remoteConf)
|
||||
@@ -116,7 +122,10 @@ func GetRemoteStorage(remoteConf *remote_pb.RemoteConf) (RemoteStorageClient, er
|
||||
return nil, fmt.Errorf("make remote storage client %s: %v", remoteConf.Name, err)
|
||||
}
|
||||
|
||||
remoteStorageClients[remoteConf.Name] = newRemoteStorageClient
|
||||
remoteStorageClients[remoteConf.Name] = CachedRemoteStorageClient{
|
||||
RemoteConf: remoteConf,
|
||||
RemoteStorageClient: newRemoteStorageClient,
|
||||
}
|
||||
|
||||
return newRemoteStorageClient, nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user