Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions berkdb/btree/bt_open.c
Original file line number Diff line number Diff line change
Expand Up @@ -299,6 +299,8 @@ __bam_metachk(dbp, name, btm)

/* Copy the file's ID. */
memcpy(dbp->fileid, btm->dbmeta.uid, DB_FILE_ID_LEN);
dbp->use_close_fileid = 0;
memset(dbp->close_fileid, 0, DB_FILE_ID_LEN);

return (0);

Expand Down
2 changes: 2 additions & 0 deletions berkdb/build/db.h
Original file line number Diff line number Diff line change
Expand Up @@ -1602,6 +1602,8 @@ struct __db {
u_int32_t open_flags; /* Flags passed to DB->open. */

u_int8_t fileid[DB_FILE_ID_LEN];/* File's unique ID for locking. */
u_int8_t close_fileid[DB_FILE_ID_LEN]; /* File's unique ID for closing, if db_refresh is called. */
int use_close_fileid; /* 1 if db_close should use close_fileid */

u_int32_t adj_fileid; /* File's unique ID for curs. adj. */

Expand Down
6 changes: 6 additions & 0 deletions berkdb/db/db.c
Original file line number Diff line number Diff line change
Expand Up @@ -1410,6 +1410,12 @@ __db_refresh(dbp, txn, flags, deferred_closep)

MUTEX_THREAD_UNLOCK(dbenv, dbenv->dblist_mutexp);

/* Save the fileid for close, if not done already */
if (!dbp->use_close_fileid) {
memcpy(dbp->close_fileid, dbp->fileid, sizeof(dbp->fileid));
dbp->use_close_fileid = 1;
}

/* Clear out fields that normally get set during open. */
memset(dbp->fileid, 0, sizeof(dbp->fileid));
dbp->adj_fileid = 0;
Expand Down
2 changes: 2 additions & 0 deletions berkdb/db/db_open.c
Original file line number Diff line number Diff line change
Expand Up @@ -626,6 +626,8 @@ __db_meta_setup(dbenv, dbp, name, meta, oflags, do_metachk)

/* Copy the file's ID. */
memcpy(dbp->fileid, ((DBMETA *)meta)->uid, DB_FILE_ID_LEN);
dbp->use_close_fileid = 0;
memset(dbp->close_fileid, 0, DB_FILE_ID_LEN);

break;
default:
Expand Down
2 changes: 2 additions & 0 deletions berkdb/db/db_rename.c
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,8 @@ __db_subdb_rename(dbp, txn, name, subdb, newname)
if ((ret = __memp_fget(mdbp->mpf, &dbp->meta_pgno, 0, &meta)) != 0)
goto err;
memcpy(dbp->fileid, ((DBMETA *)meta)->uid, DB_FILE_ID_LEN);
dbp->use_close_fileid = 0;
memset(dbp->close_fileid, 0, DB_FILE_ID_LEN);
if ((ret = __fop_lock_handle(dbenv,
dbp, mdbp->lid, DB_LOCK_WRITE, NULL, 0)) != 0)
goto err;
Expand Down
10 changes: 8 additions & 2 deletions berkdb/dbreg/dbreg_util.c
Original file line number Diff line number Diff line change
Expand Up @@ -398,10 +398,12 @@ __ufid_clear_dbp(dbenv, dbp)
DB_ENV *dbenv;
DB *dbp;
{
u_int8_t *fileid;
struct __ufid_to_db_t *ufid;
dbp->added_to_ufid = 0;
Pthread_mutex_lock(&dbenv->ufid_to_db_lk);
if ((ufid = hash_find(dbenv->ufid_to_db_hash, dbp->fileid))) {
fileid = dbp->use_close_fileid ? dbp->close_fileid : dbp->fileid;
if ((ufid = hash_find(dbenv->ufid_to_db_hash, fileid)) != NULL) {
if (ufid->dbp) {
ufid->dbp->added_to_ufid = 0;
}
Expand Down Expand Up @@ -569,6 +571,7 @@ __ufid_to_db_int(dbenv, txn, dbpp, inufid, lsnp, is_trigger, create, abort_on_no
Pthread_mutex_lock(&dbenv->ufid_to_db_lk);
if (dbp != NULL && ufid->dbp == NULL) {
ufid->dbp = dbp;
ufid->dbp->added_to_ufid = 1;
} else if (ufid->dbp != dbp) {
close_dbp = dbp;
}
Expand All @@ -584,8 +587,9 @@ __ufid_to_db_int(dbenv, txn, dbpp, inufid, lsnp, is_trigger, create, abort_on_no
}
ret = ret ? ret : (ufid->ignore ? DB_IGNORED : 0);
(*dbpp) = ufid->dbp;
if (remove_on_found) {
if (remove_on_found && ufid->dbp != NULL) {
/* caller is going to close the dbp */
ufid->dbp->added_to_ufid = 0;
ufid->dbp = NULL;
}
} else {
Expand Down Expand Up @@ -1156,6 +1160,8 @@ __dbreg_do_open(dbenv,
F_SET(dbp, DB_AM_RECOVER);
if (meta_pgno != PGNO_BASE_MD) {
memcpy(dbp->fileid, uid, DB_FILE_ID_LEN);
dbp->use_close_fileid = 0;
memset(dbp->close_fileid, 0, DB_FILE_ID_LEN);
dbp->meta_pgno = meta_pgno;
}

Expand Down
6 changes: 6 additions & 0 deletions berkdb/fileops/fop_util.c
Original file line number Diff line number Diff line change
Expand Up @@ -538,6 +538,8 @@ creat2: if ((ret = __db_appname(dbenv,
/* Construct a file_id. */
if ((ret = __os_fileid(dbenv, real_tmpname, 1, dbp->fileid)) != 0)
goto errmsg;
dbp->use_close_fileid = 0;
memset(dbp->close_fileid, 0, DB_FILE_ID_LEN);

if ((ret = __db_new_file(dbp, stxn, fhp, tmpname)) != 0)
goto err;
Expand Down Expand Up @@ -759,6 +761,8 @@ __fop_subdb_setup(dbp, txn, mname, name, mode, flags)
*/

memcpy(dbp->fileid, mdbp->fileid, DB_FILE_ID_LEN);
dbp->use_close_fileid = 0;
memset(dbp->close_fileid, 0, DB_FILE_ID_LEN);
if ((ret = __fop_lock_handle(dbenv, dbp,
txn == NULL ? dbp->lid : txn->txnid,
F_ISSET(dbp, DB_AM_CREATED) || LF_ISSET(DB_WRITEOPEN) ?
Expand Down Expand Up @@ -1126,6 +1130,8 @@ __fop_dummy(dbp, txn, old, new, flags)
if ((ret = db_create(&tmpdbp, dbenv, 0)) != 0)
goto err;
memcpy(&tmpdbp->fileid, ((DBMETA *)mbuf)->uid, DB_FILE_ID_LEN);
tmpdbp->use_close_fileid = 0;
memset(tmpdbp->close_fileid, 0, DB_FILE_ID_LEN);

/* Now, lock the name space while we initialize this file. */
if ((ret = __db_appname(dbenv,
Expand Down
2 changes: 1 addition & 1 deletion db/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -458,7 +458,7 @@ static char *legacy_options[] = {
"sc_current_version 3",
"disable_sql_table_replacement 1",
"track_db_open 0",
"clear_ufid_on_db_close 0",
"clear_ufid_on_db_close 1",
"get_peer_fqdn 0"
};
// clang-format on
Expand Down
1 change: 0 additions & 1 deletion tests/quarantine.csv
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
# type must be one of [FLAKEY/DB_BUG/UNKNOWN]
sc_inserts,FLAKEY,180387017
sc_downgrade,DB_BUG,180377358
sc_transactional_rowlocks_generated,UNKNOWN,180364183
sc_truncate_lockorder_generated,UNKNOWN,180390150
reco-ddlk-sql,DB_BUG,180524256
analyze,UNKNOWN,180528295
Expand Down
Loading