From f2b10d854e0f0aa351477dbc8a27237c3e95d70d Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Wed, 17 Mar 2021 17:18:40 +0000 Subject: [PATCH] Attempt to reconnect to the static peer if it drops --- build/gobind-pinecone/monolith.go | 36 ++++++++++++++++++++---------- cmd/dendrite-demo-pinecone/main.go | 8 +++++++ 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/build/gobind-pinecone/monolith.go b/build/gobind-pinecone/monolith.go index f014b5515..4f61e6936 100644 --- a/build/gobind-pinecone/monolith.go +++ b/build/gobind-pinecone/monolith.go @@ -38,6 +38,7 @@ import ( userapiAPI "github.com/matrix-org/dendrite/userapi/api" "github.com/matrix-org/gomatrixserverlib" "github.com/sirupsen/logrus" + "go.uber.org/atomic" "golang.org/x/net/http2" "golang.org/x/net/http2/h2c" @@ -45,6 +46,7 @@ import ( pineconeRouter "github.com/matrix-org/pinecone/router" pineconeSessions "github.com/matrix-org/pinecone/sessions" "github.com/matrix-org/pinecone/types" + pineconeTypes "github.com/matrix-org/pinecone/types" yggdrasilConfig "github.com/yggdrasil-network/yggdrasil-go/src/config" ) @@ -55,18 +57,19 @@ const ( ) type DendriteMonolith struct { - logger logrus.Logger - config *yggdrasilConfig.NodeConfig - PineconeRouter *pineconeRouter.Router - PineconeMulticast *pineconeMulticast.Multicast - PineconeQUIC *pineconeSessions.Sessions - StorageDirectory string - staticPeerURI string - staticPeerMutex sync.RWMutex - listener net.Listener - httpServer *http.Server - processContext *process.ProcessContext - userAPI userapiAPI.UserInternalAPI + logger logrus.Logger + config *yggdrasilConfig.NodeConfig + PineconeRouter *pineconeRouter.Router + PineconeMulticast *pineconeMulticast.Multicast + PineconeQUIC *pineconeSessions.Sessions + StorageDirectory string + staticPeerURI string + staticPeerMutex sync.RWMutex + staticPeerAttempts atomic.Uint32 + listener net.Listener + httpServer *http.Server + processContext *process.ProcessContext + userAPI userapiAPI.UserInternalAPI } func (m *DendriteMonolith) BaseURL() string { @@ -252,6 +255,15 @@ func (m *DendriteMonolith) Start() { m.PineconeQUIC = pineconeSessions.NewQUIC(logger, m.PineconeRouter) m.PineconeMulticast = pineconeMulticast.NewMulticast(logger, m.PineconeRouter) + m.PineconeRouter.SetDisconnectedCallback(func(port pineconeTypes.SwitchPortID, public pineconeTypes.PublicKey, peertype int, err error) { + m.staticPeerMutex.RLock() + uri := m.staticPeerURI + m.staticPeerMutex.RUnlock() + if peertype == pineconeRouter.PeerTypeRemote && uri != "" && err != nil { + conn.ConnectToPeer(m.PineconeRouter, uri) + } + }) + cfg := &config.Dendrite{} cfg.Defaults() cfg.Global.ServerName = gomatrixserverlib.ServerName(hex.EncodeToString(pk)) diff --git a/cmd/dendrite-demo-pinecone/main.go b/cmd/dendrite-demo-pinecone/main.go index 9555e7116..6d065886a 100644 --- a/cmd/dendrite-demo-pinecone/main.go +++ b/cmd/dendrite-demo-pinecone/main.go @@ -51,6 +51,7 @@ import ( pineconeMulticast "github.com/matrix-org/pinecone/multicast" pineconeRouter "github.com/matrix-org/pinecone/router" pineconeSessions "github.com/matrix-org/pinecone/sessions" + pineconeTypes "github.com/matrix-org/pinecone/types" "github.com/sirupsen/logrus" ) @@ -124,6 +125,13 @@ func main() { pMulticast := pineconeMulticast.NewMulticast(logger, pRouter) pMulticast.Start() + pRouter.SetDisconnectedCallback(func(port pineconeTypes.SwitchPortID, public pineconeTypes.PublicKey, peertype int, err error) { + uri := *instancePeer + if peertype == pineconeRouter.PeerTypeRemote && uri != "" && err != nil { + conn.ConnectToPeer(pRouter, uri) + } + }) + cfg := &config.Dendrite{} cfg.Defaults() cfg.Global.ServerName = gomatrixserverlib.ServerName(hex.EncodeToString(pk))