feat(compat): Vitess and Apache Cloudberry, measured on a pinned image (#424) - #446
Merged
Conversation
#424) Both were probed on 2026-08-20 and ticked in #424 as measured, and neither was in the code: no registry entry, no docs row, no compose service. This lands all three together and takes the published count from 27 to 29 (14 shipped drivers + 15 verified relatives, from verifiedEngineCount()). Vitess 24.0.2 (reports 8.0.43-Vitess) via mysql full Apache Cloudberry 2.1.0-incubating (PG 14.4) via postgres partial (12 of 15) The probe was re-run rather than inherited, and three of its results differ from what was recorded. The earlier Vitess run used the rolling `vitess/vttestserver:mysql80` tag, which today serves a 25.0.0-SNAPSHOT built from main. A snapshot is not a version anyone can reproduce, so this re-probed the pinned release v24.0.2 and the compose service names it. Cloudberry's recorded "gate 7 passes" is REFUTED. Both acquisition paths refuse: as the cluster's own gpadmin the execution profile reads a superuser as too broad, and with a least-privilege role the grounding capture is refused at 289 rows against a 200-row budget, 282 of those rows belonging to gp_toolkit and 7 to the user's two tables. Reproduced independently as gpadmin: 481 rows, 470 gp_toolkit. That is B52's shape on a second engine, and Cloudberry is a fork rather than an extension, so B52 is amended to say the server's own catalogs rather than an extension's, and what generalises is narrower than the first measurement suggested. Vitess "sharded keyspace refuses DML" is NOT carried: this instance is unsharded (show vitess_shards returns probe/0), so the claim was untestable here. Three new findings replace it. Cancelling a running query does nothing - vtgate refuses KILL QUERY with VT07001 and a 5 second SLEEP ran its full 5003 ms, where the same call cancels on a MySQL 9 control. Per-index sizes read 0 bytes, which is OUR defect and is filed as D6: the size query matches INNODB_TABLES.NAME against '<database>/%' and Vitess names the InnoDB table after the shard database, so the rows are vt_probe_0/orders; the lookup then swallows the mismatch in a catch whose comment reads "INNODB_SYS tables not available", making zero matched rows indistinguishable from a missing catalog. And no permission-error class could be measured at all, because vttestserver grants any credential full rights - a property of the fixture, stated as such rather than as a claim about Vitess. Confirmed in the browser on both, not only through the harness: the Vitess explorer shows 2 objects for 2 user tables with 500 and 2000 rows, a GROUP BY answered 667/667/666, and a plan run captured "2 tables, fingerprint ctx_3ce0" and drafted a grounded statement over the real orders.country. The Cloudberry explorer shows 4 objects for 2 user tables, the two extras being pg_ext_aux.pg_pax_*, its monitoring page fails with the planner error verbatim, and the plan run refuses. Explain was checked against a real MySQL control before being called a defect: the summary tiles read 0 there too, so the panel is not degraded on Vitess. TDD: the new test is an invariant nothing enforced before - every registry entry must have a service in the compat profile of database-compose.yml, which is what the docs already promise. It passed at 13 entries, failed on the 2 added here, and passes again with their services. `redis` shipping as a published engine with no compose service at all was this same gap. Local gates: format, lint, typecheck, knip, build, run-core.sh (326 files), test:components (30 groups), and coverage at 39204/39204 lines.
100 tasks
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Phase 0 of #424. Both engines were probed on 2026-08-20 and ticked in the issue as measured, and neither existed in the code: no registry entry, no docs row, no compose service. This lands all three together and moves the published count from 27 to 29 (14 shipped drivers + 15 verified relatives, from
verifiedEngineCount()).mysqlpostgresThe probe was re-run, not inherited, and three recorded results changed
The Vitess image was not reproducible. The earlier run used the rolling
vitess/vttestserver:mysql80tag, which today serves a25.0.0-SNAPSHOTbuilt from main. A snapshot is not a version anyone can reproduce, so this re-probed the pinned releasev24.0.2-mysql80, and the compose service names it.Cloudberry's recorded "gate 7 passes" is refuted. Both acquisition paths refuse. As the cluster's own
gpadminthe execution profile reads a superuser as too broad; with a least-privilege role the grounding capture is refused at 289 rows against a 200-row budget, 282 of those rows belonging to Cloudberry's owngp_toolkitand 7 to the user's two tables. Reproduced independently asgpadmin: 481 rows, 470 of themgp_toolkit. That is B52's shape on a second engine, and Cloudberry is a fork rather than an extension, so B52 is amended to say the server's own catalogs rather than an extension's; what generalises is narrower than the first measurement suggested.One Vitess caveat is dropped rather than repeated. "A sharded keyspace refuses DML" was untestable here:
show vitess_shardsreturnsprobe/0, so this instance is unsharded and no claim is made about a sharded one.Three findings replace it:
KILL QUERYwithVT07001, and a 5 secondSLEEPran its full 5003 ms. The same call cancels successfully on a real MySQL 9 control.information_schema.INNODB_TABLES.NAMEagainst'<database>/%', and Vitess names the InnoDB table after the physical shard database, so the rows arevt_probe_0/orders. The lookup then swallows the mismatch in acatchcommented "INNODB_SYS tables not available", which makes zero matched rows indistinguishable from a server with no such catalog. A wrong number, not a missing one.vttestservergrants any credential full rights (user=nobodywith a wrong password read the table) andCREATE USERis a vtgate parse error. Stated that way in the caveat so it cannot be read as a claim about Vitess.Verified in a browser, not only through the harness
GROUP BY countryanswered 667/667/666; a plan run captured "2 tables, fingerprint ctx_3ce0" and drafted a statement grounded in the realorders.countryandamount.pg_ext_aux.pg_pax_fastsequenceandpg_ext_aux.pg_pax_tables; row counts correct afterANALYZE; the monitoring page fails withquery plan with multiple segworker groups is not supportedverbatim; the plan run refuses.Two wording facts the browser exposed are recorded in the docs row rather than glossed: the Cloudberry agent refusal tells the user the engine offers no read-only execution profile when it is the role that was refused (a live instance of B47), and the three failing panels report a planner error as a connection error.
TDD
The new test is an invariant nothing enforced before: every registry entry must have a service in the
compatprofile ofdatabase-compose.yml, which is exactly what the docs already promise ("Reproduce any row with thecompatprofile"). It passed at 13 entries, failed on the 2 added here, and passes again once their services exist.redisshipping as a published engine with no compose service at all, fixed in #426, was this same gap.Gates
format·lint·typecheck·knip·build·tests/run-core.sh(326 files) ·test:components(30 groups) · coverage 39204/39204 lines (100.00%).Gate 5 exemption, recorded by name as #424 requires: no Playwright spec is added for either engine. CI has no Vitess or Cloudberry instance, and both are
compat-profile fixtures rather than services the E2E lane starts; everything a spec would assert was driven by hand in a browser instead, as listed above.