Skip to content

Commit e64c810

Browse files
committed
[FAB-6207] Refactor gossip state demux direct msgs
Previously, while introduced CR for FAB-5084, new channel has been added into state transfer to reflect replication of the private data across peers. This commit, commit removes duplicated code by leveraging same channel and demuxing direct messages based on the type. This also used to increase testability of the state code. Change-Id: Iab76d818da592f55bfcdbb83c7f948df66691e7c Signed-off-by: Artem Barger <bartem@il.ibm.com>
1 parent 9fc8db0 commit e64c810

File tree

1 file changed

+17
-29
lines changed

1 file changed

+17
-29
lines changed

gossip/state/state.go

Lines changed: 17 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,6 @@ type GossipStateProviderImpl struct {
136136

137137
commChan <-chan proto.ReceivedMessage
138138

139-
pvtDataChan <-chan proto.ReceivedMessage
140-
141139
// Queue of payloads which wasn't acquired yet
142140
payloads PayloadsBuffer
143141

@@ -177,13 +175,13 @@ func NewGossipStateProvider(chainID string, services *ServicesMediator, ledger l
177175
remoteStateMsgFilter := func(message interface{}) bool {
178176
receivedMsg := message.(proto.ReceivedMessage)
179177
msg := receivedMsg.GetGossipMessage()
180-
if !msg.IsRemoteStateMessage() {
178+
if !(msg.IsRemoteStateMessage() || msg.GetPrivateData() != nil) {
181179
return false
182180
}
183181
connInfo := receivedMsg.GetConnectionInfo()
184182
authErr := services.VerifyByChannel(msg.Channel, connInfo.Identity, connInfo.Auth.Signature, connInfo.Auth.SignedData)
185183
if authErr != nil {
186-
logger.Warning("Got unauthorized nodeMetastate transfer request from", string(connInfo.Identity))
184+
logger.Warning("Got unauthorized request from", string(connInfo.Identity))
187185
return false
188186
}
189187
return true
@@ -192,23 +190,6 @@ func NewGossipStateProvider(chainID string, services *ServicesMediator, ledger l
192190
// Filter message which are only relevant for nodeMetastate transfer
193191
_, commChan := services.Accept(remoteStateMsgFilter, true)
194192

195-
// Filter private data messages
196-
_, pvtDataChan := services.Accept(func(message interface{}) bool {
197-
receivedMsg := message.(proto.ReceivedMessage)
198-
msg := receivedMsg.GetGossipMessage()
199-
if msg.GetPrivateData() == nil {
200-
return false
201-
}
202-
connInfo := receivedMsg.GetConnectionInfo()
203-
authErr := services.VerifyByChannel(msg.Channel, connInfo.Identity, connInfo.Auth.Signature, connInfo.Auth.SignedData)
204-
if authErr != nil {
205-
logger.Warning("Got unauthorized private data message from", string(connInfo.Identity))
206-
return false
207-
}
208-
return true
209-
210-
}, true)
211-
212193
height, err := ledger.LedgerHeight()
213194
if height == 0 {
214195
// Panic here since this is an indication of invalid situation which should not happen in normal
@@ -236,9 +217,6 @@ func NewGossipStateProvider(chainID string, services *ServicesMediator, ledger l
236217
// Channel to read direct messages from other peers
237218
commChan: commChan,
238219

239-
// Channel for private data messages
240-
pvtDataChan: pvtDataChan,
241-
242220
// Create a queue for payload received
243221
payloads: NewPayloadsBuffer(height),
244222

@@ -291,18 +269,28 @@ func (s *GossipStateProviderImpl) listen() {
291269
logger.Debug("Received new message via gossip channel")
292270
go s.queueNewMessage(msg)
293271
case msg := <-s.commChan:
294-
logger.Debug("Direct message ", msg)
295-
go s.directMessage(msg)
296-
case msg := <-s.pvtDataChan:
297-
logger.Debug("Private data message ", msg)
298-
go s.privateDataMessage(msg)
272+
logger.Debug("Dispatching a message", msg)
273+
go s.dispatch(msg)
299274
case <-s.stopCh:
300275
s.stopCh <- struct{}{}
301276
logger.Debug("Stop listening for new messages")
302277
return
303278
}
304279
}
305280
}
281+
func (s *GossipStateProviderImpl) dispatch(msg proto.ReceivedMessage) {
282+
// Check type of the message
283+
if msg.GetGossipMessage().IsRemoteStateMessage() {
284+
logger.Debug("Handling direct state transfer message")
285+
// Got state transfer request response
286+
s.directMessage(msg)
287+
} else if msg.GetGossipMessage().GetPrivateData() != nil {
288+
logger.Debug("Handling private data collection message")
289+
// Handling private data replication message
290+
s.privateDataMessage(msg)
291+
}
292+
293+
}
306294
func (s *GossipStateProviderImpl) privateDataMessage(msg proto.ReceivedMessage) {
307295
if !bytes.Equal(msg.GetGossipMessage().Channel, []byte(s.chainID)) {
308296
logger.Warning("Received state transfer request for channel",

0 commit comments

Comments
 (0)