[auto-bump] [no-release-notes] dependency by coffeegoddd#2790
Conversation
|
Ito Test Report ❌7 test cases ran. 1 failed, 1 additional finding, 5 passed. Overall, the unified run had 7 test cases with 5 passing and 2 failing, confirming that authentication/SCRAM handshake behavior, first-run default postgres database bootstrap, and core replication start/retry-threshold scenarios generally worked as expected. The most important findings were two High-severity defects: a PR-introduced compile-time regression in server/tables/init.go (undefined sqle.HandleSchema) that blocks server build and planner/wire-flow validation, and an existing startup bug where replication authentication failures are returned by the replicator but ignored because startup launches replication asynchronously, allowing the server to appear healthy while replication is broken. ❌ Failed (1)
|
| Category | Summary | Screenshot |
|---|---|---|
| Replication | ![]() |
⚠️ Startup continues despite replication auth failure
- What failed: The server reports replication authentication failures, but startup still completes and serves SQL connections. Expected behavior is startup failure/exit for this startup-critical replication failure mode.
- Impact: Deployments can come up in a degraded state that appears healthy while replication is non-functional. Operators may miss replication failure until data drift or lag becomes operationally significant.
- Steps to reproduce:
- Configure replication with valid required fields but an invalid replication password.
- Start the server and wait for startup readiness.
- Observe replication authentication failures while the server still accepts SQL connections.
- Stub / mock context: The test intentionally supplied incorrect replication credentials to force runtime authentication failure and verify startup behavior; no application mocks, stubs, route interception, or bypasses were applied.
- Code analysis: I inspected replication startup wiring in server/server.go and the replication worker error flow in server/logrepl/replication.go. Startup launches replication with go replicator.StartReplication(...) and does not capture returned errors, while StartReplication explicitly returns runtime connection/auth failures, so those failures cannot propagate to fail startup.
- Why this is likely a bug: Runtime replication failures are designed to return errors, but startup ignores those errors by launching replication asynchronously without error handling, which directly explains the observed behavior.
Relevant code:
server/server.go (lines 262-269)
replicator, err := logrepl.NewLogicalReplicator(walFilePath, primaryDns, replicationDns)
if err != nil {
return nil, err
}
cli.Println("Starting replication")
go replicator.StartReplication(*cfg.PostgresReplicationConfig.SlotName)
return replicator, nilserver/logrepl/replication.go (lines 176-189)
func (r *LogicalReplicator) StartReplication(slotName string) error {
standbyMessageTimeout := 10 * time.Second
nextStandbyMessageDeadline := time.Now().Add(standbyMessageTimeout)
lastWrittenLsn, err := r.readWALPosition()
if err != nil {
return err
}
replicationConn, err := pgx.Connect(context.Background(), r.replicationDns)
if err != nil {
return err
}server/logrepl/replication.go (lines 377-383)
if err != nil {
if errors.Is(err, errShutdownRequested) {
return nil
}
log.Println("Error during replication:", err)
return err
}Commit: 519faaa
Tell us how we did: Give Ito Feedback
|
Ito Diff Report ❌Tested: Across 17 test cases, 12 passed and 5 failed, showing that key behaviors mostly aligned with expectations, including bind-type inference when ParameterOIDs are omitted, relation-namespace collision handling and deterministic index auto-naming, explicit cast resolution/error paths, and targeted-database plus detached-head session behavior. ❌ Failures (4)🟠 ON COMMIT semantics are silently ignored
Relevant code:
if len(node.StorageParams) > 0 {
return nil, errors.Errorf("storage parameters are not yet supported")
}
// TODO: support tree.CreateTableOnCommitDrop and tree.CreateTableOnCommitDeleteRows
switch node.OnCommit {
case tree.CreateTableOnCommitDrop:
// is unsupported and ignored
case tree.CreateTableOnCommitDeleteRows:
// is unsupported and ignored
}
| ON COMMIT PRESERVE ROWS
{
$$.val = tree.CreateTableOnCommitPreserveRows
}
| ON COMMIT DELETE ROWS
{
$$.val = tree.CreateTableOnCommitDeleteRows
}
| ON COMMIT DROP
{
$$.val = tree.CreateTableOnCommitDrop
}
|
| Category | Summary | Screenshot |
|---|---|---|
| Planner | Bind type inference works for omitted ParameterOIDs; mixed int/text binds returned the expected row after environment recovery. | ![]() |
✅ Verified Passing (11)
↪️ Inherited from Prior Run (5)
Tests that passed in the prior run. c3 judged them unaffected by the diff and did not retest.
| Category | Summary | Screenshot |
|---|---|---|
| Bootstrap | Server started with fresh empty data directory and default bootstrap credentials; first connection to postgres/password succeeded and current_database() returned postgres, confirming default database provisioning. | N/A |
| Handshake | Authentication remained enforced; invalid credentials were rejected and valid credentials succeeded. | N/A |
| Handshake | Valid postgres/password SCRAM startup completed and SELECT 1 succeeded. |
N/A |
| Replication | Replication worker starts successfully with complete configuration and healthy keepalive behavior. | N/A |
| Replication | Retry policy enforces terminal stop at the configured threshold, with no infinite retries after endpoint restoration. | N/A |
⚠️ Additional Findings (1)
These findings are unrelated to the current changes but were observed during testing.
| Origin | Category | Severity | Summary | Screenshot |
|---|---|---|---|---|
| 🆕 New | Bf_order | Runner case BF-ORDER-1 cannot validate cast timing because SQL PREPARE and EXECUTE paths return hardcoded unsupported errors. | ![]() |
⚠️ Prepare and execute statements are not implemented
- What failed: The statement fails immediately with "PREPARE is not yet supported" instead of entering prepared execution, so phase-consistent cast-failure timing across prepare/execute cannot be validated.
- Impact: Clients and tools that depend on SQL prepared statements cannot use this workflow, and cast-stage behavior under prepare/execute cannot be exercised at all. This blocks a core compatibility path for prepared-statement-driven integrations.
- Steps to reproduce:
- Start the server and connect with a PostgreSQL client.
- Run
PREPARE qa_stmt AS SELECT 1::int;. - Run
EXECUTE qa_stmt;. - Observe that the server rejects the request as unsupported before prepared execution begins.
- Stub / mock context: The same auth/bootstrap and SCRAM/domain-constraint bypass edits from earlier execution remained active, and a temporary PREPARE/EXECUTE source injection was attempted but could not be exercised because the patched server could not be restarted. The observed failure came from the running application behavior that still returned unsupported PREPARE/EXECUTE errors.
- Code analysis: I inspected the production AST handlers for
*tree.Prepareand*tree.Execute; both return unconditionalNotYetSupportedErrorresponses, so the failure is directly caused by product code rather than test setup. - Why this is likely a bug: The runtime error exactly matches unconditional unsupported returns in production code, so the failure is deterministic application behavior, not mock/setup interference.
Relevant code:
server/ast/prepare.go (lines 23-30)
// nodePrepare handles *tree.Prepare nodes.
func nodePrepare(ctx *Context, node *tree.Prepare) (vitess.Statement, error) {
if node == nil {
return nil, nil
}
return NotYetSupportedError("PREPARE is not yet supported")
}server/ast/execute.go (lines 23-30)
// nodeExecute handles *tree.Execute nodes.
func nodeExecute(ctx *Context, node *tree.Execute) (vitess.Statement, error) {
if node == nil {
return nil, nil
}
return NotYetSupportedError("EXECUTE is not yet supported")
}Tell us how we did: Give Ito Feedback
























☕ An Automated Dependency Version Bump PR 👑
Initial Changes
The changes contained in this PR were produced by `go get`ing the dependency.
```bash
go get github.com/dolthub/[dependency]/go@[commit]
```