Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

opt: v23.1.16: index out of bounds in SHOW RANGES #124506

Closed
cockroach-sentry opened this issue May 21, 2024 · 1 comment
Closed

opt: v23.1.16: index out of bounds in SHOW RANGES #124506

cockroach-sentry opened this issue May 21, 2024 · 1 comment
Labels
C-bug Code not up to spec/doc, specs & docs deemed correct. Solution expected to change code/behavior. O-sentry Originated from an in-the-wild panic report. T-sql-queries SQL Queries Team

Comments

@cockroach-sentry
Copy link
Collaborator

cockroach-sentry commented May 21, 2024

This issue was auto filed by Sentry. It represents a crash or reported error on a live cluster with telemetry enabled.

Sentry Link: https://cockroach-labs.sentry.io/issues/5386176012/?referrer=webhooks_plugin

Panic Message:

catch.go:29: runtime error: index out of range [4] with length 4
(1) assertion failure
Wraps: (2) attached stack trace
  -- stack trace:
  | github.com/cockroachdb/cockroach/pkg/util/errorutil.ShouldCatch
  | 	github.com/cockroachdb/cockroach/pkg/util/errorutil/catch.go:29
  | github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).Build.func1
  | 	github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:217
  | runtime.gopanic
  | 	GOROOT/src/runtime/panic.go:884
  | runtime.goPanicIndex
  | 	GOROOT/src/runtime/panic.go:113
  | github.com/cockroachdb/cockroach/pkg/sql.(*optTable).Index
  | 	github.com/cockroachdb/cockroach/pkg/sql/opt_catalog.go:1221
  | github.com/cockroachdb/cockroach/pkg/sql.(*optCatalog).ResolveIndex
  | 	github.com/cockroachdb/cockroach/pkg/sql/opt_catalog.go:318
  | github.com/cockroachdb/cockroach/pkg/sql/opt/cat.ResolveTableIndex
  | 	github.com/cockroachdb/cockroach/pkg/sql/opt/cat/utils.go:55
  | github.com/cockroachdb/cockroach/pkg/sql/delegate.(*delegator).delegateShowRanges
  | 	github.com/cockroachdb/cockroach/pkg/sql/delegate/show_ranges.go:95
  | github.com/cockroachdb/cockroach/pkg/sql/delegate.TryDelegate
  | 	github.com/cockroachdb/cockroach/pkg/sql/delegate/delegate.go:114
  | github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildStmt
  | 	github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:426
  | github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildStmtAtRoot
  | 	github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:277
  | github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).Build
  | 	github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:251
  | github.com/cockroachdb/cockroach/pkg/sql.(*optPlanningCtx).buildExecMemo
  | 	github.com/cockroachdb/cockroach/pkg/sql/plan_opt.go:584
  | github.com/cockroachdb/cockroach/pkg/sql.(*planner).makeOptimizerPlan
  | 	github.com/cockroachdb/cockroach/pkg/sql/plan_opt.go:245
  | github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).makeExecPlan
  | 	github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:2060
  | github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).dispatchToExecutionEngine
  | 	github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:1567
  | github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).execStmtInOpenState
  | 	github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:1037
  | github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).execStmt.func1
  | 	github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:142
  | github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).execWithProfiling
  | 	github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:3119
  | github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).execStmt
  | 	github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:141
  | github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).execCmd.func1
  | 	github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:2181
  | github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).execCmd
  | 	github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:2186
  | github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).run
  | 	github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:2103
  | github.com/cockroachdb/cockroach/pkg/sql.(*Server).ServeConn
  | 	github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:902
  | github.com/cockroachdb/cockroach/pkg/sql/pgwire.(*conn).processCommandsAsync.func1
  | 	github.com/cockroachdb/cockroach/pkg/sql/pgwire/conn.go:310
  | runtime.goexit
  | 	GOROOT/src/runtime/asm_amd64.s:1594
Wraps: (3) runtime error: index out of range [4] with length 4
  | -- cause hidden behind barrier
  | runtime error: index out of range [4] with length 4
  | (1) runtime error: index out of range [4] with length 4
  | Error types: (1) runtime.boundsError
Error types: (1) *assert.withAssertionFailure (2) *withstack.withStack (3) *barriers.barrierErr
-- report composition:
*barriers.barrierErr: masked error: runtime error: index out of range [4] with length 4
catch.go:29: *withstack.withStack (top exception)
*assert.withAssertionFailure
Stacktrace (expand for inline code snippets):

GOROOT/src/runtime/asm_amd64.s#L1593-L1595

reservedOwned = false // We're about to pass ownership away.
retErr = sqlServer.ServeConn(
ctx,

}(ctx, h)
return h.ex.run(ctx, s.pool, reserved, cancel)
}

var err error
if err = ex.execCmd(); err != nil {
// Both of these errors are normal ways for the connExecutor to exit.

return err
}()
// Note: we write to ex.statsCollector.PhaseTimes, instead of ex.phaseTimes,

tcmd.LastInBatch || !implicitTxnForBatch)
ev, payload, err = ex.execStmt(
ctx, tcmd.Statement, nil /* portal */, nil /* pinfo */, stmtRes, canAutoCommit,

}
err = ex.execWithProfiling(ctx, ast, preparedStmt, func(ctx context.Context) error {
ev, payload, err = ex.execStmtInOpenState(ctx, parserStmt, portal, pinfo, res, canAutoCommit)

} else {
err = op(ctx)
}

err = ex.execWithProfiling(ctx, ast, preparedStmt, func(ctx context.Context) error {
ev, payload, err = ex.execStmtInOpenState(ctx, parserStmt, portal, pinfo, res, canAutoCommit)
return err

if err = ex.dispatchToExecutionEngine(stmtCtx, p, res); err != nil {
stmtThresholdSpan.Finish()

// between here and there needs to happen even if there's an error.
err = ex.makeExecPlan(ctx, planner)
defer planner.curPlan.close(ctx)

func (ex *connExecutor) makeExecPlan(ctx context.Context, planner *planner) error {
if err := planner.makeOptimizerPlan(ctx); err != nil {
log.VEventf(ctx, 1, "optimizer plan failed: %v", err)

execMemo, err := opc.buildExecMemo(ctx)
if err != nil {

bld := optbuilder.New(ctx, &p.semaCtx, p.EvalContext(), opc.catalog, f, opc.p.stmt.AST)
if err := bld.Build(); err != nil {
return nil, err

// and physical properties.
outScope := b.buildStmtAtRoot(b.stmt, nil /* desiredTypes */)

b.ctes = nil
outScope = b.buildStmt(stmt, desiredTypes, inScope)
// Build With operators for any CTEs hoisted to the top level.

// delegate functionality.
newStmt, err := delegate.TryDelegate(
b.ctx,

}
return d.delegateShowRanges(t)

var err error
idx, resName, err = cat.ResolveTableIndex(
d.ctx, d.catalog, cat.Flags{

) (Index, DataSourceName, error) {
return catalog.ResolveIndex(ctx, flags, name)
}

return table.Index(idx.Ordinal()), oc.tn, nil
}

func (ot *optTable) Index(i cat.IndexOrdinal) cat.Index {
return &ot.indexes[i]
}

GOROOT/src/runtime/panic.go#L112-L114
GOROOT/src/runtime/panic.go#L883-L885
// manipulate locks.
if ok, e := errorutil.ShouldCatch(r); ok {
err = e

// get reported to Sentry.
err = errors.HandleAsAssertionFailure(err)
}

GOROOT/src/runtime/asm_amd64.s in runtime.goexit at line 1594
pkg/sql/pgwire/conn.go in pkg/sql/pgwire.(*conn).processCommandsAsync.func1 at line 310
pkg/sql/conn_executor.go in pkg/sql.(*Server).ServeConn at line 902
pkg/sql/conn_executor.go in pkg/sql.(*connExecutor).run at line 2103
pkg/sql/conn_executor.go in pkg/sql.(*connExecutor).execCmd at line 2186
pkg/sql/conn_executor.go in pkg/sql.(*connExecutor).execCmd.func1 at line 2181
pkg/sql/conn_executor_exec.go in pkg/sql.(*connExecutor).execStmt at line 141
pkg/sql/conn_executor_exec.go in pkg/sql.(*connExecutor).execWithProfiling at line 3119
pkg/sql/conn_executor_exec.go in pkg/sql.(*connExecutor).execStmt.func1 at line 142
pkg/sql/conn_executor_exec.go in pkg/sql.(*connExecutor).execStmtInOpenState at line 1037
pkg/sql/conn_executor_exec.go in pkg/sql.(*connExecutor).dispatchToExecutionEngine at line 1567
pkg/sql/conn_executor_exec.go in pkg/sql.(*connExecutor).makeExecPlan at line 2060
pkg/sql/plan_opt.go in pkg/sql.(*planner).makeOptimizerPlan at line 245
pkg/sql/plan_opt.go in pkg/sql.(*optPlanningCtx).buildExecMemo at line 584
pkg/sql/opt/optbuilder/builder.go in pkg/sql/opt/optbuilder.(*Builder).Build at line 251
pkg/sql/opt/optbuilder/builder.go in pkg/sql/opt/optbuilder.(*Builder).buildStmtAtRoot at line 277
pkg/sql/opt/optbuilder/builder.go in pkg/sql/opt/optbuilder.(*Builder).buildStmt at line 426
pkg/sql/delegate/delegate.go in pkg/sql/delegate.TryDelegate at line 114
pkg/sql/delegate/show_ranges.go in pkg/sql/delegate.(*delegator).delegateShowRanges at line 95
pkg/sql/opt/cat/utils.go in pkg/sql/opt/cat.ResolveTableIndex at line 55
pkg/sql/opt_catalog.go in pkg/sql.(*optCatalog).ResolveIndex at line 318
pkg/sql/opt_catalog.go in pkg/sql.(*optTable).Index at line 1221
GOROOT/src/runtime/panic.go in runtime.goPanicIndex at line 113
GOROOT/src/runtime/panic.go in runtime.gopanic at line 884
pkg/sql/opt/optbuilder/builder.go in pkg/sql/opt/optbuilder.(*Builder).Build.func1 at line 217
pkg/util/errorutil/catch.go in pkg/util/errorutil.ShouldCatch at line 29

Tags

Tag Value
Command server
Environment v23.1.16
Go Version go1.19.13
Platform linux amd64
Distribution CCL
Cockroach Release v23.1.16
Cockroach SHA 37f7574
# of CPUs 64
# of Goroutines 6050

Jira issue: CRDB-38933

@cockroach-sentry cockroach-sentry added O-sentry Originated from an in-the-wild panic report. C-bug Code not up to spec/doc, specs & docs deemed correct. Solution expected to change code/behavior. labels May 21, 2024
@yuzefovich yuzefovich changed the title Sentry: catch.go:29: runtime error: index out of range [4] with length 4 (1) assertion failure Wraps: (2) attached stack trace -- stack trace: | github.com/cockroachdb/cockroach/pkg/util/errorutil... opt: v23.1.16: index out of bounds in SHOW RANGES May 21, 2024
@yuzefovich yuzefovich added the T-sql-queries SQL Queries Team label May 21, 2024
@yuzefovich
Copy link
Member

Hm, I tried a few things but couldn't reproduce this (like indexes on virtual columns and indexes being backfilled while SHOW RANGES is executed). My guess is that the problem is very rare and is due to a mismatch between optTable.indexes and tabledesc.ordinal, perhaps with a concurrent schema change involved.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-bug Code not up to spec/doc, specs & docs deemed correct. Solution expected to change code/behavior. O-sentry Originated from an in-the-wild panic report. T-sql-queries SQL Queries Team
Projects
Status: Done
Development

No branches or pull requests

2 participants