summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/hashserv/__init__.py2
-rw-r--r--bitbake/lib/hashserv/client.py11
-rw-r--r--bitbake/lib/hashserv/server.py10
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: