From bd51ffd9d29ad2a50e1cb87192a2a4c7da38b585 Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Sun, 3 May 2015 01:14:22 +0900 Subject: [PATCH] (refs #660)Register Scalatra error callback to rollback transaction --- .../scala/gitbucket/core/servlet/TransactionFilter.scala | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/scala/gitbucket/core/servlet/TransactionFilter.scala b/src/main/scala/gitbucket/core/servlet/TransactionFilter.scala index 5840eb897..fc2e45743 100644 --- a/src/main/scala/gitbucket/core/servlet/TransactionFilter.scala +++ b/src/main/scala/gitbucket/core/servlet/TransactionFilter.scala @@ -4,6 +4,7 @@ import javax.servlet._ import javax.servlet.http.HttpServletRequest import com.mchange.v2.c3p0.ComboPooledDataSource import gitbucket.core.util.DatabaseConfig +import org.scalatra.ScalatraBase import org.slf4j.LoggerFactory import slick.jdbc.JdbcBackend.{Database => SlickDatabase, Session} import gitbucket.core.util.Keys @@ -25,6 +26,12 @@ class TransactionFilter extends Filter { chain.doFilter(req, res) } else { Database() withTransaction { session => + // Register Scalatra error callback to rollback transaction + ScalatraBase.onFailure { _ => + logger.debug("Rolled back transaction") + session.rollback() + }(req.asInstanceOf[HttpServletRequest]) + logger.debug("begin transaction") req.setAttribute(Keys.Request.DBSession, session) chain.doFilter(req, res)