Commit Graph
4815 Commits
Author SHA1 Message Date
Lei, HUANG 024714b1b5 fix(mito2): remove stale compaction status when next compaction is throttled (#8618)
I hereby agree to the terms of the [GreptimeDB
CLA](https://github.com/GreptimeTeam/.github/blob/main/CLA.md).

## Refer to a related PR or issue link (optional)

Fixes #8617

## What's changed and what's your intention?

**Summary:** Fixes a mito2 compaction scheduler bug where a region
permanently stops compacting after a finished compaction when
`min_compaction_interval` is configured to a non-zero value.

**Root cause:**

1. `CompactionScheduler::on_compaction_finished` falls through without
removing the region's `CompactionStatus` when there is no pending manual
request and no pending DDL, leaving a status with `active_compaction =
None` in `region_status`.
2. Back in `RegionWorkerLoop::handle_compaction_finished`,
`is_compacting()` is now `false`, but the follow-up
`schedule_next_compaction` (whose `Ok(None)` branch is the only normal
path that removes the status) is gated by `min_compaction_interval`.
Since the scheduling timestamp was already updated when the task was
scheduled, a compaction that finishes within the interval skips this
cleanup, and the stale status remains forever.
3. From then on, every compaction trigger hits the "status exists"
branch of `CompactionScheduler::schedule_compaction`, which does not
check whether a compaction is actually active: regular requests are
merged into `status.waiters` (never woken until close/drop/failure) and
manual `StrictWindow` requests are parked in `status.pending_request`
(never executed). The region never compacts again until restart and SSTs
keep accumulating.

Note this only manifests with `min_compaction_interval > 0`; with the
default `0` the gate always passes and `schedule_next_compaction` cleans
up the status.

**How this PR works:**

- Adds `CompactionScheduler::remove_inactive_status(region_id)`, which
removes the status only when it has no active compaction. A
`debug_assert!` guards the invariant that such a status has no
waiters/pending requests/pending DDLs (they can only be enqueued while a
compaction is active, and the worker loop is strictly sequential).
- Calls it from `handle_compaction_finished` when the
`min_compaction_interval` gate skips `schedule_next_compaction`,
restoring the invariant that a status in the map always has an active
compaction. The throttling semantics are unchanged: the next trigger
still has to wait for the interval to pass.

**Tests:**

- `test_remove_inactive_status_keeps_running_compaction`: status with an
active compaction (or no status) is never removed.
- `test_compaction_reschedulable_when_next_compaction_throttled`:
reproduces the reported flow — schedule, finish (stale status remains),
remove it as the throttled worker path does, and verify the region can
be scheduled for compaction again.

**Compatibility:** no API, persisted-format, or wire-format changes;
internal scheduler behavior only.

## PR Checklist
Please convert it to a draft if some of the following conditions are not
met.

- [x] I have written the necessary rustdoc comments.
- [x] I have added the necessary unit tests and integration tests.
- [ ] This PR requires documentation updates.
- [x] API changes are backward compatible.
- [x] Schema or data changes are backward compatible.
2026-07-23 12:03:11 +00:00
Lei, HUANG df2e82737c feat: invoke gc hook for offline region cleanup (#8613)
I hereby agree to the terms of the [GreptimeDB
CLA](https://github.com/GreptimeTeam/.github/blob/main/CLA.md).

## Refer to a related PR or issue link (optional)

## What's changed and what's your intention?

This patch adds region hook to soft-drop cleanup phase so we can remove
extension files managed by the hook.

some open questions:

- this cleanup logic sits in `handle_open.rs`, which is a little
confusing
- can we merge this cleanup with our current GC concept to reduce the
complexity?

## PR Checklist
Please convert it to a draft if some of the following conditions are not
met.

- [ ] I have written the necessary rustdoc comments.
- [ ] I have added the necessary unit tests and integration tests.
- [ ] This PR requires documentation updates.
- [ ] API changes are backward compatible.
- [ ] Schema or data changes are backward compatible.
2026-07-23 11:55:37 +00:00
LFC a46916509a fix(json2): encode deeply nested values as jsonb (#8612)
I hereby agree to the terms of the [GreptimeDB
CLA](https://github.com/GreptimeTeam/.github/blob/main/CLA.md).

## Refer to a related PR or issue link (optional)

## What's changed and what's your intention?

- Limit JSON2 structured nesting to 50 levels and encode deeper
objects/arrays as JSONB variants, avoiding Arrow DepthLimitReached.
- Decode nested JSONB variants when projecting JSON2 values to strings.
- Limit type hint path depth.

<!--
 __!!! DO NOT LEAVE THIS BLOCK EMPTY !!!__

Please explain IN DETAIL what the changes are in this PR and why they
are needed:

- Summarize your change (**mandatory**)
- How does this PR work? Need a brief introduction for the changed logic
(optional)
- Describe clearly one logical change and avoid lazy messages (optional)
- Describe any limitations of the current code (optional)
- Describe if this PR will break **API or data compatibility**
(optional)
-->

## PR Checklist
Please convert it to a draft if some of the following conditions are not
met.

- [x] I have written the necessary rustdoc comments.
- [x] I have added the necessary unit tests and integration tests.
- [ ] This PR requires documentation updates.
- [ ] API changes are backward compatible.
- [ ] Schema or data changes are backward compatible.
2026-07-23 10:29:31 +00:00
Lei, HUANG 9fed9a81f5 fix(mito2): remove stale compaction status when next compaction is throttled
When a compaction finishes with no pending request/DDL, on_compaction_finished
leaves the region's CompactionStatus in the map with no active compaction. If
the worker then skips schedule_next_compaction because min_compaction_interval
has not passed, the stale status is never cleaned up: all subsequent compaction
requests are swallowed by the "status exists" branch (regular waiters hang,
manual StrictWindow requests pend forever) and the region never compacts again
until restart.

Add CompactionScheduler::remove_inactive_status() and call it from
handle_compaction_finished when the interval gate skips scheduling the next
compaction, restoring the invariant that a status in the map always has an
active compaction.

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>
2026-07-23 17:34:19 +08:00
fys 9e7e7d4769 fix(json2): limit type hint path depth
Signed-off-by: fys <fengys1996@gmail.com>
2026-07-23 17:21:40 +08:00
fys 98d2dc07cc some changes
Signed-off-by: fys <fengys1996@gmail.com>
2026-07-23 17:21:40 +08:00
fys 53507eb098 add more sqlness
Signed-off-by: fys <fengys1996@gmail.com>
2026-07-23 17:21:40 +08:00
fys 6b27e1e1ec fix(json2): encode deeply nested values as jsonb
Signed-off-by: fys <fengys1996@gmail.com>
2026-07-23 17:21:40 +08:00
Ning Sun b7190fccee chore: doc change according to review request 2026-07-23 17:18:24 +08:00
Ning Sun 4eb88c852e feat: invoke gc hook for offline cleanup 2026-07-23 16:05:21 +08:00
Yingwen 1fab3a6837 feat(mito): add candidate series scanner (#8586)
I hereby agree to the terms of the [GreptimeDB
CLA](https://github.com/GreptimeTeam/.github/blob/main/CLA.md).

## Refer to a related PR or issue link (optional)

## What's changed and what's your intention?

This PR adds the candidate-series discovery stage for metric series
scans.

The new scanner reads only encoded primary keys from native memtable and
SST ranges, applies supported tag predicates to those keys, locally
deduplicates them, and uses DataFusion's streaming merge to produce
globally sorted, deduplicated `(table_id, tsid)` candidates in bounded
batches. This avoids reading full field data while discovering which
metric series need to participate in the later data scan.

Supporting changes:

- add a primary-key-only Parquet row-group reader while preserving
binary/dictionary decoding;
- expose reusable encoded-primary-key filters from reader prefilter
plans;
- separate candidate-series entries from normal data entries in the
range-result cache;
- add sparse primary-key decoding helpers and error variants;
- add unit tests and a benchmark for filtering, sorting, deduplication,
decoding, and cache-key isolation;
- reject unsupported metadata and extension-range layouts so callers can
retain the legacy fallback.

The change is internal to Mito's read path and does not alter public
APIs, persisted schemas, or on-disk formats.

Validation:

- `cargo fmt --all -- --check`
- `cargo nextest run --retries 0 -p mito2 series_candidate` was
attempted, but compilation stopped because the local disk ran out of
space while rustc was writing build artifacts.

## PR Checklist

- [x] I have written the necessary rustdoc comments.
- [x] I have added the necessary unit tests and integration tests.
- [ ] This PR requires documentation updates.
- [x] API changes are backward compatible.
- [x] Schema or data changes are backward compatible.
2026-07-23 07:08:03 +00:00
Lei, HUANG 57767f4a67 fix: prevent credential leaks in sanitize_connection_string (#8539)
Reopens #8486, which was accidentally closed (and whose branch history
I've since repaired, so it couldn't be reopened in place).

## What's changed and why

`sanitize_connection_string` redacts `store_addrs` before they're
logged, but the previous hand-rolled parsing missed several forms and
could leak passwords.

Per the review on #8486 (@killme2008 suggested the `url` crate; @v0y4g3r
listed additional libpq formats):

- **URL-form addresses** (`mysql://`, `postgresql://`, `http://` etcd)
are now parsed with the **`url` crate**; the userinfo password and any
`password` query parameter are redacted.
- **libpq keyword DSNs** (`host=… password=…`) are handled by a small
redactor covering `password = x` (spaces around `=`),
single/double-quoted values with spaces, and `\`-escaped quotes.

I kept a dedicated redactor for the keyword-DSN form rather than
`tokio-postgres`, since `tokio-postgres` is an optional/feature-gated
dependency in `common-meta` (this function runs unconditionally) and
`store_addrs` also covers mysql/etcd, which it can't parse.

## Checklist

- [x] I have written the necessary rustdoc comments.
- [x] I have added the necessary unit tests.

By submitting this pull request, I confirm that my contribution is made
under the terms of the GreptimeDB CLA.
2026-07-23 07:05:34 +00:00
evenyag 137b9fae86 fix(mito2): compat primary-key-only reads
Signed-off-by: evenyag <realevenyag@gmail.com>
2026-07-23 14:12:19 +08:00
raphaelroshan e31eeb8d39 fix: prevent credential leaks in sanitize_connection_string
Parse PostgreSQL DSNs (URL or libpq keyword) with tokio_postgres::Config —
the backend's own parser — and log its Debug, which redacts the password.
This matches the backend grammar exactly (multi-host URIs, backslash
escapes, any Unicode whitespace, percent-encoded query keys, and '&'/';'/
'://' inside values) rather than approximating it by hand. Other URLs are
redacted via the url crate; a best-effort keyword fallback covers inputs
neither parser accepts.

Signed-off-by: raphaelroshan <raphaelroshan@gmail.com>
2026-07-23 12:45:55 +08:00
discord9 45fc51ebd2 fix: demote expected remote dynamic filter misses (#8574)
Signed-off-by: discord9 <discord9@163.com>
2026-07-23 04:39:56 +00:00
discord9 e18179f842 fix: demote expected remote dynamic filter misses (#8574)
I hereby agree to the terms of the [GreptimeDB
CLA](https://github.com/GreptimeTeam/.github/blob/main/CLA.md).

## Refer to a related PR or issue link (optional)

## What's changed and what's your intention?

Remote dynamic filter updates and unregisters can legitimately arrive
after the
datanode registration has already been removed. This happens when
stream-scoped
cleanup wins the race with asynchronous frontend fanout, and when
multiple
subscriber regions on the same datanode fan out unregister requests for
a
query/filter registration that the first unregister already removed.

These expected lifecycle races return `MissingRegistration` as an
idempotent
no-op, but previously emitted both a registry-specific warning and a
generic
outcome warning for every late request. On multi-region queries this
could
produce large warning bursts.

This PR:

- logs missing query/filter registrations at debug level;
- logs the generic `MissingRegistration` outcome at debug level;
- preserves warnings for `AlreadyComplete`, oversized payloads, decode
failures,
  and other genuine anomalies;
- leaves outcomes, metrics, and control flow unchanged.

Validation:

- `cargo nextest run -p datanode
test_apply_remote_dyn_filter_update_missing_registration`
- `cargo nextest run -p datanode
test_remote_dyn_filter_unregister_removes_all_region_subscribers_for_filter`
- `rustfmt +nightly --edition 2024 --check
src/datanode/src/region_server/registrations.rs
src/datanode/src/region_server/remote_dyn_filter.rs`
- `git diff --cached --check`

## PR Checklist
Please convert it to a draft if some of the following conditions are not
met.

- [x] I have written the necessary rustdoc comments. (No public API was
added.)
- [x] I have added the necessary unit tests and integration tests.
(Existing lifecycle tests cover the unchanged outcomes.)
- [ ] This PR requires documentation updates.
- [x] API changes are backward compatible.
- [x] Schema or data changes are backward compatible.
2026-07-23 04:39:56 +00:00
Yingwen 9b579c7618 feat: make parquet row group size configurable (#8446)
* feat: make parquet row group size configurable via max_row_group_row_count region option

Signed-off-by: evenyag <realevenyag@gmail.com>

* feat: split inverted index segments across row group boundaries

Signed-off-by: evenyag <realevenyag@gmail.com>

* test: verify max_row_group_row_count region option

Signed-off-by: evenyag <realevenyag@gmail.com>

* test: update row group size sqlness result

Signed-off-by: evenyag <realevenyag@gmail.com>

* fix(mito2): use parquet row group size for index rebuild

Signed-off-by: evenyag <realevenyag@gmail.com>

* fix: update query perf fixture indexer builder

Signed-off-by: evenyag <realevenyag@gmail.com>

* fix(mito2): clamp index selection to parquet rows

Signed-off-by: evenyag <realevenyag@gmail.com>

* feat: support altering parquet row group size

Signed-off-by: evenyag <realevenyag@gmail.com>

* fix(mito2): handle idempotent append mode in mixed alters

Signed-off-by: evenyag <realevenyag@gmail.com>

* fix(mito2): stage mixed region option alters atomically

Signed-off-by: evenyag <realevenyag@gmail.com>

* fix(mito2): ignore inverted indexes with mismatched row counts

Signed-off-by: evenyag <realevenyag@gmail.com>

---------

Signed-off-by: evenyag <realevenyag@gmail.com>
2026-07-23 03:56:10 +00:00
Lei, HUANG 041ba98203 feat: make parquet row group size configurable (#8446)
I hereby agree to the terms of the [GreptimeDB
CLA](https://github.com/GreptimeTeam/.github/blob/main/CLA.md).

## Refer to a related PR or issue link (optional)

## What's changed and what's your intention?

This PR adds a `max_row_group_row_count` region option for the Mito
engine and wires it through region options, alter handling, flush, and
Parquet bulk memtable writing so SST row group sizing can be controlled
per region.

It also updates inverted index row selection logic so selected row
ranges are split correctly across Parquet row group boundaries, and adds
SQL/engine tests for creating and flushing regions with the new option.

Validation: not run in this session; this PR was created from the
existing branch state.

## PR Checklist
Please convert it to a draft if some of the following conditions are not
met.

- [x] I have written the necessary rustdoc comments.
- [x] I have added the necessary unit tests and integration tests.
- [ ] This PR requires documentation updates.
- [x] API changes are backward compatible.
- [x] Schema or data changes are backward compatible.
2026-07-23 03:56:10 +00:00
evenyag c944c90074 Merge remote-tracking branch 'upstream/main' into feat/series-key-stream
Signed-off-by: evenyag <realevenyag@gmail.com>

# Conflicts:
#	src/mito2/src/sst/parquet/reader.rs
2026-07-23 11:34:56 +08:00
discord9 7bd7cd0e55 fix: demote expected remote dynamic filter misses
Signed-off-by: discord9 <discord9@163.com>
2026-07-23 11:32:49 +08:00
shuiyisong d9122ece3c perf: optimize OTLP trace ingestion (#8604)
perf: optimize trace ingestion

Signed-off-by: shuiyisong <xixing.sys@gmail.com>
2026-07-22 13:16:19 +00:00
Ning Sun e8ece029f8 perf: optimize OTLP trace ingestion (#8604)
I hereby agree to the terms of the [GreptimeDB
CLA](https://github.com/GreptimeTeam/.github/blob/main/CLA.md).

## Refer to a related PR or issue link (optional)

## What's changed and what's your intention?

This pull request improves the OTLP trace-ingestion hot path by
resolving fixed column indexes once per chunk, writing fixed values
directly by index, and replacing per-byte formatting with `hex::encode`.
It raises the default `otlp.trace_ingest_chunk_size` from 128 to 512 and
updates the example configurations, generated configuration reference,
and ingestion README. Explicit chunk-size settings remain unchanged, but
deployments relying on the released default will batch more spans per
chunk.

## PR Checklist
Please convert it to a draft if some of the following conditions are not
met.

- [ ] I have written the necessary rustdoc comments.
- [ ] I have added the necessary unit tests and integration tests.
- [ ] This PR requires documentation updates.
- [ ] API changes are backward compatible.
- [ ] Schema or data changes are backward compatible.
2026-07-22 13:16:19 +00:00
Lei, HUANG c8f65c7b99 feat: update flow windows after metric batch flush (#8544)
* feat: update flow windows after metric batch flush

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

* refactor: move batch rows into flow notifier

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

* fix: preserve timestamp index in metric batches

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

* fix: avoid blocking flow notification lookups

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

* fix: add context to timestamp extraction logs

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

* fix: include peer in flow notification errors

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

* feat: compact flow notifications with time ranges

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

* fix: bound pending flow notification queue

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

* refactor: send raw timestamps in flow notifications

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

* test: update config API snapshot

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>

---------

Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>
2026-07-22 13:09:30 +00:00
Lei, HUANG 5fe17531ee feat: update flow windows after metric batch flush (#8544)
## Summary

- Add post-flush dirty-window notifications for metric writes through
`PendingRowsBatcher`, so batching-mode flows are updated when Prometheus
remote write uses the pending-row batcher path.
- Notifications fire only after the entire physical flush succeeds;
failed flushes (including partial region failures) send no notification.
Notification errors are best-effort and never affect the persisted write
result.
- Optimize timestamp extraction with a null-free fast path
(`extend_from_slice(values())`) and a nullable fallback
(`iter().flatten()`).
- Refactor notifier to take ownership of `Vec<TableBatch>`, eliminating
the per-flush vector clone.
- Key `PendingBatch` by logical `TableId` to prevent same-name
drop/recreate merging within one flush interval.

## Known follow-ups (from self-review)

- Per-peer `Vec<i64>` clone in notifier could use `Arc<Vec<i64>>`;
intentionally deferred as the cost is negligible for typical peer
counts.
- No integration/sqlness test for end-to-end flow notification through
the batcher.
- Cache lookup `Err` path and multi-table flush path lack dedicated unit
tests.

## Test Plan

- [x] `cargo nextest run -p servers --lib --retries 0` — 293 tests pass
- [x] `cargo fmt --all -- --check`
- [x] `cargo check -p servers -p frontend -p operator -p
tests-integration`
- [x] `git diff --check`
2026-07-22 13:09:30 +00:00
LFC eddedff769 fix(json2): treat empty object as null when insert (#8602)
* fix(json2): treat empty object as null when insert

Signed-off-by: luofucong <luofc@foxmail.com>

* fix ci

Signed-off-by: luofucong <luofc@foxmail.com>

---------

Signed-off-by: luofucong <luofc@foxmail.com>
2026-07-22 13:09:02 +00:00
dennis zhuang 711507808b fix(json2): treat empty object as null when insert (#8602)
I hereby agree to the terms of the [GreptimeDB
CLA](https://github.com/GreptimeTeam/.github/blob/main/CLA.md).

## Refer to a related PR or issue link (optional)

## What's changed and what's your intention?

as title

## PR Checklist
Please convert it to a draft if some of the following conditions are not
met.

- [ ] I have written the necessary rustdoc comments.
- [ ] I have added the necessary unit tests and integration tests.
- [ ] This PR requires documentation updates.
- [ ] API changes are backward compatible.
- [ ] Schema or data changes are backward compatible.
2026-07-22 13:09:02 +00:00
f107f92688 fix(query): harden range time conversion (#8515)
* fix(query): harden range time conversion

Signed-off-by: discord9 <discord9@163.com>

* Apply suggestions from code review

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Signed-off-by: discord9 <discord9@163.com>
Co-authored-by: dennis zhuang <killme2008@gmail.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-07-22 11:57:04 +00:00
Lei, HUANG 3a09b4c50a Merge branch 'main' into feat/metrics-batch-update-flow-window 2026-07-22 19:01:53 +08:00
shuiyisong 1cf4195d1b perf: optimize trace ingestion
Signed-off-by: shuiyisong <xixing.sys@gmail.com>
2026-07-22 18:56:57 +08:00
discord9 3155d49f84 fix: convert literals in joins and subqueries (#8501)
* fix: convert literals in joins and subqueries

Signed-off-by: discord9 <discord9@163.com>

* fix: preserve semi joins with duplicate fields

Signed-off-by: discord9 <discord9@163.com>

* test: update limit error after subquery conversion

Signed-off-by: discord9 <discord9@163.com>

---------

Signed-off-by: discord9 <discord9@163.com>
2026-07-22 10:48:26 +00:00
evenyag 3512e892ec docs(mito2): clarify candidate scanner invariants
Signed-off-by: evenyag <realevenyag@gmail.com>
2026-07-22 18:46:56 +08:00
discord9 f65e83fe39 fix(pipeline)!: check integer narrowing (#8589)
fix(pipeline): check integer narrowing

Signed-off-by: discord9 <discord9@163.com>
2026-07-22 10:43:38 +00:00
discord9 8b47fd53bd fix: qualify scalar-subquery tables in persisted views (#8581)
fix(query): traverse scalar subqueries in views

Signed-off-by: discord9 <discord9@163.com>
2026-07-22 10:43:24 +00:00
discord9 4c5be47400 fix(flow): downgrade disabled incremental checkpoint log (#8572)
Signed-off-by: discord9 <discord9@163.com>
2026-07-22 10:41:09 +00:00
discord9andLei, HUANG 0564269426 fix: bind Prom remote read schema per query (#8591)
Signed-off-by: discord9 <discord9@163.com>
Co-authored-by: Lei, HUANG <6406592+v0y4g3r@users.noreply.github.com>
2026-07-22 10:14:39 +00:00
fys 4d61471cc8 feat(json2): support JSON2 nested path fallback reads (#8540)
* feat: add nested read strategy for variant parent fallback

Signed-off-by: fys <fengys1996@gmail.com>

* refactor: drop nested fallback metadata from projection plan

Signed-off-by: fys <fengys1996@gmail.com>

* refactor: simplify nested parquet fallback planning

Signed-off-by: fys <fengys1996@gmail.com>

* add docs

Signed-off-by: fys <fengys1996@gmail.com>

* add Json2FallbackPlan

Signed-off-by: fys <fengys1996@gmail.com>

* add Json2FallbackDecoder

Signed-off-by: fys <fengys1996@gmail.com>

* test: add json2 nested fallback sqlness coverage

Signed-off-by: fys <fengys1996@gmail.com>

* add more sqlness test about json2 nested read

Signed-off-by: fys <fengys1996@gmail.com>

* refactor: split parquet reader nested stream helpers

Signed-off-by: fys <fengys1996@gmail.com>

* cache somethins in hot path

Signed-off-by: fys <fengys1996@gmail.com>

* chore: refine code

Signed-off-by: fys <fengys1996@gmail.com>

* minor change

Signed-off-by: fys <fengys1996@gmail.com>

* feat(mito2): align nested JSON2 parquet schemas

Signed-off-by: fys <fengys1996@gmail.com>

* refactor(mito2): default nested JSON reads to fallback

Signed-off-by: fys <fengys1996@gmail.com>

* chore: revert some unnecessary changes

Signed-off-by: fys <fengys1996@gmail.com>

* disallow JSON2 root fallback in parquet projection

Signed-off-by: fys <fengys1996@gmail.com>

* document JSON2 fallback root guard

* fix(json2): support variant-to-struct schema alignment

* refactor: simplify nested JSON schema alignment

* fix: cr

* fix: cr

* chore: add comment for null_on_json_type_mismatch

---------

Signed-off-by: fys <fengys1996@gmail.com>
2026-07-22 09:42:26 +00:00
Lei, HUANG 036db3d1ec fix: ignore dropping marker during GC (#8588)
Signed-off-by: Lei, HUANG <mrsatangel@gmail.com>
2026-07-22 09:17:26 +00:00
luofucong 2efbb2f5d7 fix(json2): treat empty object as null when insert
Signed-off-by: luofucong <luofc@foxmail.com>
2026-07-22 17:15:23 +08:00
discord9 9f5a11e82a fix(flow): lower routine batching messages to debug (#8592)
fix(flow): reduce expected batching log noise

Signed-off-by: discord9 <discord9@163.com>
2026-07-22 08:46:42 +00:00
Lei, HUANG 9996004039 Merge branch 'main' into feat/metrics-batch-update-flow-window 2026-07-22 16:11:34 +08:00
evenyag d170f87251 fix(mito2): guard primary-key-only SST reads
Signed-off-by: evenyag <realevenyag@gmail.com>
2026-07-22 16:10:55 +08:00
evenyag 5aa3c8c4d0 refactor(mito): improve candidate series scan
Signed-off-by: evenyag <realevenyag@gmail.com>
2026-07-22 16:10:55 +08:00
evenyag 0873517b98 refactor(mito): clean up series candidate scanner
Signed-off-by: evenyag <realevenyag@gmail.com>
2026-07-22 16:10:55 +08:00
evenyag 65ca13d56a feat(mito): bench series candidate scan
Signed-off-by: evenyag <realevenyag@gmail.com>
2026-07-22 16:10:55 +08:00
evenyag bd2f590e97 refactor(mito): exclude other ranges from candidate scan
Signed-off-by: evenyag <realevenyag@gmail.com>
2026-07-22 16:10:55 +08:00
evenyag b940ea55fd feat(mito): add candidate series scanner
Signed-off-by: evenyag <realevenyag@gmail.com>
2026-07-22 16:10:54 +08:00
8843dc9104 fix: stabilize remote analyze stage ordering (#8584)
* fix: stabilize remote analyze stage ordering

Signed-off-by: discord9 <discord9@163.com>

* Update src/query/src/dist_plan/merge_scan.rs

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

---------

Signed-off-by: discord9 <discord9@163.com>
Co-authored-by: Lei, HUANG <6406592+v0y4g3r@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-07-22 15:57:19 +08:00
discord9 4a0dd8f9bc fix(query): preserve bare plan names in analyze json (#8519)
Signed-off-by: discord9 <discord9@163.com>
2026-07-22 03:33:19 +00:00
Ning Sun d9b58edbb0 feat: add a region hook for gc cleanup (#8547)
* feat: add a region hook for gc cleanup

* chore: more tests and review fix

* fix: address review comments

* fix: address review comments
2026-07-22 03:27:04 +00:00
Lei, HUANG 5ece40bf77 refactor: send raw timestamps in flow notifications
Signed-off-by: Lei, HUANG <ratuthomm@gmail.com>
2026-07-21 23:07:33 +08:00