blob: a637a698f1807ffa5822feb26453da71fb723a12 [file] [log] [blame]
package config
import (
"fmt"
"github.com/pkg/errors"
"gopkg.in/yaml.v2"
"io/ioutil"
"path"
"time"
)
var (
conf ServerConfig
)
func GetServerConfig() ServerConfig {
return conf
}
type ServerConfig struct {
Host string `default:"127.0.0.1" yaml:"host" json:"host,omitempty"`
Port string `default:"8091" yaml:"port" json:"port,omitempty"`
MaxRollbackRetryTimeout int64 `default:"-1" yaml:"max_rollback_retry_timeout" json:"max_rollback_retry_timeout,omitempty"`
RollbackRetryTimeoutUnlockEnable bool `default:"false" yaml:"rollback_retry_timeout_unlock_enable" json:"rollback_retry_timeout_unlock_enable,omitempty"`
MaxCommitRetryTimeout int64 `default:"-1" yaml:"max_commit_retry_timeout" json:"max_commit_retry_timeout,omitempty"`
TimeoutRetryPrd string `default:"1s" yaml:"timeout_retry_period" json:"timeout_retry_period,omitempty"`
TimeoutRetryPeriod time.Duration
RollbackingRetryPrd string `default:"1s" yaml:"rollbacking_retry_period" json:"rollbacking_retry_period,omitempty"`
RollbackingRetryPeriod time.Duration
CommittingRetryPrd string `default:"1s" yaml:"committing_retry_period" json:"committing_retry_period,omitempty"`
CommittingRetryPeriod time.Duration
AsynCommittingRetryPrd string `default:"1s" yaml:"aync_committing_retry_period" json:"aync_committing_retry_period,omitempty"`
AsynCommittingRetryPeriod time.Duration
LogDeletePrd string `default:"24h" yaml:"log_delete_period" json:"log_delete_period,omitempty"`
LogDeletePeriod time.Duration
GettyConfig GettyConfig `required:"true" yaml:"getty_config" json:"getty_config,omitempty"`
UndoConfig UndoConfig `required:"true" yaml:"undo_config" json:"undo_config,omitempty"`
StoreConfig StoreConfig `required:"true" yaml:"store_config" json:"store_config,omitempty"`
}
func InitConf(confFile string) error {
var err error
if confFile == "" {
return errors.WithMessagef(err,fmt.Sprintf("application configure file name is nil"))
}
if path.Ext(confFile) != ".yml" {
return errors.WithMessagef(err,fmt.Sprintf("application configure file name{%v} suffix must be .yml", confFile))
}
conf = ServerConfig{}
confFileStream, err := ioutil.ReadFile(confFile)
if err != nil {
return errors.WithMessagef(err,fmt.Sprintf("ioutil.ReadFile(file:%s) = error:%s", confFile, err))
}
err = yaml.Unmarshal(confFileStream, &conf)
if err != nil {
return errors.WithMessagef(err,fmt.Sprintf("yaml.Unmarshal() = error:%s", err))
}
if conf.TimeoutRetryPeriod, err = time.ParseDuration(conf.TimeoutRetryPrd); err != nil {
return errors.WithMessagef(err, "time.ParseDuration(TimeoutRetryPrd{%#v})", conf.TimeoutRetryPrd)
}
conf.RollbackingRetryPeriod, err = time.ParseDuration(conf.RollbackingRetryPrd)
if err != nil {
return errors.WithMessagef(err,"time.ParseDuration(RollbackingRetryPrd{%#v})", conf.RollbackingRetryPrd)
}
if conf.CommittingRetryPeriod, err = time.ParseDuration(conf.CommittingRetryPrd); err != nil {
return errors.WithMessagef(err, "time.ParseDuration(CommittingRetryPrd{%#v})", conf.CommittingRetryPrd)
}
if conf.AsynCommittingRetryPeriod, err = time.ParseDuration(conf.AsynCommittingRetryPrd); err != nil {
return errors.WithMessagef(err, "time.ParseDuration(AsynCommittingRetryPrd{%#v})", conf.AsynCommittingRetryPrd)
}
if conf.LogDeletePeriod, err = time.ParseDuration(conf.LogDeletePrd); err != nil {
return errors.WithMessagef(err, "time.ParseDuration(LogDeletePrd{%#v})", conf.LogDeletePrd)
}
conf.GettyConfig.SessionTimeout, err = time.ParseDuration(conf.GettyConfig.SessionTmt)
if err != nil {
return errors.WithMessagef(err,fmt.Sprintf("time.ParseDuration(SessionTimeout{%#v}) = error{%v}", conf.GettyConfig.SessionTmt, err))
}
if conf.GettyConfig.GettySessionParam.KeepAlivePeriod, err = time.ParseDuration(conf.GettyConfig.GettySessionParam.KeepAlivePrd); err != nil {
return errors.WithMessagef(err, "time.ParseDuration(KeepAlivePeriod{%#v})", conf.GettyConfig.GettySessionParam.KeepAlivePrd)
}
if conf.GettyConfig.GettySessionParam.TcpReadTimeout, err = time.ParseDuration(conf.GettyConfig.GettySessionParam.TcpReadTmt); err != nil {
return errors.WithMessagef(err, "time.ParseDuration(TcpReadTimeout{%#v})", conf.GettyConfig.GettySessionParam.TcpReadTmt)
}
if conf.GettyConfig.GettySessionParam.TcpWriteTimeout, err = time.ParseDuration(conf.GettyConfig.GettySessionParam.TcpWriteTmt); err != nil {
return errors.WithMessagef(err, "time.ParseDuration(TcpWriteTimeout{%#v})", conf.GettyConfig.GettySessionParam.TcpWriteTmt)
}
if conf.GettyConfig.GettySessionParam.WaitTimeout, err = time.ParseDuration(conf.GettyConfig.GettySessionParam.WaitTmt); err != nil {
return errors.WithMessagef(err, "time.ParseDuration(WaitTimeout{%#v})", conf.GettyConfig.GettySessionParam.WaitTmt)
}
storeConfig = conf.StoreConfig
return nil
}