Skip to content

Commit 86213ca

Browse files
author
Jason Yellick
committed
[FAB-1612] Genesis config vars to genesis section
https://jira.hyperledger.org/browse/FAB-1612 The orderer.yaml file is currently very confusing because it mixes configuration variables which are set one time via provisional genesis with variables which can change on restart. This changeset clarifies this issue. Change-Id: I80cdd9f8c7702b158186468b0413ffc6f46ec6ff Signed-off-by: Jason Yellick <[email protected]>
1 parent 4a156cc commit 86213ca

File tree

10 files changed

+84
-64
lines changed

10 files changed

+84
-64
lines changed

orderer/common/bootstrap/provisional/provisional.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,14 @@ type kafkaBootstrapper struct {
7373
func New(conf *config.TopLevel) bootstrap.Helper {
7474
cbs := &commonBootstrapper{
7575
chainID: TestChainID,
76-
consensusType: conf.General.OrdererType,
76+
consensusType: conf.Genesis.OrdererType,
7777
batchSize: &ab.BatchSize{
78-
MaxMessageCount: conf.General.BatchSize.MaxMessageCount,
78+
MaxMessageCount: conf.Genesis.BatchSize.MaxMessageCount,
7979
},
80-
batchTimeout: conf.General.BatchTimeout.String(),
80+
batchTimeout: conf.Genesis.BatchTimeout.String(),
8181
}
8282

83-
switch conf.General.OrdererType {
83+
switch conf.Genesis.OrdererType {
8484
case ConsensusTypeSolo, ConsensusTypeSbft:
8585
return &soloBootstrapper{
8686
commonBootstrapper: *cbs,
@@ -91,7 +91,7 @@ func New(conf *config.TopLevel) bootstrap.Helper {
9191
kafkaBrokers: conf.Kafka.Brokers,
9292
}
9393
default:
94-
panic(fmt.Errorf("Wrong consenter type value given: %s", conf.General.OrdererType))
94+
panic(fmt.Errorf("Wrong consenter type value given: %s", conf.Genesis.OrdererType))
9595
}
9696
}
9797

orderer/common/bootstrap/provisional/provisional_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ var testCases []*config.TopLevel
3030
func init() {
3131
confSolo = config.Load()
3232
confKafka = config.Load()
33-
confKafka.General.OrdererType = ConsensusTypeKafka
33+
confKafka.Genesis.OrdererType = ConsensusTypeKafka
3434
testCases = []*config.TopLevel{confSolo, confKafka}
3535
}
3636

@@ -40,10 +40,10 @@ func TestGenesisBlockHeader(t *testing.T) {
4040
for _, tc := range testCases {
4141
genesisBlock := New(tc).GenesisBlock()
4242
if genesisBlock.Header.Number != expectedHeaderNumber {
43-
t.Fatalf("Case %s: Expected header number %d, got %d", tc.General.OrdererType, expectedHeaderNumber, genesisBlock.Header.Number)
43+
t.Fatalf("Case %s: Expected header number %d, got %d", tc.Genesis.OrdererType, expectedHeaderNumber, genesisBlock.Header.Number)
4444
}
4545
if !bytes.Equal(genesisBlock.Header.PreviousHash, nil) {
46-
t.Fatalf("Case %s: Expected header previousHash to be nil, got %x", tc.General.OrdererType, genesisBlock.Header.PreviousHash)
46+
t.Fatalf("Case %s: Expected header previousHash to be nil, got %x", tc.Genesis.OrdererType, genesisBlock.Header.PreviousHash)
4747
}
4848
}
4949
}

orderer/kafka/config_test.go

+7-5
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,12 @@ var (
3939

4040
var testConf = &config.TopLevel{
4141
General: config.General{
42-
OrdererType: "kafka",
4342
LedgerType: "ram",
44-
BatchTimeout: 500 * time.Millisecond,
4543
QueueSize: 100,
4644
MaxWindowSize: 100,
4745
ListenAddress: "127.0.0.1",
4846
ListenPort: 7050,
4947
GenesisMethod: "provisional",
50-
BatchSize: config.BatchSize{
51-
MaxMessageCount: 100,
52-
},
5348
},
5449
Kafka: config.Kafka{
5550
Brokers: []string{"127.0.0.1:9092"},
@@ -60,6 +55,13 @@ var testConf = &config.TopLevel{
6055
Verbose: false,
6156
Version: sarama.V0_9_0_1,
6257
},
58+
Genesis: config.Genesis{
59+
OrdererType: "kafka",
60+
BatchTimeout: 500 * time.Millisecond,
61+
BatchSize: config.BatchSize{
62+
MaxMessageCount: 100,
63+
},
64+
},
6365
}
6466

6567
func testClose(t *testing.T, x Closeable) {

orderer/localconfig/config.go

+25-18
Original file line numberDiff line numberDiff line change
@@ -39,20 +39,24 @@ const Prefix string = "ORDERER"
3939

4040
// General contains config which should be common among all orderer types
4141
type General struct {
42-
OrdererType string
4342
LedgerType string
44-
BatchTimeout time.Duration
4543
QueueSize uint32
4644
MaxWindowSize uint32
4745
ListenAddress string
4846
ListenPort uint16
4947
GenesisMethod string
50-
BatchSize BatchSize
5148
GenesisFile string
5249
Profile Profile
5350
LogLevel string
5451
}
5552

53+
// Genesis contains config which is used by the provisional bootstrapper
54+
type Genesis struct {
55+
OrdererType string
56+
BatchTimeout time.Duration
57+
BatchSize BatchSize
58+
}
59+
5660
// BatchSize contains configuration affecting the size of batches
5761
type BatchSize struct {
5862
MaxMessageCount uint32
@@ -99,22 +103,18 @@ type TopLevel struct {
99103
RAMLedger RAMLedger
100104
FileLedger FileLedger
101105
Kafka Kafka
106+
Genesis Genesis
102107
}
103108

104109
var defaults = TopLevel{
105110
General: General{
106-
OrdererType: "solo",
107111
LedgerType: "ram",
108-
BatchTimeout: 10 * time.Second,
109112
QueueSize: 1000,
110113
MaxWindowSize: 1000,
111114
ListenAddress: "127.0.0.1",
112115
ListenPort: 7050,
113116
GenesisMethod: "provisional",
114-
BatchSize: BatchSize{
115-
MaxMessageCount: 10,
116-
},
117-
GenesisFile: "./genesisblock",
117+
GenesisFile: "./genesisblock",
118118
Profile: Profile{
119119
Enabled: false,
120120
Address: "0.0.0.0:6060",
@@ -137,25 +137,23 @@ var defaults = TopLevel{
137137
Verbose: false,
138138
Version: sarama.V0_9_0_1,
139139
},
140+
Genesis: Genesis{
141+
OrdererType: "solo",
142+
BatchTimeout: 10 * time.Second,
143+
BatchSize: BatchSize{
144+
MaxMessageCount: 10,
145+
},
146+
},
140147
}
141148

142149
func (c *TopLevel) completeInitialization() {
143150
defer logger.Infof("Validated configuration to: %+v", c)
144151

145152
for {
146153
switch {
147-
case c.General.OrdererType == "":
148-
logger.Infof("General.OrdererType unset, setting to %s", defaults.General.OrdererType)
149-
c.General.OrdererType = defaults.General.OrdererType
150154
case c.General.LedgerType == "":
151155
logger.Infof("General.LedgerType unset, setting to %s", defaults.General.LedgerType)
152156
c.General.LedgerType = defaults.General.LedgerType
153-
case c.General.BatchTimeout == 0:
154-
logger.Infof("General.BatchTimeout unset, setting to %s", defaults.General.BatchTimeout)
155-
c.General.BatchTimeout = defaults.General.BatchTimeout
156-
case c.General.BatchSize.MaxMessageCount == 0:
157-
logger.Infof("General.BatchSize.MaxMessageCount unset, setting to %s", defaults.General.BatchSize.MaxMessageCount)
158-
c.General.BatchSize.MaxMessageCount = defaults.General.BatchSize.MaxMessageCount
159157
case c.General.QueueSize == 0:
160158
logger.Infof("General.QueueSize unset, setting to %s", defaults.General.QueueSize)
161159
c.General.QueueSize = defaults.General.QueueSize
@@ -190,6 +188,15 @@ func (c *TopLevel) completeInitialization() {
190188
case c.Kafka.Retry.Stop == 0*time.Second:
191189
logger.Infof("Kafka.Retry.Stop unset, setting to %v", defaults.Kafka.Retry.Stop)
192190
c.Kafka.Retry.Stop = defaults.Kafka.Retry.Stop
191+
case c.Genesis.OrdererType == "":
192+
logger.Infof("Genesis.OrdererType unset, setting to %s", defaults.Genesis.OrdererType)
193+
c.Genesis.OrdererType = defaults.Genesis.OrdererType
194+
case c.Genesis.BatchTimeout == 0:
195+
logger.Infof("Genesis.BatchTimeout unset, setting to %s", defaults.Genesis.BatchTimeout)
196+
c.Genesis.BatchTimeout = defaults.Genesis.BatchTimeout
197+
case c.Genesis.BatchSize.MaxMessageCount == 0:
198+
logger.Infof("Genesis.BatchSize.MaxMessageCount unset, setting to %s", defaults.Genesis.BatchSize.MaxMessageCount)
199+
c.Genesis.BatchSize.MaxMessageCount = defaults.Genesis.BatchSize.MaxMessageCount
193200
default:
194201
// A bit hacky, but its type makes it impossible to test for a nil value.
195202
// This may be overwritten by the Kafka orderer upon instantiation.

orderer/multichain/manager_test.go

+11-11
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ func TestManagerImpl(t *testing.T) {
104104
lf, rl := NewRAMLedgerAndFactory(10)
105105

106106
consenters := make(map[string]Consenter)
107-
consenters[conf.General.OrdererType] = &mockConsenter{}
107+
consenters[conf.Genesis.OrdererType] = &mockConsenter{}
108108

109109
manager := NewManagerImpl(lf, consenters)
110110

@@ -119,8 +119,8 @@ func TestManagerImpl(t *testing.T) {
119119
t.Fatalf("Should have gotten chain which was initialized by ramledger")
120120
}
121121

122-
messages := make([]*cb.Envelope, conf.General.BatchSize.MaxMessageCount)
123-
for i := 0; i < int(conf.General.BatchSize.MaxMessageCount); i++ {
122+
messages := make([]*cb.Envelope, conf.Genesis.BatchSize.MaxMessageCount)
123+
for i := 0; i < int(conf.Genesis.BatchSize.MaxMessageCount); i++ {
124124
messages[i] = makeNormalTx(provisional.TestChainID, i)
125125
}
126126

@@ -135,7 +135,7 @@ func TestManagerImpl(t *testing.T) {
135135
if status != cb.Status_SUCCESS {
136136
t.Fatalf("Could not retrieve block")
137137
}
138-
for i := 0; i < int(conf.General.BatchSize.MaxMessageCount); i++ {
138+
for i := 0; i < int(conf.Genesis.BatchSize.MaxMessageCount); i++ {
139139
if !reflect.DeepEqual(utils.ExtractEnvelopeOrPanic(block, i), messages[i]) {
140140
t.Errorf("Block contents wrong at index %d", i)
141141
}
@@ -150,7 +150,7 @@ func TestSignatureFilter(t *testing.T) {
150150
lf, rl := NewRAMLedgerAndFactory(10)
151151

152152
consenters := make(map[string]Consenter)
153-
consenters[conf.General.OrdererType] = &mockConsenter{}
153+
consenters[conf.Genesis.OrdererType] = &mockConsenter{}
154154

155155
manager := NewManagerImpl(lf, consenters)
156156

@@ -160,8 +160,8 @@ func TestSignatureFilter(t *testing.T) {
160160
t.Fatalf("Should have gotten chain which was initialized by ramledger")
161161
}
162162

163-
messages := make([]*cb.Envelope, conf.General.BatchSize.MaxMessageCount)
164-
for i := 0; i < int(conf.General.BatchSize.MaxMessageCount); i++ {
163+
messages := make([]*cb.Envelope, conf.Genesis.BatchSize.MaxMessageCount)
164+
for i := 0; i < int(conf.Genesis.BatchSize.MaxMessageCount); i++ {
165165
messages[i] = makeSignaturelessTx(provisional.TestChainID, i)
166166
}
167167

@@ -188,7 +188,7 @@ func TestNewChain(t *testing.T) {
188188
lf, rl := NewRAMLedgerAndFactory(10)
189189

190190
consenters := make(map[string]Consenter)
191-
consenters[conf.General.OrdererType] = &mockConsenter{}
191+
consenters[conf.Genesis.OrdererType] = &mockConsenter{}
192192

193193
manager := NewManagerImpl(lf, consenters)
194194

@@ -229,8 +229,8 @@ func TestNewChain(t *testing.T) {
229229
t.Fatalf("Should have gotten new chain which was created")
230230
}
231231

232-
messages := make([]*cb.Envelope, conf.General.BatchSize.MaxMessageCount)
233-
for i := 0; i < int(conf.General.BatchSize.MaxMessageCount); i++ {
232+
messages := make([]*cb.Envelope, conf.Genesis.BatchSize.MaxMessageCount)
233+
for i := 0; i < int(conf.Genesis.BatchSize.MaxMessageCount); i++ {
234234
messages[i] = makeNormalTx(newChainID, i)
235235
}
236236

@@ -262,7 +262,7 @@ func TestNewChain(t *testing.T) {
262262
if status != cb.Status_SUCCESS {
263263
t.Fatalf("Could not retrieve block on new chain")
264264
}
265-
for i := 0; i < int(conf.General.BatchSize.MaxMessageCount); i++ {
265+
for i := 0; i < int(conf.Genesis.BatchSize.MaxMessageCount); i++ {
266266
if !reflect.DeepEqual(utils.ExtractEnvelopeOrPanic(block, i), messages[i]) {
267267
t.Errorf("Block contents wrong at index %d in new chain", i)
268268
}

orderer/orderer.yaml

+29-18
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,10 @@
99
################################################################################
1010
General:
1111

12-
# Orderer Type: The orderer implementation to start
13-
# Available types are "solo" and "kafka"
14-
OrdererType: solo
15-
1612
# Ledger Type: The ledger type to provide to the orderer (if needed)
1713
# Available types are "ram", "file".
1814
LedgerType: ram
1915

20-
# Batch Timeout: The amount of time to wait before creating a batch
21-
BatchTimeout: 10s
22-
23-
# Batch Size: Controls the number of messages batched into a block
24-
BatchSize:
25-
26-
# Max Message Count: The maximum number of messages to permit in a batch
27-
MaxMessageCount: 10
28-
2916
# Queue Size: The maximum number of messages to allow pending from a gRPC
3017
# client.
3118
QueueSize: 10
@@ -45,6 +32,8 @@ General:
4532
LogLevel: info
4633

4734
# Genesis method: The method by which to retrieve/generate the genesis block. Available values are "provisional", "file"
35+
# Provisional utilizes the parameters in the Genesis section to dynamically generate a new genesis block
36+
# File uses the fil provided by GenesisFile as the genesis block
4837
GenesisMethod: provisional
4938

5039
# Genesis file: The file containing the genesis block. Used by the orderer when GenesisMethod is set to "file"
@@ -96,11 +85,6 @@ FileLedger:
9685
################################################################################
9786
Kafka:
9887

99-
# Brokers: A list of Kafka brokers to which the orderer connects
100-
# NOTE: Use IP:port notation
101-
Brokers:
102-
- 127.0.0.1:9092
103-
10488
# Retry: What to do if none of the Kafka brokers are available
10589
Retry:
10690
# The producer should attempt to reconnect every <Period>
@@ -111,3 +95,30 @@ Kafka:
11195
# Verbose: Turn on logging for sarama, the client library that we use to
11296
# interact with the Kafka cluster
11397
Verbose: false
98+
99+
# Brokers: A list of Kafka brokers to which the orderer connects
100+
# NOTE: Use IP:port notation
101+
Brokers:
102+
- 127.0.0.1:9092
103+
################################################################################
104+
#
105+
# SECTION: Genesis
106+
#
107+
# - This section applies to the configuration for the provisional bootstrapper
108+
#
109+
################################################################################
110+
Genesis:
111+
112+
# Orderer Type: The orderer implementation to start
113+
# Available types are "solo" and "kafka"
114+
OrdererType: solo
115+
116+
# Batch Timeout: The amount of time to wait before creating a batch
117+
BatchTimeout: 10s
118+
119+
# Batch Size: Controls the number of messages batched into a block
120+
BatchSize:
121+
122+
# Max Message Count: The maximum number of messages to permit in a batch
123+
MaxMessageCount: 10
124+

orderer/sample_clients/broadcast_config/client.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ func main() {
7575

7676
flag.StringVar(&srv, "server", fmt.Sprintf("%s:%d", conf.General.ListenAddress, conf.General.ListenPort), "The RPC server to connect to.")
7777
flag.StringVar(&cmd.name, "cmd", "newChain", "The action that this client is requesting via the config transaction.")
78-
flag.StringVar(&cmd.args.consensusType, "consensusType", conf.General.OrdererType, "In case of a newChain command, the type of consensus the ordering service is running on.")
78+
flag.StringVar(&cmd.args.consensusType, "consensusType", conf.Genesis.OrdererType, "In case of a newChain command, the type of consensus the ordering service is running on.")
7979
flag.StringVar(&cmd.args.creationPolicy, "creationPolicy", "AcceptAllPolicy", "In case of a newChain command, the chain creation policy this request should be validated against.")
8080
flag.StringVar(&cmd.args.chainID, "chainID", "NewChainID", "In case of a newChain command, the chain ID to create.")
8181
flag.Parse()

orderer/sample_clients/broadcast_config/newchain.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import (
2323
)
2424

2525
func newChainRequest(consensusType, creationPolicy, newChainID string) *cb.Envelope {
26-
conf.General.OrdererType = consensusType
26+
conf.Genesis.OrdererType = consensusType
2727
genesisBlock := provisional.New(conf).GenesisBlock()
2828
oldGenesisTx := utils.ExtractEnvelopeOrPanic(genesisBlock, 0)
2929
oldGenesisTxPayload := utils.ExtractPayloadOrPanic(oldGenesisTx)

orderer/sbft/backend/backend_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func TestSignAndVerifyEcdsa(t *testing.T) {
7070

7171
func TestLedgerReadWrite(t *testing.T) {
7272
localConf := localconfig.Load()
73-
localConf.General.OrdererType = provisional.ConsensusTypeSbft
73+
localConf.Genesis.OrdererType = provisional.ConsensusTypeSbft
7474
genesis := provisional.New(localConf).GenesisBlock()
7575
rlf := ramledger.New(10)
7676
rl, _ := rlf.GetOrCreate(provisional.TestChainID)

orderer/sbft/main/main.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ func serve(c flags) {
132132
}
133133

134134
localConf := localconfig.Load()
135-
localConf.General.OrdererType = provisional.ConsensusTypeSbft
135+
localConf.Genesis.OrdererType = provisional.ConsensusTypeSbft
136136
genesisBlock := provisional.New(localConf).GenesisBlock()
137137

138138
flf := fileledger.New(c.dataDir)

0 commit comments

Comments
 (0)