2016-07-06 53 views
0

我們在AWS上有一個slick 3.0和postgres數據庫(9.5)的問題,其中slick打開一個事務但似乎沒有提交它,從而使一個打開的連接「在事務中空閒「而期貨從未完成。Slick不會在AWS上提交事務postgres DB

我們只是打電話db.run(saveRow(row).transactionally.asTry),其中

private def saveRow(row: Row): DBIO[Int] = { 

    val getExistingRow: DBIO[Option[Row]] = table.filter(_.id === row.id).result.headOption 

    getExistingRow.flatMap((existingRow: Option[Row]) => 
    existingRow match { 
     case None => table += row 
     case Some(row) => 
     table.filter(_.id === row.id).map(_.propety).update(row.property) 
    } 
) 
} 

現在第一個SELECT語句從getExistingRow創建已不完整。它在本地工作,但是當它在AWS上運行時,所有準備好的語句都不會被提交。從slick.backend日誌只顯示

#1: Start transaction 
#2: StreamingInvokerAction$HeadOptionAction [select ...] 

我們希望從slick.backend得到以下進一步日誌(我們看到他們在本地),但我們沒有看到他們。

#3: SingleInsertAction [insert into ...] 
#4: Commit 

有一些配置設置我需要爲這對油滑的方共同努力,HikariCP或者Postgres數據庫,可以解決這一問題?任何其他想法如何解決這個問題?

回答

0

它實際上是由使用播放執行上下文引起的。切換到Scala默認執行上下文時,它工作正常。

+0

只是爲了更新:這不是解決方案。事實證明,這是由一個精巧的錯誤引起的,如果你有太多的數據庫請求,「事務性」會導致死鎖。請參閱https://github.com/slick/slick/issues/1614和https://github.com/slick/slick/issues/1274 –