summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/server/process.py44
1 files changed, 23 insertions, 21 deletions
diff --git a/bitbake/lib/bb/server/process.py b/bitbake/lib/bb/server/process.py
index 5b4d92dc80..2be4588a4f 100644
--- a/bitbake/lib/bb/server/process.py
+++ b/bitbake/lib/bb/server/process.py
@@ -35,6 +35,10 @@ logger = logging.getLogger('BitBake')
35class ProcessTimeout(SystemExit): 35class ProcessTimeout(SystemExit):
36 pass 36 pass
37 37
38def serverlog(msg):
39 print(msg)
40 sys.stdout.flush()
41
38class ProcessServer(): 42class ProcessServer():
39 profile_filename = "profile.log" 43 profile_filename = "profile.log"
40 profile_processed_filename = "profile.log.processed" 44 profile_processed_filename = "profile.log.processed"
@@ -73,7 +77,7 @@ class ProcessServer():
73 if self.xmlrpcinterface[0]: 77 if self.xmlrpcinterface[0]:
74 self.xmlrpc = bb.server.xmlrpcserver.BitBakeXMLRPCServer(self.xmlrpcinterface, self.cooker, self) 78 self.xmlrpc = bb.server.xmlrpcserver.BitBakeXMLRPCServer(self.xmlrpcinterface, self.cooker, self)
75 79
76 print("Bitbake XMLRPC server address: %s, server port: %s" % (self.xmlrpc.host, self.xmlrpc.port)) 80 serverlog("Bitbake XMLRPC server address: %s, server port: %s" % (self.xmlrpc.host, self.xmlrpc.port))
77 81
78 try: 82 try:
79 self.bitbake_lock.seek(0) 83 self.bitbake_lock.seek(0)
@@ -84,7 +88,7 @@ class ProcessServer():
84 self.bitbake_lock.write("%s\n" % (os.getpid())) 88 self.bitbake_lock.write("%s\n" % (os.getpid()))
85 self.bitbake_lock.flush() 89 self.bitbake_lock.flush()
86 except Exception as e: 90 except Exception as e:
87 print("Error writing to lock file: %s" % str(e)) 91 serverlog("Error writing to lock file: %s" % str(e))
88 pass 92 pass
89 93
90 if self.cooker.configuration.profile: 94 if self.cooker.configuration.profile:
@@ -98,7 +102,7 @@ class ProcessServer():
98 102
99 prof.dump_stats("profile.log") 103 prof.dump_stats("profile.log")
100 bb.utils.process_profilelog("profile.log") 104 bb.utils.process_profilelog("profile.log")
101 print("Raw profiling information saved to profile.log and processed statistics to profile.log.processed") 105 serverlog("Raw profiling information saved to profile.log and processed statistics to profile.log.processed")
102 106
103 else: 107 else:
104 ret = self.main() 108 ret = self.main()
@@ -118,10 +122,10 @@ class ProcessServer():
118 if self.xmlrpc: 122 if self.xmlrpc:
119 fds.append(self.xmlrpc) 123 fds.append(self.xmlrpc)
120 seendata = False 124 seendata = False
121 print("Entering server connection loop") 125 serverlog("Entering server connection loop")
122 126
123 def disconnect_client(self, fds): 127 def disconnect_client(self, fds):
124 print("Disconnecting Client") 128 serverlog("Disconnecting Client")
125 if self.controllersock: 129 if self.controllersock:
126 fds.remove(self.controllersock) 130 fds.remove(self.controllersock)
127 self.controllersock.close() 131 self.controllersock.close()
@@ -139,12 +143,12 @@ class ProcessServer():
139 self.haveui = False 143 self.haveui = False
140 ready = select.select(fds,[],[],0)[0] 144 ready = select.select(fds,[],[],0)[0]
141 if newconnections: 145 if newconnections:
142 print("Starting new client") 146 serverlog("Starting new client")
143 conn = newconnections.pop(-1) 147 conn = newconnections.pop(-1)
144 fds.append(conn) 148 fds.append(conn)
145 self.controllersock = conn 149 self.controllersock = conn
146 elif self.timeout is None and not ready: 150 elif self.timeout is None and not ready:
147 print("No timeout, exiting.") 151 serverlog("No timeout, exiting.")
148 self.quit = True 152 self.quit = True
149 153
150 self.lastui = time.time() 154 self.lastui = time.time()
@@ -153,17 +157,17 @@ class ProcessServer():
153 while select.select([self.sock],[],[],0)[0]: 157 while select.select([self.sock],[],[],0)[0]:
154 controllersock, address = self.sock.accept() 158 controllersock, address = self.sock.accept()
155 if self.controllersock: 159 if self.controllersock:
156 print("Queuing %s (%s)" % (str(ready), str(newconnections))) 160 serverlog("Queuing %s (%s)" % (str(ready), str(newconnections)))
157 newconnections.append(controllersock) 161 newconnections.append(controllersock)
158 else: 162 else:
159 print("Accepting %s (%s)" % (str(ready), str(newconnections))) 163 serverlog("Accepting %s (%s)" % (str(ready), str(newconnections)))
160 self.controllersock = controllersock 164 self.controllersock = controllersock
161 fds.append(controllersock) 165 fds.append(controllersock)
162 if self.controllersock in ready: 166 if self.controllersock in ready:
163 try: 167 try:
164 print("Processing Client") 168 serverlog("Processing Client")
165 ui_fds = recvfds(self.controllersock, 3) 169 ui_fds = recvfds(self.controllersock, 3)
166 print("Connecting Client") 170 serverlog("Connecting Client")
167 171
168 # Where to write events to 172 # Where to write events to
169 writer = ConnectionWriter(ui_fds[0]) 173 writer = ConnectionWriter(ui_fds[0])
@@ -187,14 +191,14 @@ class ProcessServer():
187 191
188 if not self.timeout == -1.0 and not self.haveui and self.timeout and \ 192 if not self.timeout == -1.0 and not self.haveui and self.timeout and \
189 (self.lastui + self.timeout) < time.time(): 193 (self.lastui + self.timeout) < time.time():
190 print("Server timeout, exiting.") 194 serverlog("Server timeout, exiting.")
191 self.quit = True 195 self.quit = True
192 196
193 # If we don't see a UI connection within maxuiwait, its unlikely we're going to see 197 # If we don't see a UI connection within maxuiwait, its unlikely we're going to see
194 # one. We have had issue with processes hanging indefinitely so timing out UI-less 198 # one. We have had issue with processes hanging indefinitely so timing out UI-less
195 # servers is useful. 199 # servers is useful.
196 if not self.hadanyui and not self.xmlrpc and not self.timeout and (self.lastui + self.maxuiwait) < time.time(): 200 if not self.hadanyui and not self.xmlrpc and not self.timeout and (self.lastui + self.maxuiwait) < time.time():
197 print("No UI connection within max timeout, exiting to avoid infinite loop.") 201 serverlog("No UI connection within max timeout, exiting to avoid infinite loop.")
198 self.quit = True 202 self.quit = True
199 203
200 if self.command_channel in ready: 204 if self.command_channel in ready:
@@ -209,7 +213,7 @@ class ProcessServer():
209 self.quit = True 213 self.quit = True
210 continue 214 continue
211 try: 215 try:
212 print("Running command %s" % command) 216 serverlog("Running command %s" % command)
213 self.command_channel_reply.send(self.cooker.command.runCommand(command)) 217 self.command_channel_reply.send(self.cooker.command.runCommand(command))
214 except Exception as e: 218 except Exception as e:
215 logger.exception('Exception in server main event loop running command %s (%s)' % (command, str(e))) 219 logger.exception('Exception in server main event loop running command %s (%s)' % (command, str(e)))
@@ -236,9 +240,9 @@ class ProcessServer():
236 ready = self.idle_commands(.1, fds) 240 ready = self.idle_commands(.1, fds)
237 241
238 if len(threading.enumerate()) != 1: 242 if len(threading.enumerate()) != 1:
239 print("More than one thread left?: " + str(threading.enumerate())) 243 serverlog("More than one thread left?: " + str(threading.enumerate()))
240 244
241 print("Exiting") 245 serverlog("Exiting")
242 # Remove the socket file so we don't get any more connections to avoid races 246 # Remove the socket file so we don't get any more connections to avoid races
243 try: 247 try:
244 os.unlink(self.sockname) 248 os.unlink(self.sockname)
@@ -296,7 +300,7 @@ class ProcessServer():
296 msg = "Delaying shutdown due to active processes which appear to be holding bitbake.lock" 300 msg = "Delaying shutdown due to active processes which appear to be holding bitbake.lock"
297 if procs: 301 if procs:
298 msg += ":\n%s" % str(procs.decode("utf-8")) 302 msg += ":\n%s" % str(procs.decode("utf-8"))
299 print(msg) 303 serverlog(msg)
300 304
301 def idle_commands(self, delay, fds=None): 305 def idle_commands(self, delay, fds=None):
302 nextsleep = delay 306 nextsleep = delay
@@ -485,8 +489,7 @@ def execServer(lockfd, readypipeinfd, lockname, sockname, server_timeout, xmlrpc
485 import bb.cookerdata 489 import bb.cookerdata
486 import bb.cooker 490 import bb.cooker
487 491
488 print(start_log_format % (os.getpid(), datetime.datetime.now().strftime(start_log_datetime_format))) 492 serverlog(start_log_format % (os.getpid(), datetime.datetime.now().strftime(start_log_datetime_format)))
489 sys.stdout.flush()
490 493
491 try: 494 try:
492 bitbake_lock = os.fdopen(lockfd, "w") 495 bitbake_lock = os.fdopen(lockfd, "w")
@@ -515,8 +518,7 @@ def execServer(lockfd, readypipeinfd, lockname, sockname, server_timeout, xmlrpc
515 writer.send("r") 518 writer.send("r")
516 writer.close() 519 writer.close()
517 server.cooker = cooker 520 server.cooker = cooker
518 print("Started bitbake server pid %d" % os.getpid()) 521 serverlog("Started bitbake server pid %d" % os.getpid())
519 sys.stdout.flush()
520 522
521 server.run() 523 server.run()
522 finally: 524 finally: