diff options
Diffstat (limited to 'appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImpl.java')
-rw-r--r-- | appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImpl.java | 252 |
1 files changed, 127 insertions, 125 deletions
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 15ed9ad4b..0acb2b5a0 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 @@ -19,7 +19,6 @@ * 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========================================================= */ @@ -37,17 +36,17 @@ import org.onap.ccsdk.sli.core.dblib.DbLibService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.sql.rowset.CachedRowSet; import java.sql.SQLException; +import javax.sql.rowset.CachedRowSet; import java.text.ParseException; import java.text.SimpleDateFormat; 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.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.*; @@ -74,44 +73,41 @@ public class TransactionRecorderImpl implements TransactionRecorder { */ @Override public void store(TransactionRecord record) throws APPCException { - if (logger.isTraceEnabled()) { - logger.trace("Transaction data insertion into DB"); - } - final String STORE_DATE_QUERY = TransactionConstants.INSERT_INTO + TransactionConstants.TRANSACTIONS + - "(" + TRANSACTION_ID.getColumnName() + TransactionConstants.COMMA + - ORIGIN_TIMESTAMP.getColumnName() + TransactionConstants.COMMA + - REQUEST_ID.getColumnName() + TransactionConstants.COMMA + - SUBREQUEST_ID.getColumnName() + TransactionConstants.COMMA + - ORIGINATOR_ID.getColumnName() + TransactionConstants.COMMA + - START_TIME.getColumnName() + TransactionConstants.COMMA + - END_TIME.getColumnName() + TransactionConstants.COMMA + - TARGET_ID.getColumnName() + TransactionConstants.COMMA + - TARGET_TYPE.getColumnName() + TransactionConstants.COMMA + - OPERATION.getColumnName() + TransactionConstants.COMMA + - RESULT_CODE.getColumnName() + TransactionConstants.COMMA + - DESCRIPTION.getColumnName() + TransactionConstants.COMMA + - STATE.getColumnName() + TransactionConstants.COMMA + - SERVICE_INSTANCE_ID + TransactionConstants.COMMA + - VNFC_NAME + TransactionConstants.COMMA + - VSERVER_ID + TransactionConstants.COMMA + - VF_MODULE_ID + TransactionConstants.COMMA + - MODE + ") " + - "values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; + logger.trace("Transaction data insertion into DB"); + final String STORE_DATE_QUERY = + TransactionConstants.INSERT_INTO + TransactionConstants.TRANSACTIONS + + "(" + TRANSACTION_ID.getColumnName() + TransactionConstants.COMMA + + ORIGIN_TIMESTAMP.getColumnName() + TransactionConstants.COMMA + + REQUEST_ID.getColumnName() + TransactionConstants.COMMA + + SUBREQUEST_ID.getColumnName() + TransactionConstants.COMMA + + ORIGINATOR_ID.getColumnName() + TransactionConstants.COMMA + + START_TIME.getColumnName() + TransactionConstants.COMMA + + END_TIME.getColumnName() + TransactionConstants.COMMA + + TARGET_ID.getColumnName() + TransactionConstants.COMMA + + TARGET_TYPE.getColumnName() + TransactionConstants.COMMA + + OPERATION.getColumnName() + TransactionConstants.COMMA + + RESULT_CODE.getColumnName() + TransactionConstants.COMMA + + DESCRIPTION.getColumnName() + TransactionConstants.COMMA + + STATE.getColumnName() + TransactionConstants.COMMA + + SERVICE_INSTANCE_ID + TransactionConstants.COMMA + + VNFC_NAME + TransactionConstants.COMMA + + VSERVER_ID + TransactionConstants.COMMA + + VF_MODULE_ID + TransactionConstants.COMMA + + MODE + ") " + + "values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; try { dbLibService.writeData(STORE_DATE_QUERY, prepareArguments(record), SCHEMA); } catch (SQLException e) { logger.error("Error on storing record " + record.toString(), e); throw new APPCException(ERROR_ACCESSING_DATABASE, e); } - if (logger.isTraceEnabled()) { - logger.trace("Transaction Data Inserted Successfully into DB"); - } + logger.trace("Transaction Data Inserted Successfully into DB"); } @Override public void update(String key, - String requestId, - Map<TransactionConstants.TRANSACTION_ATTRIBUTES, String> updateColumns) throws APPCException { + String requestId, + Map<TransactionConstants.TRANSACTION_ATTRIBUTES, String> updateColumns) throws APPCException { logger.debug("Inside update in TransactionRecorderImpl"); if (appcInstanceId != null && checkIfNullInstanceEntryExist(key, requestId)) { @@ -151,15 +147,12 @@ public class TransactionRecorderImpl implements TransactionRecorder { logger.error("Error in updating records in updateTransactionEntry " + e); throw new APPCException(ERROR_ACCESSING_DATABASE, e); } - if (logger.isTraceEnabled()) { - logger.trace("Transaction data updated successfully"); - } - + logger.trace("Transaction data updated successfully"); } private void updateNullInstanceEntry(String key, - String requestId, - Map<TRANSACTION_ATTRIBUTES, String> updateColumns) throws APPCException { + String requestId, + Map<TRANSACTION_ATTRIBUTES, String> updateColumns) throws APPCException { logger.debug("Inside updateNullInstanceEntry"); ArrayList<String> values = new ArrayList<>(); @@ -180,7 +173,7 @@ public class TransactionRecorderImpl implements TransactionRecorder { if (logger.isDebugEnabled()) { logger.debug("Before updating Transaction table the Query is: " + query); for (String value : values) { - logger.debug("Value for Transaction table: " + value); + logger.debug("Value for Transaction table: " + value); } } Boolean result = dbLibService.writeData(query, values, SCHEMA); @@ -195,24 +188,24 @@ public class TransactionRecorderImpl implements TransactionRecorder { private boolean checkIfNullInstanceEntryExist(String key, String requestId) throws APPCException { logger.debug("Entered checkIfNullInstanceEntryExist"); - String nullInstanceCheckQuery = new String("SELECT COUNT(*) as ROWCOUNT FROM " + - TransactionConstants.TRANSACTIONS + WHERE + - TRANSACTION_ID.getColumnName() + " = ? AND " + - REQUEST_ID.getColumnName() + " = ? "); + String nullInstanceCheckQuery = new String( + "SELECT COUNT(*) as ROWCOUNT FROM " + + TransactionConstants.TRANSACTIONS + WHERE + + TRANSACTION_ID.getColumnName() + " = ? AND " + + REQUEST_ID.getColumnName() + " = ? "); ArrayList<String> nullInstanceCheckParams = new ArrayList<>(); nullInstanceCheckParams.add(null + "~" + key); nullInstanceCheckParams.add(requestId); - try{ - CachedRowSet rowSet = dbLibService.getData(nullInstanceCheckQuery, nullInstanceCheckParams, SCHEMA); + try (CachedRowSet rowSet = dbLibService.getData(nullInstanceCheckQuery, nullInstanceCheckParams, SCHEMA)) { int noRows = 0; if (rowSet != null && rowSet.first()) { noRows = rowSet.getInt("ROWCOUNT"); - logger.info("No of Rows in Transactions Table with TRANSACTION_ID: " + - null + "~" + key + " and REQUEST_ID " + requestId + " is: " + noRows); + logger.info("No of Rows in Transactions Table with TRANSACTION_ID: " + + null + "~" + key + " and REQUEST_ID " + requestId + " is: " + noRows); } - if(noRows > 0) + if (noRows > 0) return true; } catch (SQLException e) { logger.error("Error in checkIfNullInstanceEntryExist in the transaction table", e); @@ -223,14 +216,12 @@ public class TransactionRecorderImpl implements TransactionRecorder { @Override public void markTransactionsAborted(String appcInstanceId) { - if (logger.isTraceEnabled()) { - logger.trace("marking in progress transactions to aborted"); - } + logger.trace("marking in progress transactions to aborted"); final String updateQuery = - "UPDATE " + TransactionConstants.TRANSACTIONS + - " SET " + STATE.getColumnName() + " = '" + RequestStatus.ABORTED.name() + "'," - + END_TIME.getColumnName() + " = ? " + - WHERE + TRANSACTION_ID.getColumnName() + " LIKE '" + appcInstanceId + "%' AND " + "UPDATE " + TransactionConstants.TRANSACTIONS + + " SET " + STATE.getColumnName() + " = '" + RequestStatus.ABORTED.name() + "'," + + END_TIME.getColumnName() + " = ? " + + WHERE + TRANSACTION_ID.getColumnName() + " LIKE '" + appcInstanceId + "%' AND " + STATE.getColumnName() + " in (?,?)"; if (logger.isDebugEnabled()) { @@ -248,19 +239,18 @@ public class TransactionRecorderImpl implements TransactionRecorder { logger.error(message); throw new RuntimeException(message, e); } - if (logger.isTraceEnabled()) { - logger.trace("In progress transactions marked aborted"); - } + logger.trace("In progress transactions marked aborted"); } @Override public List<TransactionRecord> getInProgressRequests(TransactionRecord record, int interval) throws APPCException { - String IN_PROGRESS_REQUESTS_QUERY = "SELECT * FROM " + - TransactionConstants.TRANSACTIONS + WHERE + - TARGET_ID + " = ? AND " + - STATE.getColumnName() + " IN (?,?) AND " + - START_TIME.getColumnName() + " < ?"; + String IN_PROGRESS_REQUESTS_QUERY = + "SELECT * FROM " + + TransactionConstants.TRANSACTIONS + WHERE + + TARGET_ID + " = ? AND " + + STATE.getColumnName() + " IN (?,?) AND " + + START_TIME.getColumnName() + " < ?"; ArrayList<String> inProgressQueryParams = new ArrayList<>(); Instant window = record.getStartTime().minus(interval, ChronoUnit.HOURS); @@ -273,37 +263,40 @@ public class TransactionRecorderImpl implements TransactionRecorder { inProgressQueryParams.add(dateToStringConverterMillis(window)); } - try (CachedRowSet rowSet = dbLibService.getData(IN_PROGRESS_REQUESTS_QUERY, inProgressQueryParams, SCHEMA)) { + try (CachedRowSet rowSet = + dbLibService.getData(IN_PROGRESS_REQUESTS_QUERY, inProgressQueryParams, SCHEMA)) { List<TransactionRecord> inProgressRecords = new ArrayList<>(); TransactionRecord transaction; - while (rowSet.next()) { - transaction = new TransactionRecord(); - transaction.setTransactionId(rowSet.getString(TRANSACTION_ID.getColumnName())); - transaction.setRequestId(rowSet.getString(REQUEST_ID.getColumnName())); - transaction.setSubRequestId(rowSet.getString(SUBREQUEST_ID.getColumnName())); - transaction.setOriginatorId(rowSet.getString(ORIGINATOR_ID.getColumnName())); - transaction.setStartTime(stringToDateConverterMillis(rowSet.getString(START_TIME.getColumnName()))); - transaction.setTargetId(rowSet.getString(TARGET_ID.getColumnName())); - transaction.setTargetType(rowSet.getString(TARGET_TYPE.getColumnName())); - transaction.setOperation(VNFOperation.valueOf(rowSet.getString(OPERATION.getColumnName()))); - transaction.setRequestState(RequestStatus.valueOf(rowSet.getString(STATE.getColumnName()))); - transaction.setVnfcName(rowSet.getString(VNFC_NAME.getColumnName())); - transaction.setVserverId(rowSet.getString(VSERVER_ID.getColumnName())); - transaction.setVfModuleId(rowSet.getString(VF_MODULE_ID.getColumnName())); - transaction.setServiceInstanceId(rowSet.getString(SERVICE_INSTANCE_ID.getColumnName())); - transaction.setMode(Flags.Mode.valueOf(rowSet.getString(MODE.getColumnName()))); - inProgressRecords.add(transaction); - } - if (logger.isTraceEnabled()) { - logger.trace("In progress transaction records fetched from database successfully."); + int count = 0; + if (rowSet != null) { + for (; rowSet.next(); ++count) { + transaction = new TransactionRecord(); + transaction.setTransactionId(rowSet.getString(TRANSACTION_ID.getColumnName())); + transaction.setRequestId(rowSet.getString(REQUEST_ID.getColumnName())); + transaction.setSubRequestId(rowSet.getString(SUBREQUEST_ID.getColumnName())); + transaction.setOriginatorId(rowSet.getString(ORIGINATOR_ID.getColumnName())); + transaction.setStartTime(stringToDateConverterMillis(rowSet.getString(START_TIME.getColumnName()))); + transaction.setTargetId(rowSet.getString(TARGET_ID.getColumnName())); + transaction.setTargetType(rowSet.getString(TARGET_TYPE.getColumnName())); + transaction.setOperation(VNFOperation.valueOf(rowSet.getString(OPERATION.getColumnName()))); + transaction.setRequestState(RequestStatus.valueOf(rowSet.getString(STATE.getColumnName()))); + transaction.setVnfcName(rowSet.getString(VNFC_NAME.getColumnName())); + transaction.setVserverId(rowSet.getString(VSERVER_ID.getColumnName())); + transaction.setVfModuleId(rowSet.getString(VF_MODULE_ID.getColumnName())); + transaction.setServiceInstanceId(rowSet.getString(SERVICE_INSTANCE_ID.getColumnName())); + transaction.setMode(Flags.Mode.valueOf(rowSet.getString(MODE.getColumnName()))); + inProgressRecords.add(transaction); + } } + logger.trace(String.valueOf(count) + + " in progress transaction records fetched from database successfully."); return inProgressRecords; } catch (ParseException e) { logger.error("Error parsing start date during fetching in progress records ", e); throw new APPCException(ERROR_ACCESSING_DATABASE, e); } catch (SQLException e) { - logger.error("Error fetching in progress records for Transaction ID = " + appcInstanceId + "~" + record - .getTransactionId(), e); + logger.error("Error fetching in progress records for Transaction ID = " + appcInstanceId + "~" + + record.getTransactionId(), e); throw new APPCException(ERROR_ACCESSING_DATABASE, e); } } @@ -311,12 +304,12 @@ public class TransactionRecorderImpl implements TransactionRecorder { @Override public Boolean isTransactionDuplicate(TransactionRecord record) throws APPCException { - StringBuilder duplicateRequestCheckQuery = new StringBuilder("SELECT " + - TRANSACTION_ID.getColumnName() + " FROM " + - TransactionConstants.TRANSACTIONS + WHERE + - TRANSACTION_ID.getColumnName() + " <> ? AND " + - REQUEST_ID.getColumnName() + " = ? AND " + - STATE.getColumnName() + " IN(?,?) "); + StringBuilder duplicateRequestCheckQuery = new StringBuilder() + .append("SELECT ").append(TRANSACTION_ID.getColumnName()).append(" FROM ") + .append(TransactionConstants.TRANSACTIONS).append(WHERE) + .append(TRANSACTION_ID.getColumnName()).append(" <> ? AND ") + .append(REQUEST_ID.getColumnName()).append(" = ? AND ") + .append(STATE.getColumnName()).append(" IN(?,?) "); ArrayList<String> duplicateCheckParams = new ArrayList<>(); duplicateCheckParams.add(appcInstanceId + "~" + record.getTransactionId()); @@ -339,35 +332,37 @@ public class TransactionRecorderImpl implements TransactionRecorder { if (logger.isDebugEnabled()) { logger.debug(duplicateRequestCheckQuery.toString()); } - try (CachedRowSet rowSet = dbLibService.getData(duplicateRequestCheckQuery.toString(), duplicateCheckParams, - SCHEMA)) { - if (rowSet.first()) { + try (CachedRowSet rowSet = + dbLibService.getData(duplicateRequestCheckQuery.toString(), duplicateCheckParams, SCHEMA)) { + if (rowSet != null && rowSet.first()) { String transactionId = rowSet.getString(TRANSACTION_ID.getColumnName()); if (logger.isErrorEnabled()) { - logger.error("Duplicate request found. Transaction ID " + transactionId + " is currently in " + - "progress."); + logger.error("Duplicate request found. Transaction ID " + transactionId + + " is currently in progress."); } return true; } return false; } catch (SQLException e) { - logger.error("Error checking duplicate records for Transaction ID = " + appcInstanceId + "~" + record - .getTransactionId(), e); + logger.error("Error checking duplicate records for Transaction ID = " + appcInstanceId + "~" + + record.getTransactionId(), e); throw new APPCException(ERROR_ACCESSING_DATABASE, e); } } @Override public Integer getInProgressRequestsCount() throws APPCException { - final String inProgressRequestCountQuery = "SELECT COUNT(*) as VALUE FROM " - + TransactionConstants.TRANSACTIONS - + WHERE + STATE.getColumnName() + " IN (?,?) "; + final String inProgressRequestCountQuery = + "SELECT COUNT(*) as VALUE FROM " + + TransactionConstants.TRANSACTIONS + + WHERE + STATE.getColumnName() + " IN (?,?) "; ArrayList<String> checkInProgressParams = new ArrayList<>(); checkInProgressParams.add(RequestStatus.RECEIVED.name()); checkInProgressParams.add(RequestStatus.ACCEPTED.name()); - try(CachedRowSet rowSet=dbLibService.getData(inProgressRequestCountQuery,checkInProgressParams,SCHEMA)){ - if (rowSet.first()) { + try (CachedRowSet rowSet = + dbLibService.getData(inProgressRequestCountQuery, checkInProgressParams, SCHEMA)) { + if (rowSet != null && rowSet.first()) { int count = rowSet.getInt("VALUE"); logger.info("In progress request count fetched from database successfully."); return count; @@ -391,44 +386,51 @@ public class TransactionRecorderImpl implements TransactionRecorder { public List<RequestStatus> getRecords(String requestId, String subrequestId, String originatorId, String vnfId) throws APPCException { StringBuilder queryString = (new StringBuilder(1024)) - .append("SELECT " + TRANSACTION_ATTRIBUTES.STATE.getColumnName()) - .append(" FROM " + TRANSACTIONS) - .append(" WHERE " + TRANSACTION_ATTRIBUTES.REQUEST_ID.getColumnName() + " = ? AND " + - TRANSACTION_ATTRIBUTES.TARGET_ID.getColumnName() + " = ?"); - + .append("SELECT ").append(TRANSACTION_ID.getColumnName()) + .append(",") + .append(STATE.getColumnName()) + .append(" FROM ").append(TRANSACTIONS) + .append(" WHERE ").append(TRANSACTION_ATTRIBUTES.REQUEST_ID.getColumnName()).append(" = ? AND ") + .append(TRANSACTION_ATTRIBUTES.TARGET_ID.getColumnName()).append(" = ?"); ArrayList<String> argList = new ArrayList<>(); argList.add(requestId); argList.add(vnfId); if (subrequestId != null) { - queryString.append(" AND " + TRANSACTION_ATTRIBUTES.SUBREQUEST_ID.getColumnName() + " = ?"); + queryString.append(" AND ").append(TRANSACTION_ATTRIBUTES.SUBREQUEST_ID.getColumnName()).append(" = ?"); argList.add(subrequestId); } if (originatorId != null) { - queryString.append(" AND " + TRANSACTION_ATTRIBUTES.ORIGINATOR_ID.getColumnName() + " = ?"); + queryString.append(" AND ").append(TRANSACTION_ATTRIBUTES.ORIGINATOR_ID.getColumnName()).append(" = ?"); argList.add(originatorId); } List<RequestStatus> requestStatusList = new ArrayList<>(); - try { - CachedRowSet resultSet = dbLibService.getData(queryString.toString(), argList, SCHEMA); - while (resultSet.next()) { - String name = resultSet.getString(TRANSACTION_ATTRIBUTES.STATE.getColumnName()); - RequestStatus requestStatus = null; - try { - requestStatus = RequestStatus.valueOf(name); - } catch (IllegalArgumentException e) { - logger.error(String.format("Invalid request status (%s) using (%s) :", name, RequestStatus - .UNKNOWN), e); - requestStatus = RequestStatus.UNKNOWN; + try (CachedRowSet resultSet = dbLibService.getData(queryString.toString(), argList, SCHEMA)) { + if (resultSet == null) { + logger.error(String.format( + "No results returned when retrieving record for requestID %s and vnfId %s %s", + requestId, vnfId, "from the transactions table")); + } else { + while (resultSet.next()) { + String name = resultSet.getString(TRANSACTION_ATTRIBUTES.STATE.getColumnName()); + RequestStatus requestStatus = null; + try { + requestStatus = RequestStatus.valueOf(name); + } catch (IllegalArgumentException e) { + logger.error(String.format( + "Invalid request status (%s) using (%s):", name, RequestStatus.UNKNOWN), e); + requestStatus = RequestStatus.UNKNOWN; + } + requestStatusList.add(requestStatus); + logger.debug(String.format("Request Status obtained (%s).", requestStatus)); } - requestStatusList.add(requestStatus); - logger.debug(String.format("Request Status obtained (%s).", requestStatus)); } } catch (SQLException e) { logger.error("Error Accessing Database ", e); - throw new APPCException(String.format("Error retrieving record for requestID %s and vnfId %s " + - "from the transactions table", requestId, vnfId), e); + throw new APPCException(String.format( + "Error retrieving record for requestID %s and vnfId %s from the transactions table", + requestId, vnfId), e); } return requestStatusList; |