[users at bb.net] StopIteration Exceptions in LineConsumerLogObserver
Yngve N. Pettersen
yngve at vivaldi.com
Sun Jan 24 01:30:03 UTC 2021
Hi again,
I just did a small bit of PoC testing, and based on that testing I suspect
that the problem is that LineConsumerLogObserver.finishReceived is called
too early from LogObserver.gotData because data is None, before all data
have actually been added to the log.
The next line add then triggers a StopIteration exception.
PoC:
================
def foo():
while True:
try:
x = yield
print("X: %d" % x)
except StopIteration:
print("Finished!")
return
generator = foo()
next(generator)
feed = generator.send
feed(1)
feed(2)
feed(3)
generator.close()
feed(4)
================
feed(4) will fail with the exception StopIteration
On Wed, 13 Jan 2021 17:52:51 +0100, Yngve N. Pettersen <yngve at vivaldi.com>
wrote:
> Hi,
>
> We are using a class based on steps.ShellCommandNewStyle to process log
> output using LineConsumerLogObserver from a number of tests.
>
> After the v2.10 upgrade (from v2.7) I have noticed several cases of
> Exceptions being thrown and being registered as such in the Build status
> information. One such case, missing handling of GeneratorExit, has been
> fixed.
>
> But today a lot of these test runs started failing (next on todo list is
> finding out why), and was reported terminated due to an exception.
>
> The exception turns out to be due to a StopIteration from
> LineConsumerLogObserver.headerLineReceived (at least in the case I
> investigated). My guess is that the "problem line" is one of the two
> last lines in the log, which reports the exit status of the task.
>
> The log handler function is written like the logConsumer function in
> <http://docs.buildbot.net/current/developer/cls-logobserver.html#buildbot.process.logobserver.LineConsumerLogObserver>
>
> Based on what I've quickly skimmed about StopIteration, it should be
> handled by the caller of the logConsumer function. This suggests that
> LineConsumerLogObserver or its caller need to be updated.
>
>
> BTW, this is not new in v2.10, this exception also happened in v2.7
> based on my grep of the log files. I guess the reason it is now showing
> up as an issue is that these exceptions are reported upwards to the step.
>
>
--
Sincerely,
Yngve N. Pettersen
Vivaldi Technologies AS
More information about the users
mailing list