github.com/crspeller/mattermost-server@v0.0.0-20190328001957-a200beb3d111/app/cluster.go (about) 1 // Copyright (c) 2018-present Mattermost, Inc. All Rights Reserved. 2 // See License.txt for license information. 3 4 package app 5 6 import ( 7 "github.com/crspeller/mattermost-server/model" 8 ) 9 10 // Registers a given function to be called when the cluster leader may have changed. Returns a unique ID for the 11 // listener which can later be used to remove it. If clustering is not enabled in this build, the callback will never 12 // be called. 13 func (s *Server) AddClusterLeaderChangedListener(listener func()) string { 14 id := model.NewId() 15 s.clusterLeaderListeners.Store(id, listener) 16 return id 17 } 18 19 // Removes a listener function by the unique ID returned when AddConfigListener was called 20 func (s *Server) RemoveClusterLeaderChangedListener(id string) { 21 s.clusterLeaderListeners.Delete(id) 22 } 23 24 func (s *Server) InvokeClusterLeaderChangedListeners() { 25 s.Log.Info("Cluster leader changed. Invoking ClusterLeaderChanged listeners.") 26 s.Go(func() { 27 s.clusterLeaderListeners.Range(func(_, listener interface{}) bool { 28 listener.(func())() 29 return true 30 }) 31 }) 32 }