mirror of
https://github.com/octoleo/syncthing.git
synced 2024-11-09 23:00:58 +00:00
lib/config: Decouple VerifyConfiguration from Committer (#7939)
... and remove 8/10 implementations, which were no-ops. This saves code and time copying configurations.
This commit is contained in:
parent
e2288fe441
commit
bf89bffb0b
@ -94,6 +94,8 @@ type service struct {
|
|||||||
systemLog logger.Recorder
|
systemLog logger.Recorder
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var _ config.Verifier = &service{}
|
||||||
|
|
||||||
type Service interface {
|
type Service interface {
|
||||||
suture.Service
|
suture.Service
|
||||||
config.Committer
|
config.Committer
|
||||||
|
@ -31,14 +31,14 @@ const (
|
|||||||
|
|
||||||
var errTooManyModifications = errors.New("too many concurrent config modifications")
|
var errTooManyModifications = errors.New("too many concurrent config modifications")
|
||||||
|
|
||||||
// The Committer interface is implemented by objects that need to know about
|
// The Committer and Verifier interfaces are implemented by objects
|
||||||
// or have a say in configuration changes.
|
// that need to know about or have a say in configuration changes.
|
||||||
//
|
//
|
||||||
// When the configuration is about to be changed, VerifyConfiguration() is
|
// When the configuration is about to be changed, VerifyConfiguration() is
|
||||||
// called for each subscribing object, with the old and new configuration. A
|
// called for each subscribing object that implements it, with copies of the
|
||||||
// nil error is returned if the new configuration is acceptable (i.e. does not
|
// old and new configuration. A nil error is returned if the new configuration
|
||||||
// contain any errors that would prevent it from being a valid config).
|
// is acceptable (i.e., does not contain any errors that would prevent it from
|
||||||
// Otherwise an error describing the problem is returned.
|
// being a valid config). Otherwise an error describing the problem is returned.
|
||||||
//
|
//
|
||||||
// If any subscriber returns an error from VerifyConfiguration(), the
|
// If any subscriber returns an error from VerifyConfiguration(), the
|
||||||
// configuration change is not committed and an error is returned to whoever
|
// configuration change is not committed and an error is returned to whoever
|
||||||
@ -55,11 +55,16 @@ var errTooManyModifications = errors.New("too many concurrent config modificatio
|
|||||||
// configuration (e.g. calling Wrapper.SetFolder), that are also acquired in any
|
// configuration (e.g. calling Wrapper.SetFolder), that are also acquired in any
|
||||||
// methods of the Committer interface.
|
// methods of the Committer interface.
|
||||||
type Committer interface {
|
type Committer interface {
|
||||||
VerifyConfiguration(from, to Configuration) error
|
|
||||||
CommitConfiguration(from, to Configuration) (handled bool)
|
CommitConfiguration(from, to Configuration) (handled bool)
|
||||||
String() string
|
String() string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A Verifier can determine if a new configuration is acceptable.
|
||||||
|
// See the description for Committer, above.
|
||||||
|
type Verifier interface {
|
||||||
|
VerifyConfiguration(from, to Configuration) error
|
||||||
|
}
|
||||||
|
|
||||||
// Waiter allows to wait for the given config operation to complete.
|
// Waiter allows to wait for the given config operation to complete.
|
||||||
type Waiter interface {
|
type Waiter interface {
|
||||||
Wait()
|
Wait()
|
||||||
@ -300,6 +305,10 @@ func (w *wrapper) replaceLocked(to Configuration) (Waiter, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, sub := range w.subs {
|
for _, sub := range w.subs {
|
||||||
|
sub, ok := sub.(Verifier)
|
||||||
|
if !ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
l.Debugln(sub, "verifying configuration")
|
l.Debugln(sub, "verifying configuration")
|
||||||
if err := sub.VerifyConfiguration(from.Copy(), to.Copy()); err != nil {
|
if err := sub.VerifyConfiguration(from.Copy(), to.Copy()); err != nil {
|
||||||
l.Debugln(sub, "rejected config:", err)
|
l.Debugln(sub, "rejected config:", err)
|
||||||
|
@ -122,10 +122,6 @@ func (lim *limiter) processDevicesConfigurationLocked(from, to config.Configurat
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (lim *limiter) VerifyConfiguration(from, to config.Configuration) error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (lim *limiter) CommitConfiguration(from, to config.Configuration) bool {
|
func (lim *limiter) CommitConfiguration(from, to config.Configuration) bool {
|
||||||
// to ensure atomic update of configuration
|
// to ensure atomic update of configuration
|
||||||
lim.mu.Lock()
|
lim.mu.Lock()
|
||||||
|
@ -706,10 +706,6 @@ func (s *service) logListenAddressesChangedEvent(l ListenerAddresses) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *service) VerifyConfiguration(from, to config.Configuration) error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *service) CommitConfiguration(from, to config.Configuration) bool {
|
func (s *service) CommitConfiguration(from, to config.Configuration) bool {
|
||||||
newDevices := make(map[protocol.DeviceID]bool, len(to.Devices))
|
newDevices := make(map[protocol.DeviceID]bool, len(to.Devices))
|
||||||
for _, dev := range to.Devices {
|
for _, dev := range to.Devices {
|
||||||
|
@ -227,10 +227,6 @@ func (m *manager) Cache() map[protocol.DeviceID]CacheEntry {
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *manager) VerifyConfiguration(_, _ config.Configuration) error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *manager) CommitConfiguration(_, to config.Configuration) (handled bool) {
|
func (m *manager) CommitConfiguration(_, to config.Configuration) (handled bool) {
|
||||||
m.mut.Lock()
|
m.mut.Lock()
|
||||||
defer m.mut.Unlock()
|
defer m.mut.Unlock()
|
||||||
|
@ -168,6 +168,8 @@ type model struct {
|
|||||||
foldersRunning int32
|
foldersRunning int32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var _ config.Verifier = &model{}
|
||||||
|
|
||||||
type folderFactory func(*model, *db.FileSet, *ignore.Matcher, config.FolderConfiguration, versioner.Versioner, events.Logger, *util.Semaphore) service
|
type folderFactory func(*model, *db.FileSet, *ignore.Matcher, config.FolderConfiguration, versioner.Versioner, events.Logger, *util.Semaphore) service
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -212,11 +212,6 @@ func (t *ProgressEmitter) computeProgressUpdates() []progressUpdate {
|
|||||||
return progressUpdates
|
return progressUpdates
|
||||||
}
|
}
|
||||||
|
|
||||||
// VerifyConfiguration implements the config.Committer interface
|
|
||||||
func (t *ProgressEmitter) VerifyConfiguration(from, to config.Configuration) error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// CommitConfiguration implements the config.Committer interface
|
// CommitConfiguration implements the config.Committer interface
|
||||||
func (t *ProgressEmitter) CommitConfiguration(_, to config.Configuration) bool {
|
func (t *ProgressEmitter) CommitConfiguration(_, to config.Configuration) bool {
|
||||||
t.mut.Lock()
|
t.mut.Lock()
|
||||||
|
@ -45,10 +45,6 @@ func NewService(id protocol.DeviceID, cfg config.Wrapper) *Service {
|
|||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Service) VerifyConfiguration(from, to config.Configuration) error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Service) CommitConfiguration(from, to config.Configuration) bool {
|
func (s *Service) CommitConfiguration(from, to config.Configuration) bool {
|
||||||
s.mut.Lock()
|
s.mut.Lock()
|
||||||
if !s.enabled && to.Options.NATEnabled {
|
if !s.enabled && to.Options.NATEnabled {
|
||||||
|
@ -188,10 +188,6 @@ func (h *failureHandler) addReport(data FailureData, evTime time.Time) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *failureHandler) VerifyConfiguration(_, _ config.Configuration) error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *failureHandler) CommitConfiguration(from, to config.Configuration) bool {
|
func (h *failureHandler) CommitConfiguration(from, to config.Configuration) bool {
|
||||||
if from.Options.CREnabled != to.Options.CREnabled || from.Options.CRURL != to.Options.CRURL {
|
if from.Options.CREnabled != to.Options.CREnabled || from.Options.CRURL != to.Options.CRURL {
|
||||||
h.optsChan <- to.Options
|
h.optsChan <- to.Options
|
||||||
|
@ -390,10 +390,6 @@ func (s *Service) Serve(ctx context.Context) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Service) VerifyConfiguration(from, to config.Configuration) error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Service) CommitConfiguration(from, to config.Configuration) bool {
|
func (s *Service) CommitConfiguration(from, to config.Configuration) bool {
|
||||||
if from.Options.URAccepted != to.Options.URAccepted || from.Options.URUniqueID != to.Options.URUniqueID || from.Options.URURL != to.Options.URURL {
|
if from.Options.URAccepted != to.Options.URAccepted || from.Options.URUniqueID != to.Options.URUniqueID || from.Options.URURL != to.Options.URURL {
|
||||||
select {
|
select {
|
||||||
|
@ -419,10 +419,6 @@ func (a *aggregator) String() string {
|
|||||||
return fmt.Sprintf("aggregator/%s:", a.folderCfg.Description())
|
return fmt.Sprintf("aggregator/%s:", a.folderCfg.Description())
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *aggregator) VerifyConfiguration(from, to config.Configuration) error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (a *aggregator) CommitConfiguration(from, to config.Configuration) bool {
|
func (a *aggregator) CommitConfiguration(from, to config.Configuration) bool {
|
||||||
for _, folderCfg := range to.Folders {
|
for _, folderCfg := range to.Folders {
|
||||||
if folderCfg.ID == a.folderID {
|
if folderCfg.ID == a.folderID {
|
||||||
|
Loading…
Reference in New Issue
Block a user