{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":744499317,"defaultBranch":"main","name":"tigerbeetle-history-archive","ownerLogin":"tigerbeetle","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2024-01-17T12:30:17.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/112812516?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1705495577.0","currentOid":""},"activityList":{"items":[{"before":"31f0ccf21f9bb9d16341e5681e44a27f9282ccb6","after":"80bd0652ffce303c762169f0a8f2258ce26b7887","ref":"refs/heads/main","pushedAt":"2024-01-17T12:49:24.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"matklad","name":"Alex Kladov","path":"/matklad","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1711539?s=80&v=4"},"commit":{"message":"explain why this repository exists","shortMessageHtmlLink":"explain why this repository exists"}},{"before":"807794a89b16193a2d90c8134220ad06cc3b6427","after":null,"ref":"refs/heads/dependabot/npm_and_yarn/src/docs_website/axios-and-docusaurus/core-and-docusaurus/preset-classic-and-docusaurus/theme-mermaid--removed","pushedAt":"2024-01-17T12:46:17.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"dependabot[bot]","name":null,"path":"/apps/dependabot","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/29110?s=80&v=4"}},{"before":"d6451db5706a8d4fd3528d14d07c3bc36d333aaf","after":null,"ref":"refs/heads/dependabot/npm_and_yarn/src/docs_website/follow-redirects-1.15.5","pushedAt":"2024-01-17T12:46:10.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"dependabot[bot]","name":null,"path":"/apps/dependabot","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/29110?s=80&v=4"}},{"before":null,"after":"807794a89b16193a2d90c8134220ad06cc3b6427","ref":"refs/heads/dependabot/npm_and_yarn/src/docs_website/axios-and-docusaurus/core-and-docusaurus/preset-classic-and-docusaurus/theme-mermaid--removed","pushedAt":"2024-01-17T12:34:40.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"dependabot[bot]","name":null,"path":"/apps/dependabot","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/29110?s=80&v=4"},"commit":{"message":"build(deps): bump axios, @docusaurus/core, @docusaurus/preset-classic and @docusaurus/theme-mermaid\n\nRemoves [axios](https://github.com/axios/axios). It's no longer used after updating ancestor dependencies [axios](https://github.com/axios/axios), [@docusaurus/core](https://github.com/facebook/docusaurus/tree/HEAD/packages/docusaurus), [@docusaurus/preset-classic](https://github.com/facebook/docusaurus/tree/HEAD/packages/docusaurus-preset-classic) and [@docusaurus/theme-mermaid](https://github.com/facebook/docusaurus/tree/HEAD/packages/docusaurus-theme-mermaid). These dependencies need to be updated together.\n\n\nRemoves `axios`\n\nUpdates `@docusaurus/core` from 2.4.3 to 3.1.0\n- [Release notes](https://github.com/facebook/docusaurus/releases)\n- [Changelog](https://github.com/facebook/docusaurus/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/facebook/docusaurus/commits/v3.1.0/packages/docusaurus)\n\nUpdates `@docusaurus/preset-classic` from 2.4.3 to 3.1.0\n- [Release notes](https://github.com/facebook/docusaurus/releases)\n- [Changelog](https://github.com/facebook/docusaurus/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/facebook/docusaurus/commits/v3.1.0/packages/docusaurus-preset-classic)\n\nUpdates `@docusaurus/theme-mermaid` from 2.4.3 to 3.1.0\n- [Release notes](https://github.com/facebook/docusaurus/releases)\n- [Changelog](https://github.com/facebook/docusaurus/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/facebook/docusaurus/commits/v3.1.0/packages/docusaurus-theme-mermaid)\n\n---\nupdated-dependencies:\n- dependency-name: axios\n dependency-type: indirect\n- dependency-name: \"@docusaurus/core\"\n dependency-type: direct:production\n- dependency-name: \"@docusaurus/preset-classic\"\n dependency-type: direct:production\n- dependency-name: \"@docusaurus/theme-mermaid\"\n dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] ","shortMessageHtmlLink":"build(deps): bump axios, @docusaurus/core, @docusaurus/preset-classic…"}},{"before":null,"after":"d6451db5706a8d4fd3528d14d07c3bc36d333aaf","ref":"refs/heads/dependabot/npm_and_yarn/src/docs_website/follow-redirects-1.15.5","pushedAt":"2024-01-17T12:32:51.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"dependabot[bot]","name":null,"path":"/apps/dependabot","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/29110?s=80&v=4"},"commit":{"message":"build(deps): bump follow-redirects in /src/docs_website\n\nBumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.3 to 1.15.5.\n- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)\n- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.3...v1.15.5)\n\n---\nupdated-dependencies:\n- dependency-name: follow-redirects\n dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] ","shortMessageHtmlLink":"build(deps): bump follow-redirects in /src/docs_website"}},{"before":null,"after":"006a6b17b88f5b40ceca52c814faa784282d7c31","ref":"refs/heads/king-unqueued-fairness","pushedAt":"2024-01-17T12:31:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"matklad","name":"Alex Kladov","path":"/matklad","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1711539?s=80&v=4"},"commit":{"message":"io: comment about unqueued scheduling\n\nNote on the scheduling flow of unqueued completions\nfor future maintainers.","shortMessageHtmlLink":"io: comment about unqueued scheduling"}},{"before":null,"after":"007698ddec1e8a4542bdf6227e993dc476569856","ref":"refs/heads/king-fsync","pushedAt":"2024-01-17T12:31:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"matklad","name":"Alex Kladov","path":"/matklad","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1711539?s=80&v=4"},"commit":{"message":"io: `fdatasync` instead of a full `fsync`","shortMessageHtmlLink":"io: fdatasync instead of a full fsync"}},{"before":null,"after":"00ac587d3de00e8f4d25230d334c688923554f5f","ref":"refs/heads/dj-vopr-output","pushedAt":"2024-01-17T12:31:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"matklad","name":"Alex Kladov","path":"/matklad","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1711539?s=80&v=4"},"commit":{"message":"wip","shortMessageHtmlLink":"wip"}},{"before":null,"after":"02a68865b5c8ed9b2245bbff3b91afb6b55cda3c","ref":"refs/heads/dj-vopr-workload-with-invisible-tables","pushedAt":"2024-01-17T12:31:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"matklad","name":"Alex Kladov","path":"/matklad","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1711539?s=80&v=4"},"commit":{"message":"LSM: Fix assertion in Manifest.remove_invisible_tables + reuse TableInfoBuffer\n\nThe assertions were overly tight and assumed the tables reported from the iterator intersected with the key range hint.\nInstead, the tables should only overlap as asserted elsewhere.\n\nThe function also implemented its own form of TableInfoBuffer() so went ahead and used the shared abstraction.","shortMessageHtmlLink":"LSM: Fix assertion in Manifest.remove_invisible_tables + reuse TableI…"}},{"before":null,"after":"02ad2bf454a0bae7c284df4d1715abdbbfeccf79","ref":"refs/heads/cb22-compaction-strategy","pushedAt":"2024-01-17T12:31:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"matklad","name":"Alex Kladov","path":"/matklad","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1711539?s=80&v=4"},"commit":{"message":"Switch to using pipelined writes, but since this doesn't actually submit the work to io_uring, it's not really...","shortMessageHtmlLink":"Switch to using pipelined writes, but since this doesn't actually sub…"}},{"before":null,"after":"034ded5b4d48fbbe0a6b0a8bf3098127874e9c19","ref":"refs/heads/java-build","pushedAt":"2024-01-17T12:31:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"matklad","name":"Alex Kladov","path":"/matklad","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1711539?s=80&v=4"},"commit":{"message":"Fix latent build error in Java client build\n\nWe renamed the options package from tigerbeetle_build_optioins to\nvsr_options, to follow the suite of std_options.\n\nAs zig is super lazy, and the java_binding.zig doesn't _actually_ use\noptions, the current code compiles, though it is quite wrong.","shortMessageHtmlLink":"Fix latent build error in Java client build"}},{"before":null,"after":"03fb22591450a01ae2c43d14eb352fb311ca0231","ref":"refs/heads/matklad/build-failed-succesfully","pushedAt":"2024-01-17T12:31:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"matklad","name":"Alex Kladov","path":"/matklad","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1711539?s=80&v=4"},"commit":{"message":"build: fix jni tests for Zig 0.11","shortMessageHtmlLink":"build: fix jni tests for Zig 0.11"}},{"before":null,"after":"053d36b39f39a88eae97ef3f0e157e76296f620c","ref":"refs/heads/dj-lookup-precedence","pushedAt":"2024-01-17T12:31:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"matklad","name":"Alex Kladov","path":"/matklad","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1711539?s=80&v=4"},"commit":{"message":"LSM/Manifest: Don't assert table precedence\n\nFixes https://github.com/tigerbeetledb/tigerbeetle/issues/240\n\nThis fixes a safety-check failure in the [manifest](https://github.com/tigerbeetledb/tigerbeetle/blob/a95201d8522605a932c472b806c2792ea4206c39/src/lsm/manifest.zig#L295) by removing the assertion:\n\n if (it.precedence) |p| assert(p > table.snapshot_min);\n\n(For context, during a point-lookup we first check level 0. If it misses, check level 1. (Then repeat down the tree until a key-hit or the bottom of the tree).)\nThis check verifies that we check level `A` then level `A+1`, then the table on level `A+1` must be older.\n\nBut a TableInfo's snapshot doesn't reflect the \"age\" of the values in the table (when the value was inserted into the tree) — tables are rewritten by compaction, and each rewrite increases the `snapshot_min`. Consider this example:\n\n 1. At level 0 we have 2 tables: `T₀` covers key `a`, and `T₁` covers key `b`.\n 2. At level 1 we have 1 table, covering keys `a` and `b`.\n 3. Compact `T₀` into level 1.\n 4. Now query key `b`. Assuming it doesn't exist in `T₁`, we query the new table on level-1. This violates the precedence rule, but I think is the correct behavior.\n\nMore generally, if `X.snapshot_min < Y.snapshot_min`, the updates in `X` are not necessarily older than the updates in `Y`.","shortMessageHtmlLink":"LSM/Manifest: Don't assert table precedence"}},{"before":null,"after":"0548d6061f1842c6efcceb9134525a6d590dcc62","ref":"refs/heads/dj-docs-integration-links","pushedAt":"2024-01-17T12:31:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"matklad","name":"Alex Kladov","path":"/matklad","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1711539?s=80&v=4"},"commit":{"message":"Docs: Remove header links","shortMessageHtmlLink":"Docs: Remove header links"}},{"before":null,"after":"0631f8b4d89c24880aa12251a4d2a1c8a5533639","ref":"refs/heads/manifest-remove-invisible-fix","pushedAt":"2024-01-17T12:31:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"matklad","name":"Alex Kladov","path":"/matklad","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1711539?s=80&v=4"},"commit":{"message":"LSM: Fix overly tight assertions on Manifest.remove_invisible_tables\n\nIt previously expected the invisible tables to intersect with the key range when they should only overlap instead.\n\nAlso took this opportunity to use TableInfoBuffer instead of having its implementation copied inline.","shortMessageHtmlLink":"LSM: Fix overly tight assertions on Manifest.remove_invisible_tables"}},{"before":null,"after":"06985bfea0a11e92ed5e3e8678e67d25b12e13b4","ref":"refs/heads/king-revert-next-tick","pushedAt":"2024-01-17T12:31:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"matklad","name":"Alex Kladov","path":"/matklad","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1711539?s=80&v=4"},"commit":{"message":"lsm: remove next_tick usage in Tree\n\nThis reverts changes done in #417 to make compaction and\nlookup asynchronous by using Grid.next_tick. This is implemented\nusing IO.timeout(0) for yielding, but `io/linux.zig` currently always\ncalls `io_uring_enter` on each IO loop iteration in `IO.run_for_ns`.\nDoing so added unnecessary syscalls which, along with other cache\neffects from delayed scheduling, made throughput suffer.\n\nConsider adding this back once #220 is resolved and prefer LIFO\nscheduling (maybe at the component call-sites this time) to avoid\nthe poor cache/scheduling effects.","shortMessageHtmlLink":"lsm: remove next_tick usage in Tree"}},{"before":null,"after":"06f7933d5ed883b468fdf9afbdd5688808ef6a5d","ref":"refs/heads/gh-readonly-queue/main/pr-845-5e176a4685bd9fce2322422e825034c8698f50d4","pushedAt":"2024-01-17T12:31:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"matklad","name":"Alex Kladov","path":"/matklad","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1711539?s=80&v=4"},"commit":{"message":"Merge pull request #845 from tigerbeetledb/batiati-context-union\n\nUse a union for holding prefetch contexts.","shortMessageHtmlLink":"Merge pull request #845 from tigerbeetledb/batiati-context-union"}},{"before":null,"after":"088fda0e166319b59857b6976ffe566e7b2c47e6","ref":"refs/heads/dj-free-set-flip","pushedAt":"2024-01-17T12:31:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"matklad","name":"Alex Kladov","path":"/matklad","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1711539?s=80&v=4"},"commit":{"message":"SuperBlock: Allocate FreeSet based on block limit\n\nUse the block count *limit* to compute the number of blocks in the FreeSet, instead of the block count *max*.\nThis means running TB with a lower `--limit-storage` also reduces its memory usage.\n(Though this is currently masked by the arena allocator's fragmentation).","shortMessageHtmlLink":"SuperBlock: Allocate FreeSet based on block limit"}},{"before":null,"after":"0937a776a750650f4bc5b03106deeb358b13a043","ref":"refs/heads/dj-remove-invisible-tables","pushedAt":"2024-01-17T12:31:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"matklad","name":"Alex Kladov","path":"/matklad","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1711539?s=80&v=4"},"commit":{"message":"LSM: Fix: Remove invisible tables promptly\n\nFix this crash:\n\n src/lsm/manifest.zig:327:23: 0x45d2be in lsm.manifest.ManifestType(lsm.table.TableType(u128,lsm.groove.IdTreeValue,lsm.groove.IdTreeValue.compare_keys,lsm.groove.IdTreeValue.key_from_value,554112867134706473364364839029663282043,lsm.groove.IdTreeValue.tombstone,lsm.groove.IdTreeValue.tombstone_from_key),test.storage.Storage).assert_no_invisible_tables (simulator)\n assert(it.next() == null);\n ^\n src/lsm/tree.zig:988:57: 0x436bff in lsm.tree.TreeType(lsm.table.TableType(u128,lsm.groove.IdTreeValue,lsm.groove.IdTreeValue.compare_keys,lsm.groove.IdTreeValue.key_from_value,554112867134706473364364839029663282043,lsm.groove.IdTreeValue.tombstone,lsm.groove.IdTreeValue.tombstone_from_key),test.storage.Storage,[]const u8{65,99,99,111,117,110,116,46,105,100}).checkpoint (simulator)\n tree.manifest.assert_no_invisible_tables(snapshot);\n ^\n src/lsm/groove.zig:956:34: 0x41764b in lsm.groove.GrooveType(test.storage.Storage,tigerbeetle.Account,(struct state_machine.struct:33:14 constant)).checkpoint (simulator)\n groove.ids.checkpoint(Join.tree_callback(.ids));\n ^\n\nIn other words, at checkpoint, there are invisible tables (which are supposed to have been cleaned up already).\n\nThe problem is twofold:\n\n1. We only remove invisible tables from level B after a compaction. Rather than waiting for them to be cleaned up by a future compaction, we can clean them up more efficiently if we do so immediately — we know their key range, so we don't have to iterate through the full manifest level. Also, from a \"compaction is deterministic\" point of view, it makes more sense to clean them up as soon as possible.\n\n2. `Tree.compact_done` calls `manifest.remove_invisible_tables()` with `compaction.snapshot`, instead of (the just-updated) `prefetch_snapshot_max` which is farther ahead.\n\nOther changes:\n\n- Fix the compaction snapshot diagram, which incorrectly depicted the `compaction.snapshot` during the `T₄ → T₅` compaction.\n- Add an additional assert to `Manifest.remove_invisible_tables()`. When `config.verify` is set, check that there are no invisible tables left. This may be too strong if we change how `remove_invisible_tables` is used, but for the current caller it should act as an earlier verification (so we don't have to wait until checkpoint if invisible tables are missed).\n- Clarify comments in `Tree.compact_done`. Saying that invisible tables are \"created\" during compaction is misleading — the tables already existed, we just modified their snapshot to make them invisible.","shortMessageHtmlLink":"LSM: Fix: Remove invisible tables promptly"}},{"before":null,"after":"0a888cbe58065f1b4540d9dcc8e3c0ff55e0371e","ref":"refs/heads/dj-lsm-fuzz-fixes","pushedAt":"2024-01-17T12:31:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"matklad","name":"Alex Kladov","path":"/matklad","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1711539?s=80&v=4"},"commit":{"message":"LSM: Make assertions more general.\n\nAnd improve docs.","shortMessageHtmlLink":"LSM: Make assertions more general."}},{"before":null,"after":"0d6dd7349009d62fd7185343da570334afcca088","ref":"refs/heads/dj-journal-slots","pushedAt":"2024-01-17T12:31:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"matklad","name":"Alex Kladov","path":"/matklad","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1711539?s=80&v=4"},"commit":{"message":"VOPR: Fix typo","shortMessageHtmlLink":"VOPR: Fix typo"}},{"before":null,"after":"0ee9ebbc6dc475d3f883767b212407ecfa9ae794","ref":"refs/heads/dj-vsr-recover-old-primary-head","pushedAt":"2024-01-17T12:31:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"matklad","name":"Alex Kladov","path":"/matklad","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1711539?s=80&v=4"},"commit":{"message":"VSR: Fix head after recovery from primary repair\n\nThis is a tricky one. A replica that crashes while it was starting a new view, after receiving a DVC quorum, but before persisting the SV, may have a \"new\" head op.\nIgnoring it is safe and the simplest solution.\nAn alternative would be to bump up the op_head, but that would confuse all of the DVC generation logic since our DVC would have changed from the durable one, which normally isn't allowed.","shortMessageHtmlLink":"VSR: Fix head after recovery from primary repair"}},{"before":null,"after":"105faa90d028d2f918578b7dc6f770c87e313373","ref":"refs/heads/dj-vsr-enumerate-send-command","pushedAt":"2024-01-17T12:31:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"matklad","name":"Alex Kladov","path":"/matklad","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1711539?s=80&v=4"},"commit":{"message":"VSR: send_message_to_replica: Enumerate commands\n\n`reply` is never sent to a replica.\n`block`/`request_block` aren't used yet.","shortMessageHtmlLink":"VSR: send_message_to_replica: Enumerate commands"}},{"before":null,"after":"109a8431de257c5a7ff633d0447dc213fd18311f","ref":"refs/heads/dj-vsr-repair-back","pushedAt":"2024-01-17T12:31:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"matklad","name":"Alex Kladov","path":"/matklad","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1711539?s=80&v=4"},"commit":{"message":"wip","shortMessageHtmlLink":"wip"}},{"before":null,"after":"10cfc11a5eb7c4d76e9cee165a9f4da9e926237b","ref":"refs/heads/dj-segmented-array-binsearch","pushedAt":"2024-01-17T12:31:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"matklad","name":"Alex Kladov","path":"/matklad","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1711539?s=80&v=4"},"commit":{"message":"LSM: SegmentedArray: Faster index → cursor\n\nUse binary search to compute the cursor from an absolute index.\nRemove the `SegmentedArray.iterator()` `start_node` optimization.\n\nThis change is orthogonal to the `SegmentedArray.search` commits.","shortMessageHtmlLink":"LSM: SegmentedArray: Faster index → cursor"}},{"before":null,"after":"129a1902c445c7e3139ee0faf5e43110ba43618d","ref":"refs/heads/dj-grid-size-max","pushedAt":"2024-01-17T12:31:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"matklad","name":"Alex Kladov","path":"/matklad","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1711539?s=80&v=4"},"commit":{"message":"Config: s/size_max/storage_size_max\n\nAlso s/size_limit/storage_size_limit.\n\n\"size\" is a too general on its own. This matches the typical schema (e.g. `{message,journal,…}_size_max`).","shortMessageHtmlLink":"Config: s/size_max/storage_size_max"}},{"before":null,"after":"14093ab93b8a67719be9a5e12aca1a68d96dfcb4","ref":"refs/heads/dj-cluster-register-race","pushedAt":"2024-01-17T12:31:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"matklad","name":"Alex Kladov","path":"/matklad","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1711539?s=80&v=4"},"commit":{"message":"Test/Cluster: Fix ping/register client race\n\nThe cluster needs to set `on_reply_{callback,context}` before it receives its first reply.\nNormally that reply is a result of calling `client.request()` the first time, which triggers `operation=register`.\nBut there's a race:\n\n1. Client ping (before the client sends any request).\n2. Client receives pong (still no requests from client)\n3. Client triggers `register()` (still no requests from client).\n4. Client receives `register`'s reply (still no requests from client).\n\nAs far as the client is concerned everything is fine, but the Simulator missed receiving it, so the `ReplySequencer` gets stuck and the test never finishes.\n\nThe client setup was always supposed to live in `init()`, but was moved (pending `@returnAddress()`) since `Cluster` used to be stack-allocated. (The context setup requires a stable pointer).\nBut `Cluster` is heap allocated right now (pending `@returnAddress()`), so it is safe to do the setup in `Cluster.init()`.","shortMessageHtmlLink":"Test/Cluster: Fix ping/register client race"}},{"before":null,"after":"1469c99052158fca6edfbf0cfc91814f8e51d5a7","ref":"refs/heads/king-fio-windows","pushedAt":"2024-01-17T12:31:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"matklad","name":"Alex Kladov","path":"/matklad","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1711539?s=80&v=4"},"commit":{"message":"IO: async fio on windows\n\nEnables `ReadFile` and `WriteFile` to use Overlapped IO instead of being\nsynchronous.","shortMessageHtmlLink":"IO: async fio on windows"}},{"before":null,"after":"14ff227bfcd370b1c8d0242745c54c8e9783ef1e","ref":"refs/heads/lsm-table-visibility","pushedAt":"2024-01-17T12:31:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"matklad","name":"Alex Kladov","path":"/matklad","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1711539?s=80&v=4"},"commit":{"message":"LSM: Fix range.table_count assertion in Compaction","shortMessageHtmlLink":"LSM: Fix range.table_count assertion in Compaction"}},{"before":null,"after":"1580ffe1a7ae4c938351e8cf66413d6f4414dad6","ref":"refs/heads/jamii-table-size","pushedAt":"2024-01-17T12:31:43.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"matklad","name":"Alex Kladov","path":"/matklad","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1711539?s=80&v=4"},"commit":{"message":"Reverse bits of Transfer.id in benchmark to stress non-append-only index","shortMessageHtmlLink":"Reverse bits of Transfer.id in benchmark to stress non-append-only index"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAD4gF90gA","startCursor":null,"endCursor":null}},"title":"Activity · tigerbeetle/tigerbeetle-history-archive"}