{"record":{"id":"0275dc73109ddc1e","repo":"apache/beam","slug":"rcsp-invalid-response-type","errorCode":null,"errorMessage":"RCSP {}: Invalid response type","messagePattern":"RCSP (.+?): Invalid response type","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigtable/changestreams/action/ChangeStreamAction.java","lineNumber":202,"sourceCode":"      // runner initiated checkpoints.\n      if (!tracker.tryClaim(streamProgress)) {\n        return Optional.of(DoFn.ProcessContinuation.stop());\n      }\n      if (changeStreamMutation.getType() == ChangeStreamMutation.MutationType.GARBAGE_COLLECTION) {\n        metrics.incChangeStreamMutationGcCounter();\n      } else if (changeStreamMutation.getType() == ChangeStreamMutation.MutationType.USER) {\n        metrics.incChangeStreamMutationUserCounter();\n      }\n      Instant delay = toJodaTime(changeStreamMutation.getCommitTimestamp());\n      metrics.updateProcessingDelayFromCommitTimestamp(\n          Instant.now().getMillis() - delay.getMillis());\n\n      // We are outputting elements with timestamp of 0 to prevent reliance on event time. This\n      // limits the ability to window on commit time of any data changes. It is still possible to\n      // window on processing time.\n      receiver.outputWithTimestamp(outputRecord, Instant.EPOCH);\n    } else {\n      LOG.warn(\n          \"RCSP {}: Invalid response type\", formatByteStringRange(partitionRecord.getPartition()));\n    }\n    return Optional.empty();\n  }\n}\n","sourceCodeStart":184,"sourceCodeEnd":208,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigtable/changestreams/action/ChangeStreamAction.java#L184-L208","documentation":"In the Bigtable change streams connector, ReadChangeStreamPartitionAction can emit records of several types; when the action produces an output record whose type is not one of the recognized kinds, the connector logs a warning 'RCSP {}: Invalid response type' and returns empty, meaning that change stream response is dropped and not emitted downstream.","triggerScenarios":"A mutation/response read from the Bigtable change stream (e.g. a Heartbeat, CloseStream, or unknown LogRecord variant) is not of the expected type at ChangeStreamAction.run, so the switch/if-chain matches no known type for the partition's ByteStringRange.","commonSituations":"Unexpected change stream records returned by Cloud Bigtable (new server-side record types, out-of-order CloseStream/Heartbeat handling), or connector version mismatch with the Bigtable server API behavior.","solutions":["Upgrade the Beam google-cloud-platform IO module / connector to the latest version so all known response types are handled.","Check Cloud Bigtable change stream behavior for the partition range in question (splits/merges during streaming).","If data loss matters, re-run the affected partitions or restart the pipeline; the affected record is skipped, not retried."],"exampleFix":"// before\nconnector = BigtableIO.readChangeStream().withProjectId(p).withInstanceId(i).withAppProfile(\"default\");\n// after\n// pin/upgrade to a Beam release matching your Bigtable server behavior\nconnector = BigtableIO.readChangeStream().withProjectId(p).withInstanceId(i).withAppProfile(\"default\"); // e.g. Beam 2.61+\n","handlingStrategy":"fallback","validationCode":null,"typeGuard":"if (response.getResponseTypeCase() == ResponseTypeCase.MUTATION || response.getResponseTypeCase() == ResponseTypeCase.HEARTBEAT) { handle(response); }","tryCatchPattern":"try { runPartition(record); } catch (IllegalStateException e) { LOG.warn(\"Unknown change stream response dropped\", e); } // record is skipped by design; re-run partitions if data loss matters","preventionTips":["Keep the Beam google-cloud-platform module up to date with your Bigtable server behavior.","Monitor for this warning; repeated occurrences mean records are being dropped.","Pin connector and server to tested combinations before enabling change streams in production."],"tags":["java","apache-beam","bigtable","change-stream"],"backgroundTag":"unexpected-response-shape","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-20T03:17:13.778Z"}