Lower memory usage in FragmentRepository 91/134791/6
authordanielhanrahan <daniel.hanrahan@est.tech>
Thu, 8 Jun 2023 13:37:17 +0000 (14:37 +0100)
committerdanielhanrahan <daniel.hanrahan@est.tech>
Wed, 14 Jun 2023 13:29:06 +0000 (14:29 +0100)
commit9474e8f257f9a03c80c01cbf3729cd128a43847b
tree30c9f019e3e7df44d37ae8e4ffb695426b01ac2b
parent1368fd006373dd209a34274723fbda6ecb9d317f
Lower memory usage in FragmentRepository

Avoid using Spring Data "interface projection" in FragmentRepository.
The use of FragmentExtract in FragmentRepository is causing an
overhead of around 5 kilobytes per fragment, which is leading to
abnormally high memory usage when queries return a large number of
nodes. For example, around 250MB of additional memory is needlessly
used when fetching 50,000 datanodes.

- Remove FragmentExtract interface and FragmentEntityArranger class.
- Add FragmentPrefetchRepository, using JdbcTemplate and RowMapper
  to fetch FragmentEntity descendants in a single SQL query.
- Many CpsDataService operations have memory reductions:
  - queryDataNodes
  - getDataNodesForMultipleXpaths
  - updateDataNodesAndDescendants
  - updateNodeLeaves
  - and any NCMP methods using the above.

Issue-ID: CPS-1716
Signed-off-by: danielhanrahan <daniel.hanrahan@est.tech>
Change-Id: Ic47a2c9eb34150ed76bd5ce452fe1c9aaf9b4c5c
cps-ri/pom.xml
cps-ri/src/main/java/org/onap/cps/spi/entities/FragmentEntityArranger.java [deleted file]
cps-ri/src/main/java/org/onap/cps/spi/impl/CpsDataPersistenceServiceImpl.java
cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentPrefetchRepository.java [moved from cps-ri/src/main/java/org/onap/cps/spi/entities/FragmentExtract.java with 65% similarity]
cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentPrefetchRepositoryImpl.java [new file with mode: 0644]
cps-ri/src/main/java/org/onap/cps/spi/repository/FragmentRepository.java
cps-ri/src/test/groovy/org/onap/cps/spi/impl/CpsDataPersistenceServiceSpec.groovy