2016-07-06 2 views
0

slick이 트랜잭션을 열어도 커밋하지 않은 AWS의 postgres 데이터베이스 (9.5)와 slick 3.0에서 문제가 발생하여 열려있는 연결이 "idle in transaction "미래는 결코 끝나지 않습니다. 우리는 단지Slick이 AWS postgres DB에서 트랜잭션을 커밋하지 않았습니다.

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

가 이제 첫 번째 선택 문이 getExistingRow에서 생성 db.run(saveRow(row).transactionally.asTry)을 요구하고있다

이미 완료되지 않습니다. 로컬에서 작동하지만 AWS의 프로덕션 환경에서 실행하면 준비된 모든 명령문은 절대로 커밋되지 않습니다. slick.backend에서 로그는 (우리가 로컬로 참조)

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

우리는 slick.backend에서 다음 더 로그를 얻을 기대 보여 주지만, 우리는 그들을 볼 수 없습니다.

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

나는이 슬릭의 측면에서 작동하도록 제공해야하는 일부 구성 설정이 있습니까, HikariCP 또는 포스트 그레스 데이터베이스는이 문제를 해결할 수있는? 이 문제를 해결하는 방법에 대한 다른 아이디어가 있습니까?

답변

0

실제로 재생 실행 컨텍스트를 사용하여 발생했습니다. 스칼라 기본 실행 컨텍스트로 전환 할 때 잘 작동했습니다.

+0

그냥 업데이트 : 이것은 해결책이 아니 었습니다. 데이터베이스 요청이 너무 많으면 "트랜잭션 방식으로"교착 상태가 발생할 수있는 매끄러운 버그로 인해 발생합니다. https://github.com/slick/slick/issues/1614 및 https://github.com/slick/slick/issues/1274를 참조하십시오. –

관련 문제