@ -39,6 +39,9 @@ sub journal_query_params {
sub GET :Allow {
sub GET :Allow {
my ( $ self , $ c , $ id ) = @ _ ;
my ( $ self , $ c , $ id ) = @ _ ;
$ c - > model ( 'DB' ) - > set_transaction_isolation ( 'READ COMMITTED' ) ;
$ c - > model ( 'DB' ) - > set_transaction_isolation ( 'READ COMMITTED' ) ;
TX_START:
$ c - > clear_errors ;
try {
my $ guard = $ c - > model ( 'DB' ) - > txn_scope_guard ;
my $ guard = $ c - > model ( 'DB' ) - > txn_scope_guard ;
{
{
last unless $ self - > valid_id ( $ c , $ id ) ;
last unless $ self - > valid_id ( $ c , $ id ) ;
@ -65,6 +68,15 @@ sub GET :Allow {
$ c - > response - > body ( $ response - > content ) ;
$ c - > response - > body ( $ response - > content ) ;
return ;
return ;
}
}
} catch ( $ e ) {
if ( $ self - > check_deadlock ( $ c , $ e ) ) {
goto TX_START ;
}
unless ( $ c - > has_errors ) {
$ self - > error ( $ c , HTTP_INTERNAL_SERVER_ERROR , 'Internal Server Error' , $ e ) ;
last ;
}
}
return ;
return ;
}
}
@ -75,6 +87,9 @@ sub PUT :Allow {
my $ schema = $ c - > model ( 'DB' ) ;
my $ schema = $ c - > model ( 'DB' ) ;
$ schema - > set_transaction_isolation ( 'READ COMMITTED' ) ;
$ schema - > set_transaction_isolation ( 'READ COMMITTED' ) ;
TX_START:
$ c - > clear_errors ;
try {
my $ guard = $ schema - > txn_scope_guard ;
my $ guard = $ schema - > txn_scope_guard ;
{
{
my $ preference = $ self - > require_preference ( $ c ) ;
my $ preference = $ self - > require_preference ( $ c ) ;
@ -108,6 +123,15 @@ sub PUT :Allow {
$ guard - > commit ;
$ guard - > commit ;
$ self - > return_representation ( $ c , 'hal' = > $ hal , 'preference' = > $ preference ) ;
$ self - > return_representation ( $ c , 'hal' = > $ hal , 'preference' = > $ preference ) ;
}
}
} catch ( $ e ) {
if ( $ self - > check_deadlock ( $ c , $ e ) ) {
goto TX_START ;
}
unless ( $ c - > has_errors ) {
$ self - > error ( $ c , HTTP_INTERNAL_SERVER_ERROR , 'Internal Server Error' , $ e ) ;
last ;
}
}
return ;
return ;
}
}
@ -118,6 +142,9 @@ sub PATCH :Allow {
my $ schema = $ c - > model ( 'DB' ) ;
my $ schema = $ c - > model ( 'DB' ) ;
$ schema - > set_transaction_isolation ( 'READ COMMITTED' ) ;
$ schema - > set_transaction_isolation ( 'READ COMMITTED' ) ;
TX_START:
$ c - > clear_errors ;
try {
my $ guard = $ schema - > txn_scope_guard ;
my $ guard = $ schema - > txn_scope_guard ;
{
{
my $ preference = $ self - > require_preference ( $ c ) ;
my $ preference = $ self - > require_preference ( $ c ) ;
@ -159,6 +186,15 @@ sub PATCH :Allow {
$ guard - > commit ;
$ guard - > commit ;
$ self - > return_representation ( $ c , 'hal' = > $ hal , 'preference' = > $ preference ) ;
$ self - > return_representation ( $ c , 'hal' = > $ hal , 'preference' = > $ preference ) ;
}
}
} catch ( $ e ) {
if ( $ self - > check_deadlock ( $ c , $ e ) ) {
goto TX_START ;
}
unless ( $ c - > has_errors ) {
$ self - > error ( $ c , HTTP_INTERNAL_SERVER_ERROR , 'Internal Server Error' , $ e ) ;
last ;
}
}
return ;
return ;
}
}