diff options
| -rw-r--r-- | bitbake/lib/hashserv/client.py | 8 | ||||
| -rw-r--r-- | bitbake/lib/hashserv/server.py | 36 |
2 files changed, 44 insertions, 0 deletions
diff --git a/bitbake/lib/hashserv/client.py b/bitbake/lib/hashserv/client.py index f65956617b..ae0cce9df4 100644 --- a/bitbake/lib/hashserv/client.py +++ b/bitbake/lib/hashserv/client.py | |||
| @@ -148,6 +148,14 @@ class Client(object): | |||
| 148 | m['unihash'] = unihash | 148 | m['unihash'] = unihash |
| 149 | return self.send_message({'report': m}) | 149 | return self.send_message({'report': m}) |
| 150 | 150 | ||
| 151 | def report_unihash_equiv(self, taskhash, method, unihash, extra={}): | ||
| 152 | self._set_mode(self.MODE_NORMAL) | ||
| 153 | m = extra.copy() | ||
| 154 | m['taskhash'] = taskhash | ||
| 155 | m['method'] = method | ||
| 156 | m['unihash'] = unihash | ||
| 157 | return self.send_message({'report-equiv': m}) | ||
| 158 | |||
| 151 | def get_stats(self): | 159 | def get_stats(self): |
| 152 | self._set_mode(self.MODE_NORMAL) | 160 | self._set_mode(self.MODE_NORMAL) |
| 153 | return self.send_message({'get-stats': None}) | 161 | return self.send_message({'get-stats': None}) |
diff --git a/bitbake/lib/hashserv/server.py b/bitbake/lib/hashserv/server.py index 0aff77688e..cc7e48233b 100644 --- a/bitbake/lib/hashserv/server.py +++ b/bitbake/lib/hashserv/server.py | |||
| @@ -143,6 +143,7 @@ class ServerClient(object): | |||
| 143 | handlers = { | 143 | handlers = { |
| 144 | 'get': self.handle_get, | 144 | 'get': self.handle_get, |
| 145 | 'report': self.handle_report, | 145 | 'report': self.handle_report, |
| 146 | 'report-equiv': self.handle_equivreport, | ||
| 146 | 'get-stream': self.handle_get_stream, | 147 | 'get-stream': self.handle_get_stream, |
| 147 | 'get-stats': self.handle_get_stats, | 148 | 'get-stats': self.handle_get_stats, |
| 148 | 'reset-stats': self.handle_reset_stats, | 149 | 'reset-stats': self.handle_reset_stats, |
| @@ -303,6 +304,41 @@ class ServerClient(object): | |||
| 303 | 304 | ||
| 304 | self.write_message(d) | 305 | self.write_message(d) |
| 305 | 306 | ||
| 307 | async def handle_equivreport(self, data): | ||
| 308 | with closing(self.db.cursor()) as cursor: | ||
| 309 | insert_data = { | ||
| 310 | 'method': data['method'], | ||
| 311 | 'outhash': "", | ||
| 312 | 'taskhash': data['taskhash'], | ||
| 313 | 'unihash': data['unihash'], | ||
| 314 | 'created': datetime.now() | ||
| 315 | } | ||
| 316 | |||
| 317 | for k in ('owner', 'PN', 'PV', 'PR', 'task', 'outhash_siginfo'): | ||
| 318 | if k in data: | ||
| 319 | insert_data[k] = data[k] | ||
| 320 | |||
| 321 | cursor.execute('''INSERT OR IGNORE INTO tasks_v2 (%s) VALUES (%s)''' % ( | ||
| 322 | ', '.join(sorted(insert_data.keys())), | ||
| 323 | ', '.join(':' + k for k in sorted(insert_data.keys()))), | ||
| 324 | insert_data) | ||
| 325 | |||
| 326 | self.db.commit() | ||
| 327 | |||
| 328 | # Fetch the unihash that will be reported for the taskhash. If the | ||
| 329 | # unihash matches, it means this row was inserted (or the mapping | ||
| 330 | # was already valid) | ||
| 331 | row = self.query_equivalent(data['method'], data['taskhash']) | ||
| 332 | |||
| 333 | if row['unihash'] == data['unihash']: | ||
| 334 | logger.info('Adding taskhash equivalence for %s with unihash %s', | ||
| 335 | data['taskhash'], row['unihash']) | ||
| 336 | |||
| 337 | d = {k: row[k] for k in ('taskhash', 'method', 'unihash')} | ||
| 338 | |||
| 339 | self.write_message(d) | ||
| 340 | |||
| 341 | |||
| 306 | async def handle_get_stats(self, request): | 342 | async def handle_get_stats(self, request): |
| 307 | d = { | 343 | d = { |
| 308 | 'requests': self.request_stats.todict(), | 344 | 'requests': self.request_stats.todict(), |
