Merge pull request #18 from 30x/ISSUE-65161406
[ISSUE-65161406] Use transactions. Remove temp files for failed bundle-downloading
diff --git a/bundle.go b/bundle.go
index 468760c..b4729cf 100644
--- a/bundle.go
+++ b/bundle.go
@@ -172,10 +172,19 @@
}
}
+ cleanTempFile := func(file string) {
+ if os.Remove(file) != nil {
+ log.Warnf("Unable to remove temp file %s", file)
+ }
+ }
+
downloadedFile, err := downloadFromURI(r.client, r.blobServerURL, r.blobId)
if err != nil {
log.Errorf("Unable to download blob file blobId=%s err:%v", r.blobId, err)
+ if downloadedFile != "" {
+ go cleanTempFile(downloadedFile)
+ }
return err
}
@@ -184,10 +193,13 @@
err = r.bm.dbMan.updateLocalFsLocation(r.blobId, downloadedFile)
if err != nil {
log.Errorf("updateLocalFsLocation failed: blobId=%s", r.blobId)
+ if downloadedFile != "" {
+ go cleanTempFile(downloadedFile)
+ }
return err
}
- log.Debugf("bundle downloaded: blobId=%s", r.blobId)
+ log.Debugf("bundle downloaded: blobId=%s filename=%s", r.blobId, downloadedFile)
// TODO send changed deployments to subscribers (API call with "block")
//r.bm.apiMan.addChangedDeployment(dep.ID)
diff --git a/data.go b/data.go
index 607c0ab..f3e59ef 100644
--- a/data.go
+++ b/data.go
@@ -77,7 +77,12 @@
}
func (dbc *dbManager) initDb() error {
- _, err := dbc.getDb().Exec(`
+ tx, err := dbc.getDb().Begin()
+ if err != nil {
+ return err
+ }
+ defer tx.Rollback()
+ _, err = tx.Exec(`
CREATE TABLE IF NOT EXISTS apid_blob_available (
id text primary key,
local_fs_location text NOT NULL
@@ -86,7 +91,10 @@
if err != nil {
return err
}
-
+ err = tx.Commit()
+ if err != nil {
+ return err
+ }
log.Debug("Database table apid_blob_available created.")
return nil
}
@@ -190,19 +198,21 @@
}
func (dbc *dbManager) updateLocalFsLocation(blobId, localFsLocation string) error {
-
- stmt, err := dbc.getDb().Prepare(`
+ txn, err := dbc.getDb().Begin()
+ if err != nil {
+ return err
+ }
+ defer txn.Rollback()
+ _, err = txn.Exec(`
INSERT OR IGNORE INTO apid_blob_available (
id,
local_fs_location
- ) VALUES (?, ?);`)
+ ) VALUES (?, ?);`, blobId, localFsLocation)
if err != nil {
- log.Errorf("PREPARE updateLocalFsLocation failed: %v", err)
+ log.Errorf("INSERT apid_blob_available id {%s} local_fs_location {%s} failed", localFsLocation, err)
return err
}
- defer stmt.Close()
-
- _, err = stmt.Exec(blobId, localFsLocation)
+ err = txn.Commit()
if err != nil {
log.Errorf("UPDATE apid_blob_available id {%s} local_fs_location {%s} failed", localFsLocation, err)
return err
diff --git a/data_test.go b/data_test.go
index b3abc2f..58653ef 100644
--- a/data_test.go
+++ b/data_test.go
@@ -162,7 +162,10 @@
//initialize DB for tests
func initTestDb(db apid.DB) {
- _, err := db.Exec(`
+ tx, err := db.Begin()
+ Expect(err).Should(Succeed())
+ defer tx.Rollback()
+ _, err = tx.Exec(`
CREATE TABLE metadata_runtime_entity_metadata (
id text,
organization_id text,
@@ -183,7 +186,7 @@
Expect(err).Should(Succeed())
// ready blob, empty resource
- _, err = db.Exec(`
+ _, err = tx.Exec(`
INSERT INTO "metadata_runtime_entity_metadata" VALUES(
'1dc4895e-6494-4b59-979f-5f4c89c073b4',
'73fcac6c-5d9f-44c1-8db0-333efda3e6e8',
@@ -204,7 +207,7 @@
Expect(err).Should(Succeed())
// ready blob, ready resource
- _, err = db.Exec(`
+ _, err = tx.Exec(`
INSERT INTO "metadata_runtime_entity_metadata" VALUES(
'319963ff-217e-4ecc-8d6e-c3665e962d1e',
'73fcac6c-5d9f-44c1-8db0-333efda3e6e8',
@@ -225,7 +228,7 @@
Expect(err).Should(Succeed())
// ready blob, unready resource
- _, err = db.Exec(`
+ _, err = tx.Exec(`
INSERT INTO "metadata_runtime_entity_metadata" VALUES(
'3af44bb7-0a74-4283-860c-3561e6c19132',
'73fcac6c-5d9f-44c1-8db0-333efda3e6e8',
@@ -246,7 +249,7 @@
Expect(err).Should(Succeed())
// unready blob, empty resource
- _, err = db.Exec(`
+ _, err = tx.Exec(`
INSERT INTO "metadata_runtime_entity_metadata" VALUES(
'd5ffd9db-4795-43eb-b645-d2a0b6c8ac6a',
'73fcac6c-5d9f-44c1-8db0-333efda3e6e8',
@@ -267,7 +270,7 @@
Expect(err).Should(Succeed())
// unready blob, ready resource
- _, err = db.Exec(`
+ _, err = tx.Exec(`
INSERT INTO "metadata_runtime_entity_metadata" VALUES(
'84ac8d68-b3d1-4bcc-ad0d-c6a0ed67e16c',
'73fcac6c-5d9f-44c1-8db0-333efda3e6e8',
@@ -288,7 +291,7 @@
Expect(err).Should(Succeed())
// unready blob, unready resource
- _, err = db.Exec(`
+ _, err = tx.Exec(`
INSERT INTO "metadata_runtime_entity_metadata" VALUES(
'3ecd351c-1173-40bf-b830-c194e5ef9038',
'73fcac6c-5d9f-44c1-8db0-333efda3e6e8',
@@ -307,4 +310,5 @@
);
`)
Expect(err).Should(Succeed())
+ Expect(tx.Commit()).Should(Succeed())
}