github.com/lzy4123/fabric@v2.1.1+incompatible/orderer/consensus/etcdraft/disseminator.go (about) 1 /* 2 Copyright IBM Corp All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package etcdraft 8 9 import ( 10 "sync" 11 12 "github.com/hyperledger/fabric-protos-go/orderer" 13 ) 14 15 // Disseminator piggybacks cluster metadata, if any, to egress messages. 16 type Disseminator struct { 17 RPC 18 19 l sync.Mutex 20 sent map[uint64]bool 21 metadata []byte 22 } 23 24 func (d *Disseminator) SendConsensus(dest uint64, msg *orderer.ConsensusRequest) error { 25 d.l.Lock() 26 defer d.l.Unlock() 27 28 if !d.sent[dest] && len(d.metadata) != 0 { 29 msg.Metadata = d.metadata 30 d.sent[dest] = true 31 } 32 33 return d.RPC.SendConsensus(dest, msg) 34 } 35 36 func (d *Disseminator) UpdateMetadata(m []byte) { 37 d.l.Lock() 38 defer d.l.Unlock() 39 40 d.sent = make(map[uint64]bool) 41 d.metadata = m 42 }