)]}'
{
  "log": [
    {
      "commit": "8f9698cdf83d02e12b93581464114d4e7cef483a",
      "tree": "2cc0b5f94a3327c683531ee65f1c737185754416",
      "parents": [
        "9cec5636a80875a3d35a007d41cf5ee98fcf2dbb"
      ],
      "author": {
        "name": "Peiyang He",
        "email": "peiyang_he@smail.nju.edu.cn",
        "time": "Thu Dec 11 15:50:23 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Dec 11 15:50:23 2025 +0800"
      },
      "message": "refactor: remove async remote write decode logic (#1631)\n\n## Rationale\nDeserialization is a CPU-intensive task, so introducing async does not\nprovide significant benefits. In addition, using async causes function\ncontagion issues. Therefore, it is necessary to remove the async decode\nlogic.\n\n\n## Detailed Changes\n- Remove `decode_async` interface\n- Change the back-end object pool dependency from `deadpool` to\n`object-pool`\n- Change benchmark logic accordingly\n\n\n## Test Plan\nManual test"
    },
    {
      "commit": "9cec5636a80875a3d35a007d41cf5ee98fcf2dbb",
      "tree": "97419cc46d0f643aa40c55e04168f11f8227b92f",
      "parents": [
        "25fdaacc74efdec3e9b456336751a639532a09c9"
      ],
      "author": {
        "name": "Peiyang He",
        "email": "peiyang_he@smail.nju.edu.cn",
        "time": "Tue Oct 28 22:49:42 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 28 22:49:42 2025 +0800"
      },
      "message": "feat: add hand-written Prometheus remote write request parser (#1628)\n\n## Rationale\n\nA hand-written remote write request parser to replace prost, with the\nprimary goal of achieving zero-allocation parsing.\n\n## Detailed Changes\n\n- The new `remote_write` directory contains the core implementation of\nthe hand-written parser.\n\n- Add benchmarks.\n\n- Add a .proto file in `pb_types`.\n\n- Fix CI errors.\n\n## Test Plan\n\n- Unit tests can be found at the end of the `pb_reader.rs`.\n\n- A comprehensive equivalence test is available in\n`equivalence_test.rs`, which validates the correctness of the\nhand-written parser by comparing its output with that of the prost\nauto-generated parser."
    },
    {
      "commit": "25fdaacc74efdec3e9b456336751a639532a09c9",
      "tree": "e7cc3fce2dd668c8d3ab7d77e6b8f3e4a3bbaa9a",
      "parents": [
        "725d6bd29717ba6ef7a5db0f9f4835a131284902"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Oct 24 16:00:25 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 24 16:00:25 2025 +0800"
      },
      "message": "chore(deps): bump tracing-subscriber from 0.3.18 to 0.3.20 (#1629)\n\n"
    },
    {
      "commit": "725d6bd29717ba6ef7a5db0f9f4835a131284902",
      "tree": "6ad960cf22711fb00819b4731c366dbc0485657d",
      "parents": [
        "1368157ee969c153b9a42a33afa4c6be7600bbbc",
        "abfa1ea95accd0b3dcee454d43e508c4351e3495"
      ],
      "author": {
        "name": "NeoChen",
        "email": "neochen428@gmail.com",
        "time": "Sun Apr 27 07:07:56 2025 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 27 07:07:56 2025 -0500"
      },
      "message": "Merge pull request #1626 from jiacai2050/refactor-storage\n\nrefactor: rename columnar storage"
    },
    {
      "commit": "abfa1ea95accd0b3dcee454d43e508c4351e3495",
      "tree": "6ad960cf22711fb00819b4731c366dbc0485657d",
      "parents": [
        "a33bd6bd1d8d06a3efc864b25d72488f91adbd51"
      ],
      "author": {
        "name": "jiacai2050",
        "email": "dev@liujiacai.net",
        "time": "Sun Apr 27 14:37:03 2025 +0800"
      },
      "committer": {
        "name": "jiacai2050",
        "email": "dev@liujiacai.net",
        "time": "Sun Apr 27 14:37:03 2025 +0800"
      },
      "message": "rename ObjectBasedStorage\n"
    },
    {
      "commit": "a33bd6bd1d8d06a3efc864b25d72488f91adbd51",
      "tree": "2cc2e75d575299f8edb47e418fac2af75e72d44c",
      "parents": [
        "972c957a8b6accffb0a4c244749fad8d58bf55e4"
      ],
      "author": {
        "name": "jiacai2050",
        "email": "dev@liujiacai.net",
        "time": "Sun Apr 27 10:35:09 2025 +0800"
      },
      "committer": {
        "name": "jiacai2050",
        "email": "dev@liujiacai.net",
        "time": "Sun Apr 27 10:35:09 2025 +0800"
      },
      "message": "fix ci\n"
    },
    {
      "commit": "972c957a8b6accffb0a4c244749fad8d58bf55e4",
      "tree": "1826300c629f7086dc673791731c083e37fe0553",
      "parents": [
        "1368157ee969c153b9a42a33afa4c6be7600bbbc"
      ],
      "author": {
        "name": "jiacai2050",
        "email": "dev@liujiacai.net",
        "time": "Sun Apr 27 10:27:47 2025 +0800"
      },
      "committer": {
        "name": "jiacai2050",
        "email": "dev@liujiacai.net",
        "time": "Sun Apr 27 10:27:47 2025 +0800"
      },
      "message": "refactor: rename columnar storage\n"
    },
    {
      "commit": "1368157ee969c153b9a42a33afa4c6be7600bbbc",
      "tree": "1eb89da802e4da25b802997ead4d78797d6ee3d4",
      "parents": [
        "941ea0722c76be2a6d8e46ac1487e22085855a42",
        "86e7619b5893eac40496c8b980cd5b8a66b665a5"
      ],
      "author": {
        "name": "NeoChen",
        "email": "neochen428@gmail.com",
        "time": "Wed Jan 15 00:58:18 2025 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jan 15 00:58:18 2025 -0600"
      },
      "message": "Merge pull request #1622 from jiacai2050/impl-metric\n\n"
    },
    {
      "commit": "86e7619b5893eac40496c8b980cd5b8a66b665a5",
      "tree": "1eb89da802e4da25b802997ead4d78797d6ee3d4",
      "parents": [
        "941ea0722c76be2a6d8e46ac1487e22085855a42"
      ],
      "author": {
        "name": "jiacai2050",
        "email": "dev@liujiacai.net",
        "time": "Tue Jan 14 18:21:06 2025 +0800"
      },
      "committer": {
        "name": "jiacai2050",
        "email": "dev@liujiacai.net",
        "time": "Tue Jan 14 18:21:06 2025 +0800"
      },
      "message": "init metric manager\n"
    },
    {
      "commit": "941ea0722c76be2a6d8e46ac1487e22085855a42",
      "tree": "124c79457c17c29e7c1ca8cda3f54066a2d25f66",
      "parents": [
        "a8428d228d0fe529baad5940fa4a0b4a3cfb3955"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Tue Jan 14 11:52:47 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jan 14 11:52:47 2025 +0800"
      },
      "message": "feat: add metric manager (#1621)\n\n"
    },
    {
      "commit": "a8428d228d0fe529baad5940fa4a0b4a3cfb3955",
      "tree": "be9f3eeb56a5ddf5e537a8b3855f17cd9ddd0595",
      "parents": [
        "4d3bb1c00ac3ca8eb4900f4767f78e12c566986f",
        "cf2ff8a81f8092d7f163b84704c210afe29bfb69"
      ],
      "author": {
        "name": "NeoChen",
        "email": "neochen428@gmail.com",
        "time": "Fri Dec 27 07:20:12 2024 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Dec 27 07:20:12 2024 -0600"
      },
      "message": "Merge pull request #1620 from jiacai2050/feat-reserved-columns\n\n"
    },
    {
      "commit": "cf2ff8a81f8092d7f163b84704c210afe29bfb69",
      "tree": "be9f3eeb56a5ddf5e537a8b3855f17cd9ddd0595",
      "parents": [
        "9817e4597f3ae9c1f0aec7e65827e10b2c84ec7b"
      ],
      "author": {
        "name": "jiacai2050",
        "email": "dev@liujiacai.net",
        "time": "Fri Dec 27 14:10:30 2024 +0800"
      },
      "committer": {
        "name": "jiacai2050",
        "email": "dev@liujiacai.net",
        "time": "Fri Dec 27 14:19:22 2024 +0800"
      },
      "message": "fix CR\n"
    },
    {
      "commit": "9817e4597f3ae9c1f0aec7e65827e10b2c84ec7b",
      "tree": "814c896a138065e7ddb4b8cc8446b0c1b0f1fbaa",
      "parents": [
        "dd089bdf2a005d54721b6909aa22cff9acb2dcda"
      ],
      "author": {
        "name": "jiacai2050",
        "email": "dev@liujiacai.net",
        "time": "Thu Dec 26 18:14:43 2024 +0800"
      },
      "committer": {
        "name": "jiacai2050",
        "email": "dev@liujiacai.net",
        "time": "Thu Dec 26 18:20:32 2024 +0800"
      },
      "message": "fix clippy\n"
    },
    {
      "commit": "dd089bdf2a005d54721b6909aa22cff9acb2dcda",
      "tree": "4b65303409f39b677d04539d43b7e5a59563d196",
      "parents": [
        "4d3bb1c00ac3ca8eb4900f4767f78e12c566986f"
      ],
      "author": {
        "name": "jiacai2050",
        "email": "dev@liujiacai.net",
        "time": "Thu Dec 26 18:11:40 2024 +0800"
      },
      "committer": {
        "name": "jiacai2050",
        "email": "dev@liujiacai.net",
        "time": "Thu Dec 26 18:11:40 2024 +0800"
      },
      "message": "feat: add reserved column\n"
    },
    {
      "commit": "4d3bb1c00ac3ca8eb4900f4767f78e12c566986f",
      "tree": "2cc03c25ccaacb85c33a6169cf52f05f028ff1c3",
      "parents": [
        "47dd6453e58984feae64cbdcd53d29f95c7b6e73"
      ],
      "author": {
        "name": "鲍金日",
        "email": "baojinri@apache.org",
        "time": "Wed Dec 25 16:15:26 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Dec 25 16:15:26 2024 +0800"
      },
      "message": "refactor: add more `macro`  in config (#1619)\n\n## Rationale\r\n\r\n\r\n## Detailed Changes\r\n- add Clone \u0026 PartialEq in config\r\n- use ReadableDuration \u0026 ReadableSize\r\n\r\n## Test Plan\r\nCI\r\n\r\n---------\r\n\r\nCo-authored-by: Jiacai Liu \u003cdev@liujiacai.net\u003e"
    },
    {
      "commit": "47dd6453e58984feae64cbdcd53d29f95c7b6e73",
      "tree": "ba016c09c0b59e5cf0cf594de6658a8146c5a33a",
      "parents": [
        "5d7c6a7ff651a84e08efdb70ce8df496c9b86dcb"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Tue Dec 24 14:19:10 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Dec 24 14:19:10 2024 +0800"
      },
      "message": "feat: skip add sequence column when compact  (#1618)\n\n## Rationale\r\n\r\n\r\n## Detailed Changes\r\n- Refactor package metadata\r\n- ParquetReader add `keep_sequence` args, and set it to `true`for\r\ncompaction, `false` for query.\r\n\r\n## Test Plan\r\n\r\nCI\r\n```\r\n cargo publish --dry-run --registry crates-io\r\n```\r\nThis commands run successfully."
    },
    {
      "commit": "5d7c6a7ff651a84e08efdb70ce8df496c9b86dcb",
      "tree": "bcf9f4b4da6cc0c4c847f49e99db15f576412cf3",
      "parents": [
        "f8bb7262de1b6e0d1c05c8aae1e0ede6e8e4bfd7"
      ],
      "author": {
        "name": "鲍金日",
        "email": "baojinri@gmail.com",
        "time": "Mon Dec 23 17:23:57 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Dec 23 17:23:57 2024 +0800"
      },
      "message": "fix: scan with predicate (#1617)\n\n## Rationale\n- support scan with predicate\n\n## Detailed Changes\n\n\n## Test Plan\nCI"
    },
    {
      "commit": "f8bb7262de1b6e0d1c05c8aae1e0ede6e8e4bfd7",
      "tree": "93a31106dea118438b508d4dfb1037151bc3b0b9",
      "parents": [
        "d2f878f1b718e0b16fe70c8983a3d919c1d8d5a1"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Mon Dec 23 15:37:21 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Dec 23 15:37:21 2024 +0800"
      },
      "message": "fix: manifest delta num may overflow (#1616)\n\n## Rationale\r\nFix bugs found in local write bench.\r\n\r\n## Detailed Changes\r\n- When manifest starts up, the delta num may overflow since it\u0027s\r\ninitialized to 0.\r\n- When manifest merge_update, since the deltas is unsorted, so we may\r\nfirst delete a non-existing file.\r\n\r\n## Test Plan\r\nCI"
    },
    {
      "commit": "d2f878f1b718e0b16fe70c8983a3d919c1d8d5a1",
      "tree": "a72b22cfdde0b90c992ed5c47735d30548fb7bc0",
      "parents": [
        "8d3a9ab94524c2adceb5f90bad2bc072cc9334f4"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Fri Dec 20 10:17:18 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Dec 20 10:17:18 2024 +0800"
      },
      "message": "feat: add server config (#1615)\n\n## Rationale\r\n\r\n\r\n## Detailed Changes\r\n- Server can read config from cli args\r\n- Start 4 write worker to bench write.\r\n\r\n## Test Plan\r\nCI"
    },
    {
      "commit": "8d3a9ab94524c2adceb5f90bad2bc072cc9334f4",
      "tree": "9694c14310ebab109507dd0c317822ecd1f54eb3",
      "parents": [
        "55dcabede31a885d6901b1bc8fab37bcc88fe596"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Thu Dec 19 14:35:49 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Dec 19 14:35:49 2024 +0800"
      },
      "message": "feat: add demo server for benchmark (#1614)\n\n## Rationale\r\nIn order to test `TimeMergeStorage`, I plan to generate random arrow\r\ndata and trigger compaction via http API\r\n\r\n## Detailed Changes\r\n\r\n\r\n## Test Plan\r\nNot required."
    },
    {
      "commit": "55dcabede31a885d6901b1bc8fab37bcc88fe596",
      "tree": "c3ac11e42b3fc738a1fc479a08f85b0eb913a19f",
      "parents": [
        "58db4f5f99da6af0f184e47a590b7de44ff7d5e9"
      ],
      "author": {
        "name": "NeoChen",
        "email": "neochen428@gmail.com",
        "time": "Wed Dec 18 02:03:05 2024 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Dec 18 16:03:05 2024 +0800"
      },
      "message": "feat: add benchmarks for encoding (#1613)\n\n## Rationale\n\n#1600 \n\n\n## Detailed Changes\n\nAdditional benchmarks for this issue\n\n## Test Plan\n\nAppend 100 new delta sstfiles to snapshot with 1000 records.\n\n```sh\nBenchmarking bench_encoding/new_format_encoding/0: Collecting 10 samples in estimated 5.0005 s (494k iterations)\nbench_encoding/new_format_encoding/0\n                        time:   [10.232 µs 10.611 µs 10.900 µs]\n                        change: [-1.5176% +2.1745% +5.9315%] (p \u003d 0.30 \u003e 0.05)\n                        No change in performance detected.\n```\n\n---------\n\nCo-authored-by: jiacai2050 \u003cdev@liujiacai.net\u003e"
    },
    {
      "commit": "58db4f5f99da6af0f184e47a590b7de44ff7d5e9",
      "tree": "ab79ec0489745afe3c8e6b46b66c6ad66c348905",
      "parents": [
        "cc3352a7ae501847e3599d89788d4239d46a1475"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Wed Dec 18 11:55:24 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Dec 18 11:55:24 2024 +0800"
      },
      "message": "refactor: use `Read` trait to convert Bytes to Snapshot (#1612)\n\n## Rationale\r\n\r\n\r\n## Detailed Changes\r\n\r\n\r\n## Test Plan\r\nCI"
    },
    {
      "commit": "cc3352a7ae501847e3599d89788d4239d46a1475",
      "tree": "6606000196d4e4c8add3f0bbdc8caae9802cac68",
      "parents": [
        "03b1df935b1df0aafbc40c1909805d8ca64e4063"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Wed Dec 18 11:21:30 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Dec 18 11:21:30 2024 +0800"
      },
      "message": "refactor: move encoding struct into independent file (#1611)\n\n## Rationale\r\nFollowup #1610, to make manifest more modular.\r\n\r\n## Detailed Changes\r\n\r\n\r\n## Test Plan\r\nCI"
    },
    {
      "commit": "03b1df935b1df0aafbc40c1909805d8ca64e4063",
      "tree": "cc4d34cc4feed6c79590f0f48567c23553565dd7",
      "parents": [
        "1331e0a3d114d770abec071af7229b5281da6abc"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Wed Dec 18 10:43:20 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Dec 18 10:43:20 2024 +0800"
      },
      "message": "feat: manifest support delete (#1610)\n\n## Rationale\r\nWhen compact finished, we need to delete the old input sst and expired\r\nsst.\r\n\r\n## Detailed Changes\r\n- The delta file use `ManifestUpdate` struct.\r\n- Refactor compact scheduler, to make it more modular.\r\n## Test Plan\r\nCI"
    },
    {
      "commit": "1331e0a3d114d770abec071af7229b5281da6abc",
      "tree": "00a8544b442427e268655d986d30afab3ee1a341",
      "parents": [
        "4650d36d6707aa9a6ad379d16dfe033b85adba7e"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Tue Dec 17 11:06:16 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Dec 17 11:06:16 2024 +0800"
      },
      "message": "feat: add compaction runner (#1609)\n\n## Rationale\r\nCompaction runner is responsible for compact old sst \u0026 delete expired\r\nsst.\r\n\r\n## Detailed Changes\r\n\r\n\r\n## Test Plan\r\nCI"
    },
    {
      "commit": "4650d36d6707aa9a6ad379d16dfe033b85adba7e",
      "tree": "67938066e671a81fc5a6b66bfec24be62f3d58fd",
      "parents": [
        "9f2d0bc8c9d829641f7af552f684e9eb85222d65"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Fri Dec 13 15:16:58 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Dec 13 15:16:58 2024 +0800"
      },
      "message": "chore: move old engine into analytic-engine branch (#1607)\n\n## Rationale\n\nTo maintain system stability and code clarity, it would be advisable to\nrelocate the legacy engine to a separate branch for dedicated\nmaintenance, preventing potential complications from mixing old and new\nengine implementations.\n\n\n## Detailed Changes\n\n\n## Test Plan\nCI"
    },
    {
      "commit": "9f2d0bc8c9d829641f7af552f684e9eb85222d65",
      "tree": "49fe403c512edb549bed87a88283c0464427b9db",
      "parents": [
        "25dbe738f384d36fe3a89a5f0f278b6dd106f144"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Fri Dec 13 10:12:26 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Dec 13 10:12:26 2024 +0800"
      },
      "message": "feat: support merge operator (#1605)\n\n## Rationale\r\nClose #1583\r\n\r\nFor rows with same primary key, we need to choose which value to use,\r\nthe answer is MergeOperator\r\n\r\n## Detailed Changes\r\n- Add MergeOperator trait, and add two implementations.\r\n\r\n## Test Plan\r\nCI"
    },
    {
      "commit": "25dbe738f384d36fe3a89a5f0f278b6dd106f144",
      "tree": "ea534b57a9a78e1f51308e7166360eb64b3c2623",
      "parents": [
        "aeb6fff9cc4124b7ab75f4af094f0bac156b74cc"
      ],
      "author": {
        "name": "MianChen",
        "email": "neochen428@gmail.com",
        "time": "Thu Dec 12 09:12:35 2024 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Dec 12 23:12:35 2024 +0800"
      },
      "message": "feat: another format for manifest (#1604)\n\n## Rationale\nClose #1600 \n\n## Detailed Changes\nCreating a new data format to represent the manifest snapshot file.\n```text\n| magic(u32) | version(u8) |  flags(u8) | length(u64) | Record(N) ... |\n\nThe Magic field (u32) is used to ensure the validity of the data source.\nThe Flags field (u8) is reserved for future extensibility, such as enabling compression or supporting additional features.\nThe length field (u64) represents the total length of the subsequent records and serves as a straightforward method for verifying their integrity. (length \u003d record_length * record_count)\n\n# Record is a self-descriptive message\n| id(u64) | time_range(i64*2)| size(u32) |  num_rows(u32)|\n```\n\nIn do_merge, the snapshot data handle is like:\n\n```text\nOld data flow in do_merge:\n                                      delta_sstmetas\n                                             | (extend vec)\n                                             V                                \nobject_store -\u003e org_bytes -\u003e org_pb -\u003e Vec\u003csstmeta\u003e -\u003e dst_pb -\u003e dst_bytes -\u003e object_store\n\nNew data flow in do_merge:\n               delta_sstmetas -\u003e bytes\n                                  | (append)\n                                  V                                \nobject_store -\u003e org_bytes -\u003e dst_bytes -\u003e object_store\n````\n\nSpecifically, I create the SnapshotHeader and SnapshotRecordV1 to\nrepresent the corresponding data in snapshot bytes. Before merging delta\nsstfiles into new bytes, we allocate a larger Vec `\u003cu8\u003e` and copy each\nsegment (header, old records, new records) into it.\n\nThis RP DOES NOT address format upgrade logic which can be resolved in a\nseparate PR. As for the upgrade, we could define a new SnapshotRecord\nformat and perform data migration in Manifest::try_new.\n\n\n## Test Plan\nUT\n\n---------\n\nCo-authored-by: jiacai2050 \u003cdev@liujiacai.net\u003e"
    },
    {
      "commit": "aeb6fff9cc4124b7ab75f4af094f0bac156b74cc",
      "tree": "62dfd97935c9d7fdb6f010a80e92a953418635d8",
      "parents": [
        "4d8571ffa2cc1864defcf4caef9fce2bff0fd46e",
        "d5aeb284a6b2dc4cad6d4b158258ede5ef343e49"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Thu Dec 12 10:10:27 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Dec 12 10:10:27 2024 +0800"
      },
      "message": "Merge pull request #1606 from apache/dependabot/go_modules/horaemeta/golang.org/x/crypto-0.31.0\n\nchore(deps): bump golang.org/x/crypto from 0.21.0 to 0.31.0 in /horaemeta"
    },
    {
      "commit": "d5aeb284a6b2dc4cad6d4b158258ede5ef343e49",
      "tree": "62dfd97935c9d7fdb6f010a80e92a953418635d8",
      "parents": [
        "4d8571ffa2cc1864defcf4caef9fce2bff0fd46e"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Dec 11 23:48:33 2024 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Dec 11 23:48:33 2024 +0000"
      },
      "message": "chore(deps): bump golang.org/x/crypto in /horaemeta\n\nBumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.21.0 to 0.31.0.\n- [Commits](https://github.com/golang/crypto/compare/v0.21.0...v0.31.0)\n\n---\nupdated-dependencies:\n- dependency-name: golang.org/x/crypto\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "4d8571ffa2cc1864defcf4caef9fce2bff0fd46e",
      "tree": "0f17ed065b0895b76792e56b208177d4136982d5",
      "parents": [
        "6cdf2e66a04f11c60c04cacae0111a14d344a501",
        "81be994e688d663d6ca1147460cf3e955211a15a"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Wed Dec 11 23:16:36 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Dec 11 23:16:36 2024 +0800"
      },
      "message": "Merge pull request #1603 from baojinri/feat-support-pick-ssts\n\n## Rationale\nImplement pick_candidate for compaction\n\n## Detailed Changes\n\n\n## Test Plan\nUT\n\n---------\n\nCo-authored-by: jiacai2050 \u003cdev@liujiacai.net\u003e"
    },
    {
      "commit": "81be994e688d663d6ca1147460cf3e955211a15a",
      "tree": "0f17ed065b0895b76792e56b208177d4136982d5",
      "parents": [
        "3bd961a83ee44587b1145281b13ef4b8ca9139f5"
      ],
      "author": {
        "name": "jiacai2050",
        "email": "dev@liujiacai.net",
        "time": "Wed Dec 11 23:07:47 2024 +0800"
      },
      "committer": {
        "name": "jiacai2050",
        "email": "dev@liujiacai.net",
        "time": "Wed Dec 11 23:07:47 2024 +0800"
      },
      "message": "fix lint\n"
    },
    {
      "commit": "3bd961a83ee44587b1145281b13ef4b8ca9139f5",
      "tree": "797ab9a6477aae457825dd8eec463823c7b084ba",
      "parents": [
        "ef04238049e39ec8008ade98e9226a348efe0814"
      ],
      "author": {
        "name": "jiacai2050",
        "email": "dev@liujiacai.net",
        "time": "Wed Dec 11 23:05:52 2024 +0800"
      },
      "committer": {
        "name": "jiacai2050",
        "email": "dev@liujiacai.net",
        "time": "Wed Dec 11 23:05:52 2024 +0800"
      },
      "message": "refactor\n"
    },
    {
      "commit": "ef04238049e39ec8008ade98e9226a348efe0814",
      "tree": "f95c45c3be86e7266e90c98427c7fec696c51f8d",
      "parents": [
        "897d5d11e8a936256874a63b60fb931c0247a2b8"
      ],
      "author": {
        "name": "baojinri",
        "email": "baojinri@gmail.com",
        "time": "Wed Dec 11 18:25:03 2024 +0800"
      },
      "committer": {
        "name": "baojinri",
        "email": "baojinri@gmail.com",
        "time": "Wed Dec 11 20:45:25 2024 +0800"
      },
      "message": "fix cr\n"
    },
    {
      "commit": "897d5d11e8a936256874a63b60fb931c0247a2b8",
      "tree": "2072414dfb1b5c94f4ad116565de4f4c1473d631",
      "parents": [
        "6cdf2e66a04f11c60c04cacae0111a14d344a501"
      ],
      "author": {
        "name": "baojinri",
        "email": "baojinri@gmail.com",
        "time": "Fri Dec 06 16:38:17 2024 +0800"
      },
      "committer": {
        "name": "baojinri",
        "email": "baojinri@gmail.com",
        "time": "Fri Dec 06 16:38:17 2024 +0800"
      },
      "message": "support pick ssts\n"
    },
    {
      "commit": "6cdf2e66a04f11c60c04cacae0111a14d344a501",
      "tree": "81fcc7c8a1ae752875f44f78243affbbf5cbb585",
      "parents": [
        "e2970b1171523b182b36dc67e642641c47db078f"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Fri Nov 29 16:41:23 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 29 16:41:23 2024 +0800"
      },
      "message": "feat: init compact scheduler (#1601)\n\n## Rationale\r\nSetup the basic structure for compaction\r\n\r\n## Detailed Changes\r\n\r\n\r\n## Test Plan\r\nOld CI, not scheduler has no tests now."
    },
    {
      "commit": "e2970b1171523b182b36dc67e642641c47db078f",
      "tree": "f6046db0c99281b1fed86da975348bacee78b2e5",
      "parents": [
        "21765246a6160094830ef2a2ce85dc849288fcac"
      ],
      "author": {
        "name": "MianChen",
        "email": "283559115@qq.com",
        "time": "Mon Nov 25 03:35:48 2024 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 25 17:35:48 2024 +0800"
      },
      "message": "feat: partition table query optimize (#1594)\n\n## Rationale\r\nClose #1441 \r\n\r\n## Detailed Changes\r\n### TLDR\r\nThe performance issue with inlist queries is due to the extra overhead\r\nfrom bloom-filter-like directory lookups when scanning each SST file for\r\nrows. The solution is to create a separate predicate for each partition,\r\ncontaining only the keys relevant to that partition. Since the current\r\npartition filter only supports BinaryExpr(Column, operator, Literal) and\r\nnon-negated InList expressions, this solution will address only those\r\nspecific cases.\r\n\r\n### Changes\r\n1. During the scan building process, when identifying the partitions for\r\na query, we create a PartitionedFilterKeyIndex variable to store the\r\npredicate key indices for each expression.\r\n2. In the compute_partition_for_keys_group function, we use a\r\nHashMap\u003cpartition_id, HashMap\u003cfilter_index, BTreeSet\u003ckey_index\u003e\u003e\u003e to\r\nrecord the indices of keys involved in partition computation for each\r\ngroup.\r\n3. In the partitioned_predicates function, we construct the final\r\npredicates for each partition.\r\n4. In resolve_partitioned_scan_internal, we generate separate requests\r\nfor each partition.\r\n\r\ne.g.\r\nconditions:\r\n1. table schema: col_ts, col1, col2, in which col1 and col2 are both\r\nkeys,\r\n     and with two partitions\r\n2. sql: select * from table where col1 \u003d \u002733\u0027 and col2 in (\"aa\", \"bb\",\r\n     \"cc\", \"dd\")\r\n\r\npartition expectations:\r\n   yield two predicates\r\n      p0: col1 \u003d \u002733\u0027 and col2 in (\"aa\", \"bb\", \"cc\");\r\n      p1: col1 \u003d \u002733\u0027 and col2 in (\"dd\")\r\n\r\n### Other issues discovered\r\nWhen the inlist key args length is less than three, Expr will be\r\nrefactored to nested BinaryExpr which bypasses the FilterExtractor.\r\n\r\ne.g.\r\nSQL: select * from table where col1 in (\"aa\", \"bb\") and col2 in\r\n(1,2,3,4,5...1000)\r\nSince (\"aa\", \"bb\") has fewer than three elements, the col1 key filter is\r\nnot included in partition computation, which interrupts the partitioning\r\nprocess in the get_candidate_partition_keys_groups function, as\r\ncontains_empty_filter is set to true.\r\n\r\n\r\n## Test Plan\r\n1. UT: test_partitioned_predicate\r\n2. Manual test.\r\n\r\n---------\r\n\r\nCo-authored-by: jiacai2050 \u003cdev@liujiacai.net\u003e"
    },
    {
      "commit": "21765246a6160094830ef2a2ce85dc849288fcac",
      "tree": "6b6e26879d2be7e29aeeb5b21aa3bdb517ad4b3e",
      "parents": [
        "9e81c4ed5df1998cbd210dc48fc67b6b7405a553"
      ],
      "author": {
        "name": "鲍金日",
        "email": "baojinri@gmail.com",
        "time": "Mon Nov 25 14:13:21 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 25 14:13:21 2024 +0800"
      },
      "message": "feat: use thread pool in manifest merge (#1599)\n\n## Rationale\r\n\r\n\r\n## Detailed Changes\r\n\r\n\r\n## Test Plan\r\nCI"
    },
    {
      "commit": "9e81c4ed5df1998cbd210dc48fc67b6b7405a553",
      "tree": "761c1c98f8289b833eb8f68ec3921c1429f65c88",
      "parents": [
        "72f63f2173f9da9c25ff241ce7fd497b16f634c1"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Fri Nov 22 11:13:12 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 22 11:13:12 2024 +0800"
      },
      "message": "chore: bump to v2.2.0-dev (#1598)\n\n## Rationale\r\nBegin next dev cycle\r\n\r\n## Detailed Changes\r\n- WAL default to local disk\r\n\r\n## Test Plan\r\nCI"
    },
    {
      "commit": "72f63f2173f9da9c25ff241ce7fd497b16f634c1",
      "tree": "476e7e2447d55f9b93917e3d3dda96f29bd53c44",
      "parents": [
        "1d7c549971df3e5fdf147c48367dd7552e637954"
      ],
      "author": {
        "name": "鲍金日",
        "email": "baojinri@gmail.com",
        "time": "Fri Nov 22 11:12:50 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 22 11:12:50 2024 +0800"
      },
      "message": "feat: support persist manifest efficientlly (#1596)\n\n## Rationale\r\nclose #1592 \r\n\r\n## Detailed Changes\r\n- support merge manifest ssts background\r\n\r\n## Test Plan\r\nCI\r\n\r\n---------\r\n\r\nCo-authored-by: jiacai2050 \u003cdev@liujiacai.net\u003e"
    },
    {
      "commit": "1d7c549971df3e5fdf147c48367dd7552e637954",
      "tree": "d862cd0645b85ef4f016ee9ba408245462bdef06",
      "parents": [
        "b5025d963607bc31c4fc04f8ac58a4cd9cff9f44"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Wed Nov 20 17:11:01 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 20 17:11:01 2024 +0800"
      },
      "message": "feat: add merge stream (#1595)\n\n## Rationale\r\n\r\nPart of Metric Engine.\r\n\r\n## Detailed Changes\r\n- Scan SSTs in parallel based on segment\r\n- Sort SST using SortPreservingMergeExec, which is more efficient than\r\nSortExec\r\n- Add MergeExec to dedup record batch based on sorted batches, currently\r\nonly `overwrite` semantics is supported.\r\n\r\n## Test Plan\r\n\r\nAdd two new UT."
    },
    {
      "commit": "b5025d963607bc31c4fc04f8ac58a4cd9cff9f44",
      "tree": "8c85ae0485f8161ab1886507ee87d7124485851a",
      "parents": [
        "ee7a0eafbddf9cb81694efac0b2952a895215af5"
      ],
      "author": {
        "name": "鲍金日",
        "email": "baojinri@gmail.com",
        "time": "Tue Nov 12 16:44:09 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 12 16:44:09 2024 +0800"
      },
      "message": "fix:  avoid splicing bucket multiple times in oss url (#1593)\n\n## Rationale\r\n Avoid splicing bucket multiple times in oss url\r\n\r\n## Detailed Changes\r\n\r\n\r\n## Test Plan\r\nCI"
    },
    {
      "commit": "ee7a0eafbddf9cb81694efac0b2952a895215af5",
      "tree": "62ea63cc81ee5754600cb5f23e232a2c0fd8b4cb",
      "parents": [
        "d4d8d5463168cc8577f4c43d371caf71caec0f94"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Nov 12 16:30:00 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 12 16:30:00 2024 +0800"
      },
      "message": "chore(deps): bump github.com/golang-jwt/jwt/v4 from 4.5.0 to 4.5.1 in /horaemeta (#1591)\n\nBumps [github.com/golang-jwt/jwt/v4](https://github.com/golang-jwt/jwt)\r\nfrom 4.5.0 to 4.5.1.\r\n\u003cdetails\u003e\r\n\u003csummary\u003eRelease notes\u003c/summary\u003e\r\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\r\nhref\u003d\"https://github.com/golang-jwt/jwt/releases\"\u003egithub.com/golang-jwt/jwt/v4\u0027s\r\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\r\n\u003cblockquote\u003e\r\n\u003ch2\u003ev4.5.1\u003c/h2\u003e\r\n\u003ch1\u003eSecurity\u003c/h1\u003e\r\n\u003cp\u003eUnclear documentation of the error behavior in\r\n\u003ccode\u003eParseWithClaims\u003c/code\u003e in \u0026lt;\u003d 4.5.0 could lead to situation\r\nwhere users are potentially not checking errors in the way they should\r\nbe. Especially, if a token is both expired and invalid, the errors\r\nreturned by \u003ccode\u003eParseWithClaims\u003c/code\u003e return both error codes. If\r\nusers only check for the \u003ccode\u003ejwt.ErrTokenExpired \u003c/code\u003e using\r\n\u003ccode\u003eerror.Is\u003c/code\u003e, they will ignore the embedded\r\n\u003ccode\u003ejwt.ErrTokenSignatureInvalid\u003c/code\u003e and thus potentially accept\r\ninvalid tokens.\u003c/p\u003e\r\n\u003cp\u003eThis issue was documented in \u003ca\r\nhref\u003d\"https://github.com/golang-jwt/jwt/security/advisories/GHSA-29wx-vh33-7x7r\"\u003ehttps://github.com/golang-jwt/jwt/security/advisories/GHSA-29wx-vh33-7x7r\u003c/a\u003e\r\nand fixed in this release.\u003c/p\u003e\r\n\u003cp\u003eNote: \u003ccode\u003ev5\u003c/code\u003e was not affected by this issue. So upgrading to\r\nthis release version is also recommended.\u003c/p\u003e\r\n\u003ch1\u003eWhat\u0027s Changed\u003c/h1\u003e\r\n\u003cul\u003e\r\n\u003cli\u003eBack-ported error-handling logic in \u003ccode\u003eParseWithClaims\u003c/code\u003e\r\nfrom \u003ccode\u003ev5\u003c/code\u003e branch. This fixes \u003ca\r\nhref\u003d\"https://github.com/golang-jwt/jwt/security/advisories/GHSA-29wx-vh33-7x7r\"\u003ehttps://github.com/golang-jwt/jwt/security/advisories/GHSA-29wx-vh33-7x7r\u003c/a\u003e.\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\r\nhref\u003d\"https://github.com/golang-jwt/jwt/compare/v4.5.0...v4.5.1\"\u003ehttps://github.com/golang-jwt/jwt/compare/v4.5.0...v4.5.1\u003c/a\u003e\u003c/p\u003e\r\n\u003c/blockquote\u003e\r\n\u003c/details\u003e\r\n\u003cdetails\u003e\r\n\u003csummary\u003eCommits\u003c/summary\u003e\r\n\u003cul\u003e\r\n\u003cli\u003e\u003ca\r\nhref\u003d\"https://github.com/golang-jwt/jwt/commit/7b1c1c00a171c6c79bbdb40e4ce7d197060c1c2c\"\u003e\u003ccode\u003e7b1c1c0\u003c/code\u003e\u003c/a\u003e\r\nMerge commit from fork\u003c/li\u003e\r\n\u003cli\u003eSee full diff in \u003ca\r\nhref\u003d\"https://github.com/golang-jwt/jwt/compare/v4.5.0...v4.5.1\"\u003ecompare\r\nview\u003c/a\u003e\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\u003c/details\u003e\r\n\u003cbr /\u003e\r\n\r\n\r\n[![Dependabot compatibility\r\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dgithub.com/golang-jwt/jwt/v4\u0026package-manager\u003dgo_modules\u0026previous-version\u003d4.5.0\u0026new-version\u003d4.5.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\r\n\r\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\r\nalter it yourself. You can also trigger a rebase manually by commenting\r\n`@dependabot rebase`.\r\n\r\n[//]: # (dependabot-automerge-start)\r\n[//]: # (dependabot-automerge-end)\r\n\r\n---\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\r\n\u003cbr /\u003e\r\n\r\nYou can trigger Dependabot actions by commenting on this PR:\r\n- `@dependabot rebase` will rebase this PR\r\n- `@dependabot recreate` will recreate this PR, overwriting any edits\r\nthat have been made to it\r\n- `@dependabot merge` will merge this PR after your CI passes on it\r\n- `@dependabot squash and merge` will squash and merge this PR after\r\nyour CI passes on it\r\n- `@dependabot cancel merge` will cancel a previously requested merge\r\nand block automerging\r\n- `@dependabot reopen` will reopen this PR if it is closed\r\n- `@dependabot close` will close this PR and stop Dependabot recreating\r\nit. You can achieve the same result by closing it manually\r\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\r\nof the ignore conditions of the specified dependency\r\n- `@dependabot ignore this major version` will close this PR and stop\r\nDependabot creating any more for this major version (unless you reopen\r\nthe PR or upgrade to it yourself)\r\n- `@dependabot ignore this minor version` will close this PR and stop\r\nDependabot creating any more for this minor version (unless you reopen\r\nthe PR or upgrade to it yourself)\r\n- `@dependabot ignore this dependency` will close this PR and stop\r\nDependabot creating any more for this dependency (unless you reopen the\r\nPR or upgrade to it yourself)\r\nYou can disable automated security fix PRs for this repo from the\r\n[Security Alerts\r\npage](https://github.com/apache/horaedb/network/alerts).\r\n\r\n\u003c/details\u003e\r\n\r\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\r\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "d4d8d5463168cc8577f4c43d371caf71caec0f94",
      "tree": "a35a60bfd0314afcdd6149a1a293a18c9d179441",
      "parents": [
        "9931950a14845a4b84b6623d512763c64f46ac46"
      ],
      "author": {
        "name": "o\u0027Laoxu",
        "email": "x_vivi@yeah.net",
        "time": "Tue Nov 12 15:36:27 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 12 15:36:27 2024 +0800"
      },
      "message": "fix: skip build latest docker tag for RC version. (#1590)\n\n## Rationale\r\nClose #1589 \r\n\r\n## Detailed Changes\r\nUpgrade `publish-image.yml` for skip build latest docker tag for RC\r\nversion.\r\n\r\n## Test Plan\r\npass"
    },
    {
      "commit": "9931950a14845a4b84b6623d512763c64f46ac46",
      "tree": "16060399cff7152bb3584ca6b4f7aa3e1f2eb3c6",
      "parents": [
        "0d8d43d4f434e098353ee0940382a8f00e144e8b"
      ],
      "author": {
        "name": "鲍金日",
        "email": "baojinri@gmail.com",
        "time": "Wed Nov 06 19:08:26 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 06 19:08:26 2024 +0800"
      },
      "message": "refactor: make writing properties independently (#1588)\n\n## Rationale\r\nWe should custom how parquet write handle its metadata.\r\n\r\n## Detailed Changes\r\n\r\n\r\n## Test Plan"
    },
    {
      "commit": "0d8d43d4f434e098353ee0940382a8f00e144e8b",
      "tree": "893fd27f8b58798bb674fd31c5c251e2ac118bc6",
      "parents": [
        "e65c50449e26edb0aa8c5fa695b7ce9eea1c3208"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Tue Nov 05 17:53:19 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 05 17:53:19 2024 +0800"
      },
      "message": "chore: fix LICENSE and NOTICE (#1587)\n\n## Rationale\r\nSee https://lists.apache.org/thread/29nyod5d73tn5nov7f5pm0tg42gq57vw\r\n\r\nAdhere to https://www.apache.org/legal/src-headers.html\r\n\r\n## Detailed Changes\r\n\r\n\r\n## Test Plan\r\nNo need."
    },
    {
      "commit": "e65c50449e26edb0aa8c5fa695b7ce9eea1c3208",
      "tree": "66c50da04d1e1d25c180f4435ed6ca4e95d16743",
      "parents": [
        "115b002fca240dec5480c51377a6ed10f40a3dd2"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Tue Nov 05 16:44:11 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 05 16:44:11 2024 +0800"
      },
      "message": "feat: init scan implementation for time merge storage (#1586)\n\n## Rationale\r\n\r\n\r\n## Detailed Changes\r\n\r\n\r\n## Test Plan\r\nCI"
    },
    {
      "commit": "115b002fca240dec5480c51377a6ed10f40a3dd2",
      "tree": "8e4372533e5a0788f9642e13cf4fc0bab3b9e638",
      "parents": [
        "4cbe82ce8049d4a4a8a5c19f804bfc97294515bf"
      ],
      "author": {
        "name": "鲍金日",
        "email": "baojinri@gmail.com",
        "time": "Mon Nov 04 16:13:58 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 04 16:13:58 2024 +0800"
      },
      "message": "feat: sort record batch of write request (#1585)\n\n## Rationale\r\nSupport sorted record batch of write request by primary key.\r\n\r\n## Detailed Changes\r\n- use datafusion to sort record batch\r\n\r\n## Test Plan\r\n- CI\r\n- Unit tests"
    },
    {
      "commit": "4cbe82ce8049d4a4a8a5c19f804bfc97294515bf",
      "tree": "a9a9e7691521c9efdb83b46e33aecb3e8d55e1ad",
      "parents": [
        "8fecd5d611c50ccfb8a7ac1c46c3e22dfa587af8"
      ],
      "author": {
        "name": "MianChen",
        "email": "283559115@qq.com",
        "time": "Fri Nov 01 07:14:19 2024 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 01 22:14:19 2024 +0800"
      },
      "message": "feat: add a cli tool to read wal meta information (#1584)\n\n## Rationale\r\n#1567 \r\n\r\n## Detailed Changes\r\nA cli tool to decode wal segment.\r\n\r\n## Test Plan\r\nManual test\r\n\r\n\u003cimg width\u003d\"935\" alt\u003d\"image\"\r\nsrc\u003d\"https://github.com/user-attachments/assets/a9a88ca8-74a9-41f7-b338-9ea642ea27be\"\u003e\r\n\r\n\r\n\u003cimg width\u003d\"1053\" alt\u003d\"image\"\r\nsrc\u003d\"https://github.com/user-attachments/assets/e9d80981-9940-43ac-9c36-546b7dd77b5f\"\u003e"
    },
    {
      "commit": "8fecd5d611c50ccfb8a7ac1c46c3e22dfa587af8",
      "tree": "c483aa123a604f96b62b10abc9025fbd9e0c8973",
      "parents": [
        "63c4e9bb1c546aad89350c56987fbb4204147622"
      ],
      "author": {
        "name": "chunshao.rcs",
        "email": "chunshao@apache.org",
        "time": "Fri Nov 01 17:58:29 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 01 17:58:29 2024 +0800"
      },
      "message": "chore: add publish-github-release action (#1518)\n\n## Rationale\r\nAdd automatic publish github release workflow.\r\n\r\n## Detailed Changes\r\nSupports automatic generation of release content and divides pr into the\r\nfollowing categories:\r\n* Breaking Changes\r\n* Features\r\n* Refactor\r\n* Fixed\r\n* Docs\r\n* Chore\r\n\r\n## Test Plan\r\nManual test."
    },
    {
      "commit": "63c4e9bb1c546aad89350c56987fbb4204147622",
      "tree": "5091ff943d53d545ad56f3bf23d1654b00fb060e",
      "parents": [
        "e47d9ae7cbf240d50d009317562bc4247c92b8c4"
      ],
      "author": {
        "name": "Leslie Su",
        "email": "3530611790@qq.com",
        "time": "Wed Oct 30 09:20:36 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 30 09:20:36 2024 +0800"
      },
      "message": "test: add integration test for compaction offload (#1573)\n\n## Rationale\r\nClose #1571 \r\n\r\n## Detailed Changes\r\n- Impl `compact` as pre-command for sqlness, with http compaction\r\nservice.\r\n- update integration tests to test compaction offload.\r\n\r\n## Test Plan\r\n\r\n---------\r\n\r\nCo-authored-by: kamille \u003ccaoruiqiu.crq@antgroup.com\u003e"
    },
    {
      "commit": "e47d9ae7cbf240d50d009317562bc4247c92b8c4",
      "tree": "597ab8ef5136dae2efc07c59b689ede783c2ed11",
      "parents": [
        "60b52177fe102ac0a0cbf4805348eb70add2f23c"
      ],
      "author": {
        "name": "Leslie Su",
        "email": "3530611790@qq.com",
        "time": "Wed Oct 30 08:48:52 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 30 08:48:52 2024 +0800"
      },
      "message": "feat: support horaedb submit compaction task to remote (#1563)\n\n## Rationale\r\nThe subtask to support compaction offloading. See #1545 \r\n\r\n## Detailed Changes\r\n**Compaction node support remote compaction service**\r\n\r\n- Define `CompactionServiceImpl` to support compaction rpc service.\r\n- Introduce `NodeType` to distinguish compaction node and horaedb node.\r\nEnable the deployment of compaction node.\r\n\r\n- Impl `compaction_client` for horaedb node to access remote compaction\r\nnode.\r\n\r\n**Horaedb node support compaction offload**\r\n\r\n- Introduce `compaction_mode` in analytic engine\u0027s `Config` to determine\r\nwhether exec compaction offload or not.\r\n- Define `CompactionNodePicker` trait, supporting get remote compaction\r\nnode info.\r\n- Impl `RemoteCompactionRunner`, supporting pick remote node and pass\r\ncompaction task to the node.\r\n- Add docs (e.g. `example-cluster-n.toml`) to explain how to deploy a\r\ncluster supporting compaction offload.\r\n\r\n## Test Plan\r\n\r\n---------\r\n\r\nCo-authored-by: kamille \u003ccaoruiqiu.crq@antgroup.com\u003e"
    },
    {
      "commit": "60b52177fe102ac0a0cbf4805348eb70add2f23c",
      "tree": "80baaf93c4be6a68e86f6e2c08e150fae45d277b",
      "parents": [
        "e360b4dff71672253ebc253e08d9fedccfc8e0f3"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Mon Oct 28 17:38:28 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 28 17:38:28 2024 +0800"
      },
      "message": "feat: impl write procedure scaffold (#1580)\n\n## Rationale\r\nImplement write procedure for TimeMergeStorage\r\n\r\n## Detailed Changes\r\n- Add basic write implementation.\r\n\r\n## Test Plan\r\nCI"
    },
    {
      "commit": "e360b4dff71672253ebc253e08d9fedccfc8e0f3",
      "tree": "0da89e4d1b51c623fdede28f7c2045b25401325a",
      "parents": [
        "e42276c07f7b5bc226e7a5b857544ebd2f96594b"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Mon Oct 28 16:58:59 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 28 16:58:59 2024 +0800"
      },
      "message": "chore: update community (#1582)\n\n## Rationale\r\nSync with website\r\n\r\n## Detailed Changes\r\n- Add URL check ci\r\n\r\n## Test Plan\r\nCI"
    },
    {
      "commit": "e42276c07f7b5bc226e7a5b857544ebd2f96594b",
      "tree": "bceb18e4f689a4a24f0c6cf321fc62a41eb2d21e",
      "parents": [
        "09dace755f50cc92dc670f6f03cf4d60d6fed753"
      ],
      "author": {
        "name": "Leslie Su",
        "email": "3530611790@qq.com",
        "time": "Fri Oct 25 10:53:53 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 25 10:53:53 2024 +0800"
      },
      "message": "chore: support type `test`, `build` and `style` in pr title (#1581)\n\n## Rationale\r\nClose #1575 \r\n\r\n## Detailed Changes\r\nUpdate the check-pr-title pattern to include type `test`, `style` and\r\n`build`.\r\n\r\n## Test Plan\r\nNo need."
    },
    {
      "commit": "09dace755f50cc92dc670f6f03cf4d60d6fed753",
      "tree": "14321af591e2d63f66494cedee1c91fbee887a98",
      "parents": [
        "e306cb56ccb848d2ad9063110897c68799ccd272"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Mon Oct 21 11:38:50 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 21 11:38:50 2024 +0800"
      },
      "message": "chore: fix license header (#1579)\n\n## Rationale\r\nThose files should contain asf headers.\r\n\r\n## Detailed Changes\r\n\r\n\r\n## Test Plan\r\nCI"
    },
    {
      "commit": "e306cb56ccb848d2ad9063110897c68799ccd272",
      "tree": "cb2d3401dbb34b1b180bca4fd8bc03195305d082",
      "parents": [
        "4642a356c3df74c838e136304015db9b83d17960"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Thu Oct 17 16:34:25 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 17 16:34:25 2024 +0800"
      },
      "message": "chore: bump version 2.1.0 (#1578)\n\n## Rationale\r\n\r\n\r\n## Detailed Changes\r\n- Bump version\r\n- Update WAL segment file convention to `seg_{id}`\r\n\r\n## Test Plan\r\nCI"
    },
    {
      "commit": "4642a356c3df74c838e136304015db9b83d17960",
      "tree": "f7f54ef0186795b39ec69837b261a7d75b1bd279",
      "parents": [
        "a90745e57ad5c03253cdd7fe8b54b6b335bf6f90"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Thu Oct 17 10:19:18 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 17 10:19:18 2024 +0800"
      },
      "message": "fix: remove redundancy length field in wal record (#1576)\n\n## Rationale\r\n`length` field is not required in wal record, it\u0027s duplicated with\r\nvalue_length.\r\n\r\n## Detailed Changes\r\n- Remove length from wal record\r\n- Remove rocksdb-wal from default features\r\n\r\n## Test Plan\r\nCI and manually do some benchmark with\r\n[avalanche](https://github.com/prometheus-community/avalanche)"
    },
    {
      "commit": "a90745e57ad5c03253cdd7fe8b54b6b335bf6f90",
      "tree": "e7a2c8b5f1dda209517426778f018a7acd638d6b",
      "parents": [
        "aa438cae8c552a18f6701d6237bcbcc982bed25a"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Oct 16 09:54:45 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 16 09:54:45 2024 +0800"
      },
      "message": "chore(deps): bump borsh from 0.10.3 to 0.10.4 (#1574)\n\nBumps [borsh](https://github.com/near/borsh-rs) from 0.10.3 to 0.10.4.\r\n\u003cdetails\u003e\r\n\u003csummary\u003eRelease notes\u003c/summary\u003e\r\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\r\nhref\u003d\"https://github.com/near/borsh-rs/releases\"\u003eborsh\u0027s\r\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\r\n\u003cblockquote\u003e\r\n\u003ch2\u003eborsh-derive-internal-v0.10.4\u003c/h2\u003e\r\n\u003cp\u003eNo release notes provided.\u003c/p\u003e\r\n\u003ch2\u003eborsh-derive-v0.10.4\u003c/h2\u003e\r\n\u003cp\u003eNo release notes provided.\u003c/p\u003e\r\n\u003ch2\u003eborsh-schema-derive-internal-v0.10.4\u003c/h2\u003e\r\n\u003cp\u003eNo release notes provided.\u003c/p\u003e\r\n\u003ch2\u003eborsh-v0.10.4\u003c/h2\u003e\r\n\u003cul\u003e\r\n\u003cli\u003eBackported a fix for RUSTSEC-2023-0033: Forbid Vectors of Zero-sized\r\ntypes from de-/serialization (\u003ca\r\nhref\u003d\"https://redirect.github.com/near/borsh-rs/issues/145\"\u003e#145\u003c/a\u003e)\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\u003c/blockquote\u003e\r\n\u003c/details\u003e\r\n\u003cdetails\u003e\r\n\u003csummary\u003eChangelog\u003c/summary\u003e\r\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\r\nhref\u003d\"https://github.com/near/borsh-rs/blob/borsh-v0.10.4/CHANGELOG.md\"\u003eborsh\u0027s\r\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\r\n\u003cblockquote\u003e\r\n\u003ch2\u003e[0.10.4] - 2024-09-23\u003c/h2\u003e\r\n\u003cul\u003e\r\n\u003cli\u003eBackported a fix for RUSTSEC-2023-0033: Forbid Vectors of Zero-sized\r\ntypes from de-/serialization (\u003ca\r\nhref\u003d\"https://redirect.github.com/near/borsh-rs/issues/145\"\u003e#145\u003c/a\u003e)\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\u003c/blockquote\u003e\r\n\u003c/details\u003e\r\n\u003cdetails\u003e\r\n\u003csummary\u003eCommits\u003c/summary\u003e\r\n\u003cul\u003e\r\n\u003cli\u003e\u003ca\r\nhref\u003d\"https://github.com/near/borsh-rs/commit/a1fe3631df2306b2991c1fa9142d7bfa17c2419e\"\u003e\u003ccode\u003ea1fe363\u003c/code\u003e\u003c/a\u003e\r\nrelease: 0.10.4\u003c/li\u003e\r\n\u003cli\u003e\u003ca\r\nhref\u003d\"https://github.com/near/borsh-rs/commit/c545f3c51718f4e6bb19efef6e473ca3ac9946ba\"\u003e\u003ccode\u003ec545f3c\u003c/code\u003e\u003c/a\u003e\r\nchore: revert \u003ccode\u003eworkspace\u003c/code\u003e and \u003ccode\u003eexclude\u003c/code\u003e changes\r\n(\u003ca\r\nhref\u003d\"https://redirect.github.com/near/borsh-rs/issues/311\"\u003e#311\u003c/a\u003e)\u003c/li\u003e\r\n\u003cli\u003e\u003ca\r\nhref\u003d\"https://github.com/near/borsh-rs/commit/27843bcca6e250e2c6cb6bc30cc17e315288bf92\"\u003e\u003ccode\u003e27843bc\u003c/code\u003e\u003c/a\u003e\r\nchore: prepare 0.10.4 with backported fix (\u003ca\r\nhref\u003d\"https://redirect.github.com/near/borsh-rs/issues/310\"\u003e#310\u003c/a\u003e)\u003c/li\u003e\r\n\u003cli\u003eSee full diff in \u003ca\r\nhref\u003d\"https://github.com/near/borsh-rs/compare/borsh-v0.10.3...borsh-v0.10.4\"\u003ecompare\r\nview\u003c/a\u003e\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\u003c/details\u003e\r\n\u003cbr /\u003e\r\n\r\n\r\n[![Dependabot compatibility\r\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dborsh\u0026package-manager\u003dcargo\u0026previous-version\u003d0.10.3\u0026new-version\u003d0.10.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\r\n\r\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\r\nalter it yourself. You can also trigger a rebase manually by commenting\r\n`@dependabot rebase`.\r\n\r\n[//]: # (dependabot-automerge-start)\r\n[//]: # (dependabot-automerge-end)\r\n\r\n---\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\r\n\u003cbr /\u003e\r\n\r\nYou can trigger Dependabot actions by commenting on this PR:\r\n- `@dependabot rebase` will rebase this PR\r\n- `@dependabot recreate` will recreate this PR, overwriting any edits\r\nthat have been made to it\r\n- `@dependabot merge` will merge this PR after your CI passes on it\r\n- `@dependabot squash and merge` will squash and merge this PR after\r\nyour CI passes on it\r\n- `@dependabot cancel merge` will cancel a previously requested merge\r\nand block automerging\r\n- `@dependabot reopen` will reopen this PR if it is closed\r\n- `@dependabot close` will close this PR and stop Dependabot recreating\r\nit. You can achieve the same result by closing it manually\r\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\r\nof the ignore conditions of the specified dependency\r\n- `@dependabot ignore this major version` will close this PR and stop\r\nDependabot creating any more for this major version (unless you reopen\r\nthe PR or upgrade to it yourself)\r\n- `@dependabot ignore this minor version` will close this PR and stop\r\nDependabot creating any more for this minor version (unless you reopen\r\nthe PR or upgrade to it yourself)\r\n- `@dependabot ignore this dependency` will close this PR and stop\r\nDependabot creating any more for this dependency (unless you reopen the\r\nPR or upgrade to it yourself)\r\nYou can disable automated security fix PRs for this repo from the\r\n[Security Alerts\r\npage](https://github.com/apache/horaedb/network/alerts).\r\n\r\n\u003c/details\u003e\r\n\r\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\r\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "aa438cae8c552a18f6701d6237bcbcc982bed25a",
      "tree": "3df8ac5df3b5015045e27eeb7f22cedce624b114",
      "parents": [
        "559dfce20e40ed46577170efca02e5dd292e7cdf"
      ],
      "author": {
        "name": "Draco",
        "email": "dracode01@gmail.com",
        "time": "Fri Sep 27 15:40:42 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 27 15:40:42 2024 +0800"
      },
      "message": "feat: use multithreading to optimize WAL replay (#1572)\n\n## Rationale\r\n1. Currently, the WAL replayer uses coroutines to replay the WAL logs of\r\nmultiple tables in parallel. However, coroutines utilize at most one\r\nCPU. By switching to a multithreaded approach, we can fully leverage\r\nmultiple CPUs.\r\n2. We observed that during the replay phase, decoding the WAL log is a\r\nCPU-intensive operation, so parallelize it.\r\n\r\n## Detailed Changes\r\n\r\n1. Modify both `TableBasedReplay` and `RegionBasedReplay` to use the\r\n`spawn task` approach for parallelism, with a maximum of 20 tasks\r\nrunning concurrently.\r\n2. Preload next segment in WAL based on local storage.\r\n4. In `BatchLogIteratorAdapter::simulated_async_next`, we first retrieve\r\nall the payloads in a batch and then decode them in parallel.\r\n\r\n## Test Plan\r\nManual testing."
    },
    {
      "commit": "559dfce20e40ed46577170efca02e5dd292e7cdf",
      "tree": "b0031f68317ce2266fbe3dfdf9e62af8b785b7ae",
      "parents": [
        "42baf2eea5d0fe02f99b6a820e1fb318e433d55f"
      ],
      "author": {
        "name": "Draco",
        "email": "dracode01@gmail.com",
        "time": "Fri Sep 20 14:19:21 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 20 14:19:21 2024 +0800"
      },
      "message": "fix: logs might be missed during RegionBased replay in the WAL based on local disk (#1570)\n\n## Rationale\r\nIn RegionBased replay, a batch of logs is first scanned from the WAL,\r\nand then replayed on various tables using multiple threads. This\r\napproach works fine for WALs based on tables, as the logs for each table\r\nare clustered together. However, in a WAL based on local disk, the logs\r\nfor each table may be scattered across different positions within the\r\nbatch. During multi-threaded replay, it is possible that for a given\r\ntable, log2 is replayed before log1, resulting in missed logs.\r\n\r\n## Detailed Changes\r\n1. Modify `split_log_batch_by_table` function to aggregate all logs for\r\na table together.\r\n2. Modify `tableBatch` struct to change a single range into a\r\n`Vec\u003cRange\u003e`.\r\n\r\n## Test Plan\r\nManual testing."
    },
    {
      "commit": "42baf2eea5d0fe02f99b6a820e1fb318e433d55f",
      "tree": "688ad69a2ac5f2e7a7f4874280d9e970d2160da6",
      "parents": [
        "3bcc64fc8eea76483f029f1505f32b8e8c1591f5"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Sat Sep 14 15:25:11 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 14 15:25:11 2024 +0800"
      },
      "message": "chore: record replay cost in log (#1569)\n\n## Rationale\r\n\r\n\r\n## Detailed Changes\r\n1. Add replay cost in log\r\n2. Remove verbose http log\r\n3. Recover default to shard based, which is faster in most wal\r\nimplementation.\r\n\r\n## Test Plan"
    },
    {
      "commit": "3bcc64fc8eea76483f029f1505f32b8e8c1591f5",
      "tree": "0899f57e3a0b31645af9e8cc102751f5626ae8e7",
      "parents": [
        "645a8b3510a0a6e43c8b6e0688766470040ef164"
      ],
      "author": {
        "name": "kamille",
        "email": "caoruiqiu.crq@antgroup.com",
        "time": "Sat Sep 14 14:26:20 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 14 14:26:20 2024 +0800"
      },
      "message": "fix: support to compat the old layered memtable options (#1568)\n\n## Rationale\r\nWe introduce the explicit flag to control should we enable layered\r\nmemtable, but it has some compatibility problem when upgrading from old\r\nversion.\r\nThis pr add an option to support compating the old layered memtable\r\non/off control method.\r\n\r\n## Detailed Changes\r\nAdd an option to support compating the old layered memtable on/off\r\ncontrol method.\r\n\r\n## Test Plan\r\nManually."
    },
    {
      "commit": "645a8b3510a0a6e43c8b6e0688766470040ef164",
      "tree": "6fbf1eda27e5a81cb5dd8619107b1f5318c9aa6b",
      "parents": [
        "7ccf97e04f6079328053ca8fb186b69405fd03ab"
      ],
      "author": {
        "name": "Draco",
        "email": "dracode01@gmail.com",
        "time": "Sat Sep 14 09:59:40 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 14 09:59:40 2024 +0800"
      },
      "message": "feat: Implement delete operation for WAL based on local storage (#1566)\n\n## Rationale\r\n\r\nCurrently the WAL based on the local disk does not support the delete\r\nfunction. This PR implements that functionality.\r\n\r\nThis is a follow-up task of #1552 and #1556.\r\n\r\n## Detailed Changes\r\n\r\n1. For each `Segment`, add a hashmap to record the minimum and maximum\r\nsequence numbers of all tables within that segment. During `delete` and\r\n`write` operations, this hashmap will be updated. During read\r\noperations, logs will be filtered based on this hashmap.\r\n\r\n2. During the `delete` operation, based on the aforementioned hashmap,\r\nif all logs of all tables in a read-only segment (a segment that is not\r\ncurrently being written to) are marked as deleted, the segment file will\r\nbe physically deleted from the disk.\r\n\r\n## Test Plan\r\n\r\nUnit test, TSBS and running a script locally that repeatedly inserts\r\ndata, forcibly kills, and restarts the database process to test\r\npersistence."
    },
    {
      "commit": "7ccf97e04f6079328053ca8fb186b69405fd03ab",
      "tree": "a080a22c4b35634c245d910dff18bcaf9f942c97",
      "parents": [
        "2c9cd1a1ebbd5f478cc364de29ecebf4ac492329"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Wed Sep 11 18:04:39 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 11 18:04:39 2024 +0800"
      },
      "message": "feat: init metric engine structure (#1554)\n\n## Rationale\r\nSee https://github.com/apache/horaedb/pull/1558\r\n\r\n## Detailed Changes\r\nAdd a new sub directory `horaedb`, all source codes for metric engine\r\nare under it.\r\n\r\n## Test Plan\r\nAdd a new ci."
    },
    {
      "commit": "2c9cd1a1ebbd5f478cc364de29ecebf4ac492329",
      "tree": "4fe7db719e4ca5bd47d688272d4cc305064ce8a3",
      "parents": [
        "039af9f21fcf8bd96759f8f308c5c4f3df33839d"
      ],
      "author": {
        "name": "kamille",
        "email": "caoruiqiu.crq@antgroup.com",
        "time": "Thu Sep 05 14:03:43 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 05 14:03:43 2024 +0800"
      },
      "message": "fix: disable layered memtable in overwrite mode (#1533)\n\n## Rationale\r\nLayered memtable is only designed for append mode table now, and it\r\nshouldn\u0027t be used in overwrite mode table.\r\n\r\n## Detailed Changes\r\n- Make default values in config used.\r\n- Add `enable` field to control layered memtable\u0027s on/off.\r\n- Add check to prevent invalid options during table create/alter.\r\n- Add related it cases.\r\n\r\n## Test Plan\r\nTest manually.\r\n\r\nFollowing cases are considered:\r\n\r\nCheck and intercept the invalid table options during table create/alter\r\n- enable layered memtable but mutable switch threshold is 0 \r\n- enable layered memtable for overwrite mode table\r\n\r\nTable options new field `layered_enable`\u0027s default value when it is not\r\nfound in pb\r\n- false, when whole `layered_memtable_options` not exist\r\n- false, when `layered_memtable_options` exist, and\r\n`mutable_segment_switch_threshold` \u003d\u003d 0\r\n- true, when `layered_memtable_options` exist, and\r\n`mutable_segment_switch_threshold` \u003e 0"
    },
    {
      "commit": "039af9f21fcf8bd96759f8f308c5c4f3df33839d",
      "tree": "a4c87e11bb257e342d004e8ce7cf394d14da52f7",
      "parents": [
        "28e4760eba6bc6bbe98145c5a86b8b00f4668b87"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Thu Sep 05 12:57:30 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 05 12:57:30 2024 +0800"
      },
      "message": "chore: fix doc links (#1565)\n\n"
    },
    {
      "commit": "28e4760eba6bc6bbe98145c5a86b8b00f4668b87",
      "tree": "6dc416f9ceb6fe6153753f949d34b687f1c496ac",
      "parents": [
        "066b18216aebf2856d73ad007c9dc9ec6ceaaa9b"
      ],
      "author": {
        "name": "Draco",
        "email": "dracode01@gmail.com",
        "time": "Wed Sep 04 17:55:47 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 04 17:55:47 2024 +0800"
      },
      "message": "feat: Implementing cross-segment read/write for WAL based on local disk (#1556)\n\n## Rationale\r\nImproving WAL based on local disk.\r\n\r\nThis is a follow-up task for #1552.\r\n\r\n## Detailed Changes\r\n1. Make MAX_FILE_SIZE configurable.\r\n2. Allocate enough space when creating a segment to avoid remapping when\r\nappending to the segment.​\r\n3. Add `MultiSegmentLogIterator` to enable cross-segment reading.\r\n4. When writing, if the current segment has insufficient space, create a\r\nnew segment and write to the new segment.​\r\n\r\n## Test Plan\r\nUnit test."
    },
    {
      "commit": "066b18216aebf2856d73ad007c9dc9ec6ceaaa9b",
      "tree": "d353c9c7699f28d6999b69b0710888f90dd9002f",
      "parents": [
        "0cf7d6bf2daee1eab7177aa7471513b18d5755ca"
      ],
      "author": {
        "name": "Cancai Cai",
        "email": "77189278+caicancai@users.noreply.github.com",
        "time": "Sun Sep 01 14:02:25 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 01 14:02:25 2024 +0800"
      },
      "message": "chore(horaemeta): add building docs (#1562)\n\n"
    },
    {
      "commit": "0cf7d6bf2daee1eab7177aa7471513b18d5755ca",
      "tree": "cb37978b4691397bea1fba1a028b4181e711608d",
      "parents": [
        "1b869fd8afd4a22f3572a79d27bab95ea749b0ce"
      ],
      "author": {
        "name": "Cancai Cai",
        "email": "77189278+caicancai@users.noreply.github.com",
        "time": "Sat Aug 31 23:48:30 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 31 23:48:30 2024 +0800"
      },
      "message": "chore: update link (#1561)\n\n## Rationale\r\nI noticed that the previous repository has been archived, maybe it would\r\nbe better to update the new link\r\n\r\n## Detailed Changes\r\n\r\n\r\n## Test Plan"
    },
    {
      "commit": "1b869fd8afd4a22f3572a79d27bab95ea749b0ce",
      "tree": "be986355ac0971cf9de33129e097bd5e103b2395",
      "parents": [
        "9321505f7adca61abef8b0c4b3529e8e9fba097e"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Fri Aug 30 11:25:22 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 30 11:25:22 2024 +0800"
      },
      "message": "feat: add metric engine rfc (#1558)\n\n## Rationale\r\n\r\nRFC for next metric engine.\r\n\r\n## Detailed Changes\r\n\r\n\r\n## Test Plan\r\n\r\nNo need."
    },
    {
      "commit": "9321505f7adca61abef8b0c4b3529e8e9fba097e",
      "tree": "015e236c037a1279c6130eb5df0181ab156ec89f",
      "parents": [
        "b94c99e79554f8c915d3b733ed628e4f837f0183"
      ],
      "author": {
        "name": "鲍金日",
        "email": "baojinri@gmail.com",
        "time": "Tue Aug 27 11:59:28 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 27 11:59:28 2024 +0800"
      },
      "message": "feat: use opendal to access  underlying storage (#1557)\n\n## Rationale\r\nUse opendal to access the object store, thus unifying the access method\r\nof the underlying storage.\r\n\r\n## Detailed Changes\r\n- use opendal to access s3/oss/local file\r\n\r\n## Test Plan\r\n- Existed tests"
    },
    {
      "commit": "b94c99e79554f8c915d3b733ed628e4f837f0183",
      "tree": "9c4418006923df47fe2986dfdf0be33a0e953991",
      "parents": [
        "8a2884052b4c02d132fd2c30fa6169b84a9d2ffd"
      ],
      "author": {
        "name": "鲍金日",
        "email": "baojinri@gmail.com",
        "time": "Mon Aug 19 14:04:41 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 19 14:04:41 2024 +0800"
      },
      "message": "chore: upgrade object store version (#1541)\n\n## Rationale\r\nThe object store version is upgraded to 0.10.1 to prepare for access to\r\nopendal\r\n\r\n## Detailed Changes\r\n- Impl AsyncWrite for ObjectStoreMultiUpload\r\n- Impl MultipartUpload for ObkvMultiPartUpload\r\n- Adapt new api on query writing path\r\n\r\n## Test Plan\r\n- Existing tests\r\n\r\n---------\r\n\r\nCo-authored-by: jiacai2050 \u003cdev@liujiacai.net\u003e"
    },
    {
      "commit": "8a2884052b4c02d132fd2c30fa6169b84a9d2ffd",
      "tree": "91fe680e9e88c8226dfd8700092b4bc166f10fdc",
      "parents": [
        "483eb98d188080fb2ccb4ae849fcdb45ebd718f9"
      ],
      "author": {
        "name": "Draco",
        "email": "dracode01@gmail.com",
        "time": "Fri Aug 16 14:18:36 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 16 14:18:36 2024 +0800"
      },
      "message": "feat: Add a new disk-based WAL implementation for standalone deployment (#1552)\n\n## Rationale\r\n\r\n#1279\r\n\r\n## Detailed Changes\r\n\r\n1. Added a struct `Segment` responsible for reading and writing segment\r\nfiles, and it records the offset of each record.\r\n2. Add a struct SegmentManager responsible for managing all segments,\r\nincluding:\r\n\t1.\tReading all segments from the folder upon creation.\r\n\t2.\tWriting only to the segment with the largest ID.\r\n3. Maintaining a cache where segments not in the cache are closed, while\r\nsegments in the cache have their files open and are memory-mapped using\r\nmmap.\r\n3. Implement the `WalManager` trait.\r\n\r\n## Test Plan\r\n\r\nUnit tests.\r\n"
    },
    {
      "commit": "483eb98d188080fb2ccb4ae849fcdb45ebd718f9",
      "tree": "377990d6be122fe0917a5e9ca5e800f4323be9fb",
      "parents": [
        "69488fad550f313fe5ccad455f9235aeaf473b9c"
      ],
      "author": {
        "name": "chunshao.rcs",
        "email": "chunshao@apache.org",
        "time": "Fri Aug 02 17:08:25 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 02 17:08:25 2024 +0800"
      },
      "message": "fix: sequence overflow when dropping a table using a message queue as WAL (#1550)\n\n## Rationale\r\nFix the issue of sequence overflow when dropping a table using a message\r\nqueue as WAL.\r\nclose #1543 \r\n\r\n## Detailed Changes\r\nCheck the maximum value of sequence to prevent overflow.\r\n\r\n## Test Plan\r\nCI."
    },
    {
      "commit": "69488fad550f313fe5ccad455f9235aeaf473b9c",
      "tree": "0fab45ad40aa1a83750b109a3cc1ec77a3450e78",
      "parents": [
        "8011632defa06f81c829393225ba0ddfe189be92"
      ],
      "author": {
        "name": "MianChen",
        "email": "283559115@qq.com",
        "time": "Thu Aug 01 09:20:52 2024 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 01 22:20:52 2024 +0800"
      },
      "message": "refactor: manifest error code (#1546)\n\n"
    },
    {
      "commit": "8011632defa06f81c829393225ba0ddfe189be92",
      "tree": "02c3896374dda4dbadc6be96bb1a736fdb87a651",
      "parents": [
        "c5825cc716eca1fc66db8c4faca9a7549a3f119e"
      ],
      "author": {
        "name": "Leslie Su",
        "email": "119803231+LeslieKid@users.noreply.github.com",
        "time": "Sun Jul 21 14:47:06 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 21 14:47:06 2024 +0800"
      },
      "message": "fix(comment): update error documentation comment for remote engine service (#1548)\n\n## Rationale\r\nUpdating an error comment in the code to reflect the correct service\r\nname is needed.\r\n\r\n## Test Plan\r\nNo need"
    },
    {
      "commit": "c5825cc716eca1fc66db8c4faca9a7549a3f119e",
      "tree": "48e012e9005eb317f61ed67de942edb817a30188",
      "parents": [
        "fa5c286eefb912f2c8c27394dd76a5b497252744"
      ],
      "author": {
        "name": "MianChen",
        "email": "283559115@qq.com",
        "time": "Thu Jul 18 01:40:30 2024 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 18 14:40:30 2024 +0800"
      },
      "message": "refactor: insert select to stream mode (#1544)\n\n## Rationale\r\nClose #1542 \r\n\r\n## Detailed Changes\r\nDo select and insert procedure in stream way.\r\n\r\n## Test Plan\r\nCI test.\r\n\r\n---------\r\n\r\nCo-authored-by: jiacai2050 \u003cdev@liujiacai.net\u003e"
    },
    {
      "commit": "fa5c286eefb912f2c8c27394dd76a5b497252744",
      "tree": "653690f8ee27b43e40022ea2e38a7c554eaa2c2e",
      "parents": [
        "4888f80c537c8d65d771abf16f384b743972ab2b"
      ],
      "author": {
        "name": "Draco",
        "email": "dracode01@gmail.com",
        "time": "Mon Jul 15 17:15:39 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 15 17:15:39 2024 +0800"
      },
      "message": "feat: support INSERT INTO SELECT (#1536)\n\n## Rationale\r\n\r\nClose  #557.\r\n\r\n## Detailed Changes\r\n\r\nWhen generating the insert logical plan, alse generate the select logical plan and store it in the insert plan. Then execute the select logical plan in the insert interpreter, convert the result records into RowGroup and then insert it.\r\n\r\n## Test Plan\r\n\r\nCI"
    },
    {
      "commit": "4888f80c537c8d65d771abf16f384b743972ab2b",
      "tree": "936613b51cbf98c23a5a4824465edcdd4c171747",
      "parents": [
        "a1869dc670c7ca2a103063c60c6585f1780e5622"
      ],
      "author": {
        "name": "Hugh Chern",
        "email": "60749105+alicorn0618@users.noreply.github.com",
        "time": "Tue Jul 09 14:56:08 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 09 14:56:08 2024 +0800"
      },
      "message": "refactor: partitioned_lock\u0027s elaboration (#1540)\n\n## Rationale\r\nExtended the `try_new` interface while keeping the old one for\r\ncompatibility.\r\n\r\n## Detailed Changes\r\n* Implemented the `try_new_suggest_cap` method, while changing the old\r\n`try_new` method to `try_new_bit_len` to ensure compatibility.\r\n* Modified structs and functions that call old interfaces.\r\n\r\n## Test Plan\r\n* Added new unit tests\r\n* Passed CI test\r\n\r\n---------\r\n\r\nCo-authored-by: chunhao.ch \u003cchunhao@antgroup.com\u003e"
    },
    {
      "commit": "a1869dc670c7ca2a103063c60c6585f1780e5622",
      "tree": "e5caf1a9c5cdf9e14aa21d4889655124ebd32c17",
      "parents": [
        "0970b0386662bb477f4d96f1655e726c27f7d3eb"
      ],
      "author": {
        "name": "kamille",
        "email": "caoruiqiu.crq@antgroup.com",
        "time": "Tue Jun 11 09:58:19 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 11 09:58:19 2024 +0800"
      },
      "message": "chore: log more info for debug when tables with same name found (#1537)\n\n## Rationale\r\nWe just panic but log nothing when found two tables with the same table\r\nname, it turns debugging into a disaster...\r\n\r\n## Detailed Changes\r\nLog the needed table infos when found two tables with the same table\r\nname before panic.\r\n\r\n## Test Plan\r\nTest maually."
    },
    {
      "commit": "0970b0386662bb477f4d96f1655e726c27f7d3eb",
      "tree": "0af80bdfd3a751b1bd436747e03569c16430f424",
      "parents": [
        "a1168ecafc0636ea80d2d1154b17bf40b3d64929"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Wed May 29 10:47:21 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 29 10:47:21 2024 +0800"
      },
      "message": "docs: Update README.md (#1535)\n\n"
    },
    {
      "commit": "a1168ecafc0636ea80d2d1154b17bf40b3d64929",
      "tree": "502e23dc7a4665a541b0002ae775db9c194c8abf",
      "parents": [
        "71d261d5000b71eaffe19d4ae79f7d5cec1c614f"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Fri May 17 12:17:12 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 17 12:17:12 2024 +0800"
      },
      "message": "chore: add incubating notice (#1532)\n\n## Rationale\r\nSee https://lists.apache.org/thread/1frk5f146pbzprj0d1ftf15o4z6v3ocs\r\n\r\n## Detailed Changes\r\n\r\n\r\n## Test Plan\r\nNo need."
    },
    {
      "commit": "71d261d5000b71eaffe19d4ae79f7d5cec1c614f",
      "tree": "c2b45c0bee764653b9215d17a4ed667d108bb3fd",
      "parents": [
        "cf5ec10406d90290e1b9d557805e95c82520d507"
      ],
      "author": {
        "name": "鲍金日",
        "email": "baojinri@gmail.com",
        "time": "Wed May 15 17:04:37 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 15 17:04:37 2024 +0800"
      },
      "message": "feat: impl basic auth (#1531)\n\n## Rationale\r\nClose https://github.com/apache/incubator-horaedb/issues/929\r\n\r\n## Detailed Changes\r\n- Added file authentication\r\n- Modify the query and write paths, and add authentication\r\n\r\n## Test Plan\r\n- Existed tests\r\n- Manual tests\r\n\r\n---------\r\n\r\nCo-authored-by: jiacai2050 \u003cdev@liujiacai.net\u003e"
    },
    {
      "commit": "cf5ec10406d90290e1b9d557805e95c82520d507",
      "tree": "4351353ce31008a60b5a8958fda5c779473e07d0",
      "parents": [
        "148790c8faf75a13988e939313b1c6de2a00bc6e"
      ],
      "author": {
        "name": "Draco",
        "email": "dracode01@gmail.com",
        "time": "Sun May 12 08:27:03 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 12 08:27:03 2024 +0800"
      },
      "message": "chore: add mysql-client and grafana in docker image (#1530)\n\n## Rationale\r\n\r\nClose #1285 \r\n\r\nInstall mysql-client and grafana when building docker image.\r\n\r\n## Detailed Changes\r\n\r\n1. Install mysql-client and grafana in Dockerfile.\r\n2. Add docker/datasource.yml as grafana default datasource.\r\n3. Start grafana server in entrypoint.sh.\r\n\r\n### mysql-client\r\n\r\nIn the docker container:\r\n\r\n\u003cimg width\u003d\"640\" alt\u003d\"image\"\r\nsrc\u003d\"https://github.com/apache/incubator-horaedb/assets/55609330/5c59fd23-c54e-4761-8833-51355a81fada\"\u003e\r\n\r\n### grafana\r\n\r\nStart the container and access http://\u003cyour_ip\u003e:3000\r\n\r\n\u003cimg width\u003d\"1438\" alt\u003d\"image\"\r\nsrc\u003d\"https://github.com/apache/incubator-horaedb/assets/55609330/34a2718e-3803-4e01-b384-39ca64dea7b7\"\u003e\r\n\r\n## Test Plan\r\n\r\nNone."
    },
    {
      "commit": "148790c8faf75a13988e939313b1c6de2a00bc6e",
      "tree": "2543a598c754249f0af8d0770cacbd184458da17",
      "parents": [
        "3fef06d42d553d97bcb42823cfef1e3d34d636d7"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Fri May 10 19:40:28 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 10 19:40:28 2024 +0800"
      },
      "message": "fix: docker image use apache namespace (#1529)\n\n## Rationale\r\nAfter donate ceresdb to ASF, we should publish docker image under\r\napache.\r\n- https://hub.docker.com/r/apache/horaemeta-server\r\n- https://hub.docker.com/r/apache/horaedb-server\r\n\r\n## Detailed Changes\r\nUse `DOCKERHUB_USER ` `DOCKERHUB_TOKEN` to publish image. See details:\r\nhttps://issues.apache.org/jira/browse/INFRA-25736\r\n\r\n## Test Plan\r\nManually.\r\n-\r\nhttps://github.com/jiacai2050/incubator-horaedb/actions/runs/9029607730\r\n\r\n---------\r\n\r\nCo-authored-by: chunshao.rcs \u003cchunshao@apache.org\u003e"
    },
    {
      "commit": "3fef06d42d553d97bcb42823cfef1e3d34d636d7",
      "tree": "43a2542e5bb0986fc19fc1c3fd0e912b0e118183",
      "parents": [
        "6d391152d0c0faef6a7a36c0a16b9fdb7e984b64"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Fri May 10 11:25:39 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 10 11:25:39 2024 +0800"
      },
      "message": "chore: add dingtalk (#1528)\n\n## Rationale\r\nAdd dingtalk group for better communication with users in Chinese.\r\n\r\n## Detailed Changes\r\n\r\n\r\n## Test Plan\r\nNo need."
    },
    {
      "commit": "6d391152d0c0faef6a7a36c0a16b9fdb7e984b64",
      "tree": "f770f5e79c8bb55f36df8be36fca078afb1d6746",
      "parents": [
        "431ae5169f9c97bd5b6f6664be889df47c360a0a"
      ],
      "author": {
        "name": "CooooolFrog",
        "email": "zuliangwanghust@gmail.com",
        "time": "Mon May 06 17:15:08 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 06 17:15:08 2024 +0800"
      },
      "message": "refactor: allow disable wal in standalone mode (#1526)\n\n## Rationale\r\nCurrently, disable wal in standalone mode will directly cause panic.\r\nThis behavior is incorrect. Sometimes we also need to disable wal in\r\nstandalone mode.\r\n\r\n## Detailed Changes\r\n* Disable wal in stand-alone mode will not panic and print a log to warn\r\nthe user.\r\n\r\n## Test Plan\r\nPass CI."
    },
    {
      "commit": "431ae5169f9c97bd5b6f6664be889df47c360a0a",
      "tree": "764783236bc24507d7467d610bb6cb49d04d6978",
      "parents": [
        "e5c9923baf84be45a54c724f3f146c77de91b999"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Fri Apr 26 17:04:26 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 26 17:04:26 2024 +0800"
      },
      "message": "refactor: first step to refactor error (#1524)\n\n## Rationale\r\nPart of #1513\r\n\r\n## Detailed Changes\r\nReplace snafu-based Error to thiserror-based for memtable module.\r\n\r\n## Test Plan\r\nCI\r\n\r\n---------\r\n\r\nCo-authored-by: chunshao.rcs \u003cworcsrcsgg@163.com\u003e"
    },
    {
      "commit": "e5c9923baf84be45a54c724f3f146c77de91b999",
      "tree": "88ac6388d71424e9c37632b17f4aae56e2ccf820",
      "parents": [
        "ebca8a7855d3001301cd14ef21521eacb8efac28"
      ],
      "author": {
        "name": "chunshao.rcs",
        "email": "chunshao@apache.org",
        "time": "Fri Apr 26 14:46:05 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 26 14:46:05 2024 +0800"
      },
      "message": "feat(horaemeta): drop metadata of partition table by http api (#1477)\n\n## Rationale\r\nCurrently, not suppport to delete a partitioned table through HTTP API,\r\nas it results in a \"shard not found\" error.\r\n\r\n## Detailed Changes\r\nSince the partition table is not assigned to a shard, deleting the table\r\nmetadata directly.\r\n\r\n## Test Plan\r\n Manual test."
    },
    {
      "commit": "ebca8a7855d3001301cd14ef21521eacb8efac28",
      "tree": "cd8a2b279d308d8cf4759e958116d15eb2ee5939",
      "parents": [
        "dc38488ff9e540087069feea7d26727a1c942ee8"
      ],
      "author": {
        "name": "chunshao.rcs",
        "email": "chunshao@apache.org",
        "time": "Fri Apr 26 11:45:07 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 26 11:45:07 2024 +0800"
      },
      "message": "chore: add auto-label-pr action (#1520)\n\n## Rationale\r\nAutomatically label the pr based on the pr title.\r\n\r\n## Detailed Changes\r\nAutomatically label the pr based on the pr title.\r\n\r\n## Test Plan\r\nManual test."
    },
    {
      "commit": "dc38488ff9e540087069feea7d26727a1c942ee8",
      "tree": "136904a0059536ebc253f75dab76b71b99cbdce7",
      "parents": [
        "1ec00b6921a9116d9636aa5bd02d01fa1998ea9c"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Apr 22 15:52:48 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 22 15:52:48 2024 +0800"
      },
      "message": "chore(deps): bump golang.org/x/net from 0.17.0 to 0.23.0 in /integration_tests/sdk/go (#1521)\n\nBumps [golang.org/x/net](https://github.com/golang/net) from 0.17.0 to\r\n0.23.0.\r\n\u003cdetails\u003e\r\n\u003csummary\u003eCommits\u003c/summary\u003e\r\n\u003cul\u003e\r\n\u003cli\u003e\u003ca\r\nhref\u003d\"https://github.com/golang/net/commit/c48da131589f122489348be5dfbcb6457640046f\"\u003e\u003ccode\u003ec48da13\u003c/code\u003e\u003c/a\u003e\r\nhttp2: fix TestServerContinuationFlood flakes\u003c/li\u003e\r\n\u003cli\u003e\u003ca\r\nhref\u003d\"https://github.com/golang/net/commit/762b58d1cf6e0779780decad89c6c1523386638d\"\u003e\u003ccode\u003e762b58d\u003c/code\u003e\u003c/a\u003e\r\nhttp2: fix tipos in comment\u003c/li\u003e\r\n\u003cli\u003e\u003ca\r\nhref\u003d\"https://github.com/golang/net/commit/ba872109ef2dc8f1da778651bd1fd3792d0e4587\"\u003e\u003ccode\u003eba87210\u003c/code\u003e\u003c/a\u003e\r\nhttp2: close connections when receiving too many headers\u003c/li\u003e\r\n\u003cli\u003e\u003ca\r\nhref\u003d\"https://github.com/golang/net/commit/ebc8168ac8ac742194df729305175940790c55a2\"\u003e\u003ccode\u003eebc8168\u003c/code\u003e\u003c/a\u003e\r\nall: fix some typos\u003c/li\u003e\r\n\u003cli\u003e\u003ca\r\nhref\u003d\"https://github.com/golang/net/commit/3678185f8a652e52864c44049a9ea96b7bcc066a\"\u003e\u003ccode\u003e3678185\u003c/code\u003e\u003c/a\u003e\r\nhttp2: make TestCanonicalHeaderCacheGrowth faster\u003c/li\u003e\r\n\u003cli\u003e\u003ca\r\nhref\u003d\"https://github.com/golang/net/commit/448c44f9287b6745f958d74aa2a17ec7761c2f13\"\u003e\u003ccode\u003e448c44f\u003c/code\u003e\u003c/a\u003e\r\nhttp2: remove clientTester\u003c/li\u003e\r\n\u003cli\u003e\u003ca\r\nhref\u003d\"https://github.com/golang/net/commit/c7877ac4213b2f859831366f5a35b353e0dc9f66\"\u003e\u003ccode\u003ec7877ac\u003c/code\u003e\u003c/a\u003e\r\nhttp2: convert the remaining clientTester tests to testClientConn\u003c/li\u003e\r\n\u003cli\u003e\u003ca\r\nhref\u003d\"https://github.com/golang/net/commit/d8870b0bf2f2426fc8d19a9332f652da5c25418f\"\u003e\u003ccode\u003ed8870b0\u003c/code\u003e\u003c/a\u003e\r\nhttp2: use synthetic time in TestIdleConnTimeout\u003c/li\u003e\r\n\u003cli\u003e\u003ca\r\nhref\u003d\"https://github.com/golang/net/commit/d73acffdc9493532acb85777105bb4a351eea702\"\u003e\u003ccode\u003ed73acff\u003c/code\u003e\u003c/a\u003e\r\nhttp2: only set up deadline when Server.IdleTimeout is positive\u003c/li\u003e\r\n\u003cli\u003e\u003ca\r\nhref\u003d\"https://github.com/golang/net/commit/89f602b7bbf237abe0467031a18b42fc742ced08\"\u003e\u003ccode\u003e89f602b\u003c/code\u003e\u003c/a\u003e\r\nhttp2: validate client/outgoing trailers\u003c/li\u003e\r\n\u003cli\u003eAdditional commits viewable in \u003ca\r\nhref\u003d\"https://github.com/golang/net/compare/v0.17.0...v0.23.0\"\u003ecompare\r\nview\u003c/a\u003e\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\u003c/details\u003e\r\n\u003cbr /\u003e\r\n\r\n\r\n[![Dependabot compatibility\r\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dgolang.org/x/net\u0026package-manager\u003dgo_modules\u0026previous-version\u003d0.17.0\u0026new-version\u003d0.23.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\r\n\r\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\r\nalter it yourself. You can also trigger a rebase manually by commenting\r\n`@dependabot rebase`.\r\n\r\n[//]: # (dependabot-automerge-start)\r\n[//]: # (dependabot-automerge-end)\r\n\r\n---\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\r\n\u003cbr /\u003e\r\n\r\nYou can trigger Dependabot actions by commenting on this PR:\r\n- `@dependabot rebase` will rebase this PR\r\n- `@dependabot recreate` will recreate this PR, overwriting any edits\r\nthat have been made to it\r\n- `@dependabot merge` will merge this PR after your CI passes on it\r\n- `@dependabot squash and merge` will squash and merge this PR after\r\nyour CI passes on it\r\n- `@dependabot cancel merge` will cancel a previously requested merge\r\nand block automerging\r\n- `@dependabot reopen` will reopen this PR if it is closed\r\n- `@dependabot close` will close this PR and stop Dependabot recreating\r\nit. You can achieve the same result by closing it manually\r\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\r\nof the ignore conditions of the specified dependency\r\n- `@dependabot ignore this major version` will close this PR and stop\r\nDependabot creating any more for this major version (unless you reopen\r\nthe PR or upgrade to it yourself)\r\n- `@dependabot ignore this minor version` will close this PR and stop\r\nDependabot creating any more for this minor version (unless you reopen\r\nthe PR or upgrade to it yourself)\r\n- `@dependabot ignore this dependency` will close this PR and stop\r\nDependabot creating any more for this dependency (unless you reopen the\r\nPR or upgrade to it yourself)\r\nYou can disable automated security fix PRs for this repo from the\r\n[Security Alerts\r\npage](https://github.com/apache/incubator-horaedb/network/alerts).\r\n\r\n\u003c/details\u003e\r\n\r\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\r\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "1ec00b6921a9116d9636aa5bd02d01fa1998ea9c",
      "tree": "ef4af7c672a5aa79f19ce89fcc94d78d3851263d",
      "parents": [
        "7d6131cc413f61e535d49eaac4c78d63a596fd3c"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Apr 22 15:51:35 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 22 15:51:35 2024 +0800"
      },
      "message": "chore(deps): bump golang.org/x/net from 0.22.0 to 0.23.0 in /horaemeta (#1522)\n\nBumps [golang.org/x/net](https://github.com/golang/net) from 0.22.0 to\r\n0.23.0.\r\n\u003cdetails\u003e\r\n\u003csummary\u003eCommits\u003c/summary\u003e\r\n\u003cul\u003e\r\n\u003cli\u003e\u003ca\r\nhref\u003d\"https://github.com/golang/net/commit/c48da131589f122489348be5dfbcb6457640046f\"\u003e\u003ccode\u003ec48da13\u003c/code\u003e\u003c/a\u003e\r\nhttp2: fix TestServerContinuationFlood flakes\u003c/li\u003e\r\n\u003cli\u003e\u003ca\r\nhref\u003d\"https://github.com/golang/net/commit/762b58d1cf6e0779780decad89c6c1523386638d\"\u003e\u003ccode\u003e762b58d\u003c/code\u003e\u003c/a\u003e\r\nhttp2: fix tipos in comment\u003c/li\u003e\r\n\u003cli\u003e\u003ca\r\nhref\u003d\"https://github.com/golang/net/commit/ba872109ef2dc8f1da778651bd1fd3792d0e4587\"\u003e\u003ccode\u003eba87210\u003c/code\u003e\u003c/a\u003e\r\nhttp2: close connections when receiving too many headers\u003c/li\u003e\r\n\u003cli\u003e\u003ca\r\nhref\u003d\"https://github.com/golang/net/commit/ebc8168ac8ac742194df729305175940790c55a2\"\u003e\u003ccode\u003eebc8168\u003c/code\u003e\u003c/a\u003e\r\nall: fix some typos\u003c/li\u003e\r\n\u003cli\u003e\u003ca\r\nhref\u003d\"https://github.com/golang/net/commit/3678185f8a652e52864c44049a9ea96b7bcc066a\"\u003e\u003ccode\u003e3678185\u003c/code\u003e\u003c/a\u003e\r\nhttp2: make TestCanonicalHeaderCacheGrowth faster\u003c/li\u003e\r\n\u003cli\u003e\u003ca\r\nhref\u003d\"https://github.com/golang/net/commit/448c44f9287b6745f958d74aa2a17ec7761c2f13\"\u003e\u003ccode\u003e448c44f\u003c/code\u003e\u003c/a\u003e\r\nhttp2: remove clientTester\u003c/li\u003e\r\n\u003cli\u003e\u003ca\r\nhref\u003d\"https://github.com/golang/net/commit/c7877ac4213b2f859831366f5a35b353e0dc9f66\"\u003e\u003ccode\u003ec7877ac\u003c/code\u003e\u003c/a\u003e\r\nhttp2: convert the remaining clientTester tests to testClientConn\u003c/li\u003e\r\n\u003cli\u003e\u003ca\r\nhref\u003d\"https://github.com/golang/net/commit/d8870b0bf2f2426fc8d19a9332f652da5c25418f\"\u003e\u003ccode\u003ed8870b0\u003c/code\u003e\u003c/a\u003e\r\nhttp2: use synthetic time in TestIdleConnTimeout\u003c/li\u003e\r\n\u003cli\u003e\u003ca\r\nhref\u003d\"https://github.com/golang/net/commit/d73acffdc9493532acb85777105bb4a351eea702\"\u003e\u003ccode\u003ed73acff\u003c/code\u003e\u003c/a\u003e\r\nhttp2: only set up deadline when Server.IdleTimeout is positive\u003c/li\u003e\r\n\u003cli\u003e\u003ca\r\nhref\u003d\"https://github.com/golang/net/commit/89f602b7bbf237abe0467031a18b42fc742ced08\"\u003e\u003ccode\u003e89f602b\u003c/code\u003e\u003c/a\u003e\r\nhttp2: validate client/outgoing trailers\u003c/li\u003e\r\n\u003cli\u003eAdditional commits viewable in \u003ca\r\nhref\u003d\"https://github.com/golang/net/compare/v0.22.0...v0.23.0\"\u003ecompare\r\nview\u003c/a\u003e\u003c/li\u003e\r\n\u003c/ul\u003e\r\n\u003c/details\u003e\r\n\u003cbr /\u003e\r\n\r\n\r\n[![Dependabot compatibility\r\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dgolang.org/x/net\u0026package-manager\u003dgo_modules\u0026previous-version\u003d0.22.0\u0026new-version\u003d0.23.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\r\n\r\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\r\nalter it yourself. You can also trigger a rebase manually by commenting\r\n`@dependabot rebase`.\r\n\r\n[//]: # (dependabot-automerge-start)\r\n[//]: # (dependabot-automerge-end)\r\n\r\n---\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\r\n\u003cbr /\u003e\r\n\r\nYou can trigger Dependabot actions by commenting on this PR:\r\n- `@dependabot rebase` will rebase this PR\r\n- `@dependabot recreate` will recreate this PR, overwriting any edits\r\nthat have been made to it\r\n- `@dependabot merge` will merge this PR after your CI passes on it\r\n- `@dependabot squash and merge` will squash and merge this PR after\r\nyour CI passes on it\r\n- `@dependabot cancel merge` will cancel a previously requested merge\r\nand block automerging\r\n- `@dependabot reopen` will reopen this PR if it is closed\r\n- `@dependabot close` will close this PR and stop Dependabot recreating\r\nit. You can achieve the same result by closing it manually\r\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\r\nof the ignore conditions of the specified dependency\r\n- `@dependabot ignore this major version` will close this PR and stop\r\nDependabot creating any more for this major version (unless you reopen\r\nthe PR or upgrade to it yourself)\r\n- `@dependabot ignore this minor version` will close this PR and stop\r\nDependabot creating any more for this minor version (unless you reopen\r\nthe PR or upgrade to it yourself)\r\n- `@dependabot ignore this dependency` will close this PR and stop\r\nDependabot creating any more for this dependency (unless you reopen the\r\nPR or upgrade to it yourself)\r\nYou can disable automated security fix PRs for this repo from the\r\n[Security Alerts\r\npage](https://github.com/apache/incubator-horaedb/network/alerts).\r\n\r\n\u003c/details\u003e\r\n\r\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\r\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "7d6131cc413f61e535d49eaac4c78d63a596fd3c",
      "tree": "a91e4b22a944191a173310445d2fd706af9fd135",
      "parents": [
        "f72533cea279de8d453e28181fcb886407b5b0c4"
      ],
      "author": {
        "name": "chunshao.rcs",
        "email": "chunshao@apache.org",
        "time": "Mon Apr 22 15:50:26 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 22 15:50:26 2024 +0800"
      },
      "message": "chore: modify check-pr-title action (#1523)\n\n## Rationale\r\nRefer to\r\nhttps://github.com/apache/incubator-horaedb/actions/runs/8779713550\r\n```\r\nthehanimo/pr-title-checker@v1.4.1 is not allowed to be used in apache/incubator-horaedb. Actions in this workflow must be: within a repository owned by apache, created by GitHub, verified in the GitHub Marketplace\r\n```\r\n\r\n## Detailed Changes\r\nUse custom script to run.\r\n\r\n## Test Plan\r\nCI."
    },
    {
      "commit": "f72533cea279de8d453e28181fcb886407b5b0c4",
      "tree": "c116b9ba9f4f8115bca414649884a4e37573c17c",
      "parents": [
        "0cee69fa4dad05cd1d188497daf7a5d6072a1d76"
      ],
      "author": {
        "name": "chunshao.rcs",
        "email": "chunshao@apache.org",
        "time": "Thu Apr 18 17:21:33 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 18 17:21:33 2024 +0800"
      },
      "message": "chore: add check-pr-title action (#1516)\n\n## Rationale\r\nCheck whether the PR title is valid.\r\n\r\n## Detailed Changes\r\nValid PR title start with: `feat|fix|refactor|chore|docs`\r\n\r\n## Test Plan\r\nManual test."
    },
    {
      "commit": "0cee69fa4dad05cd1d188497daf7a5d6072a1d76",
      "tree": "87333ff2f3b6a4c995dd8e25184337d904ecd4d9",
      "parents": [
        "e2c9669484edfe2d93a316388c4bafbda9177263"
      ],
      "author": {
        "name": "MianChen",
        "email": "283559115@qq.com",
        "time": "Wed Apr 17 18:51:09 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 17 18:51:09 2024 +0800"
      },
      "message": "feat: add wal replay benchmark (#1511)\n\n"
    },
    {
      "commit": "e2c9669484edfe2d93a316388c4bafbda9177263",
      "tree": "50c3ff50c69d31b0453b5d66e8000725ea1f781a",
      "parents": [
        "55bbe273ab4a09e2f3428582ca9b4cdb5ee88763"
      ],
      "author": {
        "name": "chunshao.rcs",
        "email": "chunshao@apache.org",
        "time": "Wed Apr 17 14:12:59 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 17 14:12:59 2024 +0800"
      },
      "message": "chore: update protected_tags in .asf.yaml (#1514)\n\n## Rationale\r\nUpdate protected_tags in .asf.yaml.\r\n\r\n## Detailed Changes\r\nTemporarily ignore tag protection in order to remove erroneous tags\r\nv2.0.0 .\r\n\r\n## Test Plan\r\nNo need."
    },
    {
      "commit": "55bbe273ab4a09e2f3428582ca9b4cdb5ee88763",
      "tree": "6c74bbe3bbaf5281980661ebaa8c4dfc00f70243",
      "parents": [
        "23ceaa097ef9ca1c76794ec62c3253a5179b895a"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sun Apr 07 10:41:09 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 07 10:41:09 2024 +0800"
      },
      "message": "chore(deps): bump h2 from 0.3.24 to 0.3.26 (#1510)\n\n"
    },
    {
      "commit": "23ceaa097ef9ca1c76794ec62c3253a5179b895a",
      "tree": "02995304003dc8e71b6b2e5b4ff2d0f51fb0d06b",
      "parents": [
        "a1db882892013448c2ba93f6bee620aa2b021201"
      ],
      "author": {
        "name": "Jiacai Liu",
        "email": "dev@liujiacai.net",
        "time": "Mon Apr 01 13:56:28 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 01 13:56:28 2024 +0800"
      },
      "message": "chore: bump sqlness to 0.6.0 (#1509)\n\n## Rationale\r\n\r\n\r\n## Detailed Changes\r\nSee https://github.com/CeresDB/sqlness/releases/tag/v0.6.0\r\n\r\n## Test Plan\r\nCI"
    },
    {
      "commit": "a1db882892013448c2ba93f6bee620aa2b021201",
      "tree": "78ffbeb3b62ab7efa18cd24e33ed1e0ae0f05d59",
      "parents": [
        "9d64fc159bee6affbb18709915ba48be4b4ad8a6"
      ],
      "author": {
        "name": "鲍金日",
        "email": "baojinri@gmail.com",
        "time": "Fri Mar 29 18:45:33 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 29 18:45:33 2024 +0800"
      },
      "message": "feat: implement opentsdb query (#1453)\n\n## Rationale\r\nOpentsdb write protocol is already supported, this PR implement query\r\nprotocol.\r\n\r\n## Detailed Changes\r\n- Convert opentsdb query requests into datafusion logical plans\r\n- Convert the RecordBatch format of the query results into the return\r\nresponse format of the opentsdb query requests\r\n\r\n## Test Plan\r\n- Existing tests\r\n- add new unit tests and integration\r\n\r\n---------\r\n\r\nCo-authored-by: jiacai2050 \u003cdev@liujiacai.net\u003e\r\n"
    }
  ],
  "next": "9d64fc159bee6affbb18709915ba48be4b4ad8a6"
}
