TransactionError

Hi

Today I got an alert mail from my watcher script, telling me that there
was no
Mongrel running, and that it started one (so the site was down for a few
seconds.)

This is the first time I got this error (AFAICS), but I’d like to
resolve and
prevent it for the future.

From mongrel.log:

** Starting Mongrel listening at 0.0.0.0:foo
** Starting Rails with production environment…
** Rails loaded.
** Loading any Rails specific GemPlugins
** Signals ready. TERM => stop. USR2 => restart. INT => stop (no
restart).
** Rails signals registered. HUP => reload (without restart). It might
not work well.
** Mongrel available at 0.0.0.0:foo
** Writing PID file to
/home/foo/skatestuff_freebox/releases/20080319193713/tmp/pids/dispatch.foo.pid
/home/foo/skatestuff_freebox/releases/20080319193713/vendor/rails/activerecord/lib/active_record/transactions.rb:76:in
transaction': Transaction aborted (ActiveRecord::Transactions::TransactionError) from /usr/local/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel/configurator.rb:293:in call’
from
/usr/local/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel/configurator.rb:293:in
join' from /usr/local/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel/configurator.rb:293:in join’
from
/usr/local/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel/configurator.rb:293:in
each' from /usr/local/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel/configurator.rb:293:in join’
from
/usr/local/lib/ruby/gems/1.8/gems/mongrel-1.0.1/bin/mongrel_rails:136:in
run' from /usr/local/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel/command.rb:211:in run’
from
/usr/local/lib/ruby/gems/1.8/gems/mongrel-1.0.1/bin/mongrel_rails:243
from /usr/local/bin/mongrel_rails:16:in `load’
from /usr/local/bin/mongrel_rails:16

“Transaction aborted” is in
activerecord/lib/active_record/transactions.rb:

module ClassMethods
def transaction(&block)
previous_handler = trap(‘TERM’) { raise TransactionError,
“Transaction aborted” }
increment_open_transactions

  begin
    connection.transaction(Thread.current['start_db_transaction'], 

&block)
ensure
decrement_open_transactions
trap(‘TERM’, previous_handler)
end
end
[…]

Above this, there’s
“Both Base#save and Base#destroy come wrapped in a transaction […]”
and
“Also have in mind that exceptions thrown within a transaction block
will be
propagated […], so you should be ready to catch those in your
application
code.”

The site is not public yet (there still is a site-wide password), so I
can be
quite sure that there was no save or destroy called in my app code.

(By the way, in config/environments/production.rb I have

config.log_level = :warn

but the error was not logged in log/production.log .

And in in config/environment.rb I have

config.action_controller.session_store = :active_record_store
)

Could it be that the error occured when some session data was saved?

In actionpack/lib/action_controller/session/active_record_store.rb there
is

def update
if @session
ActiveRecord::Base.silence { @session.save }
end
end

The “silence” part would explain why there is no error message in
the production.log .

Not sure whether I’m on the right track …

Anyways: How to prevent this error in the future?

Tobi


http://www.rubynaut.com/

Hi

Any idea how to prevent this error?

Tobi

On Fri 2008-04-04 Tobi R. wrote:

transaction’: Transaction aborted (ActiveRecord::Transactions::TransactionError)

    decrement_open_transactions

code."
And in in config/environment.rb I have
ActiveRecord::Base.silence { @session.save }
Tobi


http://www.rubynaut.com/


http://www.rubynaut.com/

On 8 Apr 2008, at 09:59, Tobi R. wrote:

Today I got an alert mail from my watcher script, telling me that
there was no
Mongrel running, and that it started one (so the site was down for
a few
seconds.)

This is the first time I got this error (AFAICS), but I’d like to
resolve and
prevent it for the future.

Can you figure out from your logs what your server was doing when this
happened? Could anything else have sent a TERM signal to your mongel
(eg something that kills processes if they are using excessive memory?

Fred