diff options
Diffstat (limited to 'bitbake/lib/prserv/serv.py')
-rw-r--r-- | bitbake/lib/prserv/serv.py | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/bitbake/lib/prserv/serv.py b/bitbake/lib/prserv/serv.py index c686b2065c..ea7933164b 100644 --- a/bitbake/lib/prserv/serv.py +++ b/bitbake/lib/prserv/serv.py | |||
@@ -20,8 +20,8 @@ PIDPREFIX = "/tmp/PRServer_%s_%s.pid" | |||
20 | singleton = None | 20 | singleton = None |
21 | 21 | ||
22 | class PRServerClient(bb.asyncrpc.AsyncServerConnection): | 22 | class PRServerClient(bb.asyncrpc.AsyncServerConnection): |
23 | def __init__(self, reader, writer, table, read_only): | 23 | def __init__(self, socket, table, read_only): |
24 | super().__init__(reader, writer, 'PRSERVICE', logger) | 24 | super().__init__(socket, 'PRSERVICE', logger) |
25 | self.handlers.update({ | 25 | self.handlers.update({ |
26 | 'get-pr': self.handle_get_pr, | 26 | 'get-pr': self.handle_get_pr, |
27 | 'import-one': self.handle_import_one, | 27 | 'import-one': self.handle_import_one, |
@@ -36,12 +36,12 @@ class PRServerClient(bb.asyncrpc.AsyncServerConnection): | |||
36 | 36 | ||
37 | async def dispatch_message(self, msg): | 37 | async def dispatch_message(self, msg): |
38 | try: | 38 | try: |
39 | await super().dispatch_message(msg) | 39 | return await super().dispatch_message(msg) |
40 | except: | 40 | except: |
41 | self.table.sync() | 41 | self.table.sync() |
42 | raise | 42 | raise |
43 | 43 | else: | |
44 | self.table.sync_if_dirty() | 44 | self.table.sync_if_dirty() |
45 | 45 | ||
46 | async def handle_get_pr(self, request): | 46 | async def handle_get_pr(self, request): |
47 | version = request['version'] | 47 | version = request['version'] |
@@ -57,7 +57,7 @@ class PRServerClient(bb.asyncrpc.AsyncServerConnection): | |||
57 | except sqlite3.Error as exc: | 57 | except sqlite3.Error as exc: |
58 | logger.error(str(exc)) | 58 | logger.error(str(exc)) |
59 | 59 | ||
60 | self.write_message(response) | 60 | return response |
61 | 61 | ||
62 | async def handle_import_one(self, request): | 62 | async def handle_import_one(self, request): |
63 | response = None | 63 | response = None |
@@ -71,7 +71,7 @@ class PRServerClient(bb.asyncrpc.AsyncServerConnection): | |||
71 | if value is not None: | 71 | if value is not None: |
72 | response = {'value': value} | 72 | response = {'value': value} |
73 | 73 | ||
74 | self.write_message(response) | 74 | return response |
75 | 75 | ||
76 | async def handle_export(self, request): | 76 | async def handle_export(self, request): |
77 | version = request['version'] | 77 | version = request['version'] |
@@ -85,12 +85,10 @@ class PRServerClient(bb.asyncrpc.AsyncServerConnection): | |||
85 | logger.error(str(exc)) | 85 | logger.error(str(exc)) |
86 | metainfo = datainfo = None | 86 | metainfo = datainfo = None |
87 | 87 | ||
88 | response = {'metainfo': metainfo, 'datainfo': datainfo} | 88 | return {'metainfo': metainfo, 'datainfo': datainfo} |
89 | self.write_message(response) | ||
90 | 89 | ||
91 | async def handle_is_readonly(self, request): | 90 | async def handle_is_readonly(self, request): |
92 | response = {'readonly': self.read_only} | 91 | return {'readonly': self.read_only} |
93 | self.write_message(response) | ||
94 | 92 | ||
95 | class PRServer(bb.asyncrpc.AsyncServer): | 93 | class PRServer(bb.asyncrpc.AsyncServer): |
96 | def __init__(self, dbfile, read_only=False): | 94 | def __init__(self, dbfile, read_only=False): |
@@ -99,20 +97,23 @@ class PRServer(bb.asyncrpc.AsyncServer): | |||
99 | self.table = None | 97 | self.table = None |
100 | self.read_only = read_only | 98 | self.read_only = read_only |
101 | 99 | ||
102 | def accept_client(self, reader, writer): | 100 | def accept_client(self, socket): |
103 | return PRServerClient(reader, writer, self.table, self.read_only) | 101 | return PRServerClient(socket, self.table, self.read_only) |
104 | 102 | ||
105 | def _serve_forever(self): | 103 | def start(self): |
104 | tasks = super().start() | ||
106 | self.db = prserv.db.PRData(self.dbfile, read_only=self.read_only) | 105 | self.db = prserv.db.PRData(self.dbfile, read_only=self.read_only) |
107 | self.table = self.db["PRMAIN"] | 106 | self.table = self.db["PRMAIN"] |
108 | 107 | ||
109 | logger.info("Started PRServer with DBfile: %s, Address: %s, PID: %s" % | 108 | logger.info("Started PRServer with DBfile: %s, Address: %s, PID: %s" % |
110 | (self.dbfile, self.address, str(os.getpid()))) | 109 | (self.dbfile, self.address, str(os.getpid()))) |
111 | 110 | ||
112 | super()._serve_forever() | 111 | return tasks |
113 | 112 | ||
113 | async def stop(self): | ||
114 | self.table.sync_if_dirty() | 114 | self.table.sync_if_dirty() |
115 | self.db.disconnect() | 115 | self.db.disconnect() |
116 | await super().stop() | ||
116 | 117 | ||
117 | def signal_handler(self): | 118 | def signal_handler(self): |
118 | super().signal_handler() | 119 | super().signal_handler() |