Rosa Seohwa Kang created FLINK-38109: ----------------------------------------
Summary: BlobServer isn't associated with the correct bind-host Key: FLINK-38109 URL: https://issues.apache.org/jira/browse/FLINK-38109 Project: Flink Issue Type: Bug Components: Runtime / Coordination Affects Versions: 1.11.0 Environment: !image-2025-07-16-18-23-30-302.png|width=654,height=135! Reporter: Rosa Seohwa Kang In a flink cluster, if the JobManager bind-host is configured with an address, this creates a mismatch where clients expect to connect to BlobServer at same address, but it's actually bound to localhost. The BlobServer becomes unreachable to clients, causing "Could not connect to BlobServer" errors. This can be reproduced when uploading a JAR file to the cluster for UDF registration, and configuring the JobManager bind-host to an external address. Example: ``` package com.shopify.flink.examples.functions.asynchttpfunction; import org.apache.flink.configuration.Configuration; import org.apache.flink.configuration.RestOptions; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.table.api.bridge.java.StreamTableEnvironment; public class RosaTestFunction { public static void main(final String[] args) throws Exception { // Configuration for connecting to the local session cluster final Configuration configuration = new Configuration(); // Configure REST client to connect to the local session cluster configuration.set(RestOptions.ADDRESS, "flink-examples-flinkbook.root.shopify.dev.internal"); configuration.set(RestOptions.PORT, 7100); // REST API port configuration.setString("jobmanager.bind-host", "flink-examples-flinkbook.root.shopify.dev.internal"); configuration.setString("taskmanager.bind-host", "flink-examples-flinkbook.root.shopify.dev.internal"); StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(configuration); StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env); tableEnv.executeSql(""" CREATE FUNCTION example_custom AS 'com.shopify.flink.examples.shared.ExampleCustomFunction' LANGUAGE JAVA USING JAR 'file:///Users/rosa/src/github.com/Shopify/flink-examples/sql/pipelines/flinksql-example/jars/shared.jar';"""); tableEnv.executeSql("SELECT example_custom(1,2) as sum_result;").print(); } } ``` Root cause: The BlobServer bind-host is set to use the Jobmanager bind-host, however isn't assigned the correct host in the PekkoRpcService. [BlobServer.java](https://github.com/apache/flink/blob/master/flink-runtime/src/main/java/org/apache/flink/runtime/blob/BlobServer.java#L218-L220) ``` String bindHost = (String)config.getOptional(JobManagerOptions.BIND_HOST).orElseGet(NetUtils::getWildcardIPAddress); ``` [PekkoRpcService.java](https://github.com/apache/flink/blob/master/flink-rpc/flink-rpc-akka/src/main/java/org/apache/flink/runtime/rpc/pekko/PekkoRpcService.java#L477-L486) ``` private Tuple2<String, String> extractAddressHostname(ActorRef actorRef) { final String actorAddress = PekkoUtils.getRpcURL(actorSystem, actorRef); final String hostname; Option<String> host = actorRef.path().address().host(); if (host.isEmpty()) { hostname = "localhost"; } else { hostname = host.get(); } return Tuple2.of(actorAddress, hostname); } ``` Proposed solution: Add a `blob.server.bind-host` configuration option similar to the existing bind-host solution introduced in [FLINK-15911](https://issues.apache.org/jira/browse/FLINK-15911). -- This message was sent by Atlassian Jira (v8.20.10#820010)