Skip to content

vendor/language: v20.2.6: mysterious index out of bounds in golang.org/x/text/internal/language #63562

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

Closed
cockroach-teamcity opened this issue Apr 13, 2021 · 9 comments
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.

Comments

@cockroach-teamcity
Copy link
Member

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

Sentry link: https://sentry.io/organizations/cockroach-labs/issues/2336852841/?referrer=webhooks_plugin

Panic message:

*barriers.barrierError
catch.go:29: *withstack.withStack (top exception)
*assert.withAssertionFailure

Stacktrace (expand for inline code snippets):

// get reported to Sentry.
err = errors.HandleAsAssertionFailure(err)
}
in pkg/util/errorutil.ShouldCatch
// manipulate locks.
if ok, e := errorutil.ShouldCatch(r); ok {
err = e
in pkg/sql/opt/optbuilder.(*Builder).Build.func1
/usr/local/go/src/runtime/panic.go#L678-L680 in runtime.gopanic
/usr/local/go/src/runtime/panic.go#L102-L104 in runtime.goPanicSliceB
https://github.com/cockroachdb/cockroach/blob/4da6dc378d563472d59166167ce760756e76f893/vendor/golang.org/x/text/internal/language/parse.go#L141-L143 in golang.org/x/text/internal/language.(*scanner).resizeRange
https://github.com/cockroachdb/cockroach/blob/4da6dc378d563472d59166167ce760756e76f893/vendor/golang.org/x/text/internal/language/parse.go#L150-L152 in golang.org/x/text/internal/language.(*scanner).replace
https://github.com/cockroachdb/cockroach/blob/4da6dc378d563472d59166167ce760756e76f893/vendor/golang.org/x/text/internal/language/parse.go#L295-L297 in golang.org/x/text/internal/language.parseTag
https://github.com/cockroachdb/cockroach/blob/4da6dc378d563472d59166167ce760756e76f893/vendor/golang.org/x/text/internal/language/parse.go#L551-L553 in golang.org/x/text/internal/language.parseExtension
https://github.com/cockroachdb/cockroach/blob/4da6dc378d563472d59166167ce760756e76f893/vendor/golang.org/x/text/internal/language/parse.go#L450-L452 in golang.org/x/text/internal/language.parseExtensions
https://github.com/cockroachdb/cockroach/blob/4da6dc378d563472d59166167ce760756e76f893/vendor/golang.org/x/text/internal/language/parse.go#L267-L269 in golang.org/x/text/internal/language.parse
https://github.com/cockroachdb/cockroach/blob/4da6dc378d563472d59166167ce760756e76f893/vendor/golang.org/x/text/internal/language/parse.go#L249-L251 in golang.org/x/text/internal/language.Parse
https://github.com/cockroachdb/cockroach/blob/4da6dc378d563472d59166167ce760756e76f893/vendor/golang.org/x/text/language/parse.go#L45-L47 in golang.org/x/text/language.CanonType.Parse
https://github.com/cockroachdb/cockroach/blob/4da6dc378d563472d59166167ce760756e76f893/vendor/golang.org/x/text/language/parse.go#L33-L35 in golang.org/x/text/language.Parse
) (TypedExpr, error) {
_, err := language.Parse(expr.Locale)
if err != nil {
in pkg/sql/sem/tree.(*CollateExpr).TypeCheck
return expr.TypeCheck(ctx, semaCtx, desired)
}
in pkg/sql/sem/tree.TypeCheck
expr = s.walkExprTree(expr)
texpr, err := tree.TypeCheck(s.builder.ctx, expr, s.builder.semaCtx, desired)
if err != nil {
in pkg/sql/opt/optbuilder.(*scope).resolveType
texpr = inScope.resolveType(e.Expr, desired)
}
in pkg/sql/opt/optbuilder.(*Builder).analyzeSelectList
b.analyzeSelectList(selects, desiredTypes, inScope, outScope)
}
in pkg/sql/opt/optbuilder.(*Builder).analyzeProjectionList
// aggInScope and aggOutScope.
b.analyzeProjectionList(sel.Exprs, desiredTypes, fromScope, projectionsScope)
in pkg/sql/opt/optbuilder.(*Builder).buildSelectClause
case *tree.SelectClause:
outScope = b.buildSelectClause(t, orderBy, locking, desiredTypes, inScope)
in pkg/sql/opt/optbuilder.(*Builder).buildSelectStmtWithoutParens
return b.processWiths(with, inScope, func(inScope *scope) *scope {
return b.buildSelectStmtWithoutParens(
wrapped, orderBy, limit, locking, desiredTypes, inScope,
in pkg/sql/opt/optbuilder.(*Builder).buildSelect.func1
inScope.atRoot = false
outScope := buildStmt(inScope)
inScope.atRoot = prevAtRoot
in pkg/sql/opt/optbuilder.(*Builder).processWiths
return b.processWiths(with, inScope, func(inScope *scope) *scope {
return b.buildSelectStmtWithoutParens(
in pkg/sql/opt/optbuilder.(*Builder).buildSelect
case *tree.Select:
return b.buildSelect(stmt, noRowLocking, desiredTypes, inScope)
in pkg/sql/opt/optbuilder.(*Builder).buildStmt
return b.buildStmt(stmt, desiredTypes, inScope)
}
in pkg/sql/opt/optbuilder.(*Builder).buildStmtAtRoot
// and physical properties.
outScope := b.buildStmtAtRoot(b.stmt, nil /* desiredTypes */, b.allocScope())
in pkg/sql/opt/optbuilder.(*Builder).Build
bld := optbuilder.New(ctx, &p.semaCtx, p.EvalContext(), &opc.catalog, f, opc.p.stmt.AST)
if err := bld.Build(); err != nil {
return nil, err
in pkg/sql.(*optPlanningCtx).buildExecMemo
execMemo, err := opc.buildExecMemo(ctx)
if err != nil {
in pkg/sql.(*planner).makeOptimizerPlan
if err := planner.makeOptimizerPlan(ctx); err != nil {
log.VEventf(ctx, 1, "optimizer plan failed: %v", err)
in pkg/sql.(*connExecutor).makeExecPlan
// between here and there needs to happen even if there's an error.
err := ex.makeExecPlan(ctx, planner)
// We'll be closing the plan manually below after execution; this
in pkg/sql.(*connExecutor).dispatchToExecutionEngine
p.autoCommit = os.ImplicitTxn.Get() && !ex.server.cfg.TestingKnobs.DisableAutoCommit
if err := ex.dispatchToExecutionEngine(ctx, p, res); err != nil {
return nil, nil, err
in pkg/sql.(*connExecutor).execStmtInOpenState
} else {
ev, payload, err = ex.execStmtInOpenState(ctx, stmt, res, pinfo)
}
in pkg/sql.(*connExecutor).execStmt

pkg/util/errorutil/catch.go in pkg/util/errorutil.ShouldCatch at line 29
pkg/sql/opt/optbuilder/builder.go in pkg/sql/opt/optbuilder.(*Builder).Build.func1 at line 165
/usr/local/go/src/runtime/panic.go in runtime.gopanic at line 679
/usr/local/go/src/runtime/panic.go in runtime.goPanicSliceB at line 103
vendor/golang.org/x/text/internal/language/parse.go in golang.org/x/text/internal/language.(*scanner).resizeRange at line 142
vendor/golang.org/x/text/internal/language/parse.go in golang.org/x/text/internal/language.(*scanner).replace at line 151
vendor/golang.org/x/text/internal/language/parse.go in golang.org/x/text/internal/language.parseTag at line 296
vendor/golang.org/x/text/internal/language/parse.go in golang.org/x/text/internal/language.parseExtension at line 552
vendor/golang.org/x/text/internal/language/parse.go in golang.org/x/text/internal/language.parseExtensions at line 451
vendor/golang.org/x/text/internal/language/parse.go in golang.org/x/text/internal/language.parse at line 268
vendor/golang.org/x/text/internal/language/parse.go in golang.org/x/text/internal/language.Parse at line 250
vendor/golang.org/x/text/language/parse.go in golang.org/x/text/language.CanonType.Parse at line 46
vendor/golang.org/x/text/language/parse.go in golang.org/x/text/language.Parse at line 34
pkg/sql/sem/tree/type_check.go in pkg/sql/sem/tree.(*CollateExpr).TypeCheck at line 570
pkg/sql/sem/tree/type_check.go in pkg/sql/sem/tree.TypeCheck at line 254
pkg/sql/opt/optbuilder/scope.go in pkg/sql/opt/optbuilder.(*scope).resolveType at line 439
pkg/sql/opt/optbuilder/project.go in pkg/sql/opt/optbuilder.(*Builder).analyzeSelectList at line 154
pkg/sql/opt/optbuilder/project.go in pkg/sql/opt/optbuilder.(*Builder).analyzeProjectionList at line 88
pkg/sql/opt/optbuilder/select.go in pkg/sql/opt/optbuilder.(*Builder).buildSelectClause at line 1062
pkg/sql/opt/optbuilder/select.go in pkg/sql/opt/optbuilder.(*Builder).buildSelectStmtWithoutParens at line 999
pkg/sql/opt/optbuilder/select.go in pkg/sql/opt/optbuilder.(*Builder).buildSelect.func1 at line 972
pkg/sql/opt/optbuilder/with.go in pkg/sql/opt/optbuilder.(*Builder).processWiths at line 29
pkg/sql/opt/optbuilder/select.go in pkg/sql/opt/optbuilder.(*Builder).buildSelect at line 971
pkg/sql/opt/optbuilder/builder.go in pkg/sql/opt/optbuilder.(*Builder).buildStmt at line 265
pkg/sql/opt/optbuilder/builder.go in pkg/sql/opt/optbuilder.(*Builder).buildStmtAtRoot at line 229
pkg/sql/opt/optbuilder/builder.go in pkg/sql/opt/optbuilder.(*Builder).Build at line 200
pkg/sql/plan_opt.go in pkg/sql.(*optPlanningCtx).buildExecMemo at line 512
pkg/sql/plan_opt.go in pkg/sql.(*planner).makeOptimizerPlan at line 195
pkg/sql/conn_executor_exec.go in pkg/sql.(*connExecutor).makeExecPlan at line 901
pkg/sql/conn_executor_exec.go in pkg/sql.(*connExecutor).dispatchToExecutionEngine at line 780
pkg/sql/conn_executor_exec.go in pkg/sql.(*connExecutor).execStmtInOpenState at line 639
pkg/sql/conn_executor_exec.go in pkg/sql.(*connExecutor).execStmt at line 114
Tag Value
Cockroach Release v20.2.6
Cockroach SHA: 4da6dc3
Platform darwin amd64
Distribution CCL
Environment v20.2.6
Command demo
Go Version ``
# of CPUs
# of Goroutines
@cockroach-teamcity cockroach-teamcity added 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. labels Apr 13, 2021
@yuzefovich yuzefovich changed the title sentry: *barriers.barrierError catch.go:29: *withstack.withStack (top exception) *assert.withAssertionFailure vendor/language: v20.2.6: mysterious index out of bounds in golang.org/x/text/internal/language Apr 16, 2021
@rytaft
Copy link
Collaborator

rytaft commented Apr 20, 2021

cc @bdarnell and @knz this looks related to the conversation about xtext upgrades that you have been having. Any thoughts?

@RaduBerinde
Copy link
Member

@bdarnell
Copy link
Contributor

Yeah, this looks like the one that @RaduBerinde found. But there's another panic in this area fixed by golang/text@e3aa4ad, which we don't have yet. The panic gets caught so it doesn't crash the cockroach process (Do those still report to sentry?)

@RaduBerinde
Copy link
Member

Usually caught panics get wrapped in assertion errors which do get reported to sentry even if they don't crash the server.

@knz
Copy link
Contributor

knz commented Apr 21, 2021

The panic gets caught so it doesn't crash the cockroach process

Where do you see this?

Usually caught panics get wrapped in assertion errors which do get reported to sentry even if they don't crash the server.

I agree that caught panics get reported to sentry, but only if they were converted to a crdb-style assertion error. If the conversion of panic to error occurs with e.g. fmt.Errorf we don't see anything. See my question above.

@RaduBerinde
Copy link
Member

The stacktrace shows it is caught at the optbuilder boundary.

@knz
Copy link
Contributor

knz commented Apr 21, 2021

so do we want to fold this issue into #63559?

@bdarnell
Copy link
Contributor

The panic gets caught so it doesn't crash the cockroach process

Where do you see this?

Using a test case from golang/text@e3aa4ad as a collation:

# Server version: CockroachDB CCL v20.2.6 (x86_64-apple-darwin14, built 2021/03/15 18:01:29, go1.13.14) (same version as client)
# Cluster ID: bd4ce26c-99ae-4414-baf7-d9fafc7f4730
#
# Enter \? for a brief introduction.
#
[email protected]:58094/defaultdb> select 'a' collate "es-u-000-00-v-00";
*
* ERROR: [n1,client=127.0.0.1:58095,hostssl,user=root] Queued as error 5b4d94d5a10e48a7b6e3e5f34f13242a
*
ERROR: internal error: runtime error: index out of range [17] with length 14
SQLSTATE: XX000
DETAIL: stack trace:
/go/src/github.com/cockroachdb/cockroach/pkg/util/errorutil/catch.go:29: ShouldCatch()
/go/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:165: func1()
/usr/local/go/src/runtime/panic.go:679: gopanic()
/usr/local/go/src/runtime/panic.go:75: goPanicIndex()
/go/src/github.com/cockroachdb/cockroach/vendor/golang.org/x/text/internal/language/language.go:456: findTypeForKey()
/go/src/github.com/cockroachdb/cockroach/vendor/golang.org/x/text/internal/language/language.go:307: TypeForKey()
/go/src/github.com/cockroachdb/cockroach/vendor/golang.org/x/text/internal/language/compact/language.go:38: Make()
/go/src/github.com/cockroachdb/cockroach/vendor/golang.org/x/text/language/language.go:25: makeTag()
/go/src/github.com/cockroachdb/cockroach/vendor/golang.org/x/text/language/parse.go:48: Parse()
/go/src/github.com/cockroachdb/cockroach/vendor/golang.org/x/text/language/parse.go:34: Parse()
/go/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/type_check.go:570: TypeCheck()
/go/src/github.com/cockroachdb/cockroach/pkg/sql/sem/tree/type_check.go:254: TypeCheck()
/go/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/scope.go:439: resolveType()
/go/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/project.go:154: analyzeSelectList()
/go/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/project.go:88: analyzeProjectionList()
/go/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:1062: buildSelectClause()
/go/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:999: buildSelectStmtWithoutParens()
/go/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:972: func1()
/go/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/with.go:29: processWiths()
/go/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/select.go:971: buildSelect()
/go/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:265: buildStmt()
/go/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:229: buildStmtAtRoot()
/go/src/github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder/builder.go:200: Build()
/go/src/github.com/cockroachdb/cockroach/pkg/sql/plan_opt.go:512: buildExecMemo()
/go/src/github.com/cockroachdb/cockroach/pkg/sql/plan_opt.go:195: makeOptimizerPlan()
/go/src/github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:901: makeExecPlan()
/go/src/github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:780: dispatchToExecutionEngine()
/go/src/github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:639: execStmtInOpenState()
/go/src/github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:114: execStmt()
/go/src/github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:1465: func1()
/go/src/github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:1467: execCmd()
/go/src/github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:1391: run()

HINT: You have encountered an unexpected error.

Please check the public issue tracker to check whether this problem is
already tracked. If you cannot find it there, please report the error
with details by creating a new issue.

If you would rather not post publicly, please contact us directly
using the support form.

We appreciate your feedback.

so do we want to fold this issue into #63559?

Yes, I think so.

@knz
Copy link
Contributor

knz commented Apr 21, 2021

cool thanks

@knz knz closed this as completed Apr 21, 2021
@mgartner mgartner moved this to Done in SQL Queries Jul 24, 2023
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.
Projects
Archived in project
Development

No branches or pull requests

5 participants