summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoshua Watt <JPEWhacker@gmail.com>2023-11-03 08:26:21 -0600
committerSteve Sakoman <steve@sakoman.com>2024-01-10 05:02:09 -1000
commitafe1706a7795dd07e7b92e85019c17acedb4ac85 (patch)
tree36aee0d78333c6393d672c957f5abf8cdbbdb865
parentf768ffb8916feb6542fcbe3e946cbf30e247b151 (diff)
downloadpoky-afe1706a7795dd07e7b92e85019c17acedb4ac85.tar.gz
bitbake: asyncrpc: Add context manager API
Adds context manager API for the asyncrcp client class which allow writing code that will automatically close the connection like so: with hashserv.create_client(address) as client: ... Rework the bitbake-hashclient tool and PR server to use this new API to fix warnings about unclosed event loops when exiting (Bitbake rev: 52226a7244968c8dad6f4ee9ccec57ac1979217a) Signed-off-by: Joshua Watt <JPEWhacker@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> (cherry picked from commit d01d684a0f6398270fe35ed59b7d28f3fd9b7e41) Signed-off-by: Steve Sakoman <steve@sakoman.com>
-rwxr-xr-xbitbake/bin/bitbake-hashclient36
-rw-r--r--bitbake/lib/bb/asyncrpc/client.py13
-rw-r--r--bitbake/lib/prserv/serv.py6
3 files changed, 33 insertions, 22 deletions
diff --git a/bitbake/bin/bitbake-hashclient b/bitbake/bin/bitbake-hashclient
index 3f265e8fa7..a02a65b937 100755
--- a/bitbake/bin/bitbake-hashclient
+++ b/bitbake/bin/bitbake-hashclient
@@ -56,25 +56,24 @@ def main():
56 nonlocal missed_hashes 56 nonlocal missed_hashes
57 nonlocal max_time 57 nonlocal max_time
58 58
59 client = hashserv.create_client(args.address) 59 with hashserv.create_client(args.address) as client:
60 60 for i in range(args.requests):
61 for i in range(args.requests): 61 taskhash = hashlib.sha256()
62 taskhash = hashlib.sha256() 62 taskhash.update(args.taskhash_seed.encode('utf-8'))
63 taskhash.update(args.taskhash_seed.encode('utf-8')) 63 taskhash.update(str(i).encode('utf-8'))
64 taskhash.update(str(i).encode('utf-8'))
65 64
66 start_time = time.perf_counter() 65 start_time = time.perf_counter()
67 l = client.get_unihash(METHOD, taskhash.hexdigest()) 66 l = client.get_unihash(METHOD, taskhash.hexdigest())
68 elapsed = time.perf_counter() - start_time 67 elapsed = time.perf_counter() - start_time
69 68
70 with lock: 69 with lock:
71 if l: 70 if l:
72 found_hashes += 1 71 found_hashes += 1
73 else: 72 else:
74 missed_hashes += 1 73 missed_hashes += 1
75 74
76 max_time = max(elapsed, max_time) 75 max_time = max(elapsed, max_time)
77 pbar.update() 76 pbar.update()
78 77
79 max_time = 0 78 max_time = 0
80 found_hashes = 0 79 found_hashes = 0
@@ -174,9 +173,8 @@ def main():
174 173
175 func = getattr(args, 'func', None) 174 func = getattr(args, 'func', None)
176 if func: 175 if func:
177 client = hashserv.create_client(args.address) 176 with hashserv.create_client(args.address) as client:
178 177 return func(args, client)
179 return func(args, client)
180 178
181 return 0 179 return 0
182 180
diff --git a/bitbake/lib/bb/asyncrpc/client.py b/bitbake/lib/bb/asyncrpc/client.py
index fa042bbe87..dcbe7e5762 100644
--- a/bitbake/lib/bb/asyncrpc/client.py
+++ b/bitbake/lib/bb/asyncrpc/client.py
@@ -126,6 +126,12 @@ class AsyncClient(object):
126 {'ping': {}} 126 {'ping': {}}
127 ) 127 )
128 128
129 async def __aenter__(self):
130 return self
131
132 async def __aexit__(self, exc_type, exc_value, traceback):
133 await self.close()
134
129 135
130class Client(object): 136class Client(object):
131 def __init__(self): 137 def __init__(self):
@@ -176,3 +182,10 @@ class Client(object):
176 if sys.version_info >= (3, 6): 182 if sys.version_info >= (3, 6):
177 self.loop.run_until_complete(self.loop.shutdown_asyncgens()) 183 self.loop.run_until_complete(self.loop.shutdown_asyncgens())
178 self.loop.close() 184 self.loop.close()
185
186 def __enter__(self):
187 return self
188
189 def __exit__(self, exc_type, exc_value, traceback):
190 self.close()
191 return False
diff --git a/bitbake/lib/prserv/serv.py b/bitbake/lib/prserv/serv.py
index c686b2065c..0db6ebc707 100644
--- a/bitbake/lib/prserv/serv.py
+++ b/bitbake/lib/prserv/serv.py
@@ -344,9 +344,9 @@ def auto_shutdown():
344def ping(host, port): 344def ping(host, port):
345 from . import client 345 from . import client
346 346
347 conn = client.PRClient() 347 with client.PRClient() as conn:
348 conn.connect_tcp(host, port) 348 conn.connect_tcp(host, port)
349 return conn.ping() 349 return conn.ping()
350 350
351def connect(host, port): 351def connect(host, port):
352 from . import client 352 from . import client