github.com/true-sqn/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  }