Skip to content

Commit 1e9a0ee

Browse files
committed
Use curtran
Signed-off-by: mdouglas47 <[email protected]> Only use curtran if possible Signed-off-by: mdouglas47 <[email protected]>
1 parent 9bb6316 commit 1e9a0ee

File tree

3 files changed

+39
-8
lines changed

3 files changed

+39
-8
lines changed

Diff for: db/sql.h

+5
Original file line numberDiff line numberDiff line change
@@ -1515,6 +1515,11 @@ void add_fingerprint_to_rawstats(struct rawnodestats *stats,
15151515
*/
15161516
int clnt_check_bdb_lock_desired(struct sqlclntstate *clnt);
15171517

1518+
// use when an abort-only transaction is needed.
1519+
// caller should call `puttran` when finished.
1520+
tran_type *gettran_prefer_curtran();
1521+
int puttran(tran_type * const tran);
1522+
15181523
/**
15191524
* Bdb transaction objects with curtran lockid
15201525
*/

Diff for: db/sqlanalyze.c

+6-8
Original file line numberDiff line numberDiff line change
@@ -784,11 +784,9 @@ int analyze_regular_table(table_descriptor_t *td, struct sqlclntstate *clnt, cha
784784
goto err;
785785
}
786786

787-
int bdberr = 0;
788-
trans = bdb_tran_begin(table->handle, NULL, &bdberr);
787+
trans = gettran_prefer_curtran();
789788
if (!trans) {
790-
logmsg(LOGMSG_ERROR, "%s: bdb_tran_begin:%s bdberr:%d\n", __func__,
791-
table->tablename, bdberr);
789+
logmsg(LOGMSG_ERROR, "%s: Could not get tran\n", __func__);
792790
rc = 1;
793791
goto err;
794792
}
@@ -819,11 +817,11 @@ int analyze_regular_table(table_descriptor_t *td, struct sqlclntstate *clnt, cha
819817
goto err;
820818
}
821819
}
822-
823-
rc = bdb_tran_commit(table->handle, trans, &bdberr);
820+
821+
rc = puttran(trans);
824822
trans = NULL;
825823
if (rc) {
826-
logmsg(LOGMSG_ERROR, "%s: bdb_tran_commit failed rc(%d) bdberr(%d)\n", __func__, rc, bdberr);
824+
logmsg(LOGMSG_ERROR, "%s: puttran failed rc(%d)\n", __func__, rc);
827825
goto err;
828826
}
829827

@@ -851,7 +849,7 @@ int analyze_regular_table(table_descriptor_t *td, struct sqlclntstate *clnt, cha
851849
unlock_schema_lk();
852850
}
853851
if (trans) {
854-
bdb_tran_abort(table->handle, trans, &bdberr);
852+
puttran(trans);
855853
}
856854
if (sampled_table) {
857855
cleanup_sampled_indicies(clnt);

Diff for: db/sqlglue.c

+28
Original file line numberDiff line numberDiff line change
@@ -11790,6 +11790,34 @@ void curtran_puttran(tran_type *tran)
1179011790
bdb_tran_abort(thedb->bdb_env, tran, &bdberr);
1179111791
}
1179211792

11793+
tran_type *gettran_prefer_curtran() {
11794+
tran_type * trans = curtran_gettran();
11795+
if (trans) { return trans; }
11796+
11797+
int bdberr = 0;
11798+
trans = bdb_tran_begin(thedb->bdb_env, NULL, &bdberr);
11799+
if (!trans) {
11800+
logmsg(LOGMSG_ERROR, "%s: bdb_tran_begin failed bdberr(%d)\n", __func__, bdberr);
11801+
}
11802+
return trans;
11803+
}
11804+
11805+
int puttran(tran_type * const tran)
11806+
{
11807+
if (tran->is_curtran) {
11808+
curtran_puttran(tran);
11809+
return 0;
11810+
}
11811+
11812+
int bdberr;
11813+
int rc = bdb_tran_abort(thedb->bdb_env, tran, &bdberr);
11814+
if (rc) {
11815+
logmsg(LOGMSG_ERROR, "%s: bdb_tran_abort failed rc(%d) bdberr(%d)\n", __func__, rc, bdberr);
11816+
return 1;
11817+
}
11818+
return 0;
11819+
}
11820+
1179311821
void clone_temp_table(sqlite3_stmt *stmt, struct temptable *tbl)
1179411822
{
1179511823
int rc;

0 commit comments

Comments
 (0)