|
1 | 1 | window.BENCHMARK_DATA = { |
2 | | - "lastUpdate": 1778070283407, |
| 2 | + "lastUpdate": 1778492611891, |
3 | 3 | "repoUrl": "https://github.com/aiidateam/aiida-core", |
4 | 4 | "xAxis": "id", |
5 | 5 | "oneChartGroups": [], |
@@ -115138,6 +115138,205 @@ window.BENCHMARK_DATA = { |
115138 | 115138 | "extra": "mean: 42.426 msec\nrounds: 100" |
115139 | 115139 | } |
115140 | 115140 | ] |
| 115141 | + }, |
| 115142 | + { |
| 115143 | + "cpu": { |
| 115144 | + "speed": "0.00", |
| 115145 | + "cores": 4, |
| 115146 | + "physicalCores": 2, |
| 115147 | + "processors": 1 |
| 115148 | + }, |
| 115149 | + "extra": { |
| 115150 | + "pythonVersion": "3.10.20", |
| 115151 | + "metadata": "postgres:12.14, rabbitmq:3.8.14-management" |
| 115152 | + }, |
| 115153 | + "commit": { |
| 115154 | + "id": "2068a7d73142006c6729d3fbcfb12d9c65f48d65", |
| 115155 | + "message": "🐛 `aiida_localhost`: suffix label with worker id (#7363)\n\nFixes the `UNIQUE constraint failed: db_dbcomputer.label` flake seen on\n`tests-presto` and other CI jobs (#7347, Category 1). The\n`aiida_localhost` fixture's row and a literal-`'localhost'` row created\nby another code path (notably `verdi presto`) ended up in the same\nprofile, and one of two adjacent statements in the fixture's\nget-or-create — the four-field `Computer.collection.get` followed by\n`Computer(...).store()` — saw inconsistent state and tripped the\nUNIQUE constraint on `Computer.label`. Tracing didn't pin the exact\nwithin-worker mechanism (likely either SQLite/fsync timing on busy CI\nrunners or a SQLAlchemy session-cache stale read at the `_clear()` +\n`reset_profile()` + lazy-reinit boundary used by `aiida_profile_clean`).\n\nFix: suffix the fixture's label with the pytest-xdist worker id\n(`localhost-gw0`, ..., or `localhost-master` outside xdist). The fixture\nrow and any literal-label row coexist under different names, so UNIQUE\ncannot fire regardless of the timing or cache state. The literal\n`'localhost'` label remains the production contract for `verdi presto`\nand is untouched. `'master'` matches xdist's own `worker_id` fixture\nconvention.\n\nEight tests asserted against the literal `'localhost'` form and broke;\nthey are parameterized on `aiida_localhost.label` so the comparison is\nexact and stable across workers. `test_code.py`'s\n`_normalize_code_show_output` strips the worker-id suffix from the\nfixture's label before the hostname substitution (the suffixed label\ncontains the hostname as a substring), so the four affected golden files\nkeep the user-facing literal `localhost`. The three graphviz tests in\n`test_graph.py` build their expected strings off `self.computer.label`.\n\nAudit other test sites that bypassed the fixture and created or loaded a\nliteral-`'localhost'` Computer directly, switching them to depend on\n`aiida_localhost`: `tests/calculations/test_stash.py`,\n`tests/orm/nodes/data/test_remote.py`'s factory, and the `TestNode`\nclass in `tests/orm/nodes/test_node.py` (`setup_method` becomes a pytest\nautouse fixture). Literal-`'localhost'` sites in `test_presto.py` and\nthe fixture's own non-collision regression test are intentional.\nProduction code paths that own the literal-`'localhost'` contract\n(`verdi presto`, `prepare_localhost`, `stash`/`unstash`) are\ndeliberately untouched.\n\nDrive-by: document `aiida_computer`'s `IntegrityError` recovery — why\ncatch-and-retry-`get()` rather than loop-with-backoff, why a defensive\n`NotExistent` fallback is kept, and why a user-space lock or `INSERT ...\nON CONFLICT` would not be a better fit here.\n\nAddresses Category 1 of #7347 only. Category 2 (worker crashes from\n`reset_storage()` mid-test) needs per-worker profile isolation, not a\nlabel fix, and is left for follow-up.", |
| 115156 | + "timestamp": "2026-05-11T11:32:22+02:00", |
| 115157 | + "url": "https://github.com/aiidateam/aiida-core/commit/2068a7d73142006c6729d3fbcfb12d9c65f48d65", |
| 115158 | + "distinct": true, |
| 115159 | + "tree_id": "bd1ae561c963ae756c3ab9846ff4ed87c470e45b" |
| 115160 | + }, |
| 115161 | + "date": 1778492604876, |
| 115162 | + "benches": [ |
| 115163 | + { |
| 115164 | + "name": "tests/benchmark/test_archive.py::test_export[no-objects]", |
| 115165 | + "value": 2.003804784114016, |
| 115166 | + "unit": "iter/sec", |
| 115167 | + "range": "stddev: 0.078419", |
| 115168 | + "group": "import-export", |
| 115169 | + "extra": "mean: 499.05 msec\nrounds: 12" |
| 115170 | + }, |
| 115171 | + { |
| 115172 | + "name": "tests/benchmark/test_archive.py::test_export[with-objects]", |
| 115173 | + "value": 1.9868824273688597, |
| 115174 | + "unit": "iter/sec", |
| 115175 | + "range": "stddev: 0.085793", |
| 115176 | + "group": "import-export", |
| 115177 | + "extra": "mean: 503.30 msec\nrounds: 12" |
| 115178 | + }, |
| 115179 | + { |
| 115180 | + "name": "tests/benchmark/test_archive.py::test_import[no-objects]", |
| 115181 | + "value": 2.3823716836098203, |
| 115182 | + "unit": "iter/sec", |
| 115183 | + "range": "stddev: 0.12063", |
| 115184 | + "group": "import-export", |
| 115185 | + "extra": "mean: 419.75 msec\nrounds: 12" |
| 115186 | + }, |
| 115187 | + { |
| 115188 | + "name": "tests/benchmark/test_archive.py::test_import[with-objects]", |
| 115189 | + "value": 2.2963078497156335, |
| 115190 | + "unit": "iter/sec", |
| 115191 | + "range": "stddev: 0.14391", |
| 115192 | + "group": "import-export", |
| 115193 | + "extra": "mean: 435.48 msec\nrounds: 12" |
| 115194 | + }, |
| 115195 | + { |
| 115196 | + "name": "tests/benchmark/test_archive.py::test_large_archive_export_benchmark", |
| 115197 | + "value": 0.5756396747628023, |
| 115198 | + "unit": "iter/sec", |
| 115199 | + "range": "stddev: 0.17760", |
| 115200 | + "group": "large-archive", |
| 115201 | + "extra": "mean: 1.7372 sec\nrounds: 3" |
| 115202 | + }, |
| 115203 | + { |
| 115204 | + "name": "tests/benchmark/test_archive.py::test_large_archive_import_benchmark", |
| 115205 | + "value": 0.17142676477463203, |
| 115206 | + "unit": "iter/sec", |
| 115207 | + "range": "stddev: 0.15592", |
| 115208 | + "group": "large-archive", |
| 115209 | + "extra": "mean: 5.8334 sec\nrounds: 5" |
| 115210 | + }, |
| 115211 | + { |
| 115212 | + "name": "tests/benchmark/test_engine.py::test_workchain_local[basic-loop]", |
| 115213 | + "value": 2.57040959856605, |
| 115214 | + "unit": "iter/sec", |
| 115215 | + "range": "stddev: 0.014324", |
| 115216 | + "group": "engine", |
| 115217 | + "extra": "mean: 389.04 msec\nrounds: 10" |
| 115218 | + }, |
| 115219 | + { |
| 115220 | + "name": "tests/benchmark/test_engine.py::test_workchain_local[serial-wc-loop]", |
| 115221 | + "value": 0.5591561610429097, |
| 115222 | + "unit": "iter/sec", |
| 115223 | + "range": "stddev: 0.033906", |
| 115224 | + "group": "engine", |
| 115225 | + "extra": "mean: 1.7884 sec\nrounds: 10" |
| 115226 | + }, |
| 115227 | + { |
| 115228 | + "name": "tests/benchmark/test_engine.py::test_workchain_local[threaded-wc-loop]", |
| 115229 | + "value": 0.6198718112755931, |
| 115230 | + "unit": "iter/sec", |
| 115231 | + "range": "stddev: 0.12359", |
| 115232 | + "group": "engine", |
| 115233 | + "extra": "mean: 1.6132 sec\nrounds: 10" |
| 115234 | + }, |
| 115235 | + { |
| 115236 | + "name": "tests/benchmark/test_engine.py::test_workchain_local[serial-calcjob-loop]", |
| 115237 | + "value": 0.14705223084271063, |
| 115238 | + "unit": "iter/sec", |
| 115239 | + "range": "stddev: 0.24764", |
| 115240 | + "group": "engine", |
| 115241 | + "extra": "mean: 6.8003 sec\nrounds: 10" |
| 115242 | + }, |
| 115243 | + { |
| 115244 | + "name": "tests/benchmark/test_engine.py::test_workchain_local[threaded-calcjob-loop]", |
| 115245 | + "value": 0.16592804997644936, |
| 115246 | + "unit": "iter/sec", |
| 115247 | + "range": "stddev: 0.22288", |
| 115248 | + "group": "engine", |
| 115249 | + "extra": "mean: 6.0267 sec\nrounds: 10" |
| 115250 | + }, |
| 115251 | + { |
| 115252 | + "name": "tests/benchmark/test_engine.py::test_workchain_daemon[basic-loop]", |
| 115253 | + "value": 1.663195252189078, |
| 115254 | + "unit": "iter/sec", |
| 115255 | + "range": "stddev: 0.010536", |
| 115256 | + "group": "engine", |
| 115257 | + "extra": "mean: 601.25 msec\nrounds: 10" |
| 115258 | + }, |
| 115259 | + { |
| 115260 | + "name": "tests/benchmark/test_engine.py::test_workchain_daemon[serial-wc-loop]", |
| 115261 | + "value": 0.4072625614305075, |
| 115262 | + "unit": "iter/sec", |
| 115263 | + "range": "stddev: 0.078164", |
| 115264 | + "group": "engine", |
| 115265 | + "extra": "mean: 2.4554 sec\nrounds: 10" |
| 115266 | + }, |
| 115267 | + { |
| 115268 | + "name": "tests/benchmark/test_engine.py::test_workchain_daemon[threaded-wc-loop]", |
| 115269 | + "value": 0.445758616545739, |
| 115270 | + "unit": "iter/sec", |
| 115271 | + "range": "stddev: 0.079148", |
| 115272 | + "group": "engine", |
| 115273 | + "extra": "mean: 2.2434 sec\nrounds: 10" |
| 115274 | + }, |
| 115275 | + { |
| 115276 | + "name": "tests/benchmark/test_engine.py::test_workchain_daemon[serial-calcjob-loop]", |
| 115277 | + "value": 0.1297579687704631, |
| 115278 | + "unit": "iter/sec", |
| 115279 | + "range": "stddev: 0.056981", |
| 115280 | + "group": "engine", |
| 115281 | + "extra": "mean: 7.7067 sec\nrounds: 10" |
| 115282 | + }, |
| 115283 | + { |
| 115284 | + "name": "tests/benchmark/test_engine.py::test_workchain_daemon[threaded-calcjob-loop]", |
| 115285 | + "value": 0.14142127575266486, |
| 115286 | + "unit": "iter/sec", |
| 115287 | + "range": "stddev: 0.059596", |
| 115288 | + "group": "engine", |
| 115289 | + "extra": "mean: 7.0711 sec\nrounds: 10" |
| 115290 | + }, |
| 115291 | + { |
| 115292 | + "name": "tests/benchmark/test_nodes.py::test_store_backend", |
| 115293 | + "value": 443.1065663225921, |
| 115294 | + "unit": "iter/sec", |
| 115295 | + "range": "stddev: 0.00015544", |
| 115296 | + "group": "node", |
| 115297 | + "extra": "mean: 2.2568 msec\nrounds: 249" |
| 115298 | + }, |
| 115299 | + { |
| 115300 | + "name": "tests/benchmark/test_nodes.py::test_store", |
| 115301 | + "value": 29.092952799958784, |
| 115302 | + "unit": "iter/sec", |
| 115303 | + "range": "stddev: 0.00075371", |
| 115304 | + "group": "node", |
| 115305 | + "extra": "mean: 34.373 msec\nrounds: 100" |
| 115306 | + }, |
| 115307 | + { |
| 115308 | + "name": "tests/benchmark/test_nodes.py::test_store_with_object", |
| 115309 | + "value": 21.582385977866938, |
| 115310 | + "unit": "iter/sec", |
| 115311 | + "range": "stddev: 0.00090774", |
| 115312 | + "group": "node", |
| 115313 | + "extra": "mean: 46.334 msec\nrounds: 100" |
| 115314 | + }, |
| 115315 | + { |
| 115316 | + "name": "tests/benchmark/test_nodes.py::test_delete_backend", |
| 115317 | + "value": 261.0763474468789, |
| 115318 | + "unit": "iter/sec", |
| 115319 | + "range": "stddev: 0.00053204", |
| 115320 | + "group": "node", |
| 115321 | + "extra": "mean: 3.8303 msec\nrounds: 100" |
| 115322 | + }, |
| 115323 | + { |
| 115324 | + "name": "tests/benchmark/test_nodes.py::test_delete", |
| 115325 | + "value": 24.758114962269012, |
| 115326 | + "unit": "iter/sec", |
| 115327 | + "range": "stddev: 0.0013963", |
| 115328 | + "group": "node", |
| 115329 | + "extra": "mean: 40.391 msec\nrounds: 100" |
| 115330 | + }, |
| 115331 | + { |
| 115332 | + "name": "tests/benchmark/test_nodes.py::test_delete_with_object", |
| 115333 | + "value": 23.02167934139213, |
| 115334 | + "unit": "iter/sec", |
| 115335 | + "range": "stddev: 0.039370", |
| 115336 | + "group": "node", |
| 115337 | + "extra": "mean: 43.437 msec\nrounds: 100" |
| 115338 | + } |
| 115339 | + ] |
115141 | 115340 | } |
115142 | 115341 | ] |
115143 | 115342 | } |
|
0 commit comments