Merge pull request #1549 from nats-io/reload_auth_service_imp_deadlock

[FIXED] Deadlock on config reload with routes and account service import
This commit is contained in:
Ivan Kozlovic
2020-08-03 15:54:36 -06:00
committed by GitHub
2 changed files with 21 additions and 0 deletions

View File

@@ -1129,6 +1129,7 @@ func (s *Server) reloadAuthorization() {
s.gacc = nil
s.configureAccounts()
s.configureAuthorization()
s.mu.Unlock()
s.accounts.Range(func(k, v interface{}) bool {
newAcc := v.(*Account)
@@ -1169,6 +1170,7 @@ func (s *Server) reloadAuthorization() {
}
return true
})
s.mu.Lock()
// Check if we had a default system account.
if s.sys != nil && s.sys.account != nil && !s.opts.NoSystemAccount {
s.accounts.Store(s.sys.account.Name, s.sys.account)

View File

@@ -3100,11 +3100,23 @@ func TestConfigReloadAccountServicesImportExport(t *testing.T) {
}
}
no_sys_acc: true
cluster {
name: "abc"
port: -1
}
`))
defer os.Remove(conf)
s, opts := RunServerWithConfig(conf)
defer s.Shutdown()
opts2 := DefaultOptions()
opts2.Cluster.Name = "abc"
opts2.Routes = RoutesFromStr(fmt.Sprintf("nats://127.0.0.1:%d", opts.Cluster.Port))
s2 := RunServer(opts2)
defer s2.Shutdown()
checkClusterFormed(t, s, s2)
derek, err := nats.Connect(fmt.Sprintf("nats://derek:foo@%s:%d", opts.Host, opts.Port))
if err != nil {
t.Fatalf("Error on connect: %v", err)
@@ -3148,6 +3160,9 @@ func TestConfigReloadAccountServicesImportExport(t *testing.T) {
}); err != nil {
t.Fatalf("Error on subscribe: %v", err)
}
// This subscription is just to make sure that we can update
// route map without locking issues during reload.
natsSubSync(t, ivan, "bar")
req := func(t *testing.T, nc *nats.Conn, subj string, reply string) {
t.Helper()
@@ -3199,6 +3214,10 @@ func TestConfigReloadAccountServicesImportExport(t *testing.T) {
}
}
no_sys_acc: true
cluster {
name: "abc"
port: -1
}
`)
// This still should work
req(t, ivan, "foo", "reply1")