mirror of
https://github.com/minio/minio.git
synced 2024-12-24 06:05:55 -05:00
Implement BucketUpdater interface to call BucketMetaState methods. (#3375)
This commit is contained in:
parent
bc9509bc8a
commit
8021061bd8
@ -37,6 +37,11 @@ type BucketMetaState interface {
|
||||
SendEvent(args *EventArgs) error
|
||||
}
|
||||
|
||||
// BucketUpdater - Interface implementer calls one of BucketMetaState's methods.
|
||||
type BucketUpdater interface {
|
||||
BucketUpdate(client BucketMetaState) error
|
||||
}
|
||||
|
||||
// Type that implements BucketMetaState for local node.
|
||||
type localBucketMetaState struct {
|
||||
ObjectAPI func() ObjectLayer
|
||||
|
@ -108,7 +108,7 @@ func (s3p s3Peers) GetPeerClient(peer string) BucketMetaState {
|
||||
// The updates are sent via a type implementing the BucketMetaState
|
||||
// interface. This makes sure that the local node is directly updated,
|
||||
// and remote nodes are updated via RPC calls.
|
||||
func (s3p s3Peers) SendUpdate(peerIndex []int, args interface{}) []error {
|
||||
func (s3p s3Peers) SendUpdate(peerIndex []int, args BucketUpdater) []error {
|
||||
|
||||
// peer error array
|
||||
errs := make([]error, len(s3p))
|
||||
@ -119,27 +119,7 @@ func (s3p s3Peers) SendUpdate(peerIndex []int, args interface{}) []error {
|
||||
// Function that sends update to peer at `index`
|
||||
sendUpdateToPeer := func(index int) {
|
||||
defer wg.Done()
|
||||
var err error
|
||||
// Get BMS client for peer at `index`. The index is
|
||||
// already checked for being within array bounds.
|
||||
client := s3p[index].bmsClient
|
||||
|
||||
// Make the appropriate bucket metadata update
|
||||
// according to the argument type
|
||||
switch v := args.(type) {
|
||||
case *SetBucketNotificationPeerArgs:
|
||||
err = client.UpdateBucketNotification(v)
|
||||
|
||||
case *SetBucketListenerPeerArgs:
|
||||
err = client.UpdateBucketListener(v)
|
||||
|
||||
case *SetBucketPolicyPeerArgs:
|
||||
err = client.UpdateBucketPolicy(v)
|
||||
|
||||
default:
|
||||
err = fmt.Errorf("Unknown arg in BucketMetaState updater - %v", args)
|
||||
}
|
||||
errs[index] = err
|
||||
errs[index] = args.BucketUpdate(s3p[index].bmsClient)
|
||||
}
|
||||
|
||||
// Special (but common) case of peerIndex == nil, implies send
|
||||
|
@ -48,6 +48,10 @@ type SetBucketNotificationPeerArgs struct {
|
||||
NCfg *notificationConfig
|
||||
}
|
||||
|
||||
func (s *SetBucketNotificationPeerArgs) BucketUpdate(client BucketMetaState) error {
|
||||
return client.UpdateBucketNotification(s)
|
||||
}
|
||||
|
||||
func (s3 *s3PeerAPIHandlers) SetBucketNotificationPeer(args *SetBucketNotificationPeerArgs, reply *GenericReply) error {
|
||||
// check auth
|
||||
if !isRPCTokenValid(args.Token) {
|
||||
@ -68,6 +72,10 @@ type SetBucketListenerPeerArgs struct {
|
||||
LCfg []listenerConfig
|
||||
}
|
||||
|
||||
func (s *SetBucketListenerPeerArgs) BucketUpdate(client BucketMetaState) error {
|
||||
return client.UpdateBucketListener(s)
|
||||
}
|
||||
|
||||
func (s3 *s3PeerAPIHandlers) SetBucketListenerPeer(args *SetBucketListenerPeerArgs, reply *GenericReply) error {
|
||||
// check auth
|
||||
if !isRPCTokenValid(args.Token) {
|
||||
@ -110,6 +118,10 @@ type SetBucketPolicyPeerArgs struct {
|
||||
PChBytes []byte
|
||||
}
|
||||
|
||||
func (s *SetBucketPolicyPeerArgs) BucketUpdate(client BucketMetaState) error {
|
||||
return client.UpdateBucketPolicy(s)
|
||||
}
|
||||
|
||||
// tell receiving server to update a bucket policy
|
||||
func (s3 *s3PeerAPIHandlers) SetBucketPolicyPeer(args *SetBucketPolicyPeerArgs, reply *GenericReply) error {
|
||||
// check auth
|
||||
|
Loading…
Reference in New Issue
Block a user