From f1b353074c937b473e23e717966d97602bc981f8 Mon Sep 17 00:00:00 2001 From: "Balaji, Ramya (rb111y)" Date: Fri, 7 Sep 2018 16:00:46 -0400 Subject: In progress trxns criteria fix Changed the criteria for inprogress transactions to the last X hours. This will eliminate stale transactions causing an incorrect scope overlap error. Issue-ID: APPC-1194 Change-Id: I2f3147503f4202e8e8931b2615e626e3b9af8261 Signed-off-by: Balaji, Ramya (rb111y) --- .../transactionrecorder/TransactionRecorder.java | 9 ++++---- .../impl/TransactionRecorderImpl.java | 16 ++++++++++----- .../impl/TransactionRecorderImplTest.java | 24 ++++++++++++++++++---- 3 files changed, 36 insertions(+), 13 deletions(-) (limited to 'appc-dispatcher/appc-dispatcher-common/transaction-recorder') diff --git a/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/TransactionRecorder.java b/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/TransactionRecorder.java index 299115d99..17e0e2575 100644 --- a/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/TransactionRecorder.java +++ b/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/TransactionRecorder.java @@ -9,15 +9,15 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - * + * * ============LICENSE_END========================================================= */ @@ -62,10 +62,11 @@ public interface TransactionRecorder { * Fetch list of Transactions which are in non-terminal state i.e. ACCEPTED or RECEIVED for particular TargetId. * @param record Transactions object from which TargetId and StartTime is extracted to fetch list of in progress * requests which APPC received before the current request. + * @param interval Number of hours - Time window to consider requests as being in progress * @return List of Transactions in non terminal state. * @throws APPCException */ - List getInProgressRequests(TransactionRecord record) throws APPCException; + List getInProgressRequests(TransactionRecord record, int interval) throws APPCException; /** * Checks whether the incoming request is duplicate. diff --git a/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImpl.java b/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImpl.java index 7c1581f57..98ea1b538 100644 --- a/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImpl.java +++ b/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImpl.java @@ -9,15 +9,15 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - * + * * ============LICENSE_END========================================================= */ @@ -45,6 +45,7 @@ import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.time.temporal.ChronoUnit; import static org.onap.appc.transactionrecorder.objects.TransactionConstants.TRANSACTION_ATTRIBUTES.*; import static org.onap.appc.transactionrecorder.objects.TransactionConstants.*; @@ -165,19 +166,24 @@ public class TransactionRecorderImpl implements TransactionRecorder { } @Override - public List getInProgressRequests(TransactionRecord record) throws APPCException { + public List getInProgressRequests(TransactionRecord record, int interval) throws APPCException { - final String IN_PROGRESS_REQUESTS_QUERY = "SELECT * FROM " + + String IN_PROGRESS_REQUESTS_QUERY = "SELECT * FROM " + TransactionConstants.TRANSACTIONS + WHERE + TARGET_ID + " = ? AND " + STATE.getColumnName() + " IN (?,?) AND " + START_TIME.getColumnName() + " < ?"; ArrayList inProgressQueryParams = new ArrayList<>(); + Instant window = record.getStartTime().minus(interval, ChronoUnit.HOURS); inProgressQueryParams.add(record.getTargetId()); inProgressQueryParams.add(RequestStatus.RECEIVED.name()); inProgressQueryParams.add(RequestStatus.ACCEPTED.name()); inProgressQueryParams.add(dateToStringConverterMillis(record.getStartTime())); + if (interval > 0) { + IN_PROGRESS_REQUESTS_QUERY += " AND " + START_TIME.getColumnName() + " > ? "; + inProgressQueryParams.add(dateToStringConverterMillis(window)); + } try (CachedRowSet rowSet = dbLibService.getData(IN_PROGRESS_REQUESTS_QUERY, inProgressQueryParams, SCHEMA)) { List inProgressRecords = new ArrayList<>(); diff --git a/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/test/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImplTest.java b/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/test/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImplTest.java index fd1790d49..1418e89c6 100644 --- a/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/test/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImplTest.java +++ b/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/test/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImplTest.java @@ -9,15 +9,15 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - * + * * ============LICENSE_END========================================================= */ @@ -45,8 +45,10 @@ import java.sql.*; import java.time.Instant; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.UUID; @@ -152,7 +154,21 @@ public class TransactionRecorderImplTest { input.setStartTime(Instant.now()); Mockito.when(dbLibService.getData(anyString(), anyObject(), anyString())).thenAnswer(invocation -> inMemoryExecutionWithResultSet(invocation.getArguments())); - Assert.assertEquals(1, transactionRecorderImpl.getInProgressRequests(input).size()); + Assert.assertEquals(1, transactionRecorderImpl.getInProgressRequests(input,0).size()); + + } + + @Test + public void testGetInProgressRequestsWithinTimeInterval() throws SQLException, APPCException { + TransactionRecord record1 = prepareTransactionsInput(); + record1.setStartTime(Instant.now().minus(4,ChronoUnit.HOURS)); + insertRecord(record1); + TransactionRecord input = prepareTransactionsInput(); + input.setStartTime(Instant.now()); + Mockito.when(dbLibService.getData(anyString(), anyObject(), anyString())).thenAnswer(invocation -> + inMemoryExecutionWithResultSet(invocation.getArguments())); + List aList= transactionRecorderImpl.getInProgressRequests(input,12); + Assert.assertEquals(1, transactionRecorderImpl.getInProgressRequests(input,12).size()); } -- cgit 1.2.3-korg