diff options
Diffstat (limited to 'bitbake/lib/prserv/serv.py')
-rw-r--r-- | bitbake/lib/prserv/serv.py | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/bitbake/lib/prserv/serv.py b/bitbake/lib/prserv/serv.py index 1fa4e1766c..17ae40967c 100644 --- a/bitbake/lib/prserv/serv.py +++ b/bitbake/lib/prserv/serv.py | |||
@@ -18,14 +18,16 @@ PIDPREFIX = "/tmp/PRServer_%s_%s.pid" | |||
18 | singleton = None | 18 | singleton = None |
19 | 19 | ||
20 | class PRServerClient(bb.asyncrpc.AsyncServerConnection): | 20 | class PRServerClient(bb.asyncrpc.AsyncServerConnection): |
21 | def __init__(self, reader, writer, table): | 21 | def __init__(self, reader, writer, table, read_only): |
22 | super().__init__(reader, writer, 'PRSERVICE', logger) | 22 | super().__init__(reader, writer, 'PRSERVICE', logger) |
23 | self.handlers.update({ | 23 | self.handlers.update({ |
24 | 'get-pr': self.handle_get_pr, | 24 | 'get-pr': self.handle_get_pr, |
25 | 'import-one': self.handle_import_one, | 25 | 'import-one': self.handle_import_one, |
26 | 'export': self.handle_export, | 26 | 'export': self.handle_export, |
27 | 'is-readonly': self.handle_is_readonly, | ||
27 | }) | 28 | }) |
28 | self.table = table | 29 | self.table = table |
30 | self.read_only = read_only | ||
29 | 31 | ||
30 | def validate_proto_version(self): | 32 | def validate_proto_version(self): |
31 | return (self.proto_version == (1, 0)) | 33 | return (self.proto_version == (1, 0)) |
@@ -56,16 +58,17 @@ class PRServerClient(bb.asyncrpc.AsyncServerConnection): | |||
56 | self.write_message(response) | 58 | self.write_message(response) |
57 | 59 | ||
58 | async def handle_import_one(self, request): | 60 | async def handle_import_one(self, request): |
59 | version = request['version'] | 61 | response = None |
60 | pkgarch = request['pkgarch'] | 62 | if not self.read_only: |
61 | checksum = request['checksum'] | 63 | version = request['version'] |
62 | value = request['value'] | 64 | pkgarch = request['pkgarch'] |
65 | checksum = request['checksum'] | ||
66 | value = request['value'] | ||
67 | |||
68 | value = self.table.importone(version, pkgarch, checksum, value) | ||
69 | if value is not None: | ||
70 | response = {'value': value} | ||
63 | 71 | ||
64 | value = self.table.importone(version, pkgarch, checksum, value) | ||
65 | if value is not None: | ||
66 | response = {'value': value} | ||
67 | else: | ||
68 | response = None | ||
69 | self.write_message(response) | 72 | self.write_message(response) |
70 | 73 | ||
71 | async def handle_export(self, request): | 74 | async def handle_export(self, request): |
@@ -83,20 +86,25 @@ class PRServerClient(bb.asyncrpc.AsyncServerConnection): | |||
83 | response = {'metainfo': metainfo, 'datainfo': datainfo} | 86 | response = {'metainfo': metainfo, 'datainfo': datainfo} |
84 | self.write_message(response) | 87 | self.write_message(response) |
85 | 88 | ||
89 | async def handle_is_readonly(self, request): | ||
90 | response = {'readonly': self.read_only} | ||
91 | self.write_message(response) | ||
92 | |||
86 | class PRServer(bb.asyncrpc.AsyncServer): | 93 | class PRServer(bb.asyncrpc.AsyncServer): |
87 | def __init__(self, dbfile): | 94 | def __init__(self, dbfile, read_only=False): |
88 | super().__init__(logger) | 95 | super().__init__(logger) |
89 | self.dbfile = dbfile | 96 | self.dbfile = dbfile |
90 | self.table = None | 97 | self.table = None |
98 | self.read_only = read_only | ||
91 | 99 | ||
92 | def accept_client(self, reader, writer): | 100 | def accept_client(self, reader, writer): |
93 | return PRServerClient(reader, writer, self.table) | 101 | return PRServerClient(reader, writer, self.table, self.read_only) |
94 | 102 | ||
95 | def _serve_forever(self): | 103 | def _serve_forever(self): |
96 | self.db = prserv.db.PRData(self.dbfile) | 104 | self.db = prserv.db.PRData(self.dbfile, read_only=self.read_only) |
97 | self.table = self.db["PRMAIN"] | 105 | self.table = self.db["PRMAIN"] |
98 | 106 | ||
99 | logger.debug("Started PRServer with DBfile: %s, Address: %s, PID: %s" % | 107 | logger.info("Started PRServer with DBfile: %s, Address: %s, PID: %s" % |
100 | (self.dbfile, self.address, str(os.getpid()))) | 108 | (self.dbfile, self.address, str(os.getpid()))) |
101 | 109 | ||
102 | super()._serve_forever() | 110 | super()._serve_forever() |
@@ -194,7 +202,7 @@ def run_as_daemon(func, pidfile, logfile): | |||
194 | os.remove(pidfile) | 202 | os.remove(pidfile) |
195 | os._exit(0) | 203 | os._exit(0) |
196 | 204 | ||
197 | def start_daemon(dbfile, host, port, logfile): | 205 | def start_daemon(dbfile, host, port, logfile, read_only=False): |
198 | ip = socket.gethostbyname(host) | 206 | ip = socket.gethostbyname(host) |
199 | pidfile = PIDPREFIX % (ip, port) | 207 | pidfile = PIDPREFIX % (ip, port) |
200 | try: | 208 | try: |
@@ -210,7 +218,7 @@ def start_daemon(dbfile, host, port, logfile): | |||
210 | 218 | ||
211 | dbfile = os.path.abspath(dbfile) | 219 | dbfile = os.path.abspath(dbfile) |
212 | def daemon_main(): | 220 | def daemon_main(): |
213 | server = PRServer(dbfile) | 221 | server = PRServer(dbfile, read_only=read_only) |
214 | server.start_tcp_server(host, port) | 222 | server.start_tcp_server(host, port) |
215 | server.serve_forever() | 223 | server.serve_forever() |
216 | 224 | ||