* 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
53 строки
1.6 KiB
Go
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)
|
|
}
|