Visitar URL original
feat: columnar faceting (plans 1-6) by robfrank · Pull Request #10855 · ArcadeData/arcadedb · GitHub
Skip to content

feat: columnar faceting (plans 1-6) - #10855

Closed
robfrank wants to merge 93 commits into
mainfrom
feat/columnar-faceting
Closed

robfrank wants to merge 93 commits into
mainfrom
feat/columnar-faceting

Conversation

@robfrank

@robfrank robfrank commented Oct 28, 2026 •

Copy link
Copy Markdown
Collaborator

What does this PR do?

Exact faceted counts (TERMS, RANGES, HISTOGRAM, HIERARCHY, DISTINCT, STATS, AFTER paging, facet.searchValues) computed from a per-bucket columnar projection (new COLUMNAR index), exposed through a new SQL FACETS clause on every transport. Part of #10355.

CREATE INDEX ON Asset (brand) COLUMNAR
CREATE INDEX ON Asset (tags BY ITEM) COLUMNAR
CREATE INDEX ON Asset (publishDate) COLUMNAR

SELECT @rid, title FROM Asset WHERE fileSize > 1000
FACETS
  brand TERMS TOP 10,
  tags  TERMS TOP 20 MIN_COUNT 2,
  pub:  publishDate HISTOGRAM CALENDAR '1M' TIMEZONE 'America/New_York'
LIMIT 20

The design overview for reviewers is docs/superpowers/specs/2026-10-28-columnar-faceting-overview.md (storage, update path, consistency, performance, operations). The spec, roadmap and the six plans are in docs/superpowers/.

Motivation

Faceted navigation (counts per brand, tag, size range, month) over large result sets today needs one GROUP BY per facet, each a full pass over the matching records. This computes all facets of a query in one pass over compact columns, exact, and returns them with the rows.

Related issues

Part of #10355 (umbrella); #10356, #10357, #10358, #10359 delivered here, #10360 in progress, #10361 to come; follow-ups #10662 (tuning), ArcadeData/arcadedb-python#289 (Python client).

Status: draft, work in progress

Plan Issue State
1. Feasibility spike #10356 done (go)
2. Codec and block-format extraction from time series #10357 done
3. COLUMNAR index, segment store, change tracking, recovery, HA #10358 done
4. FACETS clause, exact execution, HTTP/ndjson/gRPC/remote clients, OpenAPI #10359 done
5. Hierarchical facets, DISTINCT, STATS, AFTER cursor, value search, GROUP BY acceleration (no WHERE) #10360 done
6. HA resilience (chaos, e2e-ha) and load tests #10361 done

Still to come before this can leave draft: a tuning phase (#10662), and the Python client in arcadedb-python (#10666).

Additional Notes

How to read the history

A linear history on top of main: one commit per plan task (plus the final review fix batches of each plan), each a reviewed checkpoint. One dedicated commit, fix(columnar): adapt the projection's durability to group commit and index rename on main, adapts the projection's WAL force to main's group commit (#10509) and keeps WAL files while a queued columnar mark is in flight (ColumnarPendingMarksWALTest).

Highlights

  • Facet data lives in a per-bucket on-disk projection, applied in the background from dirty-page marks; queries stay exact while it lags by patching pending pages, and include the caller's own uncommitted writes.
  • Every count respects bucket-level read permissions; restricted users never see counts of hidden records.
  • Memory budget, timeouts and a fallback scan bound every facet query; queries without FACETS are unchanged on every transport.
  • Measured at 200k records: facets 17-30 ms vs the equivalent GROUP BY at 285-299 ms; exact under a 5000-mutation lag at about 0.32x the GROUP BY time.
  • Known cost: inserts 6-10% and updates about 4.5% slower with a COLUMNAR index (tracked for the tuning phase, Columnar faceting 7/7: performance tuning of ingest overhead and facet queries #10662).

Testing

  • Facet and columnar engine tests against a GROUP BY oracle, crash/recovery tests, dictionary compaction, schema-change rebuilds.
  • SQL regression set, transport ITs (HTTP, ndjson, Java remote, gRPC, security, memory budget), HA follower and snapshot ITs, metrics IT, benchmark (@Tag("benchmark")).

Checklist

  • I have run the build using mvn clean package command (not yet: per-task test sets, the SQL regression set and the facet ITs were run; the full build is pending)
  • My unit tests cover both failure and success scenarios

🤖 Generated with Claude Code

@coderabbitai

coderabbitai Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@claude

claude Bot commented Oct 28, 2026

Copy link
Copy Markdown

Review (partial, summary-level)

This PR is too large to review in full. The GitHub diff API refuses it (over 300 files), so this is a targeted pass over the engine index/columnar package and the PR description. It is a draft from a maintainer, so I kept it high level.

Checked, no problems found

  • No ObjectInputStream, Runtime.exec or ProcessBuilder in index/columnar.
  • No ForkJoinPool.commonPool or parallelStream. The dedicated ColumnarApplyPool and ColumnarMaintenancePool are consistent with the engine-concurrency rule.
  • ColumnarTestHooks.killPoint is null in production, so the check costs one volatile read. Acceptable, but a public mutable static in main code deserves a note that it is test-only.
  • No System.out in the package.

Suggestions before leaving draft

  1. Build checkbox. mvn clean package is not run yet. Please run mvn verify on the affected modules with -am, including gremlin, graphql and grpcw if the transports touch them.
  2. Security tests. The bucket-level permission claim ("restricted users never see counts of hidden records") is the most sensitive part. Keep a test proving it on every transport, including the AFTER cursor and value search once plan 5 lands. Value search and DISTINCT could leak hidden values if they bypass the permission filter.
  3. Resource bounds. Check that TOP, MIN_COUNT and histogram bucket counts have upper limits. A tiny HISTOGRAM CALENDAR interval over a wide range could create a huge number of buckets.
  4. Write overhead. Inserts 6-10% and updates about 4.5% slower with a COLUMNAR index is fine as opt-in. Make sure types without one pay nothing on the write path (the INDEX_WRITES opt-out tests look like they cover this).
  5. Docs. docs/superpowers/ holds a lot of plan material. Decide whether all of it should stay in the repo, or only the overview spec.
  6. Tests. Per CLAUDE.md, crash/recovery and HA tests need @Tag("slow") where they take noticeable time. Confirm none bind fixed ports or assert on raw wall-clock time (use StallAwareStopwatch).

I did not find a security hazard, so I am not adding the "do not merge" label. A deeper review makes sense once plans 5 and 6 are in.

@codacy-production

codacy-production Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

@github-actions

Copy link
Copy Markdown
Contributor

📜 License Compliance Check

✅ License check passed. See artifacts for full report.

License Summary (first 50 lines)

Lists of 418 third-party dependencies.
     (CC0 1.0 Universal) AOP alliance (aopalliance:aopalliance:1.0 - http://aopalliance.sourceforge.net)
     (Apache License 2.0) LZ4 Java Compression (at.yawk.lz4:lz4-java:1.12.1 - https://github.com/yawkat/lz4-java)
     (EPL-2.0) (LGPL-2.1-only) Logback Classic Module (ch.qos.logback:logback-classic:1.6.5 - http://logback.qos.ch/logback-classic)
     (EPL-2.0) (LGPL-2.1-only) Logback Core Module (ch.qos.logback:logback-core:1.6.5 - http://logback.qos.ch/logback-core)
     (Apache 2) ArcadeDB BOLT Protocol (com.arcadedb:arcadedb-bolt:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-bolt/)
     (Apache 2) ArcadeDB Console (com.arcadedb:arcadedb-console:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-console/)
     (Apache 2) ArcadeDB Engine (com.arcadedb:arcadedb-engine:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-engine/)
     (Apache 2) ArcadeDB GraphQL (com.arcadedb:arcadedb-graphql:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-graphql/)
     (Apache 2) ArcadeDB Gremlin (com.arcadedb:arcadedb-gremlin:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-gremlin/)
     (Apache 2) ArcadeDB gRPC Stubs (com.arcadedb:arcadedb-grpc:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-grpc/)
     (Apache 2) ArcadeDB gRPC Client (com.arcadedb:arcadedb-grpc-client:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-grpc-client/)
     (Apache 2) ArcadeDB gRpcW (com.arcadedb:arcadedb-grpcw:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-grpcw/)
     (Apache 2) ArcadeDB HA Raft (com.arcadedb:arcadedb-ha-raft:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-ha-raft/)
     (Apache 2) ArcadeDB Integration (com.arcadedb:arcadedb-integration:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-integration/)
     (Apache 2) ArcadeDB load tests (com.arcadedb:arcadedb-load-tests:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-load-tests/)
     (Apache 2) ArcadeDB MCP Server (com.arcadedb:arcadedb-mcp:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-mcp/)
     (Apache 2) ArcadeDB Metrics (com.arcadedb:arcadedb-metrics:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-metrics/)
     (Apache 2) ArcadeDB MongoDB Wire Protocol (com.arcadedb:arcadedb-mongodbw:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-mongodbw/)
     (Apache 2) ArcadeDB Network (com.arcadedb:arcadedb-network:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-network/)
     (Apache 2) ArcadeDB PostgresW (com.arcadedb:arcadedb-postgresw:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-postgresw/)
     (Apache 2) ArcadeDB RedisW (com.arcadedb:arcadedb-redisw:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-redisw/)
     (Apache 2) ArcadeDB Server (com.arcadedb:arcadedb-server:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-server/)
     (Apache 2) ArcadeDB Studio (com.arcadedb:arcadedb-studio:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-studio/)
     (Apache 2) ArcadeDB Tracing (com.arcadedb:arcadedb-tracing:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-tracing/)
     (Apache License 2.0) HPPC Collections (com.carrotsearch:hppc:0.7.1 - http://labs.carrotsearch.com/hppc.html/hppc)
     (Apache License 2.0) Metrics Core (com.codahale.metrics:metrics-core:3.0.2 - http://metrics.codahale.com/metrics-core/)
     (The Apache License, Version 2.0) com.conversantmedia:disruptor (com.conversantmedia:disruptor:1.2.21 - https://github.com/conversant/disruptor)
     (Apache License 2.0) Jackson-annotations (com.fasterxml.jackson.core:jackson-annotations:2.22 - https://github.com/FasterXML/jackson)
     (Apache License 2.0) Jackson-core (com.fasterxml.jackson.core:jackson-core:2.22.4 - https://github.com/FasterXML/jackson-core)
     (Apache License 2.0) jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.22.4 - https://github.com/FasterXML/jackson)
     (Apache License 2.0) Jackson-dataformat-YAML (com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.22.4 - https://github.com/FasterXML/jackson-dataformats-text)
     (Apache License 2.0) Jackson datatype: jdk8 (com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.22.4 - https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8)
     (Apache License 2.0) Jackson datatype: JSR310 (com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.22.4 - https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310)
     (Apache License 2.0) Caffeine cache (com.github.ben-manes.caffeine:caffeine:2.3.1 - https://github.com/ben-manes/caffeine)
     (Apache License 2.0) docker-java-api (com.github.docker-java:docker-java-api:3.7.1 - https://github.com/docker-java/docker-java)
     (Apache License 2.0) docker-java-transport (com.github.docker-java:docker-java-transport:3.7.1 - https://github.com/docker-java/docker-java)
     (Apache License 2.0) docker-java-transport-zerodep (com.github.docker-java:docker-java-transport-zerodep:3.7.1 - https://github.com/docker-java/docker-java)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) btf (com.github.java-json-tools:btf:1.3 - https://github.com/java-json-tools/btf)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) jackson-coreutils (com.github.java-json-tools:jackson-coreutils:2.0 - https://github.com/java-json-tools/jackson-coreutils)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) jackson-coreutils-equivalence (com.github.java-json-tools:jackson-coreutils-equivalence:1.0 - https://github.com/java-json-tools/jackson-coreutils)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) json-patch (com.github.java-json-tools:json-patch:1.13 - https://github.com/java-json-tools/json-patch)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) json-schema-core (com.github.java-json-tools:json-schema-core:1.2.14 - https://github.com/java-json-tools/json-schema-core)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) json-schema-validator (com.github.java-json-tools:json-schema-validator:2.2.14 - https://github.com/java-json-tools/json-schema-validator)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) msg-simple (com.github.java-json-tools:msg-simple:1.2 - https://github.com/java-json-tools/msg-simple)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) uri-template (com.github.java-json-tools:uri-template:0.10 - https://github.com/java-json-tools/uri-template)
     (Apache License 2.0) JCIP Annotations under Apache License (com.github.stephenc.jcip:jcip-annotations:1.0-1 - http://stephenc.github.com/jcip-annotations)
     (Apache License 2.0) Google Android Annotations Library (com.google.android:annotations:4.1.1.4 - http://source.android.com/)
     (BSD 3-Clause) API Common (com.google.api:api-common:2.53.0 - https://github.com/googleapis/sdk-platform-java)

@codecov

codecov Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 87.93712% with 376 lines in your changes missing coverage. Please review.
✅ Project coverage is 79.87%. Comparing base (56f9276) to head (6aaa468).
⚠️ Report is 14 commits behind head on main.

Files with missing lines Patch % Lines
...src/main/java/com/arcadedb/engine/LocalBucket.java 76.17% 36 Missing and 25 partials ⚠️
...a/com/arcadedb/index/columnar/ColumnarApplier.java 90.42% 27 Missing and 27 partials ⚠️
...a/com/arcadedb/index/columnar/ColumnarFlusher.java 89.51% 14 Missing and 27 partials ⚠️
...nction/sql/facet/SQLFunctionFacetSearchValues.java 86.86% 11 Missing and 20 partials ⚠️
...ava/com/arcadedb/index/columnar/ColumnarIndex.java 70.10% 28 Missing and 1 partial ⚠️
...java/com/arcadedb/database/TransactionContext.java 78.72% 7 Missing and 13 partials ⚠️
...ne/src/main/java/com/arcadedb/index/TypeIndex.java 47.05% 9 Missing and 9 partials ⚠️
...in/java/com/arcadedb/database/DocumentIndexer.java 37.50% 8 Missing and 7 partials ⚠️
...n/java/com/arcadedb/engine/TransactionManager.java 85.41% 6 Missing and 8 partials ⚠️
...dedb/function/sql/text/FullTextFunctionSearch.java 41.66% 10 Missing and 4 partials ⚠️
... and 18 more
Additional details and impacted files
@@            Coverage Diff             @@
##             main   ArcadeData/arcadedb#10855      +/-   ##
==========================================
+ Coverage   79.38%   79.87%   +0.49%     
==========================================
  Files        2339     2442     +103     
  Lines      262666   279880   +17214     
  Branches    57580    61502    +3922     
==========================================
+ Hits       208511   223550   +15039     
- Misses      32876    33826     +950     
- Partials    21279    22504    +1225     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@robfrank robfrank linked an issue Oct 28, 2026 that may be closed by this pull request
6 tasks
@robfrank robfrank changed the title feat: columnar faceting (plans 1-5, in progress) feat: columnar faceting (plans 1-5, plan 6 in progress) Oct 28, 2026
@robfrank
robfrank force-pushed the feat/columnar-faceting branch from 1cbe842 to 8dd528a Compare October 29, 2026 14:30
@claude

claude Bot commented Oct 29, 2026

Copy link
Copy Markdown

Automated review note: this PR is about 94k added lines across 428 files, and the GitHub diff API refuses to serve it (over 300 files). I could not review it line by line, so this is not a full code review.

What I can say from the description:

  • It is marked draft and work in progress. Plan 6 (HA resilience and load tests) is still open.
  • The scope (new COLUMNAR index, background projection, WAL interplay, a SQL FACETS clause, and HTTP/gRPC/remote surfaces) is large enough that it would review better as a stack of smaller PRs, one per plan, once the design is settled.
  • Areas that deserve focused human review: crash recovery and WAL retention for the pending-marks path, read-permission enforcement on facet counts (bucket-level security), resource limits on user-controlled inputs (TOP, HISTOGRAM bucket counts, searchValues, AFTER cursor decoding), and a check that no hand-picked ports are used in the new tests (see CLAUDE.md).
  • Please confirm any new dependencies are allow-listed and recorded in ATTRIBUTIONS.md.

No security hazard was identified, but nothing was verified in depth.

@github-actions

Copy link
Copy Markdown
Contributor

📜 License Compliance Check

✅ License check passed. See artifacts for full report.

License Summary (first 50 lines)

Lists of 418 third-party dependencies.
     (CC0 1.0 Universal) AOP alliance (aopalliance:aopalliance:1.0 - http://aopalliance.sourceforge.net)
     (Apache License 2.0) LZ4 Java Compression (at.yawk.lz4:lz4-java:1.12.1 - https://github.com/yawkat/lz4-java)
     (EPL-2.0) (LGPL-2.1-only) Logback Classic Module (ch.qos.logback:logback-classic:1.6.5 - http://logback.qos.ch/logback-classic)
     (EPL-2.0) (LGPL-2.1-only) Logback Core Module (ch.qos.logback:logback-core:1.6.5 - http://logback.qos.ch/logback-core)
     (Apache 2) ArcadeDB BOLT Protocol (com.arcadedb:arcadedb-bolt:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-bolt/)
     (Apache 2) ArcadeDB Console (com.arcadedb:arcadedb-console:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-console/)
     (Apache 2) ArcadeDB Engine (com.arcadedb:arcadedb-engine:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-engine/)
     (Apache 2) ArcadeDB GraphQL (com.arcadedb:arcadedb-graphql:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-graphql/)
     (Apache 2) ArcadeDB Gremlin (com.arcadedb:arcadedb-gremlin:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-gremlin/)
     (Apache 2) ArcadeDB gRPC Stubs (com.arcadedb:arcadedb-grpc:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-grpc/)
     (Apache 2) ArcadeDB gRPC Client (com.arcadedb:arcadedb-grpc-client:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-grpc-client/)
     (Apache 2) ArcadeDB gRpcW (com.arcadedb:arcadedb-grpcw:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-grpcw/)
     (Apache 2) ArcadeDB HA Raft (com.arcadedb:arcadedb-ha-raft:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-ha-raft/)
     (Apache 2) ArcadeDB Integration (com.arcadedb:arcadedb-integration:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-integration/)
     (Apache 2) ArcadeDB load tests (com.arcadedb:arcadedb-load-tests:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-load-tests/)
     (Apache 2) ArcadeDB MCP Server (com.arcadedb:arcadedb-mcp:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-mcp/)
     (Apache 2) ArcadeDB Metrics (com.arcadedb:arcadedb-metrics:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-metrics/)
     (Apache 2) ArcadeDB MongoDB Wire Protocol (com.arcadedb:arcadedb-mongodbw:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-mongodbw/)
     (Apache 2) ArcadeDB Network (com.arcadedb:arcadedb-network:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-network/)
     (Apache 2) ArcadeDB PostgresW (com.arcadedb:arcadedb-postgresw:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-postgresw/)
     (Apache 2) ArcadeDB RedisW (com.arcadedb:arcadedb-redisw:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-redisw/)
     (Apache 2) ArcadeDB Server (com.arcadedb:arcadedb-server:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-server/)
     (Apache 2) ArcadeDB Studio (com.arcadedb:arcadedb-studio:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-studio/)
     (Apache 2) ArcadeDB Tracing (com.arcadedb:arcadedb-tracing:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-tracing/)
     (Apache License 2.0) HPPC Collections (com.carrotsearch:hppc:0.7.1 - http://labs.carrotsearch.com/hppc.html/hppc)
     (Apache License 2.0) Metrics Core (com.codahale.metrics:metrics-core:3.0.2 - http://metrics.codahale.com/metrics-core/)
     (The Apache License, Version 2.0) com.conversantmedia:disruptor (com.conversantmedia:disruptor:1.2.21 - https://github.com/conversant/disruptor)
     (Apache License 2.0) Jackson-annotations (com.fasterxml.jackson.core:jackson-annotations:2.22 - https://github.com/FasterXML/jackson)
     (Apache License 2.0) Jackson-core (com.fasterxml.jackson.core:jackson-core:2.22.4 - https://github.com/FasterXML/jackson-core)
     (Apache License 2.0) jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.22.4 - https://github.com/FasterXML/jackson)
     (Apache License 2.0) Jackson-dataformat-YAML (com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.22.4 - https://github.com/FasterXML/jackson-dataformats-text)
     (Apache License 2.0) Jackson datatype: jdk8 (com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.22.4 - https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8)
     (Apache License 2.0) Jackson datatype: JSR310 (com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.22.4 - https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310)
     (Apache License 2.0) Caffeine cache (com.github.ben-manes.caffeine:caffeine:2.3.1 - https://github.com/ben-manes/caffeine)
     (Apache License 2.0) docker-java-api (com.github.docker-java:docker-java-api:3.7.1 - https://github.com/docker-java/docker-java)
     (Apache License 2.0) docker-java-transport (com.github.docker-java:docker-java-transport:3.7.1 - https://github.com/docker-java/docker-java)
     (Apache License 2.0) docker-java-transport-zerodep (com.github.docker-java:docker-java-transport-zerodep:3.7.1 - https://github.com/docker-java/docker-java)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) btf (com.github.java-json-tools:btf:1.3 - https://github.com/java-json-tools/btf)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) jackson-coreutils (com.github.java-json-tools:jackson-coreutils:2.0 - https://github.com/java-json-tools/jackson-coreutils)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) jackson-coreutils-equivalence (com.github.java-json-tools:jackson-coreutils-equivalence:1.0 - https://github.com/java-json-tools/jackson-coreutils)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) json-patch (com.github.java-json-tools:json-patch:1.13 - https://github.com/java-json-tools/json-patch)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) json-schema-core (com.github.java-json-tools:json-schema-core:1.2.14 - https://github.com/java-json-tools/json-schema-core)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) json-schema-validator (com.github.java-json-tools:json-schema-validator:2.2.14 - https://github.com/java-json-tools/json-schema-validator)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) msg-simple (com.github.java-json-tools:msg-simple:1.2 - https://github.com/java-json-tools/msg-simple)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) uri-template (com.github.java-json-tools:uri-template:0.10 - https://github.com/java-json-tools/uri-template)
     (Apache License 2.0) JCIP Annotations under Apache License (com.github.stephenc.jcip:jcip-annotations:1.0-1 - http://stephenc.github.com/jcip-annotations)
     (Apache License 2.0) Google Android Annotations Library (com.google.android:annotations:4.1.1.4 - http://source.android.com/)
     (BSD 3-Clause) API Common (com.google.api:api-common:2.53.0 - https://github.com/googleapis/sdk-platform-java)

@robfrank robfrank changed the title feat: columnar faceting (plans 1-5, plan 6 in progress) feat: columnar faceting (plans 1-6) Oct 30, 2026
@robfrank
robfrank force-pushed the feat/columnar-faceting branch from d674665 to bda50cf Compare October 30, 2026 22:58
@claude

claude Bot commented Oct 30, 2026

Copy link
Copy Markdown

Review note: this PR is too large for the diff API (over 300 files), so I could only review the file list and description, not the code. Observations: (1) the checklist says the full mvn clean package build has not been run, so please run it before leaving draft; (2) a change to ha-chaos-tests.yml should be checked for permissions and secrets use (no untrusted PR input in run: steps); (3) the docs/superpowers plans are about 8 files of planning text, so consider whether they belong in the repo; (4) the 6-10% insert slowdown with a COLUMNAR index is acknowledged and tracked in #10662. I did not find a security hazard in what I could see, but the engine code was not reviewed in depth. Suggest a split review per plan commit.

@github-actions

Copy link
Copy Markdown
Contributor

📜 License Compliance Check

✅ License check passed. See artifacts for full report.

License Summary (first 50 lines)

Lists of 418 third-party dependencies.
     (CC0 1.0 Universal) AOP alliance (aopalliance:aopalliance:1.0 - http://aopalliance.sourceforge.net)
     (Apache License 2.0) LZ4 Java Compression (at.yawk.lz4:lz4-java:1.12.1 - https://github.com/yawkat/lz4-java)
     (EPL-2.0) (LGPL-2.1-only) Logback Classic Module (ch.qos.logback:logback-classic:1.6.5 - http://logback.qos.ch/logback-classic)
     (EPL-2.0) (LGPL-2.1-only) Logback Core Module (ch.qos.logback:logback-core:1.6.5 - http://logback.qos.ch/logback-core)
     (Apache 2) ArcadeDB BOLT Protocol (com.arcadedb:arcadedb-bolt:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-bolt/)
     (Apache 2) ArcadeDB Console (com.arcadedb:arcadedb-console:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-console/)
     (Apache 2) ArcadeDB Engine (com.arcadedb:arcadedb-engine:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-engine/)
     (Apache 2) ArcadeDB GraphQL (com.arcadedb:arcadedb-graphql:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-graphql/)
     (Apache 2) ArcadeDB Gremlin (com.arcadedb:arcadedb-gremlin:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-gremlin/)
     (Apache 2) ArcadeDB gRPC Stubs (com.arcadedb:arcadedb-grpc:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-grpc/)
     (Apache 2) ArcadeDB gRPC Client (com.arcadedb:arcadedb-grpc-client:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-grpc-client/)
     (Apache 2) ArcadeDB gRpcW (com.arcadedb:arcadedb-grpcw:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-grpcw/)
     (Apache 2) ArcadeDB HA Raft (com.arcadedb:arcadedb-ha-raft:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-ha-raft/)
     (Apache 2) ArcadeDB Integration (com.arcadedb:arcadedb-integration:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-integration/)
     (Apache 2) ArcadeDB load tests (com.arcadedb:arcadedb-load-tests:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-load-tests/)
     (Apache 2) ArcadeDB MCP Server (com.arcadedb:arcadedb-mcp:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-mcp/)
     (Apache 2) ArcadeDB Metrics (com.arcadedb:arcadedb-metrics:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-metrics/)
     (Apache 2) ArcadeDB MongoDB Wire Protocol (com.arcadedb:arcadedb-mongodbw:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-mongodbw/)
     (Apache 2) ArcadeDB Network (com.arcadedb:arcadedb-network:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-network/)
     (Apache 2) ArcadeDB PostgresW (com.arcadedb:arcadedb-postgresw:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-postgresw/)
     (Apache 2) ArcadeDB RedisW (com.arcadedb:arcadedb-redisw:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-redisw/)
     (Apache 2) ArcadeDB Server (com.arcadedb:arcadedb-server:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-server/)
     (Apache 2) ArcadeDB Studio (com.arcadedb:arcadedb-studio:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-studio/)
     (Apache 2) ArcadeDB Tracing (com.arcadedb:arcadedb-tracing:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-tracing/)
     (Apache License 2.0) HPPC Collections (com.carrotsearch:hppc:0.7.1 - http://labs.carrotsearch.com/hppc.html/hppc)
     (Apache License 2.0) Metrics Core (com.codahale.metrics:metrics-core:3.0.2 - http://metrics.codahale.com/metrics-core/)
     (The Apache License, Version 2.0) com.conversantmedia:disruptor (com.conversantmedia:disruptor:1.2.21 - https://github.com/conversant/disruptor)
     (Apache License 2.0) Jackson-annotations (com.fasterxml.jackson.core:jackson-annotations:2.22 - https://github.com/FasterXML/jackson)
     (Apache License 2.0) Jackson-core (com.fasterxml.jackson.core:jackson-core:2.22.4 - https://github.com/FasterXML/jackson-core)
     (Apache License 2.0) jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.22.4 - https://github.com/FasterXML/jackson)
     (Apache License 2.0) Jackson-dataformat-YAML (com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.22.4 - https://github.com/FasterXML/jackson-dataformats-text)
     (Apache License 2.0) Jackson datatype: jdk8 (com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.22.4 - https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8)
     (Apache License 2.0) Jackson datatype: JSR310 (com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.22.4 - https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310)
     (Apache License 2.0) Caffeine cache (com.github.ben-manes.caffeine:caffeine:2.3.1 - https://github.com/ben-manes/caffeine)
     (Apache License 2.0) docker-java-api (com.github.docker-java:docker-java-api:3.7.1 - https://github.com/docker-java/docker-java)
     (Apache License 2.0) docker-java-transport (com.github.docker-java:docker-java-transport:3.7.1 - https://github.com/docker-java/docker-java)
     (Apache License 2.0) docker-java-transport-zerodep (com.github.docker-java:docker-java-transport-zerodep:3.7.1 - https://github.com/docker-java/docker-java)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) btf (com.github.java-json-tools:btf:1.3 - https://github.com/java-json-tools/btf)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) jackson-coreutils (com.github.java-json-tools:jackson-coreutils:2.0 - https://github.com/java-json-tools/jackson-coreutils)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) jackson-coreutils-equivalence (com.github.java-json-tools:jackson-coreutils-equivalence:1.0 - https://github.com/java-json-tools/jackson-coreutils)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) json-patch (com.github.java-json-tools:json-patch:1.13 - https://github.com/java-json-tools/json-patch)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) json-schema-core (com.github.java-json-tools:json-schema-core:1.2.14 - https://github.com/java-json-tools/json-schema-core)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) json-schema-validator (com.github.java-json-tools:json-schema-validator:2.2.14 - https://github.com/java-json-tools/json-schema-validator)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) msg-simple (com.github.java-json-tools:msg-simple:1.2 - https://github.com/java-json-tools/msg-simple)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) uri-template (com.github.java-json-tools:uri-template:0.10 - https://github.com/java-json-tools/uri-template)
     (Apache License 2.0) JCIP Annotations under Apache License (com.github.stephenc.jcip:jcip-annotations:1.0-1 - http://stephenc.github.com/jcip-annotations)
     (Apache License 2.0) Google Android Annotations Library (com.google.android:annotations:4.1.1.4 - http://source.android.com/)
     (BSD 3-Clause) API Common (com.google.api:api-common:2.53.0 - https://github.com/googleapis/sdk-platform-java)

@robfrank
robfrank force-pushed the feat/columnar-faceting branch from bda50cf to 8da84eb Compare November 1, 2026 16:09
@claude

claude Bot commented Nov 1, 2026

Copy link
Copy Markdown

Review note: this PR is too large for the automated diff (over 300 files), so I could not do a line-by-line review. From the description alone:

  • Scope: this is a lot to review as one PR. It adds a new COLUMNAR index, a segment store, recovery and HA changes, a SQL FACETS clause and changes on every transport. Reviewers will likely want to go through it commit by commit, as you suggest. The design overview doc is a good entry point.
  • Security: the description says counts respect bucket-level read permissions and that restricted users never see counts of hidden records. That is the highest-risk area. I'd want regression tests that cover this for every transport (HTTP, ndjson, gRPC, remote), for searchValues, DISTINCT and AFTER cursors, and for the GROUP BY acceleration path. Check that the AFTER cursor cannot be forged to read other buckets or leak values.
  • Performance and GC: the background apply and the patching of pending pages should be benchmarked. Any such tests should use @Tag("benchmark") or @Tag("slow"), and elapsed-time assertions should use StallAwareStopwatch (per CLAUDE.md).
  • Tests and ports: HA/chaos tests must take their ports from the fixture helpers (allocateFixturePorts, getServerHttpPort). HardcodedTestServerPortsTest should stay green.
  • Docs: check that the files under docs/superpowers/ belong in the repository, and that any new dependency is Apache 2.0 compatible and listed in ATTRIBUTIONS.md.

No specific security hazard was identified from the description. This is a draft from a maintainer.

@github-actions

github-actions Bot commented Nov 1, 2026

Copy link
Copy Markdown
Contributor

📜 License Compliance Check

✅ License check passed. See artifacts for full report.

License Summary (first 50 lines)

Lists of 424 third-party dependencies.
     (CC0 1.0 Universal) AOP alliance (aopalliance:aopalliance:1.0 - http://aopalliance.sourceforge.net)
     (Apache License 2.0) LZ4 Java Compression (at.yawk.lz4:lz4-java:1.12.1 - https://github.com/yawkat/lz4-java)
     (EPL-2.0) (LGPL-2.1-only) Logback Classic Module (ch.qos.logback:logback-classic:1.6.6 - http://logback.qos.ch/logback-classic)
     (EPL-2.0) (LGPL-2.1-only) Logback Core Module (ch.qos.logback:logback-core:1.6.6 - http://logback.qos.ch/logback-core)
     (Apache 2) ArcadeDB BOLT Protocol (com.arcadedb:arcadedb-bolt:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-bolt/)
     (Apache 2) ArcadeDB Console (com.arcadedb:arcadedb-console:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-console/)
     (Apache 2) ArcadeDB Engine (com.arcadedb:arcadedb-engine:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-engine/)
     (Apache 2) ArcadeDB GraphQL (com.arcadedb:arcadedb-graphql:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-graphql/)
     (Apache 2) ArcadeDB Gremlin (com.arcadedb:arcadedb-gremlin:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-gremlin/)
     (Apache 2) ArcadeDB gRPC Stubs (com.arcadedb:arcadedb-grpc:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-grpc/)
     (Apache 2) ArcadeDB gRPC Client (com.arcadedb:arcadedb-grpc-client:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-grpc-client/)
     (Apache 2) ArcadeDB gRpcW (com.arcadedb:arcadedb-grpcw:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-grpcw/)
     (Apache 2) ArcadeDB HA Raft (com.arcadedb:arcadedb-ha-raft:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-ha-raft/)
     (Apache 2) ArcadeDB Integration (com.arcadedb:arcadedb-integration:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-integration/)
     (Apache 2) ArcadeDB load tests (com.arcadedb:arcadedb-load-tests:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-load-tests/)
     (Apache 2) ArcadeDB MCP Server (com.arcadedb:arcadedb-mcp:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-mcp/)
     (Apache 2) ArcadeDB Metrics (com.arcadedb:arcadedb-metrics:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-metrics/)
     (Apache 2) ArcadeDB MongoDB Wire Protocol (com.arcadedb:arcadedb-mongodbw:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-mongodbw/)
     (Apache 2) ArcadeDB Network (com.arcadedb:arcadedb-network:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-network/)
     (Apache 2) ArcadeDB PostgresW (com.arcadedb:arcadedb-postgresw:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-postgresw/)
     (Apache 2) ArcadeDB RedisW (com.arcadedb:arcadedb-redisw:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-redisw/)
     (Apache 2) ArcadeDB Server (com.arcadedb:arcadedb-server:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-server/)
     (Apache 2) ArcadeDB Studio (com.arcadedb:arcadedb-studio:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-studio/)
     (Apache 2) ArcadeDB Tracing (com.arcadedb:arcadedb-tracing:26.11.1-SNAPSHOT - https://arcadedata.com/arcadedb-tracing/)
     (Apache License 2.0) HPPC Collections (com.carrotsearch:hppc:0.7.1 - http://labs.carrotsearch.com/hppc.html/hppc)
     (Apache License 2.0) Metrics Core (com.codahale.metrics:metrics-core:3.0.2 - http://metrics.codahale.com/metrics-core/)
     (The Apache License, Version 2.0) com.conversantmedia:disruptor (com.conversantmedia:disruptor:1.2.21 - https://github.com/conversant/disruptor)
     (Apache License 2.0) Jackson-annotations (com.fasterxml.jackson.core:jackson-annotations:2.22 - https://github.com/FasterXML/jackson)
     (Apache License 2.0) Jackson-core (com.fasterxml.jackson.core:jackson-core:2.22.4 - https://github.com/FasterXML/jackson-core)
     (Apache License 2.0) jackson-databind (com.fasterxml.jackson.core:jackson-databind:2.22.4 - https://github.com/FasterXML/jackson)
     (Apache License 2.0) Jackson-dataformat-YAML (com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.22.4 - https://github.com/FasterXML/jackson-dataformats-text)
     (Apache License 2.0) Jackson datatype: jdk8 (com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.22.4 - https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8)
     (Apache License 2.0) Caffeine cache (com.github.ben-manes.caffeine:caffeine:2.3.1 - https://github.com/ben-manes/caffeine)
     (Apache License 2.0) docker-java-api (com.github.docker-java:docker-java-api:3.7.1 - https://github.com/docker-java/docker-java)
     (Apache License 2.0) docker-java-transport (com.github.docker-java:docker-java-transport:3.7.1 - https://github.com/docker-java/docker-java)
     (Apache License 2.0) docker-java-transport-zerodep (com.github.docker-java:docker-java-transport-zerodep:3.7.1 - https://github.com/docker-java/docker-java)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) btf (com.github.java-json-tools:btf:1.3 - https://github.com/java-json-tools/btf)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) jackson-coreutils (com.github.java-json-tools:jackson-coreutils:2.0 - https://github.com/java-json-tools/jackson-coreutils)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) jackson-coreutils-equivalence (com.github.java-json-tools:jackson-coreutils-equivalence:1.0 - https://github.com/java-json-tools/jackson-coreutils)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) json-patch (com.github.java-json-tools:json-patch:1.13 - https://github.com/java-json-tools/json-patch)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) json-schema-core (com.github.java-json-tools:json-schema-core:1.2.14 - https://github.com/java-json-tools/json-schema-core)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) json-schema-validator (com.github.java-json-tools:json-schema-validator:2.2.14 - https://github.com/java-json-tools/json-schema-validator)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) msg-simple (com.github.java-json-tools:msg-simple:1.2 - https://github.com/java-json-tools/msg-simple)
     (Apache Software License, version 2.0) (Lesser General Public License, version 3 or greater) uri-template (com.github.java-json-tools:uri-template:0.10 - https://github.com/java-json-tools/uri-template)
     (Apache License 2.0) JCIP Annotations under Apache License (com.github.stephenc.jcip:jcip-annotations:1.0-1 - http://stephenc.github.com/jcip-annotations)
     (Apache License 2.0) Google Android Annotations Library (com.google.android:annotations:4.1.1.4 - http://source.android.com/)
     (BSD 3-Clause) API Common (com.google.api:api-common:2.53.0 - https://github.com/googleapis/sdk-platform-java)
     (Apache License 2.0) proto-google-common-protos (com.google.api.grpc:proto-google-common-protos:2.79.0 - https://github.com/googleapis/google-cloud-java/tree/main/sdk-platform-java)

@robfrank
robfrank force-pushed the feat/columnar-faceting branch from 8da84eb to d9431df Compare November 5, 2026 08:18
@claude

claude Bot commented Nov 5, 2026

Copy link
Copy Markdown

Automated review note: this PR is a draft and far too large for a complete automated review (the diff exceeds GitHub's 300-file limit, and my file-level inspection was blocked in this environment). I could not examine the code, so this is not an approval. Suggestions for reviewers: (1) verify that bucket-level read permission checks apply to every FACETS code path, including AFTER cursor paging and facet.searchValues; (2) confirm the memory budget bounds the cardinality of TERMS/DISTINCT results so a high-cardinality column cannot exhaust the heap; (3) check that no new dependency was added without an ATTRIBUTIONS.md update; (4) confirm no tests assert raw wall-clock time (use StallAwareStopwatch) or hardcode ports. Consider splitting the PR per plan to make review tractable.

…nRecoveryIT` - restart recovers without a rebuild

Part of #10361.
The load test, its baseline JSON, retry accounting in FacetDatabaseWrapper and the nightly upload of target/facet-load.
Still to do: fail on corrupted-record log lines; rerun after main's #10701 fix.

Part of #10361.
Completes the single-server facet load test: fails on corrupted-record log lines, measures fallback scans from a stable post-setup baseline, logs samples not answered from the index.

Part of #10361.
The three-node facet load test and a shared FacetLoadTestTemplate. A columnar record read that meets a broken chunk chain (a replica still applying a commit, #10941) answers a retryable ConcurrentModificationException that keeps the CHECK DATABASE FIX hint.

Part of #10361.
Segment merges no longer starve under sustained updates (the count merge wins over the bound, a merge pass flushes only when due); an added column on an empty bucket is published inline; fallback scans log their reason and count it per reason; the first unreadable-page retry logs at FINE.

Part of #10361.
Chaos facet check retries a 503 until its deadline; facet warnings for failed and lag-less inexact queries; every HA IT asserts its writer wrote; plan 6 open items and related issues in the roadmap.

Part of #10361.
Kept: record-granular dirty marks with page-version stamping, parallel
facet counting, direct searchValues path, read-event row scan, hardened
committed-record reads, flush and apply-lag keys, rank view cadence.
Not built or reverted: GROUP BY with WHERE, plan cache, one-pass
hierarchy, dictionary fsync skip, commit marks. Tuning switches removed,
benchmark scripts under engine/src/test/scripts, outcome and open items
in the roadmap.
- test-ci-scripts.sh: match `public synchronized void summary(` in ChaosReport and cover
  facetWriters, facetWarnings and facets.checks in the chaos summary fixture
- ColumnarIndexHierarchyConflictTest: wait for the asynchronous columnar rebuild before
  snapshotting the projection directories (and again after the refusal)
- ColumnarIndexExportImportTest: create the Tag vertex type, Tag.path and the ParentOf edge
  type the hierarchy metadata names, now validated at CREATE INDEX
- Columnar server and ha-raft tests: call getDatabaseForOperator instead of the deprecated
  getDatabase(String) flagged by Issue10533ClientsHonourTheMarksTest
- JsonSerializer.serializeFacets: emit the DOUBLE value hint when a term, extreme or cursor
  is non-finite, as rows do since #10899, so the client decodes NaN as a number
@robfrank
robfrank force-pushed the feat/columnar-faceting branch from 7b7230e to 3c13f4c Compare November 5, 2026 19:55
@claude

claude Bot commented Nov 5, 2026

Copy link
Copy Markdown

Automated review: this PR is too large for the diff API (more than 300 files), so I could not review it line by line. It is also a draft from a maintainer, so I limited this to process notes.

  • Review in slices. Reviewing one plan or commit at a time will work better than the full diff. The security-sensitive areas are the bucket-level read-permission filtering of facet counts, the FACETS parsing on every transport (HTTP, gRPC, remote clients), and facet.searchValues. Each deserves a dedicated permission test, for example a restricted user who must never see counts or values from hidden buckets.
  • Test lanes. Tests with load, chaos or long-waiting behavior need @Tag("slow") or @Tag("benchmark"). None should assert on raw wall-clock time (use StallAwareStopwatch), and none should use hand-picked ports.
  • Docs. The docs/superpowers/ spec and plan files are large. Check that they belong in the repo before the PR leaves draft.
  • Dependencies. If any dependency was added, ATTRIBUTIONS.md and the license allow-list need to be updated.

No security hazard was identified, but I did not inspect the full change.

@codacy-production

codacy-production Bot commented Nov 5, 2026 •

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

🟢 Coverage ∅ diff coverage · -3.98% coverage variation

Metric Results
Coverage variation ✅ -3.98% coverage variation
Diff coverage ∅ diff coverage

View coverage diff in Codacy

Coverage variation details
Coverable lines Covered lines Coverage
Common ancestor commit (56f9276) 262666 229829 87.50%
Head commit (6aaa468) 313433 (+50767) 261776 (+31947) 83.52% (-3.98%)

Coverage variation is the difference between the coverage for the head and common ancestor commits of the pull request branch: <coverage of head commit> - <coverage of common ancestor commit>

Diff coverage details
Coverable lines Covered lines Diff coverage
Pull request (#10855) 0 0 ∅ (not applicable)

Diff coverage is the percentage of lines that are covered by tests out of the coverable lines that the pull request added or modified: <covered lines added or modified>/<coverable lines added or modified> * 100%

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

@claude

claude Bot commented Nov 6, 2026

Copy link
Copy Markdown

Review note: this PR is over 300 files and roughly 40k added lines, so GitHub can't render the full diff and I haven't reviewed it line by line. I only read the PR description and the file list.

Observations

  • The scope is large for one PR: engine changes (LocalBucket, TransactionManager, WALFile, PageManager), a new index type, SQL grammar, several transports and HA e2e tests. It would be easier to review split along the plan boundaries. Plans 2 (codec extraction) and 3 (core) look separable.
  • The checklist says the full mvn clean package build hasn't been run yet. That should be green before this leaves draft.
  • The PR touches hot paths (LocalBucket, TransactionContext, DocumentIndexer). The PR reports inserts 6-10% slower and updates about 4.5% slower with a COLUMNAR index. Please confirm there is no measurable cost for databases that have no COLUMNAR index.
  • NumericSum, SQLFunctionAverage, FullTextFunctionSearch and SQLFunctionTimeBucket also changed. Please make sure each has a regression test, since they affect queries unrelated to facets.
  • The new dedicated pools (ColumnarApplyPool, ColumnarMaintenancePool) should follow the engine-concurrency skill checklist: sizing, saturation policy and metrics.
  • WAL retention while a columnar mark is queued deserves close review for crash recovery. ColumnarPendingMarksWALTest is a good start.
  • docs/superpowers/plans/* (about 6k lines of agent plans) probably doesn't belong in the repo. The overview spec is useful, but the plans are working notes.

Security

  • The author is a maintainer and I saw nothing suspicious in the file list.
  • The description says read permissions are enforced on counts, and security ITs are listed. Please verify specifically that facet.searchValues and the AFTER cursor cannot leak values from buckets the user cannot read.

I can't give a definitive verdict on the code itself without a file-by-file review.

@robfrank robfrank closed this Nov 7, 2026
@robfrank

robfrank commented Nov 7, 2026

Copy link
Copy Markdown
Collaborator Author

Facets landed on main through a set of stacked prs

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Columnar faceting: facets computed from a columnar projection (umbrella)

1 participant