diff options
-rw-r--r-- | bitbake/lib/hashserv/__init__.py | 2 | ||||
-rw-r--r-- | bitbake/lib/hashserv/client.py | 11 | ||||
-rw-r--r-- | bitbake/lib/hashserv/server.py | 10 |
3 files changed, 19 insertions, 4 deletions
diff --git a/bitbake/lib/hashserv/__init__.py b/bitbake/lib/hashserv/__init__.py index 552a33278fa..da8d0c0374a 100644 --- a/bitbake/lib/hashserv/__init__.py +++ b/bitbake/lib/hashserv/__init__.py @@ -19,6 +19,8 @@ ADDR_TYPE_UNIX = 0 ADDR_TYPE_TCP = 1 ADDR_TYPE_WS = 2 +PROTOCOL_VERSION = "1.2" + User = namedtuple("User", ("username", "permissions")) diff --git a/bitbake/lib/hashserv/client.py b/bitbake/lib/hashserv/client.py index b269879ecfd..bf969bb841e 100644 --- a/bitbake/lib/hashserv/client.py +++ b/bitbake/lib/hashserv/client.py @@ -7,7 +7,7 @@ import logging import socket import bb.asyncrpc import json -from . import create_async_client +from . import create_async_client, PROTOCOL_VERSION logger = logging.getLogger("hashserv.client") @@ -19,7 +19,7 @@ class AsyncClient(bb.asyncrpc.AsyncClient): MODE_EXIST_STREAM = 2 def __init__(self, username=None, password=None): - super().__init__("OEHASHEQUIV", "1.1", logger) + super().__init__("OEHASHEQUIV", PROTOCOL_VERSION, logger, server_headers=True) self.mode = self.MODE_NORMAL self.username = username self.password = password @@ -83,6 +83,10 @@ class AsyncClient(bb.asyncrpc.AsyncClient): self.mode = new_mode + async def _api_is_supported(self, api): + supported_apis = await self.get_header("supported-api", "") + return api in supported_apis.split() + async def get_unihash(self, method, taskhash): await self._set_mode(self.MODE_GET_STREAM) r = await self.send_stream("%s %s" % (method, taskhash)) @@ -114,6 +118,9 @@ class AsyncClient(bb.asyncrpc.AsyncClient): ) async def unihash_exists(self, unihash): + if not await self._api_is_supported("exists-stream"): + return True + await self._set_mode(self.MODE_EXIST_STREAM) r = await self.send_stream(unihash) return r == "true" diff --git a/bitbake/lib/hashserv/server.py b/bitbake/lib/hashserv/server.py index 68f64f983b2..7a2b896745b 100644 --- a/bitbake/lib/hashserv/server.py +++ b/bitbake/lib/hashserv/server.py @@ -11,7 +11,7 @@ import time import os import base64 import hashlib -from . import create_async_client +from . import create_async_client, PROTOCOL_VERSION import bb.asyncrpc logger = logging.getLogger("hashserv.server") @@ -290,7 +290,13 @@ class ServerClient(bb.asyncrpc.AsyncServerConnection): return False def validate_proto_version(self): - return self.proto_version > (1, 0) and self.proto_version <= (1, 1) + return self.proto_version > (1, 0) and self.proto_version <= (1, 2) + + async def handle_headers(self, headers): + return { + "version": PROTOCOL_VERSION, + "supported-api": " ".join(self.handlers.keys()), + } async def process_requests(self): async with self.server.db_engine.connect(self.logger) as db: |