chore(all): memory and thread safe storage

- settings: get filter choices from storage for settings validation
- updater: update servers to the storage
- storage: minimal deep copying and data duplication
- storage: add merged servers mutex for thread safety
- connection: filter servers in storage
- formatter: format servers to Markdown in storage
- PIA: get server by name from storage directly
- Updater: get servers count from storage directly
- Updater: equality check done in storage, fix #882
This commit is contained in:
Quentin McGaw
2022-06-05 14:58:46 +00:00
parent 1e6b4ed5eb
commit 36b504609b
84 changed files with 1267 additions and 877 deletions

View File

@@ -5,23 +5,18 @@ import (
"github.com/qdm12/gluetun/internal/configuration/settings"
"github.com/qdm12/gluetun/internal/loopstate"
"github.com/qdm12/gluetun/internal/models"
)
var _ Manager = (*State)(nil)
type Manager interface {
SettingsGetSetter
ServersGetterSetter
GetSettingsAndServers() (vpn settings.VPN, allServers models.AllServers)
}
func New(statusApplier loopstate.Applier,
vpn settings.VPN, allServers models.AllServers) *State {
func New(statusApplier loopstate.Applier, vpn settings.VPN) *State {
return &State{
statusApplier: statusApplier,
vpn: vpn,
allServers: allServers,
}
}
@@ -30,18 +25,4 @@ type State struct {
vpn settings.VPN
settingsMu sync.RWMutex
allServers models.AllServers
allServersMu sync.RWMutex
}
func (s *State) GetSettingsAndServers() (vpn settings.VPN,
allServers models.AllServers) {
s.settingsMu.RLock()
s.allServersMu.RLock()
vpn = s.vpn
allServers = s.allServers
s.settingsMu.RUnlock()
s.allServersMu.RUnlock()
return vpn, allServers
}