Skip to content

Commit 4cd15d5

Browse files
Saad Karimsykesm
authored andcommitted
FAB-12804 - Add metrics for couchdb
Metric added that will record the time a request to couch db takes to complete. Change-Id: Ie2068bb7b97a7103306093a2a6618ed0caed6b4b Signed-off-by: Saad Karim <skarim@us.ibm.com> Signed-off-by: Matthew Sykes <sykesmat@us.ibm.com>
1 parent 430e65e commit 4cd15d5

File tree

12 files changed

+144
-40
lines changed

12 files changed

+144
-40
lines changed

core/chaincode/exectransaction_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ func finitPeer(lis net.Listener, chainIDs ...string) {
198198
requestTimeout := viper.GetDuration("ledger.state.couchDBConfig.requestTimeout")
199199
createGlobalChangesDB := viper.GetBool("ledger.state.couchDBConfig.createGlobalChangesDB")
200200

201-
couchInstance, _ := couchdb.CreateCouchInstance(connectURL, username, password, maxRetries, maxRetriesOnStartup, requestTimeout, createGlobalChangesDB)
201+
couchInstance, _ := couchdb.CreateCouchInstance(connectURL, username, password, maxRetries, maxRetriesOnStartup, requestTimeout, createGlobalChangesDB, &disabled.Provider{})
202202
db := couchdb.CouchDatabase{CouchInstance: couchInstance, DBName: chainID}
203203
//drop the test database
204204
db.DropDatabase()

core/ledger/kvledger/kv_ledger_provider.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ func (provider *Provider) Initialize(initializer *ledger.Initializer) error {
8585
provider.stateListeners = stateListeners
8686
provider.collElgNotifier = collElgNotifier
8787
provider.bookkeepingProvider = bookkeeping.NewProvider()
88-
provider.vdbProvider, err = privacyenabledstate.NewCommonStorageDBProvider(provider.bookkeepingProvider)
88+
provider.vdbProvider, err = privacyenabledstate.NewCommonStorageDBProvider(provider.bookkeepingProvider, initializer.MetricsProvider)
8989
if err != nil {
9090
return err
9191
}

core/ledger/kvledger/txmgmt/privacyenabledstate/common_storage_db.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"strings"
1212

1313
"github.com/hyperledger/fabric/common/flogging"
14+
"github.com/hyperledger/fabric/common/metrics"
1415
"github.com/hyperledger/fabric/core/common/ccprovider"
1516
"github.com/hyperledger/fabric/core/ledger/cceventmgmt"
1617
"github.com/hyperledger/fabric/core/ledger/kvledger/bookkeeping"
@@ -37,11 +38,11 @@ type CommonStorageDBProvider struct {
3738
}
3839

3940
// NewCommonStorageDBProvider constructs an instance of DBProvider
40-
func NewCommonStorageDBProvider(bookkeeperProvider bookkeeping.Provider) (DBProvider, error) {
41+
func NewCommonStorageDBProvider(bookkeeperProvider bookkeeping.Provider, metricsProvider metrics.Provider) (DBProvider, error) {
4142
var vdbProvider statedb.VersionedDBProvider
4243
var err error
4344
if ledgerconfig.IsCouchDBEnabled() {
44-
if vdbProvider, err = statecouchdb.NewVersionedDBProvider(); err != nil {
45+
if vdbProvider, err = statecouchdb.NewVersionedDBProvider(metricsProvider); err != nil {
4546
return nil, err
4647
}
4748
} else {

core/ledger/kvledger/txmgmt/privacyenabledstate/test_exports.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"testing"
1313
"time"
1414

15+
"github.com/hyperledger/fabric/common/metrics/disabled"
1516
"github.com/hyperledger/fabric/core/ledger/kvledger/bookkeeping"
1617
"github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb/statecouchdb"
1718
"github.com/hyperledger/fabric/core/ledger/ledgerconfig"
@@ -47,7 +48,7 @@ func (env *LevelDBCommonStorageTestEnv) Init(t testing.TB) {
4748
viper.Set("ledger.state.stateDatabase", "")
4849
removeDBPath(t)
4950
env.bookkeeperTestEnv = bookkeeping.NewTestEnv(t)
50-
dbProvider, err := NewCommonStorageDBProvider(env.bookkeeperTestEnv.TestProvider)
51+
dbProvider, err := NewCommonStorageDBProvider(env.bookkeeperTestEnv.TestProvider, &disabled.Provider{})
5152
assert.NoError(t, err)
5253
env.t = t
5354
env.provider = dbProvider
@@ -112,7 +113,7 @@ func (env *CouchDBCommonStorageTestEnv) Init(t testing.TB) {
112113
viper.Set("ledger.state.couchDBConfig.requestTimeout", time.Second*35)
113114

114115
env.bookkeeperTestEnv = bookkeeping.NewTestEnv(t)
115-
dbProvider, err := NewCommonStorageDBProvider(env.bookkeeperTestEnv.TestProvider)
116+
dbProvider, err := NewCommonStorageDBProvider(env.bookkeeperTestEnv.TestProvider, &disabled.Provider{})
116117
assert.NoError(t, err)
117118
env.t = t
118119
env.provider = dbProvider

core/ledger/kvledger/txmgmt/statedb/statecouchdb/statecouchdb.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"sync"
1313

1414
"github.com/hyperledger/fabric/common/flogging"
15+
"github.com/hyperledger/fabric/common/metrics"
1516
"github.com/hyperledger/fabric/core/common/ccprovider"
1617
"github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb"
1718
"github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/version"
@@ -35,11 +36,11 @@ type VersionedDBProvider struct {
3536
}
3637

3738
// NewVersionedDBProvider instantiates VersionedDBProvider
38-
func NewVersionedDBProvider() (*VersionedDBProvider, error) {
39+
func NewVersionedDBProvider(metricsProvider metrics.Provider) (*VersionedDBProvider, error) {
3940
logger.Debugf("constructing CouchDB VersionedDBProvider")
4041
couchDBDef := couchdb.GetCouchDBDefinition()
4142
couchInstance, err := couchdb.CreateCouchInstance(couchDBDef.URL, couchDBDef.Username, couchDBDef.Password,
42-
couchDBDef.MaxRetries, couchDBDef.MaxRetriesOnStartup, couchDBDef.RequestTimeout, couchDBDef.CreateGlobalChangesDB)
43+
couchDBDef.MaxRetries, couchDBDef.MaxRetriesOnStartup, couchDBDef.RequestTimeout, couchDBDef.CreateGlobalChangesDB, metricsProvider)
4344
if err != nil {
4445
return nil, err
4546
}

core/ledger/kvledger/txmgmt/statedb/statecouchdb/statecouchdb_test_export.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ package statecouchdb
88
import (
99
"testing"
1010

11+
"github.com/hyperledger/fabric/common/metrics/disabled"
1112
"github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb"
1213
"github.com/stretchr/testify/assert"
1314
)
@@ -22,7 +23,7 @@ type TestVDBEnv struct {
2223
func NewTestVDBEnv(t testing.TB) *TestVDBEnv {
2324
t.Logf("Creating new TestVDBEnv")
2425

25-
dbProvider, _ := NewVersionedDBProvider()
26+
dbProvider, _ := NewVersionedDBProvider(&disabled.Provider{})
2627
testVDBEnv := &TestVDBEnv{t, dbProvider}
2728
// No cleanup for new test environment. Need to cleanup per test for each DB used in the test.
2829
return testVDBEnv

core/ledger/util/couchdb/couchdb.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ type CouchConnectionDef struct {
132132
type CouchInstance struct {
133133
conf CouchConnectionDef //connection configuration
134134
client *http.Client // a client to connect to this instance
135+
stats *stats
135136
}
136137

137138
//CouchDatabase represents a database within a CouchDB instance
@@ -1645,6 +1646,7 @@ func (couchInstance *CouchInstance) handleRequest(method, dbName, functionName s
16451646
var resp *http.Response
16461647
var errResp error
16471648
couchDBReturn := &DBReturn{}
1649+
defer couchInstance.recordMetric(time.Now(), dbName, couchDBReturn, functionName)
16481650

16491651
//set initial wait duration for retries
16501652
waitDuration := retryWaitTime * time.Millisecond
@@ -1832,6 +1834,10 @@ func (couchInstance *CouchInstance) handleRequest(method, dbName, functionName s
18321834
return resp, couchDBReturn, nil
18331835
}
18341836

1837+
func (ci *CouchInstance) recordMetric(startTime time.Time, connectURL string, couchDBReturn *DBReturn, api string) {
1838+
ci.stats.observeProcessingTime(startTime, connectURL, strconv.Itoa(couchDBReturn.StatusCode), api)
1839+
}
1840+
18351841
//invalidCouchDBResponse checks to make sure either a valid response or error is returned
18361842
func invalidCouchDBReturn(resp *http.Response, errResp error) bool {
18371843
if resp == nil && errResp == nil {

0 commit comments

Comments
 (0)