aboutsummaryrefslogtreecommitdiffstats
path: root/cps-ri/src/main
diff options
context:
space:
mode:
authorToineSiebelink <toine.siebelink@est.tech>2022-08-18 13:15:22 +0100
committerToineSiebelink <toine.siebelink@est.tech>2022-08-22 13:25:26 +0100
commita6633c02eefedcf85639c7d756661f3e756c6634 (patch)
tree03880652b66e8048a89019296a3b95d220d385c9 /cps-ri/src/main
parent06dc882a49e6754f68ff626f246cfbe3136305af (diff)
Performance Improvement: Insert Yang Resources
Insert batches of yang resources for a schema set into one operation add batch-sized tests to ensure batch-size logic is covered for all branches fixed legacy issues in changed test classes Issue-ID: CPS-1208 Issue-ID: CPS-1126 Signed-off-by: ToineSiebelink <toine.siebelink@est.tech> Change-Id: I5b2a54ed0895999079975d777ba89d589ed4688b
Diffstat (limited to 'cps-ri/src/main')
-rw-r--r--cps-ri/src/main/java/org/onap/cps/spi/repository/SchemaSetYangResourceRepositoryImpl.java34
1 files changed, 24 insertions, 10 deletions
diff --git a/cps-ri/src/main/java/org/onap/cps/spi/repository/SchemaSetYangResourceRepositoryImpl.java b/cps-ri/src/main/java/org/onap/cps/spi/repository/SchemaSetYangResourceRepositoryImpl.java
index 04eaa453e..c87e15adb 100644
--- a/cps-ri/src/main/java/org/onap/cps/spi/repository/SchemaSetYangResourceRepositoryImpl.java
+++ b/cps-ri/src/main/java/org/onap/cps/spi/repository/SchemaSetYangResourceRepositoryImpl.java
@@ -1,6 +1,6 @@
/*-
* ============LICENSE_START=======================================================
- * Copyright (C) 2021 Nordix Foundation.
+ * Copyright (C) 2021-2022 Nordix Foundation.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -20,26 +20,40 @@
package org.onap.cps.spi.repository;
+import java.sql.PreparedStatement;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
+import org.hibernate.Session;
import org.springframework.transaction.annotation.Transactional;
+
@Transactional
public class SchemaSetYangResourceRepositoryImpl implements SchemaSetYangResourceRepository {
+ private static final int MAX_INSERT_BATCH_SIZE = 100;
+
@PersistenceContext
private EntityManager entityManager;
@Override
- public void insertSchemaSetIdYangResourceId(final Integer schemaSetId, final List<Long> yangResourceId) {
- final var query = "INSERT INTO SCHEMA_SET_YANG_RESOURCES (SCHEMA_SET_ID, YANG_RESOURCE_ID) "
- + "VALUES ( :schemaSetId, :yangResourceId)";
- yangResourceId.forEach(id ->
- entityManager.createNativeQuery(query)
- .setParameter("schemaSetId", schemaSetId)
- .setParameter("yangResourceId", id)
- .executeUpdate()
- );
+ public void insertSchemaSetIdYangResourceId(final Integer schemaSetId, final List<Long> yangResourceIds) {
+ final Session session = entityManager.unwrap(Session.class);
+ session.doWork(connection -> {
+ try (PreparedStatement preparedStatement = connection.prepareStatement(
+ "INSERT INTO SCHEMA_SET_YANG_RESOURCES (SCHEMA_SET_ID, YANG_RESOURCE_ID) VALUES ( ?, ?)")) {
+ int sqlQueryCount = 1;
+ for (final long yangResourceId : yangResourceIds) {
+ preparedStatement.setInt(1, schemaSetId);
+ preparedStatement.setLong(2, yangResourceId);
+ preparedStatement.addBatch();
+ if (sqlQueryCount % MAX_INSERT_BATCH_SIZE == 0 || sqlQueryCount == yangResourceIds.size()) {
+ preparedStatement.executeBatch();
+ }
+ sqlQueryCount++;
+ }
+ }
+ });
}
}
+