2016-07-06 8 views
0

Wir haben ein Problem mit Slick 3.0 und eine Postgres-Datenbank (9.5) auf AWS, wo Slick eine Transaktion öffnet, aber nicht zu verpflichten, eine offene Verbindung "Leerlauf in der Transaktion "Und die Zukunft wird niemals abgeschlossen.Slick verpflichtet keine Transaktion auf AWS postgres DB

Wir haben gerade db.run(saveRow(row).transactionally.asTry) anrufen, wo

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) 
    } 
) 
} 

Nun ist die erste select-Anweisung aus getExistingRow erstellt nicht bereits abgeschlossen. Es funktioniert lokal, aber wenn es in der Produktion auf AWS ausgeführt wird, werden alle vorbereiteten Anweisungen nie festgelegt. Protokolle von slick.backend zeigen nur

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

Wir würden erwarten, folgende weitere Protokolle von slick.backend (wir sehen, wie sie vor Ort) zu bekommen, aber wir sehen sie nicht.

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

Gibt es eine Konfigurationseinstellung ich zur Verfügung stellen muß dafür auf der Seite von Slick zu arbeiten, HikariCP oder die Postgres-Datenbank, könnte dieses Problem beheben? Haben Sie noch weitere Ideen, wie Sie dieses Problem beheben können?

Antwort

0

Es wurde tatsächlich verursacht, indem man den Spielausführungskontext verwendete. Beim Wechsel in den Scala-Standardausführungskontext funktionierte es einwandfrei.

+0

Nur zu aktualisieren: Dies war NICHT die Lösung. Es stellt sich heraus, dass es durch einen raffinierten Fehler verursacht wird, bei dem "transaktional" einen Deadlock verursachen kann, wenn Sie zu viele Datenbankanforderungen haben. Siehe https://github.com/slick/slick/issues/1614 und https://github.com/slick/slick/issues/1274 –

Verwandte Themen