[ https://issues.apache.org/jira/browse/BEAM-8746?focusedWorklogId=347918&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-347918 ]
ASF GitHub Bot logged work on BEAM-8746: ---------------------------------------- Author: ASF GitHub Bot Created on: 22/Nov/19 05:00 Start Date: 22/Nov/19 05:00 Worklog Time Spent: 10m Work Description: chadrik commented on pull request #10161: [BEAM-8746] Make local job service accessible from external machines URL: https://github.com/apache/beam/pull/10161#discussion_r349433786 ########## File path: sdks/python/apache_beam/runners/portability/local_job_service.py ########## @@ -95,7 +95,7 @@ def create_beam_job(self, preparation_id, job_name, pipeline, options): def start_grpc_server(self, port=0): self._server = grpc.server(UnboundedThreadPoolExecutor()) - port = self._server.add_insecure_port('localhost:%d' % port) + port = self._server.add_insecure_port('[::]:%d' % port) Review comment: ok, I've been playing around with this, and the main impediment to keeping this design simple is that there are two separate hostnames required, one for opening the port for the server, and one which is delivered to the client for reconnecting to the staging service. I think it'd be nice to prevent people from having to figure out all this stuff again, because it's pretty frustrating to get it right, so here's my best effort at a compromise between making this configurable and making it "just work". ```python def get_hostname(self): """Return the host name at which this server will be accessible. In particular, this is provided to the client as the artifact staging endpoint. """ return 'localhost' def start_grpc_server(self, port=0): self._server = grpc.server(UnboundedThreadPoolExecutor()) hostname = self.get_hostname() # either open this up to the world, or lock it down to localhost if os.environ.get('DOCKER_MAC_CONTAINER') == '1' or hostname != 'localhost': service_address = '[::]' else: service_address = 'localhost' port = self._server.add_insecure_port('%s:%d' % (service_address, port)) beam_job_api_pb2_grpc.add_JobServiceServicer_to_server(self, self._server) beam_artifact_api_pb2_grpc.add_ArtifactStagingServiceServicer_to_server( self._artifact_service, self._server) self._artifact_staging_endpoint = endpoints_pb2.ApiServiceDescriptor( url='%s:%d' % (hostname, port)) self._server.start() _LOGGER.info('Grpc server started at %s on port %d' % (hostname, port)) return port ``` What do you think? The other option is that I just copy all of `start_grpc_server` into my sub-class. It's not the end of the world if that's the decision we come to. ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org Issue Time Tracking ------------------- Worklog Id: (was: 347918) Time Spent: 1.5h (was: 1h 20m) > Allow the local job service to work from inside docker > ------------------------------------------------------ > > Key: BEAM-8746 > URL: https://issues.apache.org/jira/browse/BEAM-8746 > Project: Beam > Issue Type: Improvement > Components: sdk-py-core > Reporter: Chad Dombrova > Assignee: Chad Dombrova > Priority: Major > Time Spent: 1.5h > Remaining Estimate: 0h > > Currently the connection is refused. It's a simple fix. -- This message was sent by Atlassian Jira (v8.3.4#803005)