From 4ffcbf1b6933bc02ee5f779d96d56ab4b960af37 Mon Sep 17 00:00:00 2001 From: arnauds5 Date: Thu, 27 Jun 2024 17:05:41 +0200 Subject: [PATCH] Send rumors state when connecting --- .../federation/hfederation/federation.go | 29 ++++++++++++++----- be1-go/internal/hub/hub.go | 3 +- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/be1-go/internal/handler/channel/federation/hfederation/federation.go b/be1-go/internal/handler/channel/federation/hfederation/federation.go index 4b6ad1569f..9fe3523462 100644 --- a/be1-go/internal/handler/channel/federation/hfederation/federation.go +++ b/be1-go/internal/handler/channel/federation/hfederation/federation.go @@ -51,6 +51,10 @@ type Config interface { GetServerInfo() (string, string, string, error) } +type RumorStateSender interface { + SendRumorStateTo(socket socket.Socket) error +} + type Repository interface { // HasMessage returns true if the message already exists. HasMessage(messageID string) (bool, error) @@ -85,12 +89,13 @@ type Handler struct { sockets Sockets conf Config db Repository + rumors RumorStateSender schema *validation.SchemaValidator log zerolog.Logger } func New(hub Hub, subs Subscribers, sockets Sockets, conf Config, - db Repository, schema *validation.SchemaValidator, + db Repository, rumors RumorStateSender, schema *validation.SchemaValidator, log zerolog.Logger) *Handler { return &Handler{ hub: hub, @@ -98,6 +103,7 @@ func New(hub Hub, subs Subscribers, sockets Sockets, conf Config, sockets: sockets, conf: conf, db: db, + rumors: rumors, schema: schema, log: log.With().Str("module", "federation").Logger(), } @@ -366,19 +372,28 @@ func (h *Handler) handleChallenge(msg mmessage.Message, channelPath string, // called => broadcast the result to both federation channels directly. _ = h.db.StoreMessageAndData(remoteChannel, resultMsg) _ = h.subs.BroadcastToAllClients(resultMsg, remoteChannel) + + h.log.Info().Msgf("A federation was created with the local LAO %s", + federationExpect.LaoId) } else { + // Add the socket to the list of server sockets + h.sockets.Upsert(socket) + + // Send the rumor state directly to avoid delay while syncing + err = h.rumors.SendRumorStateTo(socket) + if err != nil { + return err + } + // publish the FederationResult to the other server err = h.publishTo(resultMsg, remoteChannel, socket) if err != nil { return err } - - // Add the socket to the list of server sockets - h.sockets.Upsert(socket) + h.log.Info().Msgf("A federation was created with the LAO %s from: %s", + federationExpect.LaoId, federationExpect.ServerAddress) } - h.log.Info().Msgf("A federation was successfully") - // broadcast the FederationResult to the local organizer return h.subs.BroadcastToAllClients(resultMsg, channelPath) } @@ -530,7 +545,7 @@ func (h *Handler) connectTo(serverAddress string) (socket.Socket, error) { go server.WritePump() go server.ReadPump() - return server, nil + return server, h.rumors.SendRumorStateTo(server) } func (h *Handler) createMessage(data channel.MessageData) (mmessage.Message, error) { diff --git a/be1-go/internal/hub/hub.go b/be1-go/internal/hub/hub.go index bdf36e0972..b3e811aed9 100644 --- a/be1-go/internal/hub/hub.go +++ b/be1-go/internal/hub/hub.go @@ -189,7 +189,8 @@ func New(dbPath string, ownerPubKey kyber.Point, clientAddress, serverAddress st rumorStateHandler := hrumorstate.New(queries, sockets, &db, log) // Create the federation handler - federationHandler := hfederation.New(hubParams, subs, sockets, conf, &db, schemaValidator, log) + federationHandler := hfederation.New(hubParams, subs, sockets, conf, &db, + rumorStateHandler, schemaValidator, log) // Create the query handler methodHandlers := make(hquery.MethodHandlers)