zrepl/replication/logic/replication_logic_policy.go

52 lines
1.5 KiB
Go

package logic
import (
"github.com/go-playground/validator"
"github.com/pkg/errors"
"github.com/zrepl/zrepl/config"
"github.com/zrepl/zrepl/replication/logic/pdu"
)
type PlannerPolicy struct {
EncryptedSend tri // all sends must be encrypted (send -w, and encryption!=off)
ReplicationConfig *pdu.ReplicationConfig
SizeEstimationConcurrency int `validate:"gte=1"`
}
var validate = validator.New()
func (p PlannerPolicy) Validate() error {
return validate.Struct(p)
}
func ReplicationConfigFromConfig(in *config.Replication) (*pdu.ReplicationConfig, error) {
initial, err := pduReplicationGuaranteeKindFromConfig(in.Protection.Initial)
if err != nil {
return nil, errors.Wrap(err, "field 'initial'")
}
incremental, err := pduReplicationGuaranteeKindFromConfig(in.Protection.Incremental)
if err != nil {
return nil, errors.Wrap(err, "field 'incremental'")
}
return &pdu.ReplicationConfig{
Protection: &pdu.ReplicationConfigProtection{
Initial: initial,
Incremental: incremental,
},
}, nil
}
func pduReplicationGuaranteeKindFromConfig(in string) (k pdu.ReplicationGuaranteeKind, _ error) {
switch in {
case "guarantee_nothing":
return pdu.ReplicationGuaranteeKind_GuaranteeNothing, nil
case "guarantee_incremental":
return pdu.ReplicationGuaranteeKind_GuaranteeIncrementalReplication, nil
case "guarantee_resumability":
return pdu.ReplicationGuaranteeKind_GuaranteeResumability, nil
default:
return k, errors.Errorf("%q is not in guarantee_{nothing,incremental,resumability}", in)
}
}