{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":141339868,"defaultBranch":"master","name":"pebble","ownerLogin":"cockroachdb","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2018-07-17T20:25:25.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/6748139?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1714776577.0","currentOid":""},"activityList":{"items":[{"before":"16c5635c915475fa10ad89de7729132bac8ed77c","after":"94cfeb2b3d92e3e6494cf125327772e3d4a06ebc","ref":"refs/heads/master","pushedAt":"2024-05-03T21:04:18.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jbowens","name":"Jackson Owens","path":"/jbowens","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/867352?s=80&v=4"},"commit":{"message":"db: document memTable.writerRefs subtlety\n\nPreviously it was not obvious why memTable.availBytes() could reset the\nmemtable's reserved size when memTable.writerRefs() == 1. In #3557, a code\nreading lead us to believe there was a race where competing writers could\nimproperly double reserve the tail of the memtable's arena. However, in the\ncode reading we missed that the mutable memtable always has a writerRefs()≥1,\nwhich is why a writerRefs()==1 indicates there are no concurrent applications\nto the memtable.\n\nAdditionally, add a unit test that exercises the race of two batches competing\nfor the tail of the memtable arena.\n\nClose #3557.","shortMessageHtmlLink":"db: document memTable.writerRefs subtlety"}},{"before":"f729ccd44cbb03b28a634a59f84014cb0023cda6","after":"16c5635c915475fa10ad89de7729132bac8ed77c","ref":"refs/heads/master","pushedAt":"2024-05-03T15:38:49.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"RaduBerinde","name":null,"path":"/RaduBerinde","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16544120?s=80&v=4"},"commit":{"message":"compact: relax splitter frontier requirement\n\n`NewOutputSplitter` requires the `firstKey` to be at or after the\ncurrent frontier (because it relies on the frontier tripping the\nboundaries before the corresponding `ShouldSplitBefore` call).\n\nIn practice, this requirement is bothersome: if there are range del or\nrange key spans, the current table would start at the previous split\nkey, which can be behind the frontier. The current code uses the next\npoint key but this is not ideal - we may want to split a span multiple\ntimes in-between two very far-away points.\n\nThis change relaxes this requirement by manually checking the\nboundaries the first time `ShouldSplitBefore` is called. The\ncompaction code is improved to provide the correct first key.","shortMessageHtmlLink":"compact: relax splitter frontier requirement"}},{"before":"8d7f7f61836ce2866f083e98b0779f6f7603c3c9","after":"f729ccd44cbb03b28a634a59f84014cb0023cda6","ref":"refs/heads/master","pushedAt":"2024-05-03T14:22:26.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jbowens","name":"Jackson Owens","path":"/jbowens","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/867352?s=80&v=4"},"commit":{"message":"db: track files' pre-zeroing largest sequence numbers\n\nWhen there exist no keys beneath a compaction's key range, Pebble performs\nsequence number zeroing. This is an optimization that allows for easier\ndetection of new user keys during iteration. This commit introduces a new\nFileMetadata field LargestSeqNumAbsolute that provides an upper bound on the\nsequence numbers of a sstables' keys before they were zeroed. This is useful as\na stable upper bound on the recency of an sstable's keys.\n\nIn this commit we use this new upper bound to provide an alternative solution\nto the interaction between delete-only compactions and sequence number zeroing.\nPreviously any compaction that zeroed sequence numbers and overlapped a\ndelete-only compaction hint was required to clear the conflicting hints to\nensure a delete-only compaction did not accidentally drop a table containing\nkeys more recent than any of the hint's constituent tombstones. This\ninteraction was a bit indirect and subtle. Encoding the pre-zeroing sequence\nnumber on the file metadata is more direct, and will allow us to use the\nsequence number for recency ordering of sstables' keys more generally,\nincluding in #2112.\n\nWhen the database is closed and re-opened, the new field LargestSeqNumAbsolute\nis initialized to LargestSeqNum for all existing sstables. This means that\nLargestSeqNumAbsolute only provides an upper bound of a sstables' keys'\nsequence numbers over the lifetime of the database instance in the current\nprocess. This is sufficient for many use cases, including delete-only\ncompaction accounting.\n\nThe reason this is sufficient in the delete-only compaction use case is subtle.\nThe problem we're seeking to avoid is a range tombstone [start,end)#n deleting\na key k#m such that s ≤ k < e and m ≥ n. Because of the LSM sequence number\ninvariant, the range tombstone can never fall into a lower level than k.\nHowever, our in-memory delete-only compaction hints are not atomically updated\nwith transformations of the LSM. They represent the state of the LSM at a\nsingle instant when the table stats collector observed range deletion(s) within\na particular file. This stale view of the LSM is what necessitates a mechanism\nlike LargestSeqNumAbsolute to avoid erroroneous applications of a deletion\nhint. After a database restart, none of the previous instance's in-memory\ndelete-only compactions hints exist. The table stats collector must re-populate\nthe hints by scanning range deletions in sstables in the background. However,\nbecause the sequence number invariant prevents inversion of sequence numbers\nacross process restarts, any hints we construct from the LSM will be correct\nwith respect to that view of the LSM.","shortMessageHtmlLink":"db: track files' pre-zeroing largest sequence numbers"}},{"before":"8225791375fe95036588e92b558c467e46e30aef","after":"8d7f7f61836ce2866f083e98b0779f6f7603c3c9","ref":"refs/heads/master","pushedAt":"2024-05-03T14:10:42.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jbowens","name":"Jackson Owens","path":"/jbowens","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/867352?s=80&v=4"},"commit":{"message":"db: refactor ingest overlap checking\n\nRefactor the overlap checking to avoid using the levelIter to populate the\nrange deletion iterator. This was subtle and confusing. This refactor will also\nbenefit the implementation of #2112.\n\nInforms #2112.\nInforms #2863.","shortMessageHtmlLink":"db: refactor ingest overlap checking"}},{"before":"74ff834986323645fc5c892c583d87975e8f65c7","after":"8225791375fe95036588e92b558c467e46e30aef","ref":"refs/heads/master","pushedAt":"2024-05-03T02:16:11.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"nicktrav","name":"Nick Travers","path":"/nicktrav","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/804457?s=80&v=4"},"commit":{"message":"internal/lint: update crlfmt\n\nUpdate to cockroachdb/crlfmt@461e8663b4b4887b1c6a6c9deaeeb775109a635f.","shortMessageHtmlLink":"internal/lint: update crlfmt"}},{"before":"e8d93c3c95d9150f326b1589d36204d0371f010e","after":"74ff834986323645fc5c892c583d87975e8f65c7","ref":"refs/heads/master","pushedAt":"2024-05-02T23:16:28.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"RaduBerinde","name":null,"path":"/RaduBerinde","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16544120?s=80&v=4"},"commit":{"message":"compact: minor fix to the splitter\n\nMake sure we never split on the first key. In this case we were\nreturning SplitKey equal to the first key, which is not allowed.\n\nNote that the newly added check is not in a hot path.\n\nThis doesn't cause visible problems currently because the compaction\ncode initializes the output writer lazily, and a nil `Writer`\nhas an estimated size of 0. It becomes a problem if we initialize the\nwriter upfront, since an empty but initialized writer has a few bytes\nof estimated size.","shortMessageHtmlLink":"compact: minor fix to the splitter"}},{"before":"d661c7314d74e01aea917978f1e9c0083c806390","after":"e8d93c3c95d9150f326b1589d36204d0371f010e","ref":"refs/heads/master","pushedAt":"2024-05-02T21:44:39.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jbowens","name":"Jackson Owens","path":"/jbowens","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/867352?s=80&v=4"},"commit":{"message":"db: remove ingestTargetLevelFunc indirection\n\nPreviously ingest calls passed in ingestTargetLevel to ingest to facilitate\nsome testing that needed to force an ingestion into a specific level. The\nrelevant testing no longer exists. This commit removes the indirection.","shortMessageHtmlLink":"db: remove ingestTargetLevelFunc indirection"}},{"before":"902b6d090de11572264e54b223b6ea62bc51c555","after":"d661c7314d74e01aea917978f1e9c0083c806390","ref":"refs/heads/master","pushedAt":"2024-05-02T16:30:26.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"RaduBerinde","name":null,"path":"/RaduBerinde","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16544120?s=80&v=4"},"commit":{"message":"keyspan: set keysOrder in ParseSpan","shortMessageHtmlLink":"keyspan: set keysOrder in ParseSpan"}},{"before":"426803eb5e621973a38b2031fd29c55d599d1721","after":"902b6d090de11572264e54b223b6ea62bc51c555","ref":"refs/heads/master","pushedAt":"2024-05-01T22:11:23.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"RaduBerinde","name":null,"path":"/RaduBerinde","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16544120?s=80&v=4"},"commit":{"message":"compact: move interleaving iterators to compact.Iter\n\nDuring compaction, we obtain rangedel and rangekey spans by querying\nthe interleaving iterators that are used as input to `compact.Iter`.\nTo reduce this tight coupling, we move the interleaving iterators to\n`compact.Iter`. We now pass the point/rangedel/rangekey iterators\nseparately and we use new `compact.Iter` methods to obtain the\nrelevant spans.","shortMessageHtmlLink":"compact: move interleaving iterators to compact.Iter"}},{"before":"b8bfe0428adbd309653c0b147c4654c5e2432801","after":"426803eb5e621973a38b2031fd29c55d599d1721","ref":"refs/heads/master","pushedAt":"2024-05-01T20:28:38.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"RaduBerinde","name":null,"path":"/RaduBerinde","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16544120?s=80&v=4"},"commit":{"message":"comapction: use \"sql-row-spill\" for disk spill compactions\n\nUse the `sql-row-spill` write category for both flushes and\ncompactions of stores used for SQL disk spilling.","shortMessageHtmlLink":"comapction: use \"sql-row-spill\" for disk spill compactions"}},{"before":"25f96d91980c197c7eb282e1278d657babaca832","after":"b8bfe0428adbd309653c0b147c4654c5e2432801","ref":"refs/heads/master","pushedAt":"2024-05-01T17:41:16.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"RaduBerinde","name":null,"path":"/RaduBerinde","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16544120?s=80&v=4"},"commit":{"message":"compact: new output splitter implementation\n\nThe current `OutputSplitter` implementations give the illusion of\narbitrary composability but there are some subtleties. There is an\nunwritten requirement that the suggested split key returned by\n`OnNewOutput` is >= last key for which `ShouldSplitBefore` returned\ntrue. This is hard to guarantee when implementations are composed. It\nworks today because of the particular splitter logic and\nconfiguration.\n\nThis change replaces these with a single `OutputSplitter`\nimplementation which does everything. Its implementation is only a bit\nmore complicated than the file size splitter.\n\nWe simplify the API: we now create a separate splitter per file, and\nit is illegal to call `ShouldSplitBefore` again after it returns\n`SplitNow`. We also provide a `SplitKey()` method to get a suggested\nsplit key.\n\nThe behavior is mostly the same, with some improvements on the split\nkey: when we split along a grandparent boundary, the split key will\nmatch that boundary (instead of using the next key); this makes a\ndifference in the file boundaries when there are tombstones or range\nkeys intersecting that boundary.","shortMessageHtmlLink":"compact: new output splitter implementation"}},{"before":"481df3487aab68f809e6681bb6bdd3a8fa08031d","after":"25f96d91980c197c7eb282e1278d657babaca832","ref":"refs/heads/master","pushedAt":"2024-05-01T17:26:55.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"RaduBerinde","name":null,"path":"/RaduBerinde","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16544120?s=80&v=4"},"commit":{"message":"objstorage: add MemObj for testing\n\nAdd an in-memory implementation of Writable/Readable and replace\nexisting test implementations.","shortMessageHtmlLink":"objstorage: add MemObj for testing"}},{"before":"d4ce5b0c90c0f6224263707b664478001ac36487","after":"481df3487aab68f809e6681bb6bdd3a8fa08031d","ref":"refs/heads/master","pushedAt":"2024-04-30T22:55:10.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jbowens","name":"Jackson Owens","path":"/jbowens","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/867352?s=80&v=4"},"commit":{"message":"db: update TestIngestTargetLevel test format\n\nUpdate the format of file metadatas provided to the TestIngestTargetLevel unit\ntest. It now uses the manifest.ParseFileMetadataDebug, removing bespoke parsing\ncode and allowing test cases to express ingested file bounds that are\nexclusive on the end boundary.","shortMessageHtmlLink":"db: update TestIngestTargetLevel test format"}},{"before":"55642e0c5bb57b9fafa3bec89213e1c142fd5826","after":"62fc20d22a8f7d7a8f72c3c9390b1f3d08c1c656","ref":"refs/heads/crl-release-24.1","pushedAt":"2024-04-30T18:08:02.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jbowens","name":"Jackson Owens","path":"/jbowens","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/867352?s=80&v=4"},"commit":{"message":"db,wal: avoid Batch.refData allocation\n\nPassing in the Batch.refData func into (wal.Writer).WriteRecord forced an\nallocation for every committed batch. This commit defines a new wal.RefCount\ninterface implemented by Batch to avoid the allocation.\n\nInforms cockroachdb/cockroach#123236.","shortMessageHtmlLink":"db,wal: avoid Batch.refData allocation"}},{"before":"85baab14a20779df7636f4ace2299998c8f040f2","after":"d4ce5b0c90c0f6224263707b664478001ac36487","ref":"refs/heads/master","pushedAt":"2024-04-30T15:31:21.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jbowens","name":"Jackson Owens","path":"/jbowens","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/867352?s=80&v=4"},"commit":{"message":"db,wal: avoid Batch.refData allocation\n\nPassing in the Batch.refData func into (wal.Writer).WriteRecord forced an\nallocation for every committed batch. This commit defines a new wal.RefCount\ninterface implemented by Batch to avoid the allocation.\n\nInforms cockroachdb/cockroach#123236.","shortMessageHtmlLink":"db,wal: avoid Batch.refData allocation"}},{"before":"07a39ce08e742b2e6b5508d2a062fc631198b1bf","after":"55642e0c5bb57b9fafa3bec89213e1c142fd5826","ref":"refs/heads/crl-release-24.1","pushedAt":"2024-04-30T15:27:34.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jbowens","name":"Jackson Owens","path":"/jbowens","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/867352?s=80&v=4"},"commit":{"message":"db: ensure Metrics.WAL.BytesWritten is nondecreasing\n\nThe Metrics.WAL.BytesWritten metric is intended to be a monotonically\nincreasing counter of all bytes written to the write-ahead log. Previously, it\nwas possible for this metric to violate monotonicity immediately after a WAL\nrotation. The d.logSize value—which corresponds to the size of the current\nWAL—was not reset to zero. It was only reset after the first write to the new\nWAL.\n\nClose #3505.","shortMessageHtmlLink":"db: ensure Metrics.WAL.BytesWritten is nondecreasing"}},{"before":"3a03bff01359d23892a1ed4007e7505ceac473f3","after":"85baab14a20779df7636f4ace2299998c8f040f2","ref":"refs/heads/master","pushedAt":"2024-04-30T15:15:16.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jbowens","name":"Jackson Owens","path":"/jbowens","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/867352?s=80&v=4"},"commit":{"message":"db: ensure Metrics.WAL.BytesWritten is nondecreasing\n\nThe Metrics.WAL.BytesWritten metric is intended to be a monotonically\nincreasing counter of all bytes written to the write-ahead log. Previously, it\nwas possible for this metric to violate monotonicity immediately after a WAL\nrotation. The d.logSize value—which corresponds to the size of the current\nWAL—was not reset to zero. It was only reset after the first write to the new\nWAL.\n\nClose #3505.","shortMessageHtmlLink":"db: ensure Metrics.WAL.BytesWritten is nondecreasing"}},{"before":"5d4c28502e754d029b50e4c235e5f497f75679ed","after":"3a03bff01359d23892a1ed4007e7505ceac473f3","ref":"refs/heads/master","pushedAt":"2024-04-29T20:35:47.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jbowens","name":"Jackson Owens","path":"/jbowens","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/867352?s=80&v=4"},"commit":{"message":"batchskl: clear cached bound nodes in SetBounds\n\nSince 5bcf51bf44 the batchskl.Iterator has cached nodes corresponding to lower\nor upper bounds. These cached nodes were not cleared in calls to SetBounds,\nallowing incorrect results when the bounds changed.\n\nClose #3564.","shortMessageHtmlLink":"batchskl: clear cached bound nodes in SetBounds"}},{"before":"ef5c430728623e35227a802104765d23c785e8a4","after":"5d4c28502e754d029b50e4c235e5f497f75679ed","ref":"refs/heads/master","pushedAt":"2024-04-28T19:36:18.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"RaduBerinde","name":null,"path":"/RaduBerinde","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16544120?s=80&v=4"},"commit":{"message":"sstable: change an out-of-bounds error into an assertion\n\nWe now panic in invariants mode. This might help debug #3556.","shortMessageHtmlLink":"sstable: change an out-of-bounds error into an assertion"}},{"before":"1b234bdee62e4103e33b3fc07673fa1fb6bafe54","after":"ef5c430728623e35227a802104765d23c785e8a4","ref":"refs/heads/master","pushedAt":"2024-04-26T22:21:44.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"RaduBerinde","name":null,"path":"/RaduBerinde","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16544120?s=80&v=4"},"commit":{"message":"meta: fail execution if Fatalf was used\n\n`Fatalf` was storing an error but we were never checking it. It will\nnow fail the execution.","shortMessageHtmlLink":"meta: fail execution if Fatalf was used"}},{"before":"282f0c3b039606e9b2fb59b0f2ec12c336237be9","after":"1b234bdee62e4103e33b3fc07673fa1fb6bafe54","ref":"refs/heads/master","pushedAt":"2024-04-26T13:33:03.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"CheranMahalingam","name":null,"path":"/CheranMahalingam","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65926174?s=80&v=4"},"commit":{"message":"sstable: reduce block cache memory fragmentation\n\nCurrently, the sstable writer contains heuristics to flush sstable\nblocks once the size reaches a specified threshold. In CRDB this is\ndefined as 32KiB. However, when these blocks are loaded into memory\nadditional metadata is allocated sometimes exceeding the 32KiB threshold.\nSince CRDB uses jemalloc, these allocations use a 40KiB size class which\nleads to significant internal fragmentation. In addition, since the\nsystem is unaware of these size classes we cannot design heuristics that\nprioritize reducing memory fragmentation. Reducing internal\nfragmentation can help reduce CRDB's memory footprint. This commit\ndecrements the target block size to prevent internal fragmentation for\nsmall key-value pairs and adds support for optionally specifying size\nclasses to enable a new set of heuristics that will reduce internal\nfragmentation for workloads with larger key-value pairs.\n\nFixes: #999.","shortMessageHtmlLink":"sstable: reduce block cache memory fragmentation"}},{"before":"4a29d411c057a5fc7dc9f387f8f9073cdd60531e","after":"282f0c3b039606e9b2fb59b0f2ec12c336237be9","ref":"refs/heads/master","pushedAt":"2024-04-26T02:34:20.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jbowens","name":"Jackson Owens","path":"/jbowens","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/867352?s=80&v=4"},"commit":{"message":"db: rework mergingIter and levelIter synthetic keys\n\nThe merging iterator and the level iterator are more tightly coupled than\ndesired. Most of this coupling is a consequence of range deletions. The merging\niterator is responsible for applying range deletions across levels and requires\nthat the level iterator not progress to a new file until the file's range\ndeletions are no longer relevant to other levels. It does this by interleaving\n\"synthetic\" keys. When these keys reach the top of the heap, it signals that\nall other levels have progressed to a point where the current file's range\ndeletions are no longer relevant.\n\nPreviously, knowledge of which keys were interleaved \"synthetic\" keys was\npropagated indirectly—outside the internal iterator interface—through a pointer\nto a levelIterBoundaryContext struct with boolean fields. This commit instead\nalways interleaves synthetic keys as range deletion exclusive sentinels. The\nmerging iterator can infer which keys are synthetic by calling\nInternalKey.IsExclusiveSentinel. Propagating this information directly through\nthe internal iterator interface is more direct and understandable.\n\nBeyond needing to know which keys are synthetic, the merging iterator also must\nknow when user-imposed iteration bounds have been reached. Ordinarily when\nbounds have been reached, internal iterators become exhausted. Since the\nlevelIter's file's range deletions may still be relevant, it cannot and it\ninterleaves a \"synthetic\" key at the iteration bound. When this key reaches the\ntop of the merging iterator's heap, there are no more keys within bounds and\nthe merging iterator is exhausted. To make this determination, we add a simple\nkey comparison. The use of a key comparison is expected to be acceptable,\nbecause it's only performed when a synthetic key reaches the top of the heap.\nThis additional key comparison should ultimately be eliminated when #2863 is\ncomplete.\n\nInforms #2863.","shortMessageHtmlLink":"db: rework mergingIter and levelIter synthetic keys"}},{"before":"a1379260e71260a78a708d02841f7617851b232b","after":"4a29d411c057a5fc7dc9f387f8f9073cdd60531e","ref":"refs/heads/master","pushedAt":"2024-04-25T18:19:09.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"RaduBerinde","name":null,"path":"/RaduBerinde","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16544120?s=80&v=4"},"commit":{"message":"sstable: remove PreviousPointKeyOpt\n\nThis code removes the `PreviousPointKeyOpt` and replaces it with a\nsimple method on the writer.","shortMessageHtmlLink":"sstable: remove PreviousPointKeyOpt"}},{"before":"16950aa34874b14eeb1ab1e1f9ed8cc6491726a5","after":"a1379260e71260a78a708d02841f7617851b232b","ref":"refs/heads/master","pushedAt":"2024-04-25T14:58:47.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"RaduBerinde","name":null,"path":"/RaduBerinde","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16544120?s=80&v=4"},"commit":{"message":"compaction: move tombstone elision logic to internal/compact\n\nWe move the logic that sets up the in-use key ranges and then uses\nthose to determine which tombstones need to be elided.\n\nWe store the in-use key ranges in a new type `TombstoneElision`. The\n`TombstoneElision` is passed to the compaction iterator, replacing the\n`ElideTombstone` and `ElideRangeTombstone` callbacks.\n\nNew point and range elider types are used to check against the in-use\nranges. They assume the \"queries\" are ordered.\n\nThe minor test result changes are due to the new code being better at\ntaking into account exclusive boundaries.","shortMessageHtmlLink":"compaction: move tombstone elision logic to internal/compact"}},{"before":"959b407ebf8561a5c8696f50dc0848d559060cd5","after":"16950aa34874b14eeb1ab1e1f9ed8cc6491726a5","ref":"refs/heads/master","pushedAt":"2024-04-24T20:36:20.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"jbowens","name":"Jackson Owens","path":"/jbowens","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/867352?s=80&v=4"},"commit":{"message":"db: simplify mergingIter.switchTo{Max,Min}Heap\n\nPreviously, mergingIter.switchTo{Max,Min}Heap had complicated logic to avoid\nviolating the levelIter's invariants when higher-level range deletions caused\ncascading seek keys to extend beyond iteration bounds. With 6fa3fe9d, the\nlevelIter behaves like other internal iterators and is capable of being\nrelative positioned away from an exhausted state without violating its\nbounds-checking invariants.\n\nThis commit applies the same logic of 6fa3fe9d to the synthetic iterator bound\nkeys that are interleaved when a levelIter reaches a distant bound, allowing a\nrelative positioning method to step away from these synthetic iterator bounds.\nThis allows us to simplify mergingIter.switchTo{Max,Min}Heap.","shortMessageHtmlLink":"db: simplify mergingIter.switchTo{Max,Min}Heap"}},{"before":"fa6015b124abd0fc2c6a68fe970aa819c46e513a","after":"959b407ebf8561a5c8696f50dc0848d559060cd5","ref":"refs/heads/master","pushedAt":"2024-04-24T19:29:30.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"RaduBerinde","name":null,"path":"/RaduBerinde","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16544120?s=80&v=4"},"commit":{"message":"compaction: move elision of range keys to the iterator\n\nWe move the elision of range keys from a transformer in the merging\niterator to the compaction iterator. This is consistent with how we\nare handling tombstones, and will make it easier to push down all the\nelision logic into the iterator.","shortMessageHtmlLink":"compaction: move elision of range keys to the iterator"}},{"before":"2a5e6e9b10458a9af2d2c22fe49c0fb02dc0d3b9","after":"fa6015b124abd0fc2c6a68fe970aa819c46e513a","ref":"refs/heads/master","pushedAt":"2024-04-24T17:13:16.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jbowens","name":"Jackson Owens","path":"/jbowens","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/867352?s=80&v=4"},"commit":{"message":"db: reformat TestLevelIterSeek output\n\nAdjust the formatting of the TestLevelIterSeek datadriven output to be less\nconfusing; previously the test modified the returned KV to encode information\nabout the current position of the range deletion iterator.","shortMessageHtmlLink":"db: reformat TestLevelIterSeek output"}},{"before":"28ba805354d05f0d2f436a7fba214c7f8ba04cf1","after":"2a5e6e9b10458a9af2d2c22fe49c0fb02dc0d3b9","ref":"refs/heads/master","pushedAt":"2024-04-24T14:38:06.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"RaduBerinde","name":null,"path":"/RaduBerinde","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16544120?s=80&v=4"},"commit":{"message":"compaction: consolidate tombstone elision tests\n\nWe consolidate the point and range tombstone tests into a single one.","shortMessageHtmlLink":"compaction: consolidate tombstone elision tests"}},{"before":"4f71357757c1e34a53c67254303d2d753f32045c","after":"28ba805354d05f0d2f436a7fba214c7f8ba04cf1","ref":"refs/heads/master","pushedAt":"2024-04-23T21:38:04.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"RaduBerinde","name":null,"path":"/RaduBerinde","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16544120?s=80&v=4"},"commit":{"message":"manifest: more accurate in-use key ranges\n\nWe now take into account the exclusivity of the largest key, with more\naccurate (\"tighter\") resulting ranges.","shortMessageHtmlLink":"manifest: more accurate in-use key ranges"}},{"before":"dbdcab4ff15abbd237110c65b440ebe0b597e572","after":"4f71357757c1e34a53c67254303d2d753f32045c","ref":"refs/heads/master","pushedAt":"2024-04-23T21:13:23.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"RaduBerinde","name":null,"path":"/RaduBerinde","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16544120?s=80&v=4"},"commit":{"message":"github: automatically add storage team to PRs\n\nAdd a CODEOWNERS file that sets the storage team as a reviewer.","shortMessageHtmlLink":"github: automatically add storage team to PRs"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEQR0JIgA","startCursor":null,"endCursor":null}},"title":"Activity · cockroachdb/pebble"}