mirror of
https://github.com/gogrlx/nats-server.git
synced 2026-04-02 11:48:43 -07:00
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:
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user