[promises] Add debugging to help diagnose illegal state crashes (#31754)

pull/31758/head
Craig Tiller 2 years ago committed by GitHub
parent 6754018dd1
commit 676f61774b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 43
      src/core/lib/channel/promise_based_filter.cc

@ -316,6 +316,7 @@ void BaseCallData::SendMessage::StartOp(CapturedBatch batch) {
case State::kForwardedBatch:
case State::kBatchCompleted:
case State::kPushedToPipe:
gpr_log(GPR_ERROR, "ILLEGAL STATE: %s", StateString(state_));
abort();
case State::kCancelled:
return;
@ -344,6 +345,7 @@ void BaseCallData::SendMessage::GotPipe(PipeReceiver<MessageHandle>* receiver) {
case State::kForwardedBatch:
case State::kBatchCompleted:
case State::kPushedToPipe:
gpr_log(GPR_ERROR, "ILLEGAL STATE: %s", StateString(state_));
abort();
case State::kCancelled:
return;
@ -381,6 +383,7 @@ void BaseCallData::SendMessage::OnComplete(absl::Status status) {
case State::kPushedToPipe:
case State::kGotBatch:
case State::kBatchCompleted:
gpr_log(GPR_ERROR, "ILLEGAL STATE: %s", StateString(state_));
abort();
break;
case State::kCancelled:
@ -412,6 +415,7 @@ void BaseCallData::SendMessage::Done(const ServerMetadata& metadata) {
case State::kGotBatchNoPipe:
case State::kGotBatch:
case State::kBatchCompleted:
gpr_log(GPR_ERROR, "ILLEGAL STATE: %s", StateString(state_));
abort();
break;
case State::kPushedToPipe:
@ -559,6 +563,7 @@ void BaseCallData::ReceiveMessage::StartOp(CapturedBatch& batch) {
case State::kPulledFromPipe:
case State::kCompletedWhilePulledFromPipe:
case State::kCompletedWhilePushedToPipe:
gpr_log(GPR_ERROR, "ILLEGAL STATE: %s", StateString(state_));
abort();
case State::kCancelledWhilstIdle:
case State::kCancelled:
@ -600,6 +605,7 @@ void BaseCallData::ReceiveMessage::GotPipe(PipeSender<MessageHandle>* sender) {
case State::kCancelledWhilstForwarding:
case State::kCancelledWhilstIdle:
case State::kBatchCompletedButCancelled:
gpr_log(GPR_ERROR, "ILLEGAL STATE: %s", StateString(state_));
abort();
case State::kCancelled:
return;
@ -625,6 +631,7 @@ void BaseCallData::ReceiveMessage::OnComplete(absl::Status status) {
case State::kCancelledWhilstIdle:
case State::kCompletedWhilePulledFromPipe:
case State::kCompletedWhilePushedToPipe:
gpr_log(GPR_ERROR, "ILLEGAL STATE: %s", StateString(state_));
abort();
case State::kForwardedBatchNoPipe:
state_ = State::kBatchCompletedNoPipe;
@ -684,6 +691,7 @@ void BaseCallData::ReceiveMessage::Done(const ServerMetadata& metadata,
case State::kBatchCompleted:
case State::kBatchCompletedNoPipe:
case State::kBatchCompletedButCancelled:
gpr_log(GPR_ERROR, "ILLEGAL STATE: %s", StateString(state_));
abort();
case State::kCancelledWhilstIdle:
case State::kCancelledWhilstForwarding:
@ -975,6 +983,9 @@ class ClientCallData::PollContext {
case RecvInitialMetadata::
kRespondedToTrailingMetadataPriorToHook:
case RecvInitialMetadata::kRespondedButNeedToSetLatch:
gpr_log(GPR_ERROR, "ILLEGAL STATE: %s",
RecvInitialMetadata::StateString(
self_->recv_initial_metadata_->state));
abort(); // not reachable
break;
case RecvInitialMetadata::kHookedWaitingForLatch:
@ -1011,6 +1022,9 @@ class ClientCallData::PollContext {
case RecvInitialMetadata::
kRespondedToTrailingMetadataPriorToHook:
case RecvInitialMetadata::kRespondedButNeedToSetLatch:
gpr_log(GPR_ERROR, "ILLEGAL STATE: %s",
RecvInitialMetadata::StateString(
self_->recv_initial_metadata_->state));
abort(); // not reachable
break;
case RecvInitialMetadata::kCompleteWaitingForLatch:
@ -1238,6 +1252,9 @@ void ClientCallData::StartBatch(grpc_transport_stream_op_batch* b) {
case RecvInitialMetadata::kCompleteAndSetLatch:
case RecvInitialMetadata::kResponded:
case RecvInitialMetadata::kRespondedButNeedToSetLatch:
gpr_log(
GPR_ERROR, "ILLEGAL STATE: %s",
RecvInitialMetadata::StateString(recv_initial_metadata_->state));
abort(); // unreachable
}
if (hook) {
@ -1355,6 +1372,9 @@ void ClientCallData::Cancel(grpc_error_handle error, Flusher* flusher) {
case RecvInitialMetadata::kResponded:
break;
case RecvInitialMetadata::kRespondedButNeedToSetLatch:
gpr_log(
GPR_ERROR, "ILLEGAL STATE: %s",
RecvInitialMetadata::StateString(recv_initial_metadata_->state));
abort();
break;
}
@ -1410,6 +1430,9 @@ void ClientCallData::RecvInitialMetadataReady(grpc_error_handle error) {
case RecvInitialMetadata::kResponded:
case RecvInitialMetadata::kRespondedToTrailingMetadataPriorToHook:
case RecvInitialMetadata::kRespondedButNeedToSetLatch:
gpr_log(
GPR_ERROR, "ILLEGAL STATE: %s",
RecvInitialMetadata::StateString(recv_initial_metadata_->state));
abort(); // unreachable
}
flusher.AddClosure(
@ -1439,6 +1462,9 @@ void ClientCallData::RecvInitialMetadataReady(grpc_error_handle error) {
case RecvInitialMetadata::kResponded:
case RecvInitialMetadata::kRespondedToTrailingMetadataPriorToHook:
case RecvInitialMetadata::kRespondedButNeedToSetLatch:
gpr_log(
GPR_ERROR, "ILLEGAL STATE: %s",
RecvInitialMetadata::StateString(recv_initial_metadata_->state));
abort(); // unreachable
}
}
@ -1500,6 +1526,9 @@ ArenaPromise<ServerMetadataHandle> ClientCallData::MakeNextPromise(
case RecvInitialMetadata::kResponded:
case RecvInitialMetadata::kRespondedToTrailingMetadataPriorToHook:
case RecvInitialMetadata::kRespondedButNeedToSetLatch:
gpr_log(
GPR_ERROR, "ILLEGAL STATE: %s",
RecvInitialMetadata::StateString(recv_initial_metadata_->state));
abort(); // unreachable
}
} else {
@ -1562,6 +1591,8 @@ Poll<ServerMetadataHandle> ClientCallData::PollTrailingMetadata() {
case RecvTrailingState::kResponded:
// We've already responded to the caller: we can't do anything and we
// should never reach here.
gpr_log(GPR_ERROR, "ILLEGAL STATE: %s",
StateString(recv_trailing_state_));
abort();
}
GPR_UNREACHABLE_CODE(return Pending{});
@ -1858,6 +1889,9 @@ void ServerCallData::StartBatch(grpc_transport_stream_op_batch* b) {
case SendInitialMetadata::kQueuedWaitingForLatch:
case SendInitialMetadata::kQueuedAndSetLatch:
case SendInitialMetadata::kForwarded:
gpr_log(
GPR_ERROR, "ILLEGAL STATE: %s",
SendInitialMetadata::StateString(send_initial_metadata_->state));
abort(); // not reachable
}
send_initial_metadata_->batch = batch;
@ -1888,6 +1922,8 @@ void ServerCallData::StartBatch(grpc_transport_stream_op_batch* b) {
case SendTrailingState::kQueued:
case SendTrailingState::kQueuedBehindSendMessage:
case SendTrailingState::kForwarded:
gpr_log(GPR_ERROR, "ILLEGAL STATE: %s",
StateString(send_trailing_state_));
abort(); // unreachable
break;
case SendTrailingState::kCancelled:
@ -1966,6 +2002,9 @@ ArenaPromise<ServerMetadataHandle> ServerCallData::MakeNextPromise(
case SendInitialMetadata::kQueuedAndGotLatch:
case SendInitialMetadata::kQueuedAndSetLatch:
case SendInitialMetadata::kForwarded:
gpr_log(
GPR_ERROR, "ILLEGAL STATE: %s",
SendInitialMetadata::StateString(send_initial_metadata_->state));
abort(); // not reachable
break;
case SendInitialMetadata::kQueuedWaitingForLatch:
@ -2003,6 +2042,8 @@ Poll<ServerMetadataHandle> ServerCallData::PollTrailingMetadata() {
return WrapMetadata(send_trailing_metadata_batch_->payload
->send_trailing_metadata.send_trailing_metadata);
case SendTrailingState::kForwarded:
gpr_log(GPR_ERROR, "ILLEGAL STATE: %s",
StateString(send_trailing_state_));
abort(); // unreachable
case SendTrailingState::kCancelled:
// We could translate cancelled_error to metadata and return it... BUT
@ -2172,6 +2213,8 @@ void ServerCallData::WakeInsideCombiner(Flusher* flusher) {
send_trailing_state_ = SendTrailingState::kForwarded;
} break;
case SendTrailingState::kForwarded:
gpr_log(GPR_ERROR, "ILLEGAL STATE: %s",
StateString(send_trailing_state_));
abort(); // unreachable
break;
case SendTrailingState::kInitial: {

Loading…
Cancel
Save