-
Notifications
You must be signed in to change notification settings - Fork 0
/
ledger_config.go
198 lines (168 loc) · 6.75 KB
/
ledger_config.go
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
/*
Copyright IBM Corp. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package ledgerconfig
import (
"path/filepath"
"github.com/hyperledger/fabric/core/config"
"github.com/spf13/viper"
)
//IsCouchDBEnabled exposes the useCouchDB variable
func IsCouchDBEnabled() bool {
stateDatabase := viper.GetString("ledger.state.stateDatabase")
if stateDatabase == "CouchDB" {
return true
}
return false
}
const confPeerFileSystemPath = "peer.fileSystemPath"
const confLedgersData = "ledgersData"
const confLedgerProvider = "ledgerProvider"
const confStateleveldb = "stateLeveldb"
const confHistoryLeveldb = "historyLeveldb"
const confBookkeeper = "bookkeeper"
const confConfigHistory = "configHistory"
const confChains = "chains"
const confPvtdataStore = "pvtdataStore"
const fileLockPath = "fileLock"
const confTotalQueryLimit = "ledger.state.totalQueryLimit"
const confInternalQueryLimit = "ledger.state.couchDBConfig.internalQueryLimit"
const confEnableHistoryDatabase = "ledger.history.enableHistoryDatabase"
const confMaxBatchSize = "ledger.state.couchDBConfig.maxBatchUpdateSize"
const confAutoWarmIndexes = "ledger.state.couchDBConfig.autoWarmIndexes"
const confWarmIndexesAfterNBlocks = "ledger.state.couchDBConfig.warmIndexesAfterNBlocks"
var confCollElgProcMaxDbBatchSize = &conf{"ledger.pvtdataStore.collElgProcMaxDbBatchSize", 5000}
var confCollElgProcDbBatchesInterval = &conf{"ledger.pvtdataStore.collElgProcDbBatchesInterval", 1000}
// GetRootPath returns the filesystem path.
// All ledger related contents are expected to be stored under this path
func GetRootPath() string {
sysPath := config.GetPath(confPeerFileSystemPath)
return filepath.Join(sysPath, confLedgersData)
}
// GetLedgerProviderPath returns the filesystem path for storing ledger ledgerProvider contents
func GetLedgerProviderPath() string {
return filepath.Join(GetRootPath(), confLedgerProvider)
}
// GetStateLevelDBPath returns the filesystem path that is used to maintain the state level db
func GetStateLevelDBPath() string {
return filepath.Join(GetRootPath(), confStateleveldb)
}
// GetHistoryLevelDBPath returns the filesystem path that is used to maintain the history level db
func GetHistoryLevelDBPath() string {
return filepath.Join(GetRootPath(), confHistoryLeveldb)
}
// GetBlockStorePath returns the filesystem path that is used for the chain block stores
func GetBlockStorePath() string {
return filepath.Join(GetRootPath(), confChains)
}
// GetPvtdataStorePath returns the filesystem path that is used for permanent storage of private write-sets
func GetPvtdataStorePath() string {
return filepath.Join(GetRootPath(), confPvtdataStore)
}
// GetInternalBookkeeperPath returns the filesystem path that is used for bookkeeping the internal stuff by by KVledger (such as expiration time for pvt)
func GetInternalBookkeeperPath() string {
return filepath.Join(GetRootPath(), confBookkeeper)
}
// GetFileLockPath returns the filesystem path that is used to create a file lock
func GetFileLockPath() string {
return filepath.Join(GetRootPath(), fileLockPath)
}
// GetConfigHistoryPath returns the filesystem path that is used for maintaining history of chaincodes collection configurations
func GetConfigHistoryPath() string {
return filepath.Join(GetRootPath(), confConfigHistory)
}
// GetMaxBlockfileSize returns maximum size of the block file
func GetMaxBlockfileSize() int {
return 64 * 1024 * 1024
}
// GetTotalQueryLimit exposes the totalLimit variable
func GetTotalQueryLimit() int {
totalQueryLimit := viper.GetInt(confTotalQueryLimit)
// if queryLimit was unset, default to 10000
if !viper.IsSet(confTotalQueryLimit) {
totalQueryLimit = 10000
}
return totalQueryLimit
}
// GetInternalQueryLimit exposes the queryLimit variable
func GetInternalQueryLimit() int {
internalQueryLimit := viper.GetInt(confInternalQueryLimit)
// if queryLimit was unset, default to 1000
if !viper.IsSet(confInternalQueryLimit) {
internalQueryLimit = 1000
}
return internalQueryLimit
}
//GetMaxBatchUpdateSize exposes the maxBatchUpdateSize variable
func GetMaxBatchUpdateSize() int {
maxBatchUpdateSize := viper.GetInt(confMaxBatchSize)
// if maxBatchUpdateSize was unset, default to 500
if !viper.IsSet(confMaxBatchSize) {
maxBatchUpdateSize = 500
}
return maxBatchUpdateSize
}
// GetPvtdataStorePurgeInterval returns the interval in the terms of number of blocks
// when the purge for the expired data would be performed
func GetPvtdataStorePurgeInterval() uint64 {
purgeInterval := viper.GetInt("ledger.pvtdataStore.purgeInterval")
if purgeInterval <= 0 {
purgeInterval = 100
}
return uint64(purgeInterval)
}
// GetPvtdataStoreCollElgProcMaxDbBatchSize returns the maximum db batch size for converting
// the ineligible missing data entries to eligible missing data entries
func GetPvtdataStoreCollElgProcMaxDbBatchSize() int {
collElgProcMaxDbBatchSize := viper.GetInt(confCollElgProcMaxDbBatchSize.Name)
if collElgProcMaxDbBatchSize <= 0 {
collElgProcMaxDbBatchSize = confCollElgProcMaxDbBatchSize.DefaultVal
}
return collElgProcMaxDbBatchSize
}
// GetPvtdataStoreCollElgProcDbBatchesInterval returns the minimum duration (in milliseconds) between writing
// two consecutive db batches for converting the ineligible missing data entries to eligible missing data entries
func GetPvtdataStoreCollElgProcDbBatchesInterval() int {
collElgProcDbBatchesInterval := viper.GetInt(confCollElgProcDbBatchesInterval.Name)
if collElgProcDbBatchesInterval <= 0 {
collElgProcDbBatchesInterval = confCollElgProcDbBatchesInterval.DefaultVal
}
return collElgProcDbBatchesInterval
}
//IsHistoryDBEnabled exposes the historyDatabase variable
func IsHistoryDBEnabled() bool {
return viper.GetBool(confEnableHistoryDatabase)
}
// IsQueryReadsHashingEnabled enables or disables computing of hash
// of range query results for phantom item validation
func IsQueryReadsHashingEnabled() bool {
return true
}
// GetMaxDegreeQueryReadsHashing return the maximum degree of the merkle tree for hashes of
// of range query results for phantom item validation
// For more details - see description in kvledger/txmgmt/rwset/query_results_helper.go
func GetMaxDegreeQueryReadsHashing() uint32 {
return 50
}
//IsAutoWarmIndexesEnabled exposes the autoWarmIndexes variable
func IsAutoWarmIndexesEnabled() bool {
//Return the value set in core.yaml, if not set, the return true
if viper.IsSet(confAutoWarmIndexes) {
return viper.GetBool(confAutoWarmIndexes)
}
return true
}
//GetWarmIndexesAfterNBlocks exposes the warmIndexesAfterNBlocks variable
func GetWarmIndexesAfterNBlocks() int {
warmAfterNBlocks := viper.GetInt(confWarmIndexesAfterNBlocks)
// if warmIndexesAfterNBlocks was unset, default to 1
if !viper.IsSet(confWarmIndexesAfterNBlocks) {
warmAfterNBlocks = 1
}
return warmAfterNBlocks
}
type conf struct {
Name string
DefaultVal int
}