diff options
author | Mingli Yu <mingli.yu@windriver.com> | 2021-08-31 15:48:07 +0800 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2021-09-02 12:05:04 +0100 |
commit | 0a11696e0898c3c5108e6d7c5ad28da50e00ea66 (patch) | |
tree | fd74b67725806aff0622bfe31741e51db78a0034 | |
parent | 1ff1ea3880d293b14ce0fc65e3bc4c938d587a2f (diff) | |
download | bitbake-0a11696e0898c3c5108e6d7c5ad28da50e00ea66.tar.gz |
prserv: make localhost work
After [1] introduced, the PR server doesn't work in docker when use
below setting like before.
PRSERV_HOST = "localhost:0"
And it's because the localhost is resolved to an ipv6 address ::1 as
the below bitbake-prserv shows.
bitbake$ bitbake-prserv --start --host=localhost --port=42005
bitbake$ cat prserv.log
Traceback (most recent call last):
File "/OE/nodistro/honister/bitbake/bin/bitbake-prserv", line 55, in <module>
ret = main()
File "/OE/nodistro/honister/bitbake/bin/bitbake-prserv", line 46, in main
ret=prserv.serv.start_daemon(options.dbfile, options.host, options.port,os.path.abspath(options.logfile), options.read_only)
File "/OE/nodistro/honister/bitbake/lib/prserv/serv.py", line 226, in start_daemon
run_as_daemon(daemon_main, pidfile, os.path.abspath(logfile))
File "/OE/nodistro/honister/bitbake/lib/prserv/serv.py", line 202, in run_as_daemon
func()
File "/OE/nodistro/honister/bitbake/lib/prserv/serv.py", line 224, in daemon_main
server.serve_forever()
File "/OE/nodistro/honister/bitbake/lib/bb/asyncrpc/serv.py", line 233, in serve_forever
self.start()
File "/OE/nodistro/honister/bitbake/lib/bb/asyncrpc/serv.py", line 144, in start_tcp
self.server = self.loop.run_until_complete(server_coro)
File "/usr/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
return future.result()
File "/usr/lib/python3.8/asyncio/streams.py", line 94, in start_server
return await loop.create_server(factory, host, port, **kwds)
File "/usr/lib/python3.8/asyncio/base_events.py", line 1463, in create_server
raise OSError(err.errno, 'error while attempting '
OSError: [Errno 99] error while attempting to bind on address ('::1', 42005, 0, 0): cannot assign requested address
So add the extra logic to make the localhost resolved as expected to
make the PR service work especially in docker.
[1] 6a2b23e2 prserv: Replace XML RPC with modern asyncrpc implementation
Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | lib/prserv/serv.py | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/lib/prserv/serv.py b/lib/prserv/serv.py index 68db3d3ec..0a20b927c 100644 --- a/lib/prserv/serv.py +++ b/lib/prserv/serv.py @@ -126,7 +126,7 @@ class PRServSingleton(object): def start(self): self.prserv = PRServer(self.dbfile) - self.prserv.start_tcp_server(self.host, self.port) + self.prserv.start_tcp_server(socket.gethostbyname(self.host), self.port) self.process = self.prserv.serve_as_process() if not self.prserv.address: @@ -221,7 +221,7 @@ def start_daemon(dbfile, host, port, logfile, read_only=False): dbfile = os.path.abspath(dbfile) def daemon_main(): server = PRServer(dbfile, read_only=read_only) - server.start_tcp_server(host, port) + server.start_tcp_server(ip, port) server.serve_forever() run_as_daemon(daemon_main, pidfile, os.path.abspath(logfile)) |