harbor/src/replication/event/start_replication_handler.go
2017-11-16 10:55:03 +08:00

46 lines
1.3 KiB
Go

package event
import (
"errors"
"fmt"
"reflect"
"github.com/vmware/harbor/src/replication/core"
)
//StartReplicationHandler implements the notification handler interface to handle start replication requests.
type StartReplicationHandler struct{}
//StartReplicationNotification contains data required by this handler
type StartReplicationNotification struct {
//ID of the policy
PolicyID int64
}
//Handle implements the same method of notification handler interface
func (srh *StartReplicationHandler) Handle(value interface{}) error {
if value == nil {
return errors.New("StartReplicationHandler can not handle nil value")
}
vType := reflect.TypeOf(value)
if vType.Kind() != reflect.Struct || vType.String() != "core.StartReplicationNotification" {
return fmt.Errorf("Mismatch value type of StartReplicationHandler, expect %s but got %s", "core.StartReplicationNotification", vType.String())
}
notification := value.(StartReplicationNotification)
if notification.PolicyID <= 0 {
return errors.New("Invalid policy")
}
//Start replication
//TODO:
return core.DefaultController.Replicate(notification.PolicyID)
}
//IsStateful implements the same method of notification handler interface
func (srh *StartReplicationHandler) IsStateful() bool {
//Stateless
return false
}