diff --git a/src/main/java/bio/terra/service/dataset/flight/create/CreateDatasetMetadataStep.java b/src/main/java/bio/terra/service/dataset/flight/create/CreateDatasetMetadataStep.java index ba141593be..75f8492ba9 100644 --- a/src/main/java/bio/terra/service/dataset/flight/create/CreateDatasetMetadataStep.java +++ b/src/main/java/bio/terra/service/dataset/flight/create/CreateDatasetMetadataStep.java @@ -14,14 +14,14 @@ import java.util.UUID; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.dao.CannotSerializeTransactionException; +import org.springframework.dao.TransientDataAccessException; public class CreateDatasetMetadataStep implements Step { - private DatasetDao datasetDao; - private DatasetRequestModel datasetRequest; + private final DatasetDao datasetDao; + private final DatasetRequestModel datasetRequest; - private static Logger logger = LoggerFactory.getLogger(CreateDatasetMetadataStep.class); + private static final Logger logger = LoggerFactory.getLogger(CreateDatasetMetadataStep.class); public CreateDatasetMetadataStep(DatasetDao datasetDao, DatasetRequestModel datasetRequest) { this.datasetDao = datasetDao; @@ -46,7 +46,7 @@ public StepResult doStep(FlightContext context) { return StepResult.getStepResultSuccess(); } catch (InvalidDatasetException idEx) { return new StepResult(StepStatus.STEP_RESULT_FAILURE_FATAL, idEx); - } catch (CannotSerializeTransactionException ex) { + } catch (TransientDataAccessException ex) { return new StepResult(StepStatus.STEP_RESULT_FAILURE_RETRY, ex); } catch (Exception ex) { return new StepResult( diff --git a/src/main/java/bio/terra/service/snapshot/flight/create/CountSnapshotTableRowsStep.java b/src/main/java/bio/terra/service/snapshot/flight/create/CountSnapshotTableRowsStep.java index 56c0a3cb91..302b6ba8a8 100644 --- a/src/main/java/bio/terra/service/snapshot/flight/create/CountSnapshotTableRowsStep.java +++ b/src/main/java/bio/terra/service/snapshot/flight/create/CountSnapshotTableRowsStep.java @@ -12,7 +12,7 @@ import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.dao.CannotSerializeTransactionException; +import org.springframework.dao.TransientDataAccessException; import org.springframework.transaction.TransactionSystemException; public class CountSnapshotTableRowsStep implements Step { @@ -39,8 +39,8 @@ public StepResult doStep(FlightContext flightContext) Map tableRowCounts = bigQuerySnapshotPdao.getSnapshotTableRowCounts(snapshot); try { snapshotDao.updateSnapshotTableRowCounts(snapshot, tableRowCounts); - } catch (CannotSerializeTransactionException | TransactionSystemException ex) { - logger.error("Could not serialize the transaction. Retrying.", ex); + } catch (TransientDataAccessException | TransactionSystemException ex) { + logger.error("Transaction failed due to a transient error. Retrying.", ex); return new StepResult(StepStatus.STEP_RESULT_FAILURE_RETRY, ex); } return StepResult.getStepResultSuccess(); diff --git a/src/main/java/bio/terra/service/snapshot/flight/create/CreateSnapshotCountTableRowsAzureStep.java b/src/main/java/bio/terra/service/snapshot/flight/create/CreateSnapshotCountTableRowsAzureStep.java index b6c57cae8d..75fbfffb1a 100644 --- a/src/main/java/bio/terra/service/snapshot/flight/create/CreateSnapshotCountTableRowsAzureStep.java +++ b/src/main/java/bio/terra/service/snapshot/flight/create/CreateSnapshotCountTableRowsAzureStep.java @@ -10,11 +10,11 @@ import bio.terra.stairway.StepResult; import bio.terra.stairway.StepStatus; import bio.terra.stairway.exception.RetryException; -import java.util.HashMap; +import com.fasterxml.jackson.core.type.TypeReference; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.dao.CannotSerializeTransactionException; +import org.springframework.dao.TransientDataAccessException; import org.springframework.transaction.TransactionSystemException; public class CreateSnapshotCountTableRowsAzureStep implements Step { @@ -37,11 +37,11 @@ public StepResult doStep(FlightContext flightContext) FlightMap workingMap = flightContext.getWorkingMap(); Snapshot snapshot = snapshotDao.retrieveSnapshotByName(snapshotReq.getName()); Map tableRowCounts = - workingMap.get(SnapshotWorkingMapKeys.TABLE_ROW_COUNT_MAP, HashMap.class); + workingMap.get(SnapshotWorkingMapKeys.TABLE_ROW_COUNT_MAP, new TypeReference<>() {}); try { snapshotDao.updateSnapshotTableRowCounts(snapshot, tableRowCounts); - } catch (CannotSerializeTransactionException | TransactionSystemException ex) { - logger.error("Could not serialize the transaction. Retrying.", ex); + } catch (TransientDataAccessException | TransactionSystemException ex) { + logger.error("Transaction failed due to a transient error. Retrying.", ex); return new StepResult(StepStatus.STEP_RESULT_FAILURE_RETRY, ex); } return StepResult.getStepResultSuccess(); diff --git a/src/main/java/bio/terra/service/snapshot/flight/create/CreateSnapshotMetadataStep.java b/src/main/java/bio/terra/service/snapshot/flight/create/CreateSnapshotMetadataStep.java index 88212af506..af1cc1402d 100644 --- a/src/main/java/bio/terra/service/snapshot/flight/create/CreateSnapshotMetadataStep.java +++ b/src/main/java/bio/terra/service/snapshot/flight/create/CreateSnapshotMetadataStep.java @@ -19,7 +19,7 @@ import java.util.UUID; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.dao.CannotSerializeTransactionException; +import org.springframework.dao.TransientDataAccessException; import org.springframework.http.HttpStatus; import org.springframework.transaction.TransactionSystemException; @@ -71,8 +71,8 @@ public StepResult doStep(FlightContext context) { } catch (SnapshotNotFoundException ex) { FlightUtils.setErrorResponse(context, ex.toString(), HttpStatus.BAD_REQUEST); return new StepResult(StepStatus.STEP_RESULT_FAILURE_FATAL, ex); - } catch (CannotSerializeTransactionException | TransactionSystemException ex) { - logger.error("Could not serialize the transaction. Retrying.", ex); + } catch (TransientDataAccessException | TransactionSystemException ex) { + logger.error("Transaction failed due to a transient error. Retrying.", ex); return new StepResult(StepStatus.STEP_RESULT_FAILURE_RETRY, ex); } } diff --git a/src/main/java/bio/terra/service/snapshot/flight/delete/DeleteSnapshotMetadataStep.java b/src/main/java/bio/terra/service/snapshot/flight/delete/DeleteSnapshotMetadataStep.java index b90c8259e2..4853c80a63 100644 --- a/src/main/java/bio/terra/service/snapshot/flight/delete/DeleteSnapshotMetadataStep.java +++ b/src/main/java/bio/terra/service/snapshot/flight/delete/DeleteSnapshotMetadataStep.java @@ -9,7 +9,7 @@ import bio.terra.stairway.StepResult; import bio.terra.stairway.StepStatus; import java.util.UUID; -import org.springframework.dao.CannotSerializeTransactionException; +import org.springframework.dao.TransientDataAccessException; import org.springframework.http.HttpStatus; public class DeleteSnapshotMetadataStep implements Step { @@ -32,7 +32,7 @@ public StepResult doStep(FlightContext context) { : DeleteResponseModel.ObjectStateEnum.NOT_FOUND; } catch (SnapshotNotFoundException ex) { stateEnum = DeleteResponseModel.ObjectStateEnum.NOT_FOUND; - } catch (CannotSerializeTransactionException ex) { + } catch (TransientDataAccessException ex) { return new StepResult(StepStatus.STEP_RESULT_FAILURE_RETRY, ex); } diff --git a/src/test/java/bio/terra/service/snapshot/flight/create/CountSnapshotTableRowsStepTest.java b/src/test/java/bio/terra/service/snapshot/flight/create/CountSnapshotTableRowsStepTest.java index fb7ed5d01f..b7cd60cb88 100644 --- a/src/test/java/bio/terra/service/snapshot/flight/create/CountSnapshotTableRowsStepTest.java +++ b/src/test/java/bio/terra/service/snapshot/flight/create/CountSnapshotTableRowsStepTest.java @@ -21,7 +21,7 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.dao.CannotSerializeTransactionException; +import org.springframework.dao.CannotAcquireLockException; @ExtendWith(MockitoExtension.class) @Tag(Unit.TAG) @@ -58,7 +58,7 @@ void testDoStep() throws InterruptedException { @Test void testDoStepRetry() throws InterruptedException { step = new CountSnapshotTableRowsStep(bigQuerySnapshotPdao, snapshotDao, snapshotReq); - doThrow(CannotSerializeTransactionException.class) + doThrow(CannotAcquireLockException.class) .when(snapshotDao) .updateSnapshotTableRowCounts(SNAPSHOT, tableRowCounts); diff --git a/src/test/java/bio/terra/service/snapshot/flight/create/CreateSnapshotCountTableRowsAzureStepTest.java b/src/test/java/bio/terra/service/snapshot/flight/create/CreateSnapshotCountTableRowsAzureStepTest.java index c7b3a48ad9..35dea1c14c 100644 --- a/src/test/java/bio/terra/service/snapshot/flight/create/CreateSnapshotCountTableRowsAzureStepTest.java +++ b/src/test/java/bio/terra/service/snapshot/flight/create/CreateSnapshotCountTableRowsAzureStepTest.java @@ -22,7 +22,7 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.dao.CannotSerializeTransactionException; +import org.springframework.dao.CannotAcquireLockException; @ExtendWith(MockitoExtension.class) @Tag(Unit.TAG) @@ -31,8 +31,6 @@ class CreateSnapshotCountTableRowsAzureStepTest { @Mock private SnapshotDao snapshotDao; @Mock private FlightContext flightContext; - private FlightMap workingMap; - private static final UUID SNAPSHOT_ID = UUID.randomUUID(); private static final Snapshot SNAPSHOT = new Snapshot().id(SNAPSHOT_ID).name("Snapshot-" + SNAPSHOT_ID); @@ -40,14 +38,14 @@ class CreateSnapshotCountTableRowsAzureStepTest { private static final SnapshotRequestModel snapshotReq = new SnapshotRequestModel().name(SNAPSHOT.getName()); - private HashMap tableRowCounts = new HashMap<>(); + private final HashMap tableRowCounts = new HashMap<>(); private CreateSnapshotCountTableRowsAzureStep step; @BeforeEach void setup() { when(snapshotDao.retrieveSnapshotByName(SNAPSHOT.getName())).thenReturn(SNAPSHOT); - tableRowCounts.put("table", (long) 5); - workingMap = new FlightMap(); + tableRowCounts.put("table", 5L); + FlightMap workingMap = new FlightMap(); workingMap.put(SnapshotWorkingMapKeys.TABLE_ROW_COUNT_MAP, tableRowCounts); when(flightContext.getWorkingMap()).thenReturn(workingMap); } @@ -62,7 +60,7 @@ void testDoStep() throws InterruptedException { @Test void testDoStepRetry() throws InterruptedException { step = new CreateSnapshotCountTableRowsAzureStep(snapshotDao, snapshotReq); - doThrow(CannotSerializeTransactionException.class) + doThrow(CannotAcquireLockException.class) .when(snapshotDao) .updateSnapshotTableRowCounts(SNAPSHOT, tableRowCounts);