Skip to content

Commit 3371b98

Browse files
committed
[FAB-2388] Fix intermittent CouchDB failures Part2
Follow on to: https://gerrit.hyperledger.org/r/#/c/6365/ CouchDB cleanup during tests should not create the DB, it should simply attempt to drop the DB. This was done in prior changeset for couchdb_test.go, but not for statecouchdb_test_export.go. Change-Id: I23cdb06deb7373c5c697786e31bee0c9fa2a04f7 Signed-off-by: denyeart <[email protected]>
1 parent 51b7e85 commit 3371b98

File tree

4 files changed

+44
-44
lines changed

4 files changed

+44
-44
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func (env *TestVDBEnv) Cleanup(dbName string) {
5656
func cleanupDB(dbName string) {
5757
//create a new connection
5858
couchInstance, _ := couchdb.CreateCouchInstance(connectURL, username, password)
59-
db, _ := couchdb.CreateCouchDatabase(*couchInstance, dbName)
59+
db := couchdb.CouchDatabase{CouchInstance: *couchInstance, DBName: dbName}
6060
//drop the test database
6161
db.DropDatabase()
6262
}

core/ledger/util/couchdb/couchdb.go

+34-34
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,8 @@ type CouchInstance struct {
138138

139139
//CouchDatabase represents a database within a CouchDB instance
140140
type CouchDatabase struct {
141-
couchInstance CouchInstance //connection configuration
142-
dbName string
141+
CouchInstance CouchInstance //connection configuration
142+
DBName string
143143
}
144144

145145
//DBReturn contains an error reported by CouchDB
@@ -217,17 +217,17 @@ func (dbclient *CouchDatabase) CreateDatabaseIfNotExist() (*DBOperationResponse,
217217

218218
if dbInfo == nil && couchDBReturn.StatusCode == 404 {
219219

220-
logger.Debugf("Database %s does not exist.", dbclient.dbName)
220+
logger.Debugf("Database %s does not exist.", dbclient.DBName)
221221

222-
connectURL, err := url.Parse(dbclient.couchInstance.conf.URL)
222+
connectURL, err := url.Parse(dbclient.CouchInstance.conf.URL)
223223
if err != nil {
224224
logger.Errorf("URL parse error: %s", err.Error())
225225
return nil, err
226226
}
227-
connectURL.Path = dbclient.dbName
227+
connectURL.Path = dbclient.DBName
228228

229229
//process the URL with a PUT, creates the database
230-
resp, _, err := dbclient.couchInstance.handleRequest(http.MethodPut, connectURL.String(), nil, "", "")
230+
resp, _, err := dbclient.CouchInstance.handleRequest(http.MethodPut, connectURL.String(), nil, "", "")
231231
if err != nil {
232232
return nil, err
233233
}
@@ -238,7 +238,7 @@ func (dbclient *CouchDatabase) CreateDatabaseIfNotExist() (*DBOperationResponse,
238238
json.NewDecoder(resp.Body).Decode(&dbResponse)
239239

240240
if dbResponse.Ok == true {
241-
logger.Debugf("Created database %s ", dbclient.dbName)
241+
logger.Debugf("Created database %s ", dbclient.DBName)
242242
}
243243

244244
logger.Debugf("Exiting CreateDatabaseIfNotExist()")
@@ -247,7 +247,7 @@ func (dbclient *CouchDatabase) CreateDatabaseIfNotExist() (*DBOperationResponse,
247247

248248
}
249249

250-
logger.Debugf("Database %s already exists", dbclient.dbName)
250+
logger.Debugf("Database %s already exists", dbclient.DBName)
251251

252252
logger.Debugf("Exiting CreateDatabaseIfNotExist()")
253253

@@ -258,14 +258,14 @@ func (dbclient *CouchDatabase) CreateDatabaseIfNotExist() (*DBOperationResponse,
258258
//GetDatabaseInfo method provides function to retrieve database information
259259
func (dbclient *CouchDatabase) GetDatabaseInfo() (*DBInfo, *DBReturn, error) {
260260

261-
connectURL, err := url.Parse(dbclient.couchInstance.conf.URL)
261+
connectURL, err := url.Parse(dbclient.CouchInstance.conf.URL)
262262
if err != nil {
263263
logger.Errorf("URL parse error: %s", err.Error())
264264
return nil, nil, err
265265
}
266-
connectURL.Path = dbclient.dbName
266+
connectURL.Path = dbclient.DBName
267267

268-
resp, couchDBReturn, err := dbclient.couchInstance.handleRequest(http.MethodGet, connectURL.String(), nil, "", "")
268+
resp, couchDBReturn, err := dbclient.CouchInstance.handleRequest(http.MethodGet, connectURL.String(), nil, "", "")
269269
if err != nil {
270270
return nil, couchDBReturn, err
271271
}
@@ -325,14 +325,14 @@ func (dbclient *CouchDatabase) DropDatabase() (*DBOperationResponse, error) {
325325

326326
logger.Debugf("Entering DropDatabase()")
327327

328-
connectURL, err := url.Parse(dbclient.couchInstance.conf.URL)
328+
connectURL, err := url.Parse(dbclient.CouchInstance.conf.URL)
329329
if err != nil {
330330
logger.Errorf("URL parse error: %s", err.Error())
331331
return nil, err
332332
}
333-
connectURL.Path = dbclient.dbName
333+
connectURL.Path = dbclient.DBName
334334

335-
resp, _, err := dbclient.couchInstance.handleRequest(http.MethodDelete, connectURL.String(), nil, "", "")
335+
resp, _, err := dbclient.CouchInstance.handleRequest(http.MethodDelete, connectURL.String(), nil, "", "")
336336
if err != nil {
337337
return nil, err
338338
}
@@ -342,7 +342,7 @@ func (dbclient *CouchDatabase) DropDatabase() (*DBOperationResponse, error) {
342342
json.NewDecoder(resp.Body).Decode(&dbResponse)
343343

344344
if dbResponse.Ok == true {
345-
logger.Debugf("Dropped database %s ", dbclient.dbName)
345+
logger.Debugf("Dropped database %s ", dbclient.DBName)
346346
}
347347

348348
logger.Debugf("Exiting DropDatabase()")
@@ -362,14 +362,14 @@ func (dbclient *CouchDatabase) EnsureFullCommit() (*DBOperationResponse, error)
362362

363363
logger.Debugf("Entering EnsureFullCommit()")
364364

365-
connectURL, err := url.Parse(dbclient.couchInstance.conf.URL)
365+
connectURL, err := url.Parse(dbclient.CouchInstance.conf.URL)
366366
if err != nil {
367367
logger.Errorf("URL parse error: %s", err.Error())
368368
return nil, err
369369
}
370-
connectURL.Path = dbclient.dbName + "/_ensure_full_commit"
370+
connectURL.Path = dbclient.DBName + "/_ensure_full_commit"
371371

372-
resp, _, err := dbclient.couchInstance.handleRequest(http.MethodPost, connectURL.String(), nil, "", "")
372+
resp, _, err := dbclient.CouchInstance.handleRequest(http.MethodPost, connectURL.String(), nil, "", "")
373373
if err != nil {
374374
logger.Errorf("Failed to invoke _ensure_full_commit Error: %s\n", err.Error())
375375
return nil, err
@@ -380,7 +380,7 @@ func (dbclient *CouchDatabase) EnsureFullCommit() (*DBOperationResponse, error)
380380
json.NewDecoder(resp.Body).Decode(&dbResponse)
381381

382382
if dbResponse.Ok == true {
383-
logger.Debugf("_ensure_full_commit database %s ", dbclient.dbName)
383+
logger.Debugf("_ensure_full_commit database %s ", dbclient.DBName)
384384
}
385385

386386
logger.Debugf("Exiting EnsureFullCommit()")
@@ -402,13 +402,13 @@ func (dbclient *CouchDatabase) SaveDoc(id string, rev string, couchDoc *CouchDoc
402402
return "", fmt.Errorf("doc id [%x] not a valid utf8 string", id)
403403
}
404404

405-
saveURL, err := url.Parse(dbclient.couchInstance.conf.URL)
405+
saveURL, err := url.Parse(dbclient.CouchInstance.conf.URL)
406406
if err != nil {
407407
logger.Errorf("URL parse error: %s", err.Error())
408408
return "", err
409409
}
410410

411-
saveURL.Path = dbclient.dbName
411+
saveURL.Path = dbclient.DBName
412412
// id can contain a '/', so encode separately
413413
saveURL = &url.URL{Opaque: saveURL.String() + "/" + encodePathElement(id)}
414414

@@ -461,7 +461,7 @@ func (dbclient *CouchDatabase) SaveDoc(id string, rev string, couchDoc *CouchDoc
461461
}
462462

463463
//handle the request for saving the JSON or attachments
464-
resp, _, err := dbclient.couchInstance.handleRequest(http.MethodPut, saveURL.String(), data, rev, defaultBoundary)
464+
resp, _, err := dbclient.CouchInstance.handleRequest(http.MethodPut, saveURL.String(), data, rev, defaultBoundary)
465465
if err != nil {
466466
return "", err
467467
}
@@ -570,12 +570,12 @@ func (dbclient *CouchDatabase) ReadDoc(id string) (*CouchDoc, string, error) {
570570
return nil, "", fmt.Errorf("doc id [%x] not a valid utf8 string", id)
571571
}
572572

573-
readURL, err := url.Parse(dbclient.couchInstance.conf.URL)
573+
readURL, err := url.Parse(dbclient.CouchInstance.conf.URL)
574574
if err != nil {
575575
logger.Errorf("URL parse error: %s", err.Error())
576576
return nil, "", err
577577
}
578-
readURL.Path = dbclient.dbName
578+
readURL.Path = dbclient.DBName
579579
// id can contain a '/', so encode separately
580580
readURL = &url.URL{Opaque: readURL.String() + "/" + encodePathElement(id)}
581581

@@ -584,7 +584,7 @@ func (dbclient *CouchDatabase) ReadDoc(id string) (*CouchDoc, string, error) {
584584

585585
readURL.RawQuery = query.Encode()
586586

587-
resp, couchDBReturn, err := dbclient.couchInstance.handleRequest(http.MethodGet, readURL.String(), nil, "", "")
587+
resp, couchDBReturn, err := dbclient.CouchInstance.handleRequest(http.MethodGet, readURL.String(), nil, "", "")
588588
if err != nil {
589589
if couchDBReturn != nil && couchDBReturn.StatusCode == 404 {
590590
logger.Debug("Document not found (404), returning nil value instead of 404 error")
@@ -699,12 +699,12 @@ func (dbclient *CouchDatabase) ReadDocRange(startKey, endKey string, limit, skip
699699

700700
var results []QueryResult
701701

702-
rangeURL, err := url.Parse(dbclient.couchInstance.conf.URL)
702+
rangeURL, err := url.Parse(dbclient.CouchInstance.conf.URL)
703703
if err != nil {
704704
logger.Errorf("URL parse error: %s", err.Error())
705705
return nil, err
706706
}
707-
rangeURL.Path = dbclient.dbName + "/_all_docs"
707+
rangeURL.Path = dbclient.DBName + "/_all_docs"
708708

709709
queryParms := rangeURL.Query()
710710
queryParms.Set("limit", strconv.Itoa(limit))
@@ -733,7 +733,7 @@ func (dbclient *CouchDatabase) ReadDocRange(startKey, endKey string, limit, skip
733733

734734
rangeURL.RawQuery = queryParms.Encode()
735735

736-
resp, _, err := dbclient.couchInstance.handleRequest(http.MethodGet, rangeURL.String(), nil, "", "")
736+
resp, _, err := dbclient.CouchInstance.handleRequest(http.MethodGet, rangeURL.String(), nil, "", "")
737737
if err != nil {
738738
return nil, err
739739
}
@@ -803,13 +803,13 @@ func (dbclient *CouchDatabase) DeleteDoc(id, rev string) error {
803803

804804
logger.Debugf("Entering DeleteDoc() id=%s", id)
805805

806-
deleteURL, err := url.Parse(dbclient.couchInstance.conf.URL)
806+
deleteURL, err := url.Parse(dbclient.CouchInstance.conf.URL)
807807
if err != nil {
808808
logger.Errorf("URL parse error: %s", err.Error())
809809
return err
810810
}
811811

812-
deleteURL.Path = dbclient.dbName
812+
deleteURL.Path = dbclient.DBName
813813
// id can contain a '/', so encode separately
814814
deleteURL = &url.URL{Opaque: deleteURL.String() + "/" + encodePathElement(id)}
815815

@@ -828,7 +828,7 @@ func (dbclient *CouchDatabase) DeleteDoc(id, rev string) error {
828828

829829
logger.Debugf(" rev=%s", rev)
830830

831-
resp, couchDBReturn, err := dbclient.couchInstance.handleRequest(http.MethodDelete, deleteURL.String(), nil, rev, "")
831+
resp, couchDBReturn, err := dbclient.CouchInstance.handleRequest(http.MethodDelete, deleteURL.String(), nil, rev, "")
832832
if err != nil {
833833
fmt.Printf("couchDBReturn=%v", couchDBReturn)
834834
if couchDBReturn != nil && couchDBReturn.StatusCode == 404 {
@@ -854,20 +854,20 @@ func (dbclient *CouchDatabase) QueryDocuments(query string) (*[]QueryResult, err
854854

855855
var results []QueryResult
856856

857-
queryURL, err := url.Parse(dbclient.couchInstance.conf.URL)
857+
queryURL, err := url.Parse(dbclient.CouchInstance.conf.URL)
858858
if err != nil {
859859
logger.Errorf("URL parse error: %s", err.Error())
860860
return nil, err
861861
}
862862

863-
queryURL.Path = dbclient.dbName + "/_find"
863+
queryURL.Path = dbclient.DBName + "/_find"
864864

865865
//Set up a buffer for the data to be pushed to couchdb
866866
data := new(bytes.Buffer)
867867

868868
data.ReadFrom(bytes.NewReader([]byte(query)))
869869

870-
resp, _, err := dbclient.couchInstance.handleRequest(http.MethodPost, queryURL.String(), data, "", "")
870+
resp, _, err := dbclient.CouchInstance.handleRequest(http.MethodPost, queryURL.String(), data, "", "")
871871
if err != nil {
872872
return nil, err
873873
}

core/ledger/util/couchdb/couchdb_test.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func cleanup(database string) error {
4242
fmt.Println("Unexpected error", err)
4343
return err
4444
}
45-
db := CouchDatabase{couchInstance: *couchInstance, dbName: database}
45+
db := CouchDatabase{CouchInstance: *couchInstance, DBName: database}
4646
//drop the test database
4747
db.DropDatabase()
4848
return nil
@@ -99,7 +99,7 @@ func TestDBCreateSaveWithoutRevision(t *testing.T) {
9999
//create a new instance and database object
100100
couchInstance, err := CreateCouchInstance(connectURL, username, password)
101101
testutil.AssertNoError(t, err, fmt.Sprintf("Error when trying to create couch instance"))
102-
db := CouchDatabase{couchInstance: *couchInstance, dbName: database}
102+
db := CouchDatabase{CouchInstance: *couchInstance, DBName: database}
103103

104104
//create a new database
105105
_, errdb := db.CreateDatabaseIfNotExist()
@@ -174,7 +174,7 @@ func TestDBCreateDatabaseAndPersist(t *testing.T) {
174174
//create a new instance and database object
175175
couchInstance, err := CreateCouchInstance(connectURL, username, password)
176176
testutil.AssertNoError(t, err, fmt.Sprintf("Error when trying to create couch instance"))
177-
db := CouchDatabase{couchInstance: *couchInstance, dbName: database}
177+
db := CouchDatabase{CouchInstance: *couchInstance, DBName: database}
178178

179179
//create a new database
180180
_, errdb := db.CreateDatabaseIfNotExist()
@@ -264,7 +264,7 @@ func TestDBBadJSON(t *testing.T) {
264264
//create a new instance and database object
265265
couchInstance, err := CreateCouchInstance(connectURL, username, password)
266266
testutil.AssertNoError(t, err, fmt.Sprintf("Error when trying to create couch instance"))
267-
db := CouchDatabase{couchInstance: *couchInstance, dbName: database}
267+
db := CouchDatabase{CouchInstance: *couchInstance, DBName: database}
268268

269269
//create a new database
270270
_, errdb := db.CreateDatabaseIfNotExist()
@@ -300,7 +300,7 @@ func TestPrefixScan(t *testing.T) {
300300
//create a new instance and database object
301301
couchInstance, err := CreateCouchInstance(connectURL, username, password)
302302
testutil.AssertNoError(t, err, fmt.Sprintf("Error when trying to create couch instance"))
303-
db := CouchDatabase{couchInstance: *couchInstance, dbName: database}
303+
db := CouchDatabase{CouchInstance: *couchInstance, DBName: database}
304304

305305
//create a new database
306306
_, errdb := db.CreateDatabaseIfNotExist()
@@ -372,7 +372,7 @@ func TestDBSaveAttachment(t *testing.T) {
372372
//create a new instance and database object
373373
couchInstance, err := CreateCouchInstance(connectURL, username, password)
374374
testutil.AssertNoError(t, err, fmt.Sprintf("Error when trying to create couch instance"))
375-
db := CouchDatabase{couchInstance: *couchInstance, dbName: database}
375+
db := CouchDatabase{CouchInstance: *couchInstance, DBName: database}
376376

377377
//create a new database
378378
_, errdb := db.CreateDatabaseIfNotExist()
@@ -405,7 +405,7 @@ func TestDBDeleteDocument(t *testing.T) {
405405
//create a new instance and database object
406406
couchInstance, err := CreateCouchInstance(connectURL, username, password)
407407
testutil.AssertNoError(t, err, fmt.Sprintf("Error when trying to create couch instance"))
408-
db := CouchDatabase{couchInstance: *couchInstance, dbName: database}
408+
db := CouchDatabase{CouchInstance: *couchInstance, DBName: database}
409409

410410
//create a new database
411411
_, errdb := db.CreateDatabaseIfNotExist()
@@ -443,7 +443,7 @@ func TestDBDeleteNonExistingDocument(t *testing.T) {
443443
//create a new instance and database object
444444
couchInstance, err := CreateCouchInstance(connectURL, username, password)
445445
testutil.AssertNoError(t, err, fmt.Sprintf("Error when trying to create couch instance"))
446-
db := CouchDatabase{couchInstance: *couchInstance, dbName: database}
446+
db := CouchDatabase{CouchInstance: *couchInstance, DBName: database}
447447

448448
//create a new database
449449
_, errdb := db.CreateDatabaseIfNotExist()

core/ledger/util/couchdb/couchdbutil.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ func CreateCouchDatabase(couchInstance CouchInstance, dbName string) (*CouchData
8282
return nil, err
8383
}
8484

85-
couchDBDatabase := CouchDatabase{couchInstance: couchInstance, dbName: databaseName}
85+
couchDBDatabase := CouchDatabase{CouchInstance: couchInstance, DBName: databaseName}
8686

8787
// Create CouchDB database upon ledger startup, if it doesn't already exist
8888
_, err = couchDBDatabase.CreateDatabaseIfNotExist()

0 commit comments

Comments
 (0)