本文整理匯總了Golang中github.com/flynn/flynn/pkg/sirenia/state.Config.Equal方法的典型用法代碼示例。如果您正苦於以下問題:Golang Config.Equal方法的具體用法?Golang Config.Equal怎麽用?Golang Config.Equal使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類github.com/flynn/flynn/pkg/sirenia/state.Config
的用法示例。
在下文中一共展示了Config.Equal方法的2個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: reconfigure
func (p *Postgres) reconfigure(config *state.Config) (err error) {
log := p.log.New("fn", "reconfigure")
defer func() {
if err == nil {
p.setConfig(config)
p.configApplied = true
}
}()
if config != nil && config.Role == state.RoleNone {
log.Info("nothing to do", "reason", "null role")
return nil
}
// If we've already applied the same postgres config, we don't need to do anything
if p.configApplied && config != nil && p.config() != nil && config.Equal(p.config()) {
log.Info("nothing to do", "reason", "config already applied")
return nil
}
// If we're already running and it's just a change from async to sync with the same node, we don't need to restart
if p.configApplied && p.running() && p.config() != nil && config != nil &&
p.config().Role == state.RoleAsync && config.Role == state.RoleSync && config.Upstream.Meta[pgIdKey] == p.config().Upstream.Meta[pgIdKey] {
log.Info("nothing to do", "reason", "becoming sync with same upstream")
return nil
}
// Make sure that we don't keep waiting for replication sync while reconfiguring
p.cancelSyncWait()
p.setSyncedDownstream(nil)
// If we're already running and this is only a sync change, we just need to update the config.
if p.running() && p.config() != nil && config != nil && p.config().Role == state.RolePrimary && config.Role == state.RolePrimary {
return p.updateSync(config.Downstream)
}
// If we're already running and this is only a downstream change, just wait for the new downstream to catch up
if p.running() && p.config().IsNewDownstream(config) {
log.Info("downstream changed", "to", config.Downstream.Addr)
p.waitForSync(config.Downstream, false)
return
}
if config == nil {
config = p.config()
}
if config.Role == state.RolePrimary {
return p.assumePrimary(config.Downstream)
}
return p.assumeStandby(config.Upstream, config.Downstream)
}
示例2: reconfigure
func (p *Process) reconfigure(config *state.Config) error {
logger := p.Logger.New("fn", "reconfigure")
if err := func() error {
if config != nil && config.Role == state.RoleNone {
logger.Info("nothing to do", "reason", "null role")
return nil
}
// If we've already applied the same config, we don't need to do anything
if p.configApplied && config != nil && p.config() != nil && config.Equal(p.config()) {
logger.Info("nothing to do", "reason", "config already applied")
return nil
}
// If we're already running and it's just a change from async to sync with the same node, we don't need to restart
if p.configApplied && p.running() && p.config() != nil && config != nil &&
p.config().Role == state.RoleAsync && config.Role == state.RoleSync && config.Upstream.Meta["MYSQL_ID"] == p.config().Upstream.Meta["MYSQL_ID"] {
logger.Info("nothing to do", "reason", "becoming sync with same upstream")
return nil
}
// Make sure that we don't keep waiting for replication sync while reconfiguring
p.cancelSyncWait()
p.syncedDownstreamValue.Store((*discoverd.Instance)(nil))
// If we're already running and this is only a downstream change, just wait for the new downstream to catch up
if p.running() && p.config().IsNewDownstream(config) {
logger.Info("downstream changed", "to", config.Downstream.Addr)
p.waitForSync(config.Downstream, false)
return nil
}
if config == nil {
config = p.config()
}
if config.Role == state.RolePrimary {
return p.assumePrimary(config.Downstream)
}
return p.assumeStandby(config.Upstream, config.Downstream)
}(); err != nil {
return err
}
// Apply configuration.
p.configValue.Store(config)
p.configApplied = true
return nil
}