[Systems] [Systems-logs] [Gitorious Processor] fail in PushEventProcessor

Bernie Innocenti bernie at sugarlabs.org
Tue Jun 26 21:39:04 EDT 2012


On Tue, 2012-06-26 at 15:05 -0400, Chris Leonard wrote:
> On Tue, Jun 26, 2012 at 2:54 PM, Sascha Silbe <silbe at activitycentral.com> wrote:
> > Chris Leonard <cjlhomeaddress at gmail.com> writes:
> >
> >> On Tue, Jun 26, 2012 at 4:11 AM, Sascha Silbe <silbe at activitycentral.com> wrote:
> >>>
> >>> These exceptions are happening rather often and always for Pootle. Can
> >>> we do anything about that?
> >>>
> >>> Pootle commits may be more work for jita than most commits. Maybe just
> >>> increasing the timeout would help? Or is the timeout already so high
> >>> that hitting it is indicative of some deeper issue?
> >>
> >> I can tell you that I have been working Pootle pretty hard on a
> >> variety of tasks recently (Honey division, eToys POT refresh, etc.).
> > [...]
> >
> > These exceptions happen on the git server side (gitorious), not on the
> > Pootle side. No matter how hard you work Pootle, it shouldn't affect
> > gitorious. So don't worry. :)
> 
> OK, although I suppose it is possible I could cause an overload with
> one of the "Push many PO files" commits that have been done in the
> past, which would push a hundred or so PO file commits to the same
> directory in one swell foop.

Don't worry, this time it's entirely Gitorious' fault, not Pootle's!

>From the traceback we received, it seems evident to me that the differ
is doing something stupid:

> /srv/gitorious/app/vendor/grit/lib/grit/git-ruby.rb:152:in `try_run'
> 	/srv/gitorious/app/vendor/grit/lib/grit/git-ruby.rb:43:in `diff'
> 	/srv/gitorious/app/vendor/grit/lib/grit/commit.rb:163:in `diff'
> 	/srv/gitorious/app/vendor/grit/lib/grit/commit.rb:181:in `diffs'

Let's see what's at line 152 of app/vendor/grit/lib/grit/git-ruby.rb:

149       rescue Timeout::Error => e
150         bytes = @bytes_read
151         @bytes_read = 0
152         raise Grit::Git::GitTimeout.new(command, bytes)
153       end

look! We're hitting a timeout!

Yes, but how long is it?  From git.rb, it seems to be set to 10 seconds:

 23     self.git_binary   = "/usr/bin/env git"
 24     self.git_timeout  = 10
 25     self.git_max_size = 5242880 # 5.megabytes

I think 10 seconds is an entirely reasonable limit. If something takes
so long to diff, we should just abort and send an empty notification
email.

The problem here seems to be that Gitorious doesn't actually catch the
GitTimeout exception at the emailer level and aborts everything in the
push.

So my recommended solution would be patching Emailer.notify_emailer()
with something like this:

--- app/lib/emailer.rb	2011-08-26 11:39:47.000000000 -0400
+++ app/lib/emailer-bernie.rb	2012-06-26 21:36:33.420250993 -0400
@@ -47,5 +47,7 @@ EOF
       user = User.find_by_login('pootle-commits')
       Mailer.deliver_commit_notification(user, subject, body)
     end
+  rescue Grit::Git::GitTimeout => e
+    # Don't panic, log timeout with committer etc.
   end
 end

I don't know Ruby and I haven't tested this code. Maybe alsroot or rgs
could roll out the complete solution in production?

-- 
Bernie Innocenti
Sugar Labs Infrastructure Team
http://wiki.sugarlabs.org/go/Infrastructure_Team



More information about the Systems mailing list