gossip.go 1.59 KB
Newer Older
YACOVM's avatar
YACOVM committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/*
Copyright IBM Corp. 2016 All Rights Reserved.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

                 http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package gossip

import (
	"github.com/hyperledger/fabric/gossip/discovery"
	"github.com/hyperledger/fabric/gossip/proto"
	"time"
)

type GossipService interface {

	// GetPeersMetadata returns a mapping of endpoint --> metadata
	GetPeersMetadata() map[string][]byte

	// UpdateMetadata updates the self metadata of the discovery layer
	UpdateMetadata([]byte)

	// Gossip sends a message to other peers to the network
	Gossip(msg *proto.GossipMessage)

	// Accept returns a channel that outputs messages from other peers
	Accept(MessageAcceptor) <-chan *proto.GossipMessage

	// Stop stops the gossip component
	Stop()
}

type MessageAcceptor func(*proto.GossipMessage) bool

type GossipConfig struct {
	BindPort            int
	Id                  string
	SelfEndpoint        string
	BootstrapPeers      []*discovery.NetworkMember
	PropagateIterations int
	PropagatePeerNum    int

	MaxMessageCountToStore int

	MaxPropagationBurstSize    int
	MaxPropagationBurstLatency time.Duration

	PullInterval time.Duration
	PullPeerNum  int
}