diff options
author | ToineSiebelink <toine.siebelink@est.tech> | 2022-08-18 13:15:22 +0100 |
---|---|---|
committer | ToineSiebelink <toine.siebelink@est.tech> | 2022-08-22 13:25:26 +0100 |
commit | a6633c02eefedcf85639c7d756661f3e756c6634 (patch) | |
tree | 03880652b66e8048a89019296a3b95d220d385c9 /cps-ri/src/main | |
parent | 06dc882a49e6754f68ff626f246cfbe3136305af (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.java | 34 |
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 04eaa453ef..c87e15adbf 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++; + } + } + }); } } + |