Skip to content

Commit a061e6d

Browse files
author
Jason Yellick
committed
[FAB-2162] Move orderer genesis to common
https://jira.hyperledger.org/browse/FAB-2162 This CR moves genesis configuration for the orderer to the common configtx package. Change-Id: I875692e75cb5429ddc747239acf6dab070f586d4 Signed-off-by: Jason Yellick <[email protected]>
1 parent 4dd8559 commit a061e6d

File tree

18 files changed

+200
-155
lines changed

18 files changed

+200
-155
lines changed

Makefile

+2-2
Original file line numberDiff line numberDiff line change
@@ -180,11 +180,11 @@ build/image/peer/payload: build/docker/bin/peer \
180180
build/image/orderer/payload: build/docker/bin/orderer \
181181
build/msp-sampleconfig.tar.bz2 \
182182
orderer/orderer.yaml \
183-
orderer/genesis.yaml
183+
common/configtx/tool/genesis.yaml
184184
build/image/testenv/payload: build/gotools.tar.bz2 \
185185
build/docker/bin/orderer \
186186
orderer/orderer.yaml \
187-
orderer/genesis.yaml \
187+
common/configtx/tool/genesis.yaml \
188188
build/docker/bin/peer \
189189
peer/core.yaml \
190190
build/msp-sampleconfig.tar.bz2 \
File renamed without changes.
+159
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
/*
2+
Copyright IBM Corp. 2016 All Rights Reserved.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package localconfig
18+
19+
import (
20+
"fmt"
21+
"os"
22+
"path/filepath"
23+
"strings"
24+
"time"
25+
26+
"github.com/hyperledger/fabric/common/viperutil"
27+
28+
"github.com/op/go-logging"
29+
"github.com/spf13/viper"
30+
)
31+
32+
var logger = logging.MustGetLogger("configtx/tool/localconfig")
33+
34+
func init() {
35+
logging.SetLevel(logging.ERROR, "")
36+
}
37+
38+
// Prefix is the default config prefix for the orderer
39+
const Prefix string = "CONFIGTX"
40+
41+
// TopLevel contains the genesis structures for use by the provisional bootstrapper
42+
type TopLevel struct {
43+
Orderer Orderer
44+
}
45+
46+
// Orderer contains config which is used for orderer genesis by the provisional bootstrapper
47+
type Orderer struct {
48+
OrdererType string
49+
Addresses []string
50+
BatchTimeout time.Duration
51+
BatchSize BatchSize
52+
Kafka Kafka
53+
}
54+
55+
// BatchSize contains configuration affecting the size of batches
56+
type BatchSize struct {
57+
MaxMessageCount uint32
58+
AbsoluteMaxBytes uint32
59+
PreferredMaxBytes uint32
60+
}
61+
62+
// Kafka contains config for the Kafka orderer
63+
type Kafka struct {
64+
Brokers []string
65+
}
66+
67+
var genesisDefaults = TopLevel{
68+
Orderer: Orderer{
69+
OrdererType: "solo",
70+
Addresses: []string{"127.0.0.1:7050"},
71+
BatchTimeout: 10 * time.Second,
72+
BatchSize: BatchSize{
73+
MaxMessageCount: 10,
74+
AbsoluteMaxBytes: 100000000,
75+
PreferredMaxBytes: 512 * 1024,
76+
},
77+
Kafka: Kafka{
78+
Brokers: []string{"127.0.0.1:9092"},
79+
},
80+
},
81+
}
82+
83+
func (g *TopLevel) completeInitialization() {
84+
for {
85+
switch {
86+
case g.Orderer.OrdererType == "":
87+
logger.Infof("Orderer.OrdererType unset, setting to %s", genesisDefaults.Orderer.OrdererType)
88+
g.Orderer.OrdererType = genesisDefaults.Orderer.OrdererType
89+
case g.Orderer.Addresses == nil:
90+
logger.Infof("Orderer.Addresses unset, setting to %s", genesisDefaults.Orderer.Addresses)
91+
g.Orderer.Addresses = genesisDefaults.Orderer.Addresses
92+
case g.Orderer.BatchTimeout == 0:
93+
logger.Infof("Orderer.BatchTimeout unset, setting to %s", genesisDefaults.Orderer.BatchTimeout)
94+
g.Orderer.BatchTimeout = genesisDefaults.Orderer.BatchTimeout
95+
case g.Orderer.BatchTimeout == 0:
96+
logger.Infof("Orderer.BatchTimeout unset, setting to %s", genesisDefaults.Orderer.BatchTimeout)
97+
g.Orderer.BatchTimeout = genesisDefaults.Orderer.BatchTimeout
98+
case g.Orderer.BatchSize.MaxMessageCount == 0:
99+
logger.Infof("Orderer.BatchSize.MaxMessageCount unset, setting to %s", genesisDefaults.Orderer.BatchSize.MaxMessageCount)
100+
g.Orderer.BatchSize.MaxMessageCount = genesisDefaults.Orderer.BatchSize.MaxMessageCount
101+
case g.Orderer.BatchSize.AbsoluteMaxBytes == 0:
102+
logger.Infof("Orderer.BatchSize.AbsoluteMaxBytes unset, setting to %s", genesisDefaults.Orderer.BatchSize.AbsoluteMaxBytes)
103+
g.Orderer.BatchSize.AbsoluteMaxBytes = genesisDefaults.Orderer.BatchSize.AbsoluteMaxBytes
104+
case g.Orderer.BatchSize.PreferredMaxBytes == 0:
105+
logger.Infof("Orderer.BatchSize.PreferredMaxBytes unset, setting to %s", genesisDefaults.Orderer.BatchSize.PreferredMaxBytes)
106+
g.Orderer.BatchSize.PreferredMaxBytes = genesisDefaults.Orderer.BatchSize.PreferredMaxBytes
107+
case g.Orderer.Kafka.Brokers == nil:
108+
logger.Infof("Orderer.Kafka.Brokers unset, setting to %v", genesisDefaults.Orderer.Kafka.Brokers)
109+
g.Orderer.Kafka.Brokers = genesisDefaults.Orderer.Kafka.Brokers
110+
default:
111+
return
112+
}
113+
}
114+
}
115+
116+
func Load() *TopLevel {
117+
config := viper.New()
118+
119+
config.SetConfigName("genesis")
120+
121+
var cfgPath string
122+
123+
// Path to look for the config file in based on ORDERER_CFG_PATH and GOPATH
124+
searchPath := os.Getenv("ORDERER_CFG_PATH") + ":" + os.Getenv("GOPATH")
125+
for _, p := range filepath.SplitList(searchPath) {
126+
genesisPath := filepath.Join(p, "src/github.com/hyperledger/fabric/common/configtx/tool/")
127+
if _, err := os.Stat(filepath.Join(genesisPath, "genesis.yaml")); err != nil {
128+
// The yaml file does not exist in this component of the go src
129+
continue
130+
}
131+
cfgPath = genesisPath
132+
}
133+
if cfgPath == "" {
134+
logger.Fatalf("Could not find genesis.yaml, try setting GOPATH correctly")
135+
}
136+
config.AddConfigPath(cfgPath) // Path to look for the config file in
137+
138+
// for environment variables
139+
config.SetEnvPrefix(Prefix)
140+
config.AutomaticEnv()
141+
replacer := strings.NewReplacer(".", "_")
142+
config.SetEnvKeyReplacer(replacer)
143+
144+
err := config.ReadInConfig()
145+
if err != nil {
146+
panic(fmt.Errorf("Error reading %s plugin config from %s: %s", Prefix, cfgPath, err))
147+
}
148+
149+
var uconf TopLevel
150+
151+
err = viperutil.EnhancedExactUnmarshal(config, &uconf)
152+
if err != nil {
153+
panic(fmt.Errorf("Error unmarshaling into structure: %s", err))
154+
}
155+
156+
uconf.completeInitialization()
157+
158+
return &uconf
159+
}

orderer/common/bootstrap/provisional/provisional.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ import (
2323
"github.com/hyperledger/fabric/common/configtx"
2424
configtxchannel "github.com/hyperledger/fabric/common/configtx/handlers/channel"
2525
configtxorderer "github.com/hyperledger/fabric/common/configtx/handlers/orderer"
26+
genesisconfig "github.com/hyperledger/fabric/common/configtx/tool/localconfig"
2627
"github.com/hyperledger/fabric/common/genesis"
2728
"github.com/hyperledger/fabric/orderer/common/bootstrap"
28-
"github.com/hyperledger/fabric/orderer/localconfig"
2929
cb "github.com/hyperledger/fabric/protos/common"
3030
ab "github.com/hyperledger/fabric/protos/orderer"
3131
)
@@ -65,7 +65,7 @@ type bootstrapper struct {
6565
}
6666

6767
// New returns a new provisional bootstrap helper.
68-
func New(conf *config.GenesisTopLevel) Generator {
68+
func New(conf *genesisconfig.TopLevel) Generator {
6969
bs := &bootstrapper{
7070
minimalGroups: []*cb.ConfigGroup{
7171
// Chain Config Types

orderer/common/bootstrap/provisional/provisional_test.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,18 @@ import (
2020
"bytes"
2121
"testing"
2222

23-
"github.com/hyperledger/fabric/orderer/localconfig"
23+
genesisconfig "github.com/hyperledger/fabric/common/configtx/tool/localconfig"
2424
cb "github.com/hyperledger/fabric/protos/common"
2525
)
2626

27-
var confSolo, confKafka *config.GenesisTopLevel
28-
var testCases []*config.GenesisTopLevel
27+
var confSolo, confKafka *genesisconfig.TopLevel
28+
var testCases []*genesisconfig.TopLevel
2929

3030
func init() {
31-
confSolo = config.LoadGenesis()
32-
confKafka = config.LoadGenesis()
31+
confSolo = genesisconfig.Load()
32+
confKafka = genesisconfig.Load()
3333
confKafka.Orderer.OrdererType = ConsensusTypeKafka
34-
testCases = []*config.GenesisTopLevel{confSolo, confKafka}
34+
testCases = []*genesisconfig.TopLevel{confSolo, confKafka}
3535
}
3636

3737
func TestGenesisBlockHeader(t *testing.T) {

orderer/common/deliver/deliver_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ import (
2222
"time"
2323

2424
configtxapi "github.com/hyperledger/fabric/common/configtx/api"
25+
genesisconfig "github.com/hyperledger/fabric/common/configtx/tool/localconfig"
2526
mockconfigtxorderer "github.com/hyperledger/fabric/common/mocks/configtx/handlers/orderer"
2627
mockpolicies "github.com/hyperledger/fabric/common/mocks/policies"
2728
"github.com/hyperledger/fabric/common/policies"
2829
"github.com/hyperledger/fabric/orderer/common/bootstrap/provisional"
2930
ordererledger "github.com/hyperledger/fabric/orderer/ledger"
3031
ramledger "github.com/hyperledger/fabric/orderer/ledger/ram"
31-
"github.com/hyperledger/fabric/orderer/localconfig"
3232
cb "github.com/hyperledger/fabric/protos/common"
3333
ab "github.com/hyperledger/fabric/protos/orderer"
3434
"github.com/hyperledger/fabric/protos/utils"
@@ -44,7 +44,7 @@ const ledgerSize = 10
4444

4545
func init() {
4646
logging.SetLevel(logging.DEBUG, "")
47-
genesisBlock = provisional.New(config.LoadGenesis()).GenesisBlock()
47+
genesisBlock = provisional.New(genesisconfig.Load()).GenesisBlock()
4848
}
4949

5050
type mockD struct {

orderer/kafka/config_test.go

+9-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"time"
2222

2323
"github.com/Shopify/sarama"
24+
genesisconfig "github.com/hyperledger/fabric/common/configtx/tool/localconfig"
2425
"github.com/hyperledger/fabric/orderer/localconfig"
2526
cb "github.com/hyperledger/fabric/protos/common"
2627
)
@@ -37,9 +38,16 @@ var (
3738
testTimePadding = 200 * time.Millisecond
3839
)
3940

41+
var testGenesisConf = &genesisconfig.TopLevel{
42+
Orderer: genesisconfig.Orderer{
43+
Kafka: genesisconfig.Kafka{
44+
Brokers: []string{"127.0.0.1:9092"},
45+
},
46+
},
47+
}
48+
4049
var testConf = &config.TopLevel{
4150
Kafka: config.Kafka{
42-
Brokers: []string{"127.0.0.1:9092"},
4351
Retry: config.Retry{
4452
Period: 3 * time.Second,
4553
Stop: 60 * time.Second,

orderer/kafka/orderer_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ import (
3737
var cp = newChainPartition(provisional.TestChainID, rawPartition)
3838

3939
func newMockSharedConfigManager() *mockconfigtxorderer.SharedConfig {
40-
return &mockconfigtxorderer.SharedConfig{KafkaBrokersVal: testConf.Kafka.Brokers}
40+
return &mockconfigtxorderer.SharedConfig{KafkaBrokersVal: testGenesisConf.Orderer.Kafka.Brokers}
4141
}
4242

4343
type mockConsenterImpl struct {

orderer/ledger/file/fileledger_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ import (
2222
"os"
2323
"testing"
2424

25+
genesisconfig "github.com/hyperledger/fabric/common/configtx/tool/localconfig"
2526
"github.com/hyperledger/fabric/orderer/common/bootstrap/provisional"
2627
ordererledger "github.com/hyperledger/fabric/orderer/ledger"
27-
"github.com/hyperledger/fabric/orderer/localconfig"
2828
cb "github.com/hyperledger/fabric/protos/common"
2929
ab "github.com/hyperledger/fabric/protos/orderer"
3030

@@ -35,7 +35,7 @@ var genesisBlock *cb.Block
3535

3636
func init() {
3737
logging.SetLevel(logging.DEBUG, "")
38-
genesisBlock = provisional.New(config.LoadGenesis()).GenesisBlock()
38+
genesisBlock = provisional.New(genesisconfig.Load()).GenesisBlock()
3939
}
4040

4141
type testEnv struct {

orderer/ledger/fileledger_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,17 @@ import (
2020
"io/ioutil"
2121
"os"
2222

23+
genesisconfig "github.com/hyperledger/fabric/common/configtx/tool/localconfig"
2324
"github.com/hyperledger/fabric/orderer/common/bootstrap/provisional"
2425
. "github.com/hyperledger/fabric/orderer/ledger"
2526
fileledger "github.com/hyperledger/fabric/orderer/ledger/file"
26-
"github.com/hyperledger/fabric/orderer/localconfig"
2727
cb "github.com/hyperledger/fabric/protos/common"
2828
)
2929

3030
var genesisBlock *cb.Block
3131

3232
func init() {
33-
genesisBlock = provisional.New(config.LoadGenesis()).GenesisBlock()
33+
genesisBlock = provisional.New(genesisconfig.Load()).GenesisBlock()
3434
testables = append(testables, &fileLedgerTestEnv{})
3535
}
3636

orderer/ledger/ram/ramledger_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ package ramledger
1919
import (
2020
"testing"
2121

22+
genesisconfig "github.com/hyperledger/fabric/common/configtx/tool/localconfig"
2223
"github.com/hyperledger/fabric/orderer/common/bootstrap/provisional"
23-
"github.com/hyperledger/fabric/orderer/localconfig"
2424
cb "github.com/hyperledger/fabric/protos/common"
2525

2626
logging "github.com/op/go-logging"
@@ -30,7 +30,7 @@ var genesisBlock *cb.Block
3030

3131
func init() {
3232
logging.SetLevel(logging.DEBUG, "")
33-
genesisBlock = provisional.New(config.LoadGenesis()).GenesisBlock()
33+
genesisBlock = provisional.New(genesisconfig.Load()).GenesisBlock()
3434
}
3535

3636
func NewTestChain(maxSize int) *ramLedger {

0 commit comments

Comments
 (0)