Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: third_party/buildbot_slave_8_4/buildslave/runprocess.py

Issue 325963006: Kill builds that produce too much output (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/build
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « third_party/buildbot_slave_8_4/README.chromium ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # This file is part of Buildbot. Buildbot is free software: you can 1 # This file is part of Buildbot. Buildbot is free software: you can
2 # redistribute it and/or modify it under the terms of the GNU General Public 2 # redistribute it and/or modify it under the terms of the GNU General Public
3 # License as published by the Free Software Foundation, version 2. 3 # License as published by the Free Software Foundation, version 2.
4 # 4 #
5 # This program is distributed in the hope that it will be useful, but WITHOUT 5 # This program is distributed in the hope that it will be useful, but WITHOUT
6 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 6 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
7 # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 7 # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
8 # details. 8 # details.
9 # 9 #
10 # You should have received a copy of the GNU General Public License along with 10 # You should have received a copy of the GNU General Public License along with
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 class RunProcess: 205 class RunProcess:
206 """ 206 """
207 This is a helper class, used by slave commands to run programs in a child 207 This is a helper class, used by slave commands to run programs in a child
208 shell. 208 shell.
209 """ 209 """
210 210
211 notreally = False 211 notreally = False
212 BACKUP_TIMEOUT = 5 212 BACKUP_TIMEOUT = 5
213 KILL = "KILL" 213 KILL = "KILL"
214 CHUNK_LIMIT = 128*1024 214 CHUNK_LIMIT = 128*1024
215 OUTPUT_LIMIT = 50*1024*1024
cmp 2014/06/10 15:51:22 Add an inline comment ("Limit is 50 MB.") Did you
215 216
216 # Don't send any data until at least BUFFER_SIZE bytes have been collected 217 # Don't send any data until at least BUFFER_SIZE bytes have been collected
217 # or BUFFER_TIMEOUT elapsed 218 # or BUFFER_TIMEOUT elapsed
218 BUFFER_SIZE = 64*1024 219 BUFFER_SIZE = 64*1024
219 BUFFER_TIMEOUT = 5 220 BUFFER_TIMEOUT = 5
220 221
221 # For sending elapsed time: 222 # For sending elapsed time:
222 startTime = None 223 startTime = None
223 elapsedTime = None 224 elapsedTime = None
224 225
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 self.timeout = timeout 316 self.timeout = timeout
316 self.timer = None 317 self.timer = None
317 self.maxTime = maxTime 318 self.maxTime = maxTime
318 self.maxTimer = None 319 self.maxTimer = None
319 self.keepStdout = keepStdout 320 self.keepStdout = keepStdout
320 self.keepStderr = keepStderr 321 self.keepStderr = keepStderr
321 322
322 self.buffered = deque() 323 self.buffered = deque()
323 self.buflen = 0 324 self.buflen = 0
324 self.buftimer = None 325 self.buftimer = None
326 self.totalOutputLength = 0
325 327
326 if usePTY == "slave-config": 328 if usePTY == "slave-config":
327 self.usePTY = self.builder.usePTY 329 self.usePTY = self.builder.usePTY
328 else: 330 else:
329 self.usePTY = usePTY 331 self.usePTY = usePTY
330 332
331 # usePTY=True is a convenience for cleaning up all children and 333 # usePTY=True is a convenience for cleaning up all children and
332 # grandchildren of a hung command. Fall back to usePTY=False on systems 334 # grandchildren of a hung command. Fall back to usePTY=False on systems
333 # and in situations where ptys cause problems. PTYs are posix-only, 335 # and in situations where ptys cause problems. PTYs are posix-only,
334 # and for .closeStdin to matter, we must use a pipe, not a PTY 336 # and for .closeStdin to matter, we must use a pipe, not a PTY
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 616
615 def _addToBuffers(self, logname, data): 617 def _addToBuffers(self, logname, data):
616 """ 618 """
617 Add data to the buffer for logname 619 Add data to the buffer for logname
618 Start a timer to send the buffers if BUFFER_TIMEOUT elapses. 620 Start a timer to send the buffers if BUFFER_TIMEOUT elapses.
619 If adding data causes the buffer size to grow beyond BUFFER_SIZE, then 621 If adding data causes the buffer size to grow beyond BUFFER_SIZE, then
620 the buffers will be sent. 622 the buffers will be sent.
621 """ 623 """
622 n = len(data) 624 n = len(data)
623 625
626 self.totalOutputLength += n
627 if self.totalOutputLength > self.OUTPUT_LIMIT:
628 self.kill('output limit (%d) exceeded' % self.OUTPUT_LIMIT)
629 return
630
624 self.buflen += n 631 self.buflen += n
625 self.buffered.append((logname, data)) 632 self.buffered.append((logname, data))
626 if self.buflen > self.BUFFER_SIZE: 633 if self.buflen > self.BUFFER_SIZE:
627 self._sendBuffers() 634 self._sendBuffers()
628 elif not self.buftimer: 635 elif not self.buftimer:
629 self.buftimer = self._reactor.callLater(self.BUFFER_TIMEOUT, self._b ufferTimeout) 636 self.buftimer = self._reactor.callLater(self.BUFFER_TIMEOUT, self._b ufferTimeout)
630 637
631 def addStdout(self, data): 638 def addStdout(self, data):
632 if self.sendStdout: 639 if self.sendStdout:
633 self._addToBuffers('stdout', data) 640 self._addToBuffers('stdout', data)
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
817 self.timer = None 824 self.timer = None
818 self.sendStatus({'header': "SIGKILL failed to kill process\n"}) 825 self.sendStatus({'header': "SIGKILL failed to kill process\n"})
819 if self.sendRC: 826 if self.sendRC:
820 self.sendStatus({'header': "using fake rc=-1\n"}) 827 self.sendStatus({'header': "using fake rc=-1\n"})
821 self.sendStatus({'rc': -1}) 828 self.sendStatus({'rc': -1})
822 slave.reboot_tools.Reboot() 829 slave.reboot_tools.Reboot()
823 # In production, Reboot() does not return, and failed() is 830 # In production, Reboot() does not return, and failed() is
824 # never called. In testing mode, Reboot() returns immediately 831 # never called. In testing mode, Reboot() returns immediately
825 # with no effect, and we need to recover. 832 # with no effect, and we need to recover.
826 self.failed(RuntimeError("SIGKILL failed to kill process")) 833 self.failed(RuntimeError("SIGKILL failed to kill process"))
OLDNEW
« no previous file with comments | « third_party/buildbot_slave_8_4/README.chromium ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698