Skip to content

Commit 902b08c

Browse files
committed
feat(session): harden SQLite sharding with retries, monitoring, and load tests
1 parent cd8e8a9 commit 902b08c

27 files changed

Lines changed: 4986 additions & 221 deletions
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
scenario: cold-cache recovery
2+
session: ses_28fe803c8ffehCzepfVuBkCEa4
3+
message: msg_d7017fcb3001LiakxpA4i9035d
4+
file: /tmp/opencode-test-data-1261796/share/opencode/sessions/ses_28fe803c8ffehCzepfVuBkCEa4.db
5+
has_session: true
6+
shard_message: msg_d7017fcb3001LiakxpA4i9035d
7+
global_message: missing
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
scenario: non-sharded session uses global db
2+
session: ses_28fe7fab6ffe3pLjdcVLbae5Ep
3+
message: msg_d70180590001htBh50qwLLxKsV
4+
shard_file: false
5+
has_session: false
6+
global_message: msg_d70180590001htBh50qwLLxKsV
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
scenario: todo write-read consistency
2+
session: ses_28fe7fbadffe75ofpPfNjo7ojK
3+
todos: [{"content":"one","status":"pending","priority":"high"},{"content":"two","status":"completed","priority":"low"}]
4+
shard_rows: 2
5+
global_rows: 0
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
scenario: sharded message write-read consistency
2+
session: ses_28fe7fc7dffePcur1VHhvhBqM6
3+
message: msg_d701803ee001wRuPy1e2yvTBPo
4+
parts: 1
5+
read_text: immediate shard read
6+
shard_message: msg_d701803ee001wRuPy1e2yvTBPo
7+
global_message: missing

.sisyphus/evidence/task-5-load-test-global.txt

Lines changed: 69 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
scenario: sharded
2+
workers: 20
3+
writes: 1220
4+
duration_ms: 1045
5+
throughput_per_s: 1167.46
6+
global_stats: {"count":220,"min":0.679,"p50":2.866,"p95":79.992,"p99":133.092,"max":340.309}
7+
shard_stats: {"count":1000,"min":0.633,"p50":1.238,"p95":8.65,"p99":12.789,"max":16.42}
8+
wal_max_bytes: 1643912
9+
wal_files: [{"file":"/tmp/opencode-test-q7h9qofm7ra/sharded.db-wal","size":1643912},{"file":"/tmp/opencode-test-q7h9qofm7ra/data/opencode/sessions/ses_28fe7e0c1ffekpynd35GKiQGyK.db-wal","size":1569752},{"file":"/tmp/opencode-test-q7h9qofm7ra/data/opencode/sessions/ses_28fe7e17bffeAi2rzQiwGhckcL.db-wal","size":1569752},{"file":"/tmp/opencode-test-q7h9qofm7ra/data/opencode/sessions/ses_28fe7e0b6ffeX7imHsz2UlJZMn.db-wal","size":1569752},{"file":"/tmp/opencode-test-q7h9qofm7ra/data/opencode/sessions/ses_28fe7e0bbffeXwiRWR4vVvSkIN.db-wal","size":1569752},{"file":"/tmp/opencode-test-q7h9qofm7ra/data/opencode/sessions/ses_28fe7e170ffeMxw54FQz7hbw8e.db-wal","size":1569752},{"file":"/tmp/opencode-test-q7h9qofm7ra/data/opencode/sessions/ses_28fe7e008ffeRqjCcc0aTRk5EF.db-wal","size":1569752},{"file":"/tmp/opencode-test-q7h9qofm7ra/data/opencode/sessions/ses_28fe7e12affedMTx6KTyu54rtt.db-wal","size":1569752},{"file":"/tmp/opencode-test-q7h9qofm7ra/data/opencode/sessions/ses_28fe7e065ffeAa9OATHD0jPF0m.db-wal","size":1569752},{"file":"/tmp/opencode-test-q7h9qofm7ra/data/opencode/sessions/ses_28fe7e0beffeO6eQd9VTTkUut7.db-wal","size":1569752}]
10+
worker_0_exit: 0
11+
worker_0_stdout: {"idx":0,"mode":"sharded","session":"ses_28fe7e12affedMTx6KTyu54rtt","started":1775702122197,"ended":1775702122952,"global":[6.253,3.84,8.414,1.231,1.157,0.967,1.029,80.652,2.53,54.851,4.341],"shard":[3.036,1.315,1.642,1.522,1.653,1.446,1.387,8.528,1.038,1.068,1.021,0.998,1.032,1.194,9.816,2.119,2.175,1.511,1.139,1.062,12.767,1.086,0.975,1.143,1.173,1.066,1.142,12.156,0.788,0.911,0.815,0.899,0.821,1.06,1.075,1.299,1.175,1.098,1.19,1.081,1.119,1.174,1.164,1.141,8.271,1.222,1.252,1.189,1.337,1.435],"errors":[],"counts":{"created":1,"updated":10,"messages":50,"parts":50}}
12+
worker_0_stderr:
13+
worker_1_exit: 0
14+
worker_1_stdout: {"idx":1,"mode":"sharded","session":"ses_28fe7e170ffeMxw54FQz7hbw8e","started":1775702122127,"ended":1775702122851,"global":[8.658,3.188,7.402,1.197,1.146,1.116,1.182,1.158,1.122,4.614,20.107],"shard":[3.009,1.401,1.418,1.217,1.224,1.186,1.078,1.114,8.539,1.162,1.056,0.968,1.081,1.361,9.484,1.787,1.873,1.318,1.023,1.24,1.249,1.126,12.829,1.268,1.202,1.074,1.12,1.134,12.15,1.126,0.78,0.974,0.916,1.033,1.035,9.017,0.892,1.082,1.073,7.381,0.754,0.708,0.673,1.045,5.191,1.128,8.991,1.317,1.382,1.358],"errors":[],"counts":{"created":1,"updated":10,"messages":50,"parts":50}}
15+
worker_1_stderr:
16+
worker_2_exit: 0
17+
worker_2_stdout: {"idx":2,"mode":"sharded","session":"ses_28fe7e0beffeO6eQd9VTTkUut7","started":1775702122305,"ended":1775702123088,"global":[12.81,10.959,9.345,79.992,0.894,0.911,0.716,1.832,0.764,1.853,1.865],"shard":[4.453,1.893,2.588,1.811,2.372,1.635,1.922,1.45,1.438,1.195,1.337,1.509,1.739,1.753,1.764,2.101,1.987,1.317,0.895,0.904,0.907,0.811,0.784,0.772,0.84,0.832,1.097,0.868,0.742,0.86,0.924,0.782,0.808,0.828,0.988,1.022,0.766,0.857,1.147,0.935,0.689,0.689,0.82,0.747,0.755,0.735,0.749,0.726,0.866,0.933],"errors":[],"counts":{"created":1,"updated":10,"messages":50,"parts":50}}
18+
worker_2_stderr:
19+
worker_3_exit: 0
20+
worker_3_stdout: {"idx":3,"mode":"sharded","session":"ses_28fe7e18bffe39tZVuzUxEigHP","started":1775702122100,"ended":1775702123072,"global":[8.23,6.638,1.313,80.461,6.066,10.693,2.316,130.171,4.256,1.95,0.843],"shard":[2.709,1.239,1.56,1.349,1.429,1.448,1.142,1.406,1.565,1.528,1.602,12.818,1.437,1.579,1.51,1.677,13.119,1.614,1.286,1.327,1.346,1.28,1.296,1.259,1.302,1.446,1.231,1.208,1.229,1.271,7.597,1.282,1.249,1.333,1.283,1.366,1.17,1.293,9.141,1.026,1.06,1.171,1.39,1.273,8.932,1.06,1.274,1.956,1.457,1.505],"errors":[],"counts":{"created":1,"updated":10,"messages":50,"parts":50}}
21+
worker_3_stderr:
22+
worker_4_exit: 0
23+
worker_4_stdout: {"idx":4,"mode":"sharded","session":"ses_28fe7e0f8ffezTOnlsIYP54EZr","started":1775702122247,"ended":1775702122967,"global":[5.629,4.214,9.844,4.578,4.782,1.458,1.172,0.91,0.907,1.018,9.88],"shard":[3.649,1.586,1.988,9.814,1.634,1.76,1.471,4.793,1.493,1.485,1.601,1.412,1.398,1.671,1.524,1.871,2.057,1.512,1.178,1.155,1.197,4.067,1.274,1.064,5.538,1.141,1.004,1.263,1.091,1.094,8.75,1.316,1.005,5.226,1.099,1.219,0.984,0.939,1.09,0.92,1.014,1.114,0.974,1.055,1.042,1.002,1.046,1.102,1.173,1.277],"errors":[],"counts":{"created":1,"updated":10,"messages":50,"parts":50}}
24+
worker_4_stderr:
25+
worker_5_exit: 0
26+
worker_5_stdout: {"idx":5,"mode":"sharded","session":"ses_28fe7e065ffeAa9OATHD0jPF0m","started":1775702122394,"ended":1775702123086,"global":[6.231,131.978,2.431,1.219,1.068,2.325,1.136,34.679,79.888,1.995,0.746],"shard":[2.64,1.303,1.504,1.357,1.429,1.355,1.123,1.597,1.627,1.672,1.713,13.078,1.269,1.487,1.524,13.073,1.963,1.387,1.104,1.136,1.181,1.134,1.014,0.985,1.411,1.172,1.176,1.053,1.207,1.326,8.523,1.402,1.454,1.521,1.503,1.526,1.14,1.006,9.244,0.895,0.919,1.047,1.128,8.315,1.153,1.138,1.238,1.187,2.229,1.493],"errors":[],"counts":{"created":1,"updated":10,"messages":50,"parts":50}}
27+
worker_5_stderr:
28+
worker_6_exit: 0
29+
worker_6_stdout: {"idx":6,"mode":"sharded","session":"ses_28fe7e110ffeQOxtLoPhU2aLvz","started":1775702122223,"ended":1775702122996,"global":[5.456,12.15,1.567,4.394,2.021,54.755,0.881,0.779,0.712,1.903,0.737],"shard":[4.087,9.582,1.862,1.873,1.852,1.839,1.616,1.625,1.638,1.622,1.367,1.298,8.72,1.809,1.488,1.598,5.408,1.6,1.352,1.268,1.295,1.258,1.181,1.219,1.261,1.424,1.176,1.107,1.21,1.282,1.149,4.594,1.329,1.24,1.268,5.344,1.11,1.092,1.238,1.133,1.091,7.714,1.257,1.132,1.059,4.264,1.687,1.052,1.572,1.229],"errors":[],"counts":{"created":1,"updated":10,"messages":50,"parts":50}}
30+
worker_6_stderr:
31+
worker_7_exit: 0
32+
worker_7_stdout: {"idx":7,"mode":"sharded","session":"ses_28fe7e130ffeoQs7PI9eJv0jrd","started":1775702122191,"ended":1775702123093,"global":[340.309,11.751,9.868,4.286,4.379,130.308,1.093,1.076,0.916,0.961,0.939],"shard":[3.748,2.392,10.1,1.747,1.65,1.344,1.21,1.468,1.279,1.478,1.48,1.526,1.57,9.277,1.665,2.104,2.093,3.724,1.198,1.228,1.226,5.506,1.193,1.166,1.227,1.131,1.123,0.983,0.937,1.179,0.837,0.781,0.815,0.936,0.952,1.308,1.237,1.235,3.799,0.986,1.059,1.14,1.252,1.896,1.216,1.165,1.301,1.196,1.38,1.389],"errors":[],"counts":{"created":1,"updated":10,"messages":50,"parts":50}}
33+
worker_7_stderr:
34+
worker_8_exit: 0
35+
worker_8_stdout: {"idx":8,"mode":"sharded","session":"ses_28fe7e17bffeAi2rzQiwGhckcL","started":1775702122117,"ended":1775702123139,"global":[6.78,5.895,9.819,1.267,4.85,333.502,4.493,4.199,0.845,0.841,0.798],"shard":[2.749,1.347,8.176,1.224,1.126,1.152,0.945,16.42,1.134,1.086,1.006,1.183,1.169,1.39,1.393,1.928,1.871,8.691,0.874,0.867,0.822,1.149,1.117,10.425,1.549,1.111,1.015,1.413,1.267,1.304,1.291,12.789,1.192,1.099,1.093,1.187,0.96,1.028,11.861,0.859,0.912,0.876,0.977,0.899,1.113,0.957,1.311,1.264,1.353,1.404],"errors":[],"counts":{"created":1,"updated":10,"messages":50,"parts":50}}
36+
worker_8_stderr:
37+
worker_9_exit: 0
38+
worker_9_stdout: {"idx":9,"mode":"sharded","session":"ses_28fe7e0c5fferB6MjG476Ppt5l","started":1775702122299,"ended":1775702123145,"global":[6.252,3.806,0.903,4.419,0.85,0.708,0.71,0.699,0.74,0.848,0.717],"shard":[2.905,1.595,1.927,1.449,1.177,1.175,0.931,1.186,1.059,1.135,1.088,1.04,1.09,1.752,1.537,1.783,1.571,1.158,0.971,0.847,0.809,0.863,0.793,0.763,0.82,0.791,0.88,0.958,1.006,1.165,1.144,0.902,0.779,0.788,0.743,0.952,0.727,0.721,0.694,0.775,0.688,0.656,0.714,0.742,0.82,0.817,0.72,0.743,0.839,0.889],"errors":[],"counts":{"created":1,"updated":10,"messages":50,"parts":50}}
39+
worker_9_stderr:
40+
worker_10_exit: 0
41+
worker_10_stdout: {"idx":10,"mode":"sharded","session":"ses_28fe7e17fffeJ6sZpxvKQuokUG","started":1775702122112,"ended":1775702123070,"global":[15.477,62.357,1.191,2.048,0.859,19.369,0.915,4.181,7.728,1.921,4.127],"shard":[6.02,1.504,1.808,9.442,1.935,5.061,1.626,1.531,1.411,1.501,1.421,1.697,1.587,1.766,1.726,2.978,2.158,1.596,1.229,1.165,1.027,1.087,1.194,1.23,1.343,1.068,0.953,0.963,0.919,0.957,1.008,0.906,0.873,1.324,0.944,1.181,0.966,0.904,1.205,0.911,0.916,0.828,0.9,1.033,0.784,0.633,0.771,0.854,1.153,1.257],"errors":[],"counts":{"created":1,"updated":10,"messages":50,"parts":50}}
42+
worker_10_stderr:
43+
worker_11_exit: 0
44+
worker_11_stdout: {"idx":11,"mode":"sharded","session":"ses_28fe7e186ffer42JuxyKl6SNEH","started":1775702122105,"ended":1775702123114,"global":[4.329,3.41,4.762,1.209,9.715,133.092,1.242,2.001,19.506,34.679,1.1],"shard":[3.451,1.763,9.299,2.049,2.46,9.502,1.272,1.674,1.553,1.754,1.505,1.59,1.575,1.774,1.431,1.617,9.733,1.399,0.985,0.917,1.018,0.923,4.233,1.258,1.252,1.172,1.143,1.032,0.966,1.053,0.998,1.032,0.973,0.842,0.975,1.235,1.771,1.175,1.122,1.083,4.514,1.1,1.198,5.566,1.233,1.164,1.24,1.197,1.278,9.165],"errors":[],"counts":{"created":1,"updated":10,"messages":50,"parts":50}}
45+
worker_11_stderr:
46+
worker_12_exit: 0
47+
worker_12_stdout: {"idx":12,"mode":"sharded","session":"ses_28fe7e0c1ffekpynd35GKiQGyK","started":1775702122302,"ended":1775702122945,"global":[4.734,15.523,4.623,35.125,4.63,2.184,4.287,0.849,2.244,1.161,1.221],"shard":[3.69,1.756,2.031,1.768,9.18,1.73,1.515,1.544,1.641,1.501,9.402,1.375,1.763,1.869,9.047,2.108,2.125,1.518,1.309,1.218,1.307,1.221,1.234,1.202,1.304,1.179,0.865,9.256,1.039,1.223,1.129,1.097,1.239,4.022,1.187,1.284,1.016,1.021,1.043,0.953,0.975,0.899,1.01,1.081,1.005,0.99,1.095,1.249,1.225,1.243],"errors":[],"counts":{"created":1,"updated":10,"messages":50,"parts":50}}
48+
worker_12_stderr:
49+
worker_13_exit: 0
50+
worker_13_stdout: {"idx":13,"mode":"sharded","session":"ses_28fe7e189ffeoRbvHYX3XGAmPW","started":1775702122102,"ended":1775702123131,"global":[5.344,57.147,1.154,105.951,1.242,0.785,0.737,1.862,0.679,0.704,0.686],"shard":[4.01,1.928,4.621,1.265,1.6,5.593,1.211,1.446,1.732,1.419,1.647,1.703,1.461,1.594,1.539,1.764,4.849,1.666,4.431,1.38,5.485,1.267,5.316,1.269,1.26,1.411,1.201,2.363,1.133,0.859,0.868,0.718,0.739,0.916,0.849,0.846,0.902,0.851,0.95,0.689,0.665,0.662,0.708,0.826,0.732,0.699,0.803,0.958,0.854,1.082],"errors":[],"counts":{"created":1,"updated":10,"messages":50,"parts":50}}
51+
worker_13_stderr:
52+
worker_14_exit: 0
53+
worker_14_stdout: {"idx":14,"mode":"sharded","session":"ses_28fe7e005ffe579dmqgLuINrET","started":1775702122490,"ended":1775702123102,"global":[18.924,2.33,105.16,9.624,0.808,19.845,1.142,1.082,0.888,0.954,0.932],"shard":[3.564,1.693,1.613,1.704,1.728,1.493,1.302,1.552,1.375,4.554,1.686,1.594,1.509,2.202,1.682,2.009,2.898,1.604,1.397,1.187,1.405,1.22,0.901,0.987,0.995,1.102,1.18,1.144,1.234,1.235,1.078,1.029,0.785,0.895,0.757,1.228,0.893,0.88,0.845,0.656,0.794,0.729,0.777,0.9,1.089,1.158,1.555,1.086,0.985,0.944],"errors":[],"counts":{"created":1,"updated":10,"messages":50,"parts":50}}
54+
worker_14_stderr:
55+
worker_15_exit: 0
56+
worker_15_stdout: {"idx":15,"mode":"sharded","session":"ses_28fe7e100ffe4iIdDf86OxOD6W","started":1775702122239,"ended":1775702123019,"global":[68.126,11.228,2.563,1.246,9.711,35.269,55.094,54.972,7.816,4.703,1.227],"shard":[4.307,1.732,1.973,13.71,1.738,1.64,1.451,12.048,1.445,1.34,1.525,1.297,1.749,1.736,1.587,1.653,1.675,1.405,0.94,1.011,8.547,1.018,0.878,1.109,1.165,1.161,1.068,1.116,1.149,1.196,8.923,1.001,1.003,1.185,1.129,1.262,8.378,0.967,0.997,1.027,1.038,1.097,1.076,1.081,1.255,1.167,1.226,1.205,1.389,1.342],"errors":[],"counts":{"created":1,"updated":10,"messages":50,"parts":50}}
57+
worker_15_stderr:
58+
worker_16_exit: 0
59+
worker_16_stdout: {"idx":16,"mode":"sharded","session":"ses_28fe7e0bbffeXwiRWR4vVvSkIN","started":1775702122308,"ended":1775702123068,"global":[5.356,57.043,1.287,9.543,34.206,0.831,0.843,0.756,4.035,4.162,9.496],"shard":[3.132,1.511,1.94,9.543,1.86,1.691,1.414,1.418,1.117,3.551,1.086,1.274,5.576,2.054,1.777,1.838,8.65,1.664,5.392,1.215,1.148,1.062,1.195,1.118,1.614,1.276,1.022,1.033,1.019,1.064,1.037,1.025,0.945,1.187,1.019,1.106,1.719,1.065,0.966,0.923,0.909,0.859,0.944,0.964,1.041,0.97,1.042,1.091,1.146,1.207],"errors":[],"counts":{"created":1,"updated":10,"messages":50,"parts":50}}
60+
worker_16_stderr:
61+
worker_17_exit: 0
62+
worker_17_stdout: {"idx":17,"mode":"sharded","session":"ses_28fe7e0b6ffeX7imHsz2UlJZMn","started":1775702122313,"ended":1775702123060,"global":[10.355,58.118,2.546,1.138,105.295,2.175,0.891,19.489,0.835,4.134,1.958],"shard":[3.751,1.84,2.041,1.827,1.794,1.703,1.425,1.669,1.722,7.623,1.589,1.454,1.541,1.82,1.693,9.247,2.222,1.633,1.32,1.216,8.363,0.979,1.133,1.202,0.987,1.319,0.978,1.287,1.218,1.328,1.03,0.996,0.938,1.255,1.14,9.365,0.818,0.894,0.884,1.046,0.999,1.001,4.016,0.998,1.033,1.016,1.256,1.027,0.969,1.067],"errors":[],"counts":{"created":1,"updated":10,"messages":50,"parts":50}}
63+
worker_17_stderr:
64+
worker_18_exit: 0
65+
worker_18_stdout: {"idx":18,"mode":"sharded","session":"ses_28fe7e0f5ffe8EBJfCMsrNeewm","started":1775702122250,"ended":1775702122910,"global":[9.204,23.531,1.386,1.13,1.202,3.868,1.098,0.996,9.39,11.702,7.346],"shard":[3.677,1.724,1.966,13.707,1.776,1.623,1.451,12.203,1.984,1.955,1.868,1.797,1.619,1.664,1.345,1.463,1.809,1.936,1.49,7.665,1.601,1.478,0.932,0.847,1.317,1.439,1.113,9.318,1.241,1.264,1.476,1.236,8.862,1.252,1.14,1.289,1.1,1.123,1.143,0.991,0.904,1.056,1.136,1.078,1.211,1.134,1.253,9.487,1.398,1.44],"errors":[],"counts":{"created":1,"updated":10,"messages":50,"parts":50}}
66+
worker_18_stderr:
67+
worker_19_exit: 0
68+
worker_19_stdout: {"idx":19,"mode":"sharded","session":"ses_28fe7e008ffeRqjCcc0aTRk5EF","started":1775702122487,"ended":1775702122998,"global":[5.593,2.723,7.672,1.525,1.356,10.633,35.155,9.864,2.866,1.099,79.919],"shard":[2.657,1.181,1.433,1.212,1.295,1.612,1.462,1.742,1.375,1.516,1.592,13.339,1.338,1.461,1.503,12.978,1.915,1.437,1.256,1.295,9.784,1.093,0.92,0.788,7.837,1.186,1.17,5.063,1.099,1.367,8.865,1.055,1.215,1.247,0.977,1.143,8.568,1.107,1.181,1.023,0.793,0.889,1.078,1.177,3.861,0.905,1.932,1.074,1.41,8.41],"errors":[],"counts":{"created":1,"updated":10,"messages":50,"parts":50}}
69+
worker_19_stderr:

0 commit comments

Comments
 (0)