apache/beam · warning
withThrottlingReportTargetMs has been removed and does not…
Error message
withThrottlingReportTargetMs has been removed and does not have an effect.
What it means
withThrottlingReportTargetMs was removed in Beam 2.60.0 and no longer has any effect. The BigtableIO.Write transform keeps the method for source compatibility but only logs a warning and returns the unchanged Write object, so caller configuration is silently ignored.
Solutions
- Remove the .withThrottlingReportTargetMs(...) call from your pipeline code.
- If throttling behavior is needed, configure it via Bigtable service-side settings or use a different rate-limiting approach (e.g. Beam's autoscaling or a custom rate-limiting DoFn).
- Pin to Beam < 2.60.0 only if the old throttling behavior is strictly required (not recommended).
Example fix
// before
pipeline.apply("Read", BigtableIO.read().withProjectId(project).withInstanceId(instance).withThrottlingReportTargetMs(5000));
// after
pipeline.apply("Read", BigtableIO.read().withProjectId(project).withInstanceId(instance)); Defensive patterns
Strategy: validation
Validate before calling
// Java: fail fast on removed API usage
if (writeObj.getClass().getSimpleName().equals("Write") && beamVersionAtLeast("2.60.0")) {
// do not call withThrottlingReportTargetMs
} Prevention
- Grep your pipeline code for removed BigtableIO methods when bumping Beam versions.
- Read the @Deprecated Javadoc (removed in 2.60.0) before configuring Write.
- Treat warn-level logs about no-op methods as config drift in CI log scans.
When it happens
Trigger: Calling BigtableIO.write().withThrottlingReportTargetMs(<int>) after upgrading to Beam 2.60.0 or later.
Common situations: Pipelines migrated from older Beam versions that used Bigtable throttling-based rate limiting (the Bigtable throttling mensuration/reporting mechanism was removed); code compiled against the old API re-run on a newer Beam runner.
Understand the failure class
Background: "is deprecated and will be removed" — deprecation warnings for old API names, keywords, and options, and how to migrate before the removal release — this error's family across 29 libraries.
Related errors
- DNP: New partition does not have all the parents
- DNP: Reconciling missing partition
- DNP: Updating watermark failed due to missing
- DNP: Updating watermark failed due to overlapping
- Failed to deserialize missingPartitions
AI-assisted analysis of apache/beam@12126d8942 (2026-09-13).
Data as JSON: /api/errors/240b4d0dc2f52163.
Report an issue: GitHub.
Appendix: source
Thrown at sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/bigtable/BigtableIO.java:1158
.setBigtableWriteOptions(options.toBuilder().setFlowControl(enableFlowControl).build())
.build();
}
/**
* @deprecated This method has been deprecated in Beam 2.60.0. It does not have an effect.
*/
@Deprecated
public Write withThrottlingTargetMs(int throttlingTargetMs) {
LOG.warn("withThrottlingTargetMs has been removed and does not have effect.");
return this;
}
/**
* @deprecated This method has been deprecated in Beam 2.60.0. It does not have an effect.
*/
@Deprecated
public Write withThrottlingReportTargetMs(int throttlingReportTargetMs) {
LOG.warn("withThrottlingReportTargetMs has been removed and does not have an effect.");
return this;
}
public Write withErrorHandler(ErrorHandler<BadRecord, ?> badRecordErrorHandler) {
return toBuilder()
.setBadRecordErrorHandler(badRecordErrorHandler)
.setBadRecordRouter(BadRecordRouter.RECORDING_ROUTER)
.build();
}
@VisibleForTesting
Write withServiceFactory(BigtableServiceFactory factory) {
return toBuilder().setServiceFactory(factory).build();
}
/**
* Returns a {@link BigtableIO.WriteWithResults} that will emit a {@link BigtableWriteResult}
* for each batch of rows written.View on GitHub (pinned to 12126d8942)