summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/prserv/serv.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/prserv/serv.py')
-rw-r--r--bitbake/lib/prserv/serv.py40
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"
18singleton = None 18singleton = None
19 19
20class PRServerClient(bb.asyncrpc.AsyncServerConnection): 20class 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
86class PRServer(bb.asyncrpc.AsyncServer): 93class 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
197def start_daemon(dbfile, host, port, logfile): 205def 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