Skip to content

Commit ee55a2f

Browse files
committed
Make lock key prints a bit more user-friendly
1 parent 5dd8daf commit ee55a2f

File tree

1 file changed

+64
-9
lines changed

1 file changed

+64
-9
lines changed

src/lock/print.cpp

Lines changed: 64 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,11 @@ enum lck_t {
7575
LCK_btr_dont_gc, // Prevent removal of b-tree page from index
7676
LCK_shared_counter, // Database-wide shared counter
7777
LCK_tra_pc, // Precommitted transaction lock
78+
LCK_rel_gc, // Allow garbage collection for relation
7879
LCK_fun_exist, // Function existence lock
7980
LCK_rel_rescan, // Relation forced rescan lock
8081
LCK_crypt, // Crypt lock for single crypt thread
8182
LCK_crypt_status, // Notifies about changed database encryption status
82-
LCK_idx_reserve, // Index reservation lock
8383
LCK_record_gc // Record-level GC lock
8484
};
8585

@@ -1232,30 +1232,85 @@ static void prt_lock(OUTFILE outfile, const lhb* LOCK_header, const lbl* lock, U
12321232
"\tSeries: %d, State: %d, Size: %d, Length: %d, Data: %" SQUADFORMAT"\n",
12331233
lock->lbl_series, lock->lbl_state, lock->lbl_size, lock->lbl_length, lock->lbl_data);
12341234

1235-
if ((lock->lbl_series == Jrd::LCK_bdb || lock->lbl_series == Jrd::LCK_btr_dont_gc) &&
1235+
if ((lock->lbl_series == Jrd::LCK_bdb ||
1236+
lock->lbl_series == Jrd::LCK_btr_dont_gc) &&
12361237
lock->lbl_length == Jrd::PageNumber::getLockLen())
12371238
{
12381239
// Since fb 2.1 lock keys for page numbers (series == 3) contains
12391240
// page space number in high long of two-longs key. Lets print it
12401241
// in <page_space>:<page_number> format
12411242
const UCHAR* q = lock->lbl_key;
12421243

1243-
SLONG key;
1244-
memcpy(&key, q, sizeof(SLONG));
1245-
q += sizeof(SLONG);
1244+
ULONG pageno;
1245+
memcpy(&pageno, q, sizeof(ULONG));
1246+
q += sizeof(ULONG);
12461247

12471248
ULONG pg_space;
1248-
memcpy(&pg_space, q, sizeof(SLONG));
1249+
memcpy(&pg_space, q, sizeof(ULONG));
12491250

1250-
FPRINTF(outfile, "\tKey: %04" ULONGFORMAT":%06" SLONGFORMAT",", pg_space, key);
1251+
FPRINTF(outfile, "\tKey: %04" ULONGFORMAT":%06" ULONGFORMAT",", pg_space, pageno);
12511252
}
1252-
else if (lock->lbl_length == 4)
1253+
else if ((lock->lbl_series == Jrd::LCK_relation ||
1254+
lock->lbl_series == Jrd::LCK_rel_gc) &&
1255+
lock->lbl_length == sizeof(ULONG) + sizeof(SINT64)) // Jrd::jrd_rel::getRelLockKeyLength()
1256+
{
1257+
const UCHAR* q = lock->lbl_key;
1258+
1259+
ULONG rel_id;
1260+
memcpy(&rel_id, q, sizeof(ULONG));
1261+
q += sizeof(ULONG);
1262+
1263+
SINT64 instance_id;
1264+
memcpy(&instance_id, q, sizeof(SINT64));
1265+
1266+
FPRINTF(outfile, "\tKey: %04" ULONGFORMAT":%09" SQUADFORMAT",", rel_id, instance_id);
1267+
}
1268+
else if ((lock->lbl_series == Jrd::LCK_tra ||
1269+
lock->lbl_series == Jrd::LCK_tra_pc ||
1270+
lock->lbl_series == Jrd::LCK_attachment ||
1271+
lock->lbl_series == Jrd::LCK_monitor ||
1272+
lock->lbl_series == Jrd::LCK_cancel) &&
1273+
lock->lbl_length == sizeof(SINT64))
1274+
{
1275+
SINT64 key;
1276+
memcpy(&key, lock->lbl_key, lock->lbl_length);
1277+
1278+
FPRINTF(outfile, "\tKey: %09" SQUADFORMAT",", key);
1279+
}
1280+
else if (lock->lbl_series == Jrd::LCK_record_gc &&
1281+
lock->lbl_length == sizeof(SINT64))
1282+
{
1283+
SINT64 key;
1284+
memcpy(&key, lock->lbl_key, lock->lbl_length);
1285+
1286+
const ULONG pageno = key >> 16;
1287+
const ULONG line = (ULONG) (key & MAX_USHORT);
1288+
1289+
FPRINTF(outfile, "\tKey: %06" ULONGFORMAT":%04" ULONGFORMAT",", pageno, line);
1290+
}
1291+
else if ((lock->lbl_series == Jrd::LCK_idx_exist ||
1292+
lock->lbl_series == Jrd::LCK_expression) &&
1293+
lock->lbl_length == sizeof(SLONG))
1294+
{
1295+
SLONG key;
1296+
memcpy(&key, lock->lbl_key, lock->lbl_length);
1297+
1298+
const ULONG rel_id = key >> 16;
1299+
const ULONG idx_id = (ULONG) (key & MAX_USHORT);
1300+
1301+
FPRINTF(outfile, "\tKey: %04" ULONGFORMAT":%04" ULONGFORMAT",", rel_id, idx_id);
1302+
}
1303+
else if (lock->lbl_length == sizeof(SLONG))
12531304
{
12541305
SLONG key;
1255-
memcpy(&key, lock->lbl_key, 4);
1306+
memcpy(&key, lock->lbl_key, lock->lbl_length);
12561307

12571308
FPRINTF(outfile, "\tKey: %06" SLONGFORMAT",", key);
12581309
}
1310+
else if (lock->lbl_length == 0)
1311+
{
1312+
FPRINTF(outfile, "\tKey: <none>");
1313+
}
12591314
else
12601315
{
12611316
UCHAR temp[512];

0 commit comments

Comments
 (0)