diff --git a/runners/google-cloud-dataflow-java/worker/src/main/java/org/apache/beam/runners/dataflow/worker/StreamingDataflowWorker.java b/runners/google-cloud-dataflow-java/worker/src/main/java/org/apache/beam/runners/dataflow/worker/StreamingDataflowWorker.java index c10e3c0c488c..e9bb4e6e7879 100644 --- a/runners/google-cloud-dataflow-java/worker/src/main/java/org/apache/beam/runners/dataflow/worker/StreamingDataflowWorker.java +++ b/runners/google-cloud-dataflow-java/worker/src/main/java/org/apache/beam/runners/dataflow/worker/StreamingDataflowWorker.java @@ -34,6 +34,7 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; import java.util.function.BooleanSupplier; import java.util.function.Consumer; @@ -173,6 +174,8 @@ public final class StreamingDataflowWorker { private static final String CHANNELZ_PATH = "/channelz"; private static final String BEAM_FN_API_EXPERIMENT = "beam_fn_api"; private static final String ELEMENT_METADATA_SUPPORTED_EXPERIMENT = "element_metadata_supported"; + private static final AtomicLong DIRECTPATH_PRIMARY_NOT_READY_WAIT_MILLIS = + new AtomicLong(TimeUnit.SECONDS.toMillis(15)); @SuppressWarnings("unused") private static final String STREAMING_ENGINE_USE_JOB_SETTINGS_FOR_HEARTBEAT_POOL_EXPERIMENT = @@ -867,16 +870,20 @@ private static ChannelCache createChannelCache( workerOptions.getWindmillServiceRpcChannelAliveTimeoutSec(), currentFlowControlSettings), MoreCallCredentials.from( - new VendoredCredentialsAdapter(workerOptions.getGcpCredential()))), + new VendoredCredentialsAdapter(workerOptions.getGcpCredential())), + DIRECTPATH_PRIMARY_NOT_READY_WAIT_MILLIS::get), currentFlowControlSettings.getOnReadyThresholdBytes()); }); configFetcher .getGlobalConfigHandle() .registerConfigObserver( - config -> - channelCache.consumeFlowControlSettings( - config.userWorkerJobSettings().getFlowControlSettings())); + config -> { + DIRECTPATH_PRIMARY_NOT_READY_WAIT_MILLIS.set( + config.userWorkerJobSettings().getDirectpathPrimaryNotReadyWaitMillis()); + channelCache.consumeFlowControlSettings( + config.userWorkerJobSettings().getFlowControlSettings()); + }); return channelCache; } diff --git a/runners/google-cloud-dataflow-java/worker/src/main/java/org/apache/beam/runners/dataflow/worker/windmill/client/grpc/stubs/FailoverChannel.java b/runners/google-cloud-dataflow-java/worker/src/main/java/org/apache/beam/runners/dataflow/worker/windmill/client/grpc/stubs/FailoverChannel.java index faa08c497c8f..21d2bf277011 100644 --- a/runners/google-cloud-dataflow-java/worker/src/main/java/org/apache/beam/runners/dataflow/worker/windmill/client/grpc/stubs/FailoverChannel.java +++ b/runners/google-cloud-dataflow-java/worker/src/main/java/org/apache/beam/runners/dataflow/worker/windmill/client/grpc/stubs/FailoverChannel.java @@ -45,9 +45,9 @@ *

Routes requests to either primary or fallback channel based on two independent failover modes: * *