diff options
Diffstat (limited to 'bitbake/lib/hashserv/server.py')
| -rw-r--r-- | bitbake/lib/hashserv/server.py | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/bitbake/lib/hashserv/server.py b/bitbake/lib/hashserv/server.py index 3ff4c51ccb..2770c23607 100644 --- a/bitbake/lib/hashserv/server.py +++ b/bitbake/lib/hashserv/server.py | |||
| @@ -112,6 +112,9 @@ class Stats(object): | |||
| 112 | class ClientError(Exception): | 112 | class ClientError(Exception): |
| 113 | pass | 113 | pass |
| 114 | 114 | ||
| 115 | class ServerError(Exception): | ||
| 116 | pass | ||
| 117 | |||
| 115 | def insert_task(cursor, data, ignore=False): | 118 | def insert_task(cursor, data, ignore=False): |
| 116 | keys = sorted(data.keys()) | 119 | keys = sorted(data.keys()) |
| 117 | query = '''INSERT%s INTO tasks_v2 (%s) VALUES (%s)''' % ( | 120 | query = '''INSERT%s INTO tasks_v2 (%s) VALUES (%s)''' % ( |
| @@ -138,7 +141,7 @@ class ServerClient(object): | |||
| 138 | FAST_QUERY = 'SELECT taskhash, method, unihash FROM tasks_v2 WHERE method=:method AND taskhash=:taskhash ORDER BY created ASC LIMIT 1' | 141 | FAST_QUERY = 'SELECT taskhash, method, unihash FROM tasks_v2 WHERE method=:method AND taskhash=:taskhash ORDER BY created ASC LIMIT 1' |
| 139 | ALL_QUERY = 'SELECT * FROM tasks_v2 WHERE method=:method AND taskhash=:taskhash ORDER BY created ASC LIMIT 1' | 142 | ALL_QUERY = 'SELECT * FROM tasks_v2 WHERE method=:method AND taskhash=:taskhash ORDER BY created ASC LIMIT 1' |
| 140 | 143 | ||
| 141 | def __init__(self, reader, writer, db, request_stats, backfill_queue, upstream): | 144 | def __init__(self, reader, writer, db, request_stats, backfill_queue, upstream, read_only): |
| 142 | self.reader = reader | 145 | self.reader = reader |
| 143 | self.writer = writer | 146 | self.writer = writer |
| 144 | self.db = db | 147 | self.db = db |
| @@ -149,15 +152,19 @@ class ServerClient(object): | |||
| 149 | 152 | ||
| 150 | self.handlers = { | 153 | self.handlers = { |
| 151 | 'get': self.handle_get, | 154 | 'get': self.handle_get, |
| 152 | 'report': self.handle_report, | ||
| 153 | 'report-equiv': self.handle_equivreport, | ||
| 154 | 'get-stream': self.handle_get_stream, | 155 | 'get-stream': self.handle_get_stream, |
| 155 | 'get-stats': self.handle_get_stats, | 156 | 'get-stats': self.handle_get_stats, |
| 156 | 'reset-stats': self.handle_reset_stats, | ||
| 157 | 'chunk-stream': self.handle_chunk, | 157 | 'chunk-stream': self.handle_chunk, |
| 158 | 'backfill-wait': self.handle_backfill_wait, | ||
| 159 | } | 158 | } |
| 160 | 159 | ||
| 160 | if not read_only: | ||
| 161 | self.handlers.update({ | ||
| 162 | 'report': self.handle_report, | ||
| 163 | 'report-equiv': self.handle_equivreport, | ||
| 164 | 'reset-stats': self.handle_reset_stats, | ||
| 165 | 'backfill-wait': self.handle_backfill_wait, | ||
| 166 | }) | ||
| 167 | |||
| 161 | async def process_requests(self): | 168 | async def process_requests(self): |
| 162 | if self.upstream is not None: | 169 | if self.upstream is not None: |
| 163 | self.upstream_client = await create_async_client(self.upstream) | 170 | self.upstream_client = await create_async_client(self.upstream) |
| @@ -455,7 +462,10 @@ class ServerClient(object): | |||
| 455 | 462 | ||
| 456 | 463 | ||
| 457 | class Server(object): | 464 | class Server(object): |
| 458 | def __init__(self, db, loop=None, upstream=None): | 465 | def __init__(self, db, loop=None, upstream=None, read_only=False): |
| 466 | if upstream and read_only: | ||
| 467 | raise ServerError("Read-only hashserv cannot pull from an upstream server") | ||
| 468 | |||
| 459 | self.request_stats = Stats() | 469 | self.request_stats = Stats() |
| 460 | self.db = db | 470 | self.db = db |
| 461 | 471 | ||
| @@ -467,6 +477,7 @@ class Server(object): | |||
| 467 | self.close_loop = False | 477 | self.close_loop = False |
| 468 | 478 | ||
| 469 | self.upstream = upstream | 479 | self.upstream = upstream |
| 480 | self.read_only = read_only | ||
| 470 | 481 | ||
| 471 | self._cleanup_socket = None | 482 | self._cleanup_socket = None |
| 472 | 483 | ||
| @@ -510,7 +521,7 @@ class Server(object): | |||
| 510 | async def handle_client(self, reader, writer): | 521 | async def handle_client(self, reader, writer): |
| 511 | # writer.transport.set_write_buffer_limits(0) | 522 | # writer.transport.set_write_buffer_limits(0) |
| 512 | try: | 523 | try: |
| 513 | client = ServerClient(reader, writer, self.db, self.request_stats, self.backfill_queue, self.upstream) | 524 | client = ServerClient(reader, writer, self.db, self.request_stats, self.backfill_queue, self.upstream, self.read_only) |
| 514 | await client.process_requests() | 525 | await client.process_requests() |
| 515 | except Exception as e: | 526 | except Exception as e: |
| 516 | import traceback | 527 | import traceback |
