github.com/ewagmig/fabric@v2.1.1+incompatible/gossip/service/config.go (about)

     1  /*
     2  Copyright IBM Corp. All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  package service
     7  
     8  import (
     9  	"time"
    10  
    11  	"github.com/hyperledger/fabric/gossip/election"
    12  	"github.com/hyperledger/fabric/gossip/util"
    13  	"github.com/spf13/viper"
    14  )
    15  
    16  const (
    17  	btlPullMarginDefault           = 10
    18  	transientBlockRetentionDefault = 1000
    19  )
    20  
    21  // ServiceConfig is the config struct for gossip services
    22  type ServiceConfig struct {
    23  	// PeerTLSEnabled enables/disables Peer TLS.
    24  	PeerTLSEnabled bool
    25  	// Endpoint which overrides the endpoint the peer publishes to peers in its organization.
    26  	Endpoint              string
    27  	NonBlockingCommitMode bool
    28  	// UseLeaderElection defines whenever peer will initialize dynamic algorithm for "leader" selection.
    29  	UseLeaderElection bool
    30  	// OrgLeader statically defines peer to be an organization "leader".
    31  	OrgLeader bool
    32  	// ElectionStartupGracePeriod is the longest time peer waits for stable membership during leader
    33  	// election startup (unit: second).
    34  	ElectionStartupGracePeriod time.Duration
    35  	// ElectionMembershipSampleInterval is the time interval for gossip membership samples to check its stability (unit: second).
    36  	ElectionMembershipSampleInterval time.Duration
    37  	// ElectionLeaderAliveThreshold is the time passes since last declaration message before peer decides to
    38  	// perform leader election (unit: second).
    39  	ElectionLeaderAliveThreshold time.Duration
    40  	// ElectionLeaderElectionDuration is the time passes since last declaration message before peer decides to perform
    41  	// leader election (unit: second).
    42  	ElectionLeaderElectionDuration time.Duration
    43  	// PvtDataPullRetryThreshold determines the maximum duration of time private data corresponding for
    44  	// a given block.
    45  	PvtDataPullRetryThreshold time.Duration
    46  	// PvtDataPushAckTimeout is the maximum time to wait for the acknoledgement from each peer at private
    47  	// data push at endorsement time.
    48  	PvtDataPushAckTimeout time.Duration
    49  	// BtlPullMargin is the block to live pulling margin, used as a buffer to prevent peer from trying to pull private data
    50  	// from peers that is soon to be purged in next N blocks.
    51  	BtlPullMargin uint64
    52  	// TransientstoreMaxBlockRetention defines the maximum difference between the current ledger's height upon commit,
    53  	// and the private data residing inside the transient store that is guaranteed not to be purged.
    54  	TransientstoreMaxBlockRetention uint64
    55  	// SkipPullingInvalidTransactionsDuringCommit is a flag that indicates whether pulling of invalid
    56  	// transaction's private data from other peers need to be skipped during the commit time and pulled
    57  	// only through reconciler.
    58  	SkipPullingInvalidTransactionsDuringCommit bool
    59  }
    60  
    61  func GlobalConfig() *ServiceConfig {
    62  	c := &ServiceConfig{}
    63  	c.loadGossipConfig()
    64  	return c
    65  }
    66  
    67  func (c *ServiceConfig) loadGossipConfig() {
    68  
    69  	c.PeerTLSEnabled = viper.GetBool("peer.tls.enabled")
    70  	c.Endpoint = viper.GetString("peer.gossip.endpoint")
    71  	c.NonBlockingCommitMode = viper.GetBool("peer.gossip.nonBlockingCommitMode")
    72  	c.UseLeaderElection = viper.GetBool("peer.gossip.useLeaderElection")
    73  	c.OrgLeader = viper.GetBool("peer.gossip.orgLeader")
    74  
    75  	c.ElectionStartupGracePeriod = util.GetDurationOrDefault("peer.gossip.election.startupGracePeriod", election.DefStartupGracePeriod)
    76  	c.ElectionMembershipSampleInterval = util.GetDurationOrDefault("peer.gossip.election.membershipSampleInterval", election.DefMembershipSampleInterval)
    77  	c.ElectionLeaderAliveThreshold = util.GetDurationOrDefault("peer.gossip.election.leaderAliveThreshold", election.DefLeaderAliveThreshold)
    78  	c.ElectionLeaderElectionDuration = util.GetDurationOrDefault("peer.gossip.election.leaderElectionDuration", election.DefLeaderElectionDuration)
    79  
    80  	c.PvtDataPushAckTimeout = viper.GetDuration("peer.gossip.pvtData.pushAckTimeout")
    81  	c.PvtDataPullRetryThreshold = viper.GetDuration("peer.gossip.pvtData.pullRetryThreshold")
    82  	c.SkipPullingInvalidTransactionsDuringCommit = viper.GetBool("peer.gossip.pvtData.skipPullingInvalidTransactionsDuringCommit")
    83  
    84  	c.BtlPullMargin = btlPullMarginDefault
    85  	if viper.IsSet("peer.gossip.pvtData.btlPullMargin") {
    86  		btlMarginVal := viper.GetInt("peer.gossip.pvtData.btlPullMargin")
    87  		if btlMarginVal >= 0 {
    88  			c.BtlPullMargin = uint64(btlMarginVal)
    89  		}
    90  	}
    91  
    92  	c.TransientstoreMaxBlockRetention = uint64(viper.GetInt("peer.gossip.pvtData.transientstoreMaxBlockRetention"))
    93  	if c.TransientstoreMaxBlockRetention == 0 {
    94  		logger.Warning("Configuration key peer.gossip.pvtData.transientstoreMaxBlockRetention isn't set, defaulting to", transientBlockRetentionDefault)
    95  		c.TransientstoreMaxBlockRetention = transientBlockRetentionDefault
    96  	}
    97  }