Skip to content

roachpb: v21.2.6: IsCompleteTransaction panicked from supposedly unreachable line #79188

@cockroach-teamcity

Description

@cockroach-teamcity

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/3146653297/?referrer=webhooks_plugin

Panic message:

conn_executor.go:666: panic: ×
--
*errutil.leafError: panic: × (1)
conn_executor.go:666: *withstack.withStack (top exception)
*safedetails.withSafeDetails: while executing: COMMIT TRANSACTION (2)
conn_executor.go:666: *withstack.withStack (3)
(check the extra data payloads)

Stacktrace (expand for inline code snippets):

r := recover()
h.ex.closeWrapper(ctx, r)
}()
in pkg/sql.(*Server).ServeConn.func1
/usr/local/go/src/runtime/panic.go#L964-L966 in runtime.gopanic
}
panic(r)
}
in pkg/util/stop.(*Stopper).Recover
/usr/local/go/src/runtime/panic.go#L964-L966 in runtime.gopanic
// again due to undefined state.
panic(r)
}
in pkg/kv/kvserver.(*Store).Send.func1
/usr/local/go/src/runtime/panic.go#L970-L972 in runtime.gopanic
}
panic("unreachable")
}
in pkg/roachpb.(*BatchRequest).IsCompleteTransaction
}
if !ba.IsCompleteTransaction() {
return false
in pkg/kv/kvserver.isOnePhaseCommit
) bool {
if !isOnePhaseCommit(ba) {
return false
in pkg/kv/kvserver.(*Replica).canAttempt1PCEvaluation
// indications that the batch's txn will require retry, execute as normal.
if r.canAttempt1PCEvaluation(ctx, ba, latchSpans) {
res := r.evaluate1PC(ctx, idKey, ba, latchSpans, lockSpans)
in pkg/kv/kvserver.(*Replica).evaluateWriteBatch
// in the call stack as well.
batch, ms, br, res, pErr := r.evaluateWriteBatch(ctx, idKey, ba, lul, latchSpans, lockSpans)
in pkg/kv/kvserver.(*Replica).evaluateProposal
) (*ProposalData, *roachpb.Error) {
res, needConsensus, pErr := r.evaluateProposal(ctx, idKey, ba, lul, latchSpans, lockSpans)
in pkg/kv/kvserver.(*Replica).requestToProposal
idKey := makeIDKey()
proposal, pErr := r.requestToProposal(ctx, idKey, ba, st, lul, g.LatchSpans(), g.LockSpans())
log.Event(proposal.ctx, "evaluated request")
in pkg/kv/kvserver.(*Replica).evalAndPropose
// evalAndPropose.
ch, abandon, _, pErr := r.evalAndPropose(ctx, ba, g, st, localUncertaintyLimit, tok.Move(ctx))
if pErr != nil {
in pkg/kv/kvserver.(*Replica).executeWriteBatch
br, g, pErr = fn(r, ctx, ba, g)
if pErr == nil {
in pkg/kv/kvserver.(*Replica).executeBatchWithConcurrencyRetries
fn := (*Replica).executeWriteBatch
br, pErr = r.executeBatchWithConcurrencyRetries(ctx, ba, fn)
} else if ba.IsAdmin() {
in pkg/kv/kvserver.(*Replica).sendWithRangeID
) (*roachpb.BatchResponse, *roachpb.Error) {
return r.sendWithRangeID(ctx, r.RangeID, &ba)
}
in pkg/kv/kvserver.(*Replica).Send
br, pErr = repl.Send(ctx, ba)
if pErr == nil {
in pkg/kv/kvserver.(*Store).Send
br, pErr := store.Send(ctx, ba)
if br != nil && br.Error != nil {
in pkg/kv/kvserver.(*Stores).Send
var pErr *roachpb.Error
br, pErr = n.stores.Send(ctx, *args)
if pErr != nil {
in pkg/server.(*Node).batchInternal.func1
return f(ctx)
}
in pkg/util/stop.(*Stopper).RunTaskWithErr
var br *roachpb.BatchResponse
if err := n.stopper.RunTaskWithErr(ctx, "node.Node: batch", func(ctx context.Context) error {
var finishSpan func(*roachpb.BatchResponse)
in pkg/server.(*Node).batchInternal

cockroach/pkg/server/node.go

Lines 1014 to 1016 in c7cfac5

}
br, err := n.batchInternal(ctx, tenantID, args)
if callAdmittedWorkDoneOnKVAdmissionQ {
in pkg/server.(*Node).Batch
ba.AdmissionHeader.SourceLocation = roachpb.AdmissionHeader_LOCAL
return a.server.Batch(ctx, ba)
}
in pkg/rpc.internalClientAdapter.Batch
}
reply, err := iface.Batch(ctx, &ba)
// If we queried a remote node, perform extra validation and
in pkg/kv/kvclient/kvcoord.(*grpcTransport).sendBatch
ba.Replica = r
return gt.sendBatch(ctx, r.NodeID, iface, ba)
}
in pkg/kv/kvclient/kvcoord.(*grpcTransport).SendNext
}
br, err = transport.SendNext(ctx, ba)
ds.maybeIncrementErrCounters(br, err)
in pkg/kv/kvclient/kvcoord.(*DistSender).sendToReplicas
prevTok = routingTok
reply, err = ds.sendToReplicas(ctx, ba, routingTok, withCommit)
in pkg/kv/kvclient/kvcoord.(*DistSender).sendPartialBatch
if !ri.NeedAnother(rs) {
resp := ds.sendPartialBatch(
ctx, ba, rs, ri.Token(), withCommit, batchIdx, false, /* needsTruncate */
in pkg/kv/kvclient/kvcoord.(*DistSender).divideAndSendBatchToRanges
}
br, pErr = ds.divideAndSendBatchToRanges(ctx, ba, rs, true /* withCommit */, batchIdx)
in pkg/kv/kvclient/kvcoord.(*DistSender).divideAndSendParallelCommit
if withParallelCommit {
rpl, pErr = ds.divideAndSendParallelCommit(ctx, ba, rs, 0 /* batchIdx */)
} else {
in pkg/kv/kvclient/kvcoord.(*DistSender).Send
defer gs.mu.Lock()
return gs.wrapped.Send(ctx, ba)
}
in pkg/kv/kvclient/kvcoord.(*txnLockGatekeeper).SendLocked

pkg/sql/conn_executor.go in pkg/sql.(*Server).ServeConn.func1 at line 666
/usr/local/go/src/runtime/panic.go in runtime.gopanic at line 965
pkg/util/stop/stopper.go in pkg/util/stop.(*Stopper).Recover at line 231
/usr/local/go/src/runtime/panic.go in runtime.gopanic at line 965
pkg/kv/kvserver/store_send.go in pkg/kv/kvserver.(*Store).Send.func1 at line 95
/usr/local/go/src/runtime/panic.go in runtime.gopanic at line 971
pkg/roachpb/batch.go in pkg/roachpb.(*BatchRequest).IsCompleteTransaction at line 319
pkg/kv/kvserver/replica_write.go in pkg/kv/kvserver.isOnePhaseCommit at line 792
pkg/kv/kvserver/replica_write.go in pkg/kv/kvserver.(*Replica).canAttempt1PCEvaluation at line 390
pkg/kv/kvserver/replica_write.go in pkg/kv/kvserver.(*Replica).evaluateWriteBatch at line 445
pkg/kv/kvserver/replica_proposal.go in pkg/kv/kvserver.(*Replica).evaluateProposal at line 783
pkg/kv/kvserver/replica_proposal.go in pkg/kv/kvserver.(*Replica).requestToProposal at line 913
pkg/kv/kvserver/replica_raft.go in pkg/kv/kvserver.(*Replica).evalAndPropose at line 110
pkg/kv/kvserver/replica_write.go in pkg/kv/kvserver.(*Replica).executeWriteBatch at line 156
pkg/kv/kvserver/replica_send.go in pkg/kv/kvserver.(*Replica).executeBatchWithConcurrencyRetries at line 377
pkg/kv/kvserver/replica_send.go in pkg/kv/kvserver.(*Replica).sendWithRangeID at line 107
pkg/kv/kvserver/replica_send.go in pkg/kv/kvserver.(*Replica).Send at line 43
pkg/kv/kvserver/store_send.go in pkg/kv/kvserver.(*Store).Send at line 190
pkg/kv/kvserver/stores.go in pkg/kv/kvserver.(*Stores).Send at line 191
pkg/server/node.go in pkg/server.(*Node).batchInternal.func1 at line 912
pkg/util/stop/stopper.go in pkg/util/stop.(*Stopper).RunTaskWithErr at line 324
pkg/server/node.go in pkg/server.(*Node).batchInternal at line 900
pkg/server/node.go in pkg/server.(*Node).Batch at line 1015
pkg/rpc/context.go in pkg/rpc.internalClientAdapter.Batch at line 504
pkg/kv/kvclient/kvcoord/transport.go in pkg/kv/kvclient/kvcoord.(*grpcTransport).sendBatch at line 203
pkg/kv/kvclient/kvcoord/transport.go in pkg/kv/kvclient/kvcoord.(*grpcTransport).SendNext at line 185
pkg/kv/kvclient/kvcoord/dist_sender.go in pkg/kv/kvclient/kvcoord.(*DistSender).sendToReplicas at line 1990
pkg/kv/kvclient/kvcoord/dist_sender.go in pkg/kv/kvclient/kvcoord.(*DistSender).sendPartialBatch at line 1538
pkg/kv/kvclient/kvcoord/dist_sender.go in pkg/kv/kvclient/kvcoord.(*DistSender).divideAndSendBatchToRanges at line 1156
pkg/kv/kvclient/kvcoord/dist_sender.go in pkg/kv/kvclient/kvcoord.(*DistSender).divideAndSendParallelCommit at line 967
pkg/kv/kvclient/kvcoord/dist_sender.go in pkg/kv/kvclient/kvcoord.(*DistSender).Send at line 788
pkg/kv/kvclient/kvcoord/txn_lock_gatekeeper.go in pkg/kv/kvclient/kvcoord.(*txnLockGatekeeper).SendLocked at line 82
Tag Value
Cockroach Release v21.2.6
Cockroach SHA: c7cfac5
Platform linux amd64
Distribution CCL
Environment v21.2.6
Command server
Go Version ``
# of CPUs
# of Goroutines

Jira issue: CRDB-14627

Metadata

Metadata

Assignees

Labels

C-bugCode not up to spec/doc, specs & docs deemed correct. Solution expected to change code/behavior.O-sentryOriginated from an in-the-wild panic report.T-kvKV Team

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions