1
0
forked from extern/smegmesh

81-seperate-synchronisation-into-independent-process

- nil dereference due to concurrency issues (the method shouldn't be
  concurrent)
This commit is contained in:
Tim Beatham 2024-01-04 21:16:33 +00:00
parent a0e7a4a644
commit 1f8d229076
4 changed files with 22 additions and 15 deletions

View File

@ -22,7 +22,7 @@ type Route struct {
// Destination the route is advertising
Destination string
// Path to the destination
Path []string
Path []string
}
// GetDestination implements mesh.Route.
@ -316,7 +316,7 @@ func (m *TwoPhaseStoreMeshManager) AddRoutes(nodeId string, routes ...mesh.Route
}
}
// Only add nodes on changes. Otherwise the node will advertise new
// Only add nodes on changes. Otherwise the node will advertise new
// information whenever they get new routes
if changes {
m.store.Put(nodeId, node)
@ -466,7 +466,7 @@ func (m *TwoPhaseStoreMeshManager) getRoutes(targetNode string) (map[string]Rout
return node.Routes, nil
}
// GetRoutes: Get all unique routes the target node is advertising.
// GetRoutes: Get all unique routes the target node is advertising.
// on conflicts the route with the least hop count is chosen
func (m *TwoPhaseStoreMeshManager) GetRoutes(targetNode string) (map[string]mesh.Route, error) {
node, err := m.GetNode(targetNode)
@ -521,7 +521,7 @@ func (m *TwoPhaseStoreMeshManager) RemoveNode(nodeId string) error {
return nil
}
// GetConfiguration gets the WireGuard configuration to use for this
// GetConfiguration gets the WireGuard configuration to use for this
// network
func (m *TwoPhaseStoreMeshManager) GetConfiguration() *conf.WgConfiguration {
return m.Conf

View File

@ -107,7 +107,7 @@ func NewCtrlServer(params *NewCtrlServerParams) (*MeshCtrlServer, error) {
logging.Log.WriteErrorf(err.Error())
}
return nil
return err
}, 1)
heartbeatTimer := lib.NewTimer(func() error {

View File

@ -120,7 +120,12 @@ func (m *WgMeshConfigApplyer) convertMeshNode(params convertMeshNodeParams) (*wg
// getRoutes: finds the routes with the least hop distance. If more than one route exists
// consistently hash to evenly spread the distribution of traffic
func (m *WgMeshConfigApplyer) getRoutes(meshProvider MeshProvider) (map[string][]routeNode, error) {
mesh, _ := meshProvider.GetMesh()
mesh, err := meshProvider.GetMesh()
if err != nil {
return nil, err
}
routes := make(map[string][]routeNode)
peers := lib.Filter(lib.MapValues(mesh.GetNodes()), func(p MeshNode) bool {

View File

@ -63,11 +63,6 @@ func (s *SyncerImpl) Sync(correspondingMesh mesh.MeshProvider) (bool, error) {
}
before := time.Now()
err := s.meshManager.GetRouteManager().UpdateRoutes()
if err != nil {
logging.Log.WriteErrorf(err.Error())
}
publicKey := s.meshManager.GetPublicKey()
nodeNames := correspondingMesh.GetPeers()
@ -231,12 +226,19 @@ func (s *SyncerImpl) SyncMeshes() error {
if hasChanges {
logging.Log.WriteInfof("updating the WireGuard configuration")
err = s.meshManager.ApplyConfig()
if err != nil {
logging.Log.WriteErrorf("failed to update config %s", err.Error())
}
err = s.meshManager.GetRouteManager().UpdateRoutes()
if err != nil {
logging.Log.WriteErrorf("update routes failed %s", err.Error())
}
}
if err != nil {
logging.Log.WriteInfof("failed to update config %w", err)
}
return nil
return err
}
type NewSyncerParams struct {