Skip to content

Commit 5c4f614

Browse files
committed
wt debug setup for MDB (reproduces an interesting assertion failure)
1 parent 22d0629 commit 5c4f614

File tree

4 files changed

+54
-18
lines changed

4 files changed

+54
-18
lines changed

omnilink/static_overlay.nix

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,10 @@ final: prev: {
1010
wiredtiger = (prev.omnilink.wiredtiger or {}) // {
1111
lib.v11_3_1 = final.callPackage ./wiredtiger/wiredtiger.nix {
1212
ghRev = "05c56015a42154ac8145366678a4f8eb419b5933";
13-
ghHash = "sha256-K5cZZTvZaWR6gVXF+mHNh7nHxMqi9XaEpB2qsd/pay8=";
1413
};
1514
lib.lockbug = final.callPackage ./wiredtiger/wiredtiger.nix {
16-
ghOwner = "fhackett";
15+
ghUrl = "https://github.com/fhackett/wiredtiger.git";
1716
ghRev = "11a7aaf61f3baffc0ae743a2813d1010d57fee6d";
18-
ghHash = "sha256-2hpVPmKKQxrioXYGm4x1T8ELKl2Fyf3fEYRtc+qlnlg=";
1917
};
2018
workload = final.callPackage ./wiredtiger/workload.nix { };
2119
reflocking_wrapper = final.callPackage ./wiredtiger/reflocking_wrapper.nix { };

omnilink/wiredtiger/package.mill

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,10 @@ object `package` extends Module:
8181
trait WTTracingConfigModule extends build.omnilink.TracingConfigModule:
8282
wtTracingConfigModule =>
8383
def disableRR: Boolean = false
84+
object singleThreadConfig extends ConfigModule:
85+
def threadCount = 1
86+
def operationCount = 100000
87+
end singleThreadConfig
8488
object defaultConfig extends ConfigModule:
8589
def threadCount = 5
8690
def operationCount = 100

omnilink/wiredtiger/wiredtiger.nix

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,14 @@
88
omnilink,
99
msgpack-cxx,
1010

11-
ghOwner ? "wiredtiger",
12-
ghRepo ? "wiredtiger",
13-
ghHash ? "",
11+
ghUrl ? "https://github.com/wiredtiger/wiredtiger.git",
1412
ghRev,
1513
}:
1614
let
17-
src = fetchFromGitHub {
18-
owner = ghOwner;
19-
repo = ghRepo;
15+
src = (builtins.fetchGit {
16+
url = ghUrl;
2017
rev = ghRev;
21-
hash = ghHash;
22-
};
18+
}).outPath;
2319
in
2420
stdenv.mkDerivation {
2521
version = ghRev;
@@ -35,6 +31,8 @@ stdenv.mkDerivation {
3531
# allows us to extract wtperf
3632
"-DENABLE_STATIC=ON"
3733
"-DENABLE_SHARED=OFF"
34+
# This one's broken for some reason.
35+
"-DENABLE_PYTHON=OFF"
3836
];
3937
buildInputs = [
4038
python3
@@ -47,8 +45,21 @@ stdenv.mkDerivation {
4745
cmake
4846
pkg-config
4947
];
50-
src = src;
48+
env.WIREDTIGER_SRC = src;
49+
unpackPhase = ''
50+
echo skipping unpack
51+
'';
52+
configurePhase = ''
53+
mkdir build
54+
cmake -B ./build -S "$WIREDTIGER_SRC" $cmakeFlags
55+
'';
56+
buildPhase = ''
57+
cmake --build ./build
58+
'';
59+
installPhase = ''
60+
cmake --install ./build --prefix $out
61+
'';
5162
postInstall = ''
52-
cp bench/wtperf/wtperf $out/bin/wtperf
63+
cp build/bench/wtperf/wtperf $out/bin/wtperf
5364
'';
5465
}

omnilink/wiredtiger/workload/main.cpp

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ struct WorkloadContext
145145
int nextTransactionId = thread_idx;
146146
int transactionId = -1;
147147
uint64_t prepare_timestamp = 0;
148+
uint64_t read_timestamp = 0;
148149
bool transactionIsPrepared = false;
149150
bool transactionHasFailed = false;
150151

@@ -231,6 +232,13 @@ struct WorkloadContext
231232
if (transactionId == -1)
232233
ctx.unsupported();
233234
int ret = session->rollback_transaction(session, nullptr);
235+
ctx.refine_op_end();
236+
{
237+
std::unique_lock active_read_timestamps_lck{
238+
workload_context.active_read_timestamps_m};
239+
workload_context.active_read_timestamps.erase(this->read_timestamp);
240+
this->read_timestamp = 0;
241+
}
234242
ctx.op.n = "n";
235243
ctx.op.tid = transactionId;
236244
ctx.op._did_abort = ret != 0;
@@ -239,6 +247,7 @@ struct WorkloadContext
239247
}
240248

241249
void perform_operation(Ctx<Storage::CommitPreparedTransaction> &ctx) {
250+
ctx.unsupported();
242251
if (transactionId == -1 || !transactionIsPrepared ||
243252
transactionHasFailed) {
244253
ctx.unsupported();
@@ -281,19 +290,28 @@ struct WorkloadContext
281290
std::shared_lock connection_lck{workload_context.connection_m};
282291
std::shared_lock stable_timestamp_lck{
283292
workload_context.stable_timestamp_m};
284-
std::shared_lock active_read_timestamps_lck{
293+
uint64_t commit_timestamp;
294+
{
295+
std::shared_lock active_read_timestamps_lck{
285296
workload_context.active_read_timestamps_m};
286-
auto commit_timestamp = find_timestamp_at({
287-
workload_context.stable_timestamp + 1,
288-
max_active_read_timestamp_nolock() + 1,
289-
});
297+
commit_timestamp = find_timestamp_at({
298+
workload_context.stable_timestamp + 1,
299+
max_active_read_timestamp_nolock() + 1,
300+
});
301+
}
290302
int currTransactionId = transactionId;
291303
ctx.refine_op_start();
292304
int ret = session->commit_transaction(
293305
session, config{
294306
{"commit_timestamp", hex64(commit_timestamp)},
295307
});
296308
ctx.refine_op_end();
309+
{
310+
std::unique_lock active_read_timestamps_lck{
311+
workload_context.active_read_timestamps_m};
312+
workload_context.active_read_timestamps.erase(this->read_timestamp);
313+
this->read_timestamp = 0;
314+
}
297315
// unconditionally void the transaction, either it committed or rolled
298316
// back
299317
void_transaction();
@@ -305,6 +323,7 @@ struct WorkloadContext
305323
}
306324

307325
void perform_operation(Ctx<Storage::PrepareTransaction> &ctx) {
326+
ctx.unsupported();
308327
if (transactionId == -1 || transactionIsPrepared ||
309328
transactionHasFailed) {
310329
ctx.unsupported();
@@ -337,6 +356,7 @@ struct WorkloadContext
337356
}
338357

339358
void perform_operation(Ctx<Storage::RollbackToStable> &ctx) {
359+
ctx.unsupported();
340360
std::unique_lock connection_lck{workload_context.connection_m};
341361
std::unique_lock existing_kvs_lck{workload_context.existing_kvs_m};
342362
std::unique_lock oldest_timestamp_lck{
@@ -361,6 +381,7 @@ struct WorkloadContext
361381
}
362382

363383
void perform_operation(Ctx<Storage::SetOldestTimestamp> &ctx) {
384+
ctx.unsupported();
364385
std::unique_lock connection_lck{workload_context.connection_m};
365386
std::unique_lock existing_kvs_lck{workload_context.existing_kvs_m};
366387
std::unique_lock oldest_timestamp_lck{
@@ -387,6 +408,7 @@ struct WorkloadContext
387408
}
388409

389410
void perform_operation(Ctx<Storage::SetStableTimestamp> &ctx) {
411+
ctx.unsupported();
390412
std::unique_lock connection_lck{workload_context.connection_m};
391413
std::unique_lock existing_kvs_lck{workload_context.existing_kvs_m};
392414
std::unique_lock oldest_timestamp_lck{
@@ -433,6 +455,7 @@ struct WorkloadContext
433455
transactionHasFailed = false;
434456
transactionIsPrepared = false;
435457
chosenTransactionId = transactionId;
458+
this->read_timestamp = read_timestamp;
436459
} else {
437460
std::unique_lock active_read_timestamps_lck{
438461
workload_context.active_read_timestamps_m};

0 commit comments

Comments
 (0)