Files
mostlymatter/config/store.go
Jesse Hallam 9bf5687311 MM-11262: database config store (#10281)
* vendor github.com/jmoiron/sqlx

* MM-11262: introduce a database store

* revert unnecessary fmt.Errorf

* simplify unit test helper methods

* remote TODO re: retry

* relocate initializeConfigurationsTable for clarity

* factor out a commonStore

* acquire database config lock on close for safety

* add missing header

* fix lock comment
2019-02-15 10:05:29 -04:00

53 строки
1.6 KiB
Go

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
package config
import (
"strings"
"github.com/mattermost/mattermost-server/model"
)
// Listener is a callback function invoked when the configuration changes.
type Listener func(oldConfig *model.Config, newConfig *model.Config)
// Store abstracts the act of getting and setting the configuration.
type Store interface {
// Get fetches the current, cached configuration.
Get() *model.Config
// GetEnvironmentOverrides fetches the configuration fields overridden by environment variables.
GetEnvironmentOverrides() map[string]interface{}
// Set replaces the current configuration in its entirety, without updating the backing store.
Set(*model.Config) (*model.Config, error)
// Load updates the current configuration from the backing store, possibly initializing.
Load() (err error)
// Save writes the current configuration to the backing store.
Save() error
// AddListener adds a callback function to invoke when the configuration is modified.
AddListener(listener Listener) string
// RemoveListener removes a callback function using an id returned from AddListener.
RemoveListener(id string)
// String describes the backing store for the config.
String() string
// Close cleans up resources associated with the store.
Close() error
}
// NewStore creates a database or file store given a data source name by which to connect.
func NewStore(dsn string, watch bool) (Store, error) {
if strings.HasPrefix(dsn, "mysql://") || strings.HasPrefix(dsn, "postgres://") {
return NewDatabaseStore(dsn)
}
return NewFileStore(dsn, watch)
}