PTF - Export deleted MARC authority records (Ramsons) [ECS]

PTF - Export deleted MARC authority records (Ramsons) [ECS]

Test status: PASSED

Overview

  • Regression testing of export of deleted MARC authority records via API. Measurement the performance of an export operation of 2K (paged) records for all 100K/300K deleted records

    • ECS environment with PTF data set

    • Classic PTF configuration with no additional improvements.

  • The purpose of this testing is to compare test results of Ramsons release with previous, Quasnelia release, check for improvements, possible issues/degradation.

    • Expected export duration - under a minute.

  • Jiras/ links:

Summary

  • All tests are passed successfully.

  • SLA (duration of export should be less than a minute) met.

  • Test duration is faster in 100K test for more than 50% in Ramsons compared to Quesnelia

  • for 300K tests, performance is more or less the same, however average api response time is better

  • No memory leaks or spikes found

  • CPU usage showed stable trend. Most used module is mod-entities-links.

  • DB CPU usage is low for 100K tests (around 6%) and 15%-17% for 300K tests. For tests with additional load (tests with 10 loops of JMeter scrip) it’s 15-17% for 100K and 25-30% for 300K.

 

Test Runs/Results 

Each test run got additional rerun to ensure of performance consistency. Moreover tests 3,4,7,8 was performed to check system behaviour under additional load. This tests are “fast“ so additional tests was performed to get more information about system behaviour. (tests with 10 loops of JMeter script), Named in table (10 times)

Test #

Test Conditions

Duration 

Test #

Test Conditions

Duration 

1

100K

8s 652 ms

2

100K (rerun)

8s 440 ms

3

100K (10 times )

7s 860 ms (avg)

4

100K (10 times )

7s 591 ms (avg)

5

300K

29s 567 ms

6

300K

29s 989 ms

7

300K (10 times )

29s 579 ms (avg)

8

300K (10 times )

28s 393 ms (avg)

Comparisons

Tests duration was compared to same tests in Quesnelia release PTF - Export deleted MARC authority records (Quesnelia) [ECS]

In overall - performance is better by more than 50% for 100K tests and the same for 300K test.

 

Test

Ramsons

Quesnelia

Test

Ramsons

Quesnelia

 

Duration (s/ ms)

GET_authority-storage/authorities response time (ms)

Duration (s/ ms)

GET_authority-storage/authorities response time (ms)

100K

8s 652 ms

178 ms

13s 317 ms

262 ms

300K

29s 989 ms

216 ms

29s 109 ms

288 ms

Memory Utilization

Memory showed stable trend without visible signs of memory leaks or anomalies. Most used module is mod-entities-links and it consumes 32% memory in average during whole testing set. Please look on memory trend to all related modules in chart below.

 

image-20241107-111906.png

Note: Taking into account that tests durations are less then a minute - in order to show trend, all tests included into chart. Below - table with top 3 modules

 

Module

Ramsons Avg

Quesnelia Avg

Module

Ramsons Avg

Quesnelia Avg

mod-entities-links

32%

37%

okapi

32%

-

mod-users

25%

-

CPU Utilization 

In 100K and 300K tests CPU usage is barely visible because of fast test duration that’s why additional tests was performed (100K x10 and 300K x 10, basically same tests but 10 times one after another without pauses) to see if there are anomalies sudden spices, etc.. CPU usage stabilise on ±3%. CPU usage spiked only on mod-entities-links (as obvious), okapi, nginx-okapi and supportive services like mod-users-bl, mod-login, mod-authtoken.

No unexpected spikes or anomalies observed.

 

image-20241107-111434.png

 

Note: Instance-level CPU usage is not included into this report as on instance scale CPU usage during this tests is not visible.

RDS CPU Utilization 

RDS CPU usage is almost invisible during 100K tests (CPU utilization was ±6% and have no difference from IDLE state of DB), however with 10X for 300K deleted Authority records, tests it’s visible that CPU reached ±30%.

 

image-20241108-093417.png

 

On database connections chart it’s no visible signs of tests, probably because the only module created connections to DB during that time was mod-entities-links.

image-20241108-095601.png

Note: No slow queries defined in logs and in performance insights.

Errors

No errors found during tests. All tests passed successfully all response codes and responses checked to be valid.

Appendix

Infrastructure

PTF -environment rcon

  • 11 m6g.2xlarge EC2 instances located in US East (N. Virginia)us-east-1

  • 1 instance of db.r6.xlarge database, writer. Standard fse configuration

  • MSK fse-tenant

    • Metadata mode: KRaft

    • 4 kafka.m7g.xlarge brokers in 2 zones

    • Apache Kafka version 3.7.x

    • EBS storage volume per broker 300 GiB

    • auto.create.topics.enable=true

    • log.retention.minutes=480

    • default.replication.factor=2

  • Open Search ptf-test cluster

    • r6g.2xlarge.search 4 data nodes

    • r6g.large.search 3 dedicated master nodes

 

Cluster Resources - rcon-pvt (Fri Nov 08 10:35:52 UTC 2024 Module Task Definition Revision Module Version Mem Hard Limit Mem Soft Limit CPU Units Xmx Metaspace Size Max Metaspace Size mod-remote-storage 2 mod-remote-storage:3.2.1-SNAPSHOT.171 4920 4472 0 3960 512 512 mod-finance-storage 2 mod-finance-storage:8.7.0-SNAPSHOT.183 1024 896 0 700 88 128 mod-ncip 2 mod-ncip:1.14.6-SNAPSHOT.233 1024 896 0 768 88 128 mod-agreements 2 mod-agreements:7.1.0-SNAPSHOT.237 1592 1488 0 0 0 0 mod-ebsconet 2 mod-ebsconet:2.3.0-SNAPSHOT.80 1248 1024 0 700 128 256 mod-organizations 2 mod-organizations:2.0.0-SNAPSHOT.95 1024 896 0 700 88 128 mod-consortia 2 mod-consortia:1.2.0-SNAPSHOT.22 5136 4776 0 4416 384 512 edge-sip2 2 edge-sip2:3.3.0-SNAPSHOT.264 1024 896 0 768 88 128 mod-serials-management 2 mod-serials-management:1.1.0-SNAPSHOT.46 2480 2312 0 1792 384 512 mod-settings 2 mod-settings:1.0.4-SNAPSHOT.67 1024 896 0 768 88 128 mod-data-import 2 mod-data-import:3.2.0-SNAPSHOT.189 2048 1844 0 1292 384 512 mod-search 8 mod-search:4.0.0-SNAPSHOT.281 2592 2480 2048 0 512 1024 edge-dematic 2 edge-dematic:2.3.0-SNAPSHOT.143 1024 896 0 768 88 128 mod-inn-reach 2 mod-inn-reach:3.2.1-SNAPSHOT.102 3600 3240 0 2880 512 1024 mod-record-specifications 2 mod-record-specifications:1.0.0-SNAPSHOT.4 1024 896 0 768 88 128 mod-tags 2 mod-tags:2.2.1-SNAPSHOT.138 1024 896 0 768 88 128 mod-authtoken 3 mod-authtoken:2.16.0-SNAPSHOT.303 1440 1152 0 922 88 128 edge-courses 2 edge-courses:1.5.0-SNAPSHOT.1160 1024 896 0 768 88 128 mod-notify 2 mod-notify:3.2.1-SNAPSHOT.268 1024 896 0 768 88 128 mod-inventory-update 2 mod-inventory-update:3.4.2-SNAPSHOT.100 1024 896 0 768 88 128 mod-configuration 2 mod-configuration:5.11.0-SNAPSHOT.355 1024 896 0 768 88 128 mod-orders-storage 2 mod-orders-storage:13.8.0-SNAPSHOT.245 1024 896 0 700 88 128 edge-caiasoft 2 edge-caiasoft:2.3.0-SNAPSHOT.105 1024 896 0 768 88 128 mod-login-saml 2 mod-login-saml:2.9.0-SNAPSHOT.291 1024 896 0 768 88 128 mod-erm-usage-harvester 2 mod-erm-usage-harvester:5.0.0-SNAPSHOT.133 1024 896 0 768 88 128 mod-gobi 2 mod-gobi:2.9.0-SNAPSHOT.259 1024 896 0 700 88 128 mod-licenses 2 mod-licenses:6.1.0-SNAPSHOT.163 2480 2312 0 1792 384 512 mod-password-validator 2 mod-password-validator:3.2.2-SNAPSHOT.149 1440 1298 0 768 384 512 edge-dcb 3 edge-dcb:1.2.0-SNAPSHOT.39 1024 896 0 768 88 128 mod-bulk-operations 2 mod-bulk-operations:2.1.0-SNAPSHOT.119 3072 2600 0 1536 384 512 mod-fqm-manager 2 mod-fqm-manager:2.1.0-SNAPSHOT.1189 3000 2600 0 768 88 128 mod-graphql 2 mod-graphql:1.12.1.412 1024 896 0 768 88 128 mod-finance 2 mod-finance:5.0.0-SNAPSHOT.174 1024 896 0 700 88 128 mod-erm-usage 2 mod-erm-usage:5.0.0-SNAPSHOT.109 2800 2550 0 1800 384 512 mod-batch-print 2 mod-batch-print:1.2.0-SNAPSHOT.15 1024 896 0 768 88 128 mod-tlr 2 mod-tlr:1.0.0-SNAPSHOT.8 1024 896 0 768 88 128 mod-lists 2 mod-lists:2.1.0-SNAPSHOT.1303 3000 2600 0 2048 384 512 mod-copycat 2 mod-copycat:1.6.1-SNAPSHOT.208 1024 512 0 768 88 128 mod-entities-links 5 mod-entities-links:3.1.0-SNAPSHOT.113 2592 2480 0 1440 0 1024 mod-permissions 3 mod-permissions:6.6.0-SNAPSHOT.386 1684 1544 0 1024 384 512 pub-edge 2 pub-edge:2023.06.14 1024 896 0 768 0 0 mod-orders 2 mod-orders:12.9.0-SNAPSHOT.401 2048 1740 0 1024 384 512 edge-patron 2 edge-patron:5.2.0-SNAPSHOT.174 1024 896 0 768 88 128 mod-marc-migrations 11 mod-marc-migrations:1.0.0-SNAPSHOT.8 1024 896 0 768 88 128 edge-ncip 3 edge-ncip:1.10.2-SNAPSHOT.116 1024 896 0 768 88 128 edge-inn-reach 3 edge-inn-reach:3.3.0-SNAPSHOT.69 1024 896 0 768 88 128 mod-users-bl 2 mod-users-bl:7.9.0-SNAPSHOT.318 1440 1152 0 922 88 128 mod-oa 2 mod-oa:2.1.0-SNAPSHOT.66 1024 896 0 768 88 128 mod-inventory-storage 3 mod-inventory-storage:27.2.0-SNAPSHOT.773 4096 3690 0 3076 512 1024 mod-invoice 2 mod-invoice:5.9.0-SNAPSHOT.205 1440 1152 0 922 88 128 mod-user-import 2 mod-user-import:3.9.0-SNAPSHOT.197 1024 896 0 768 88 128 mod-sender 2 mod-sender:1.12.1-SNAPSHOT.100 1024 896 0 768 88 128 edge-oai-pmh 2 edge-oai-pmh:2.10.0-SNAPSHOT.174 1512 1360 0 1440 384 512 mod-data-export-worker 3 mod-data-export-worker:3.3.0-SNAPSHOT.233 3072 2048 0 2048 384 512 mod-rtac 2 mod-rtac:3.7.0-SNAPSHOT.203 1024 896 0 768 88 128 mod-circulation-storage 2 mod-circulation-storage:17.3.0-SNAPSHOT.412 2880 2592 0 1814 384 512 mod-source-record-storage 3 mod-source-record-storage:5.9.0-SNAPSHOT.405 5600 5000 0 3500 384 512 mod-calendar 2 mod-calendar:3.2.0-SNAPSHOT.229 1024 896 0 768 88 128 mod-event-config 2 mod-event-config:2.7.2-SNAPSHOT.110 1024 896 0 768 88 128 mod-courses 3 mod-courses:1.4.11-SNAPSHOT.155 1024 896 0 768 88 128 mod-circulation-item 2 mod-circulation-item:1.0.1-SNAPSHOT.26 1024 896 0 0 0 0 mod-inventory 2 mod-inventory:20.3.0-SNAPSHOT.546 2880 2592 0 1814 384 512 mod-email 2 mod-email:1.17.1-SNAPSHOT.128 2800 2550 0 1800 384 512 mod-requests-mediated 2 mod-requests-mediated:1.0.0-SNAPSHOT.4 1024 896 0 768 88 128 mod-circulation 2 mod-circulation:24.3.0-SNAPSHOT.685 2880 2592 0 1814 384 512 mod-pubsub 2 mod-pubsub:2.15.0-SNAPSHOT.224 1536 1440 0 922 384 512 mod-di-converter-storage 2 mod-di-converter-storage:2.3.0-SNAPSHOT.124 1024 896 0 768 88 128 edge-rtac 2 edge-rtac:2.7.3-SNAPSHOT.234 1024 896 0 768 88 128 edge-orders 2 edge-orders:3.1.0-SNAPSHOT.156 1024 896 0 768 88 128 mod-users 2 mod-users:19.3.3-SNAPSHOT.702 1024 896 0 768 88 128 mod-template-engine 2 mod-template-engine:1.20.1-SNAPSHOT.118 1024 896 0 768 88 128 mod-patron-blocks 2 mod-patron-blocks:1.11.0-SNAPSHOT.163 1024 896 0 768 88 128 mod-audit 2 mod-audit:2.9.1-SNAPSHOT.216 1024 896 0 768 88 128 edge-fqm 3 edge-fqm:2.1.0-SNAPSHOT.100 1024 896 0 768 88 128 mod-source-record-manager 2 mod-source-record-manager:3.9.0-SNAPSHOT.353 5600 5000 0 3500 384 512 nginx-edge 2 nginx-edge:2023.06.14 1024 896 0 0 0 0 mod-quick-marc 2 mod-quick-marc:5.2.0-SNAPSHOT.153 2288 2176 0 1664 384 512 nginx-okapi 2 nginx-okapi:2023.06.14 1024 896 0 0 0 0 okapi-b 2 okapi:5.3.0 1684 1440 0 922 384 512 mod-feesfines 2 mod-feesfines:19.2.0-SNAPSHOT.198 1024 896 0 768 88 128 mod-invoice-storage 2 mod-invoice-storage:5.9.0-SNAPSHOT.138 1872 1536 0 1024 384 512 mod-reading-room 2 mod-reading-room:1.0.0-SNAPSHOT.12 1024 896 0 768 88 128 mod-dcb 2 mod-dcb:1.1.3-SNAPSHOT.40 1024 896 0 768 88 128 mod-service-interaction 2 mod-service-interaction:4.1.0-SNAPSHOT.126 2048 1844 0 1290 384 512 mod-patron 2 mod-patron:6.2.0-SNAPSHOT.165 1024 896 0 768 88 128 mod-data-export 5 mod-data-export:5.1.0-SNAPSHOT.240 2592 2480 0 1440 88 1024 mod-oai-pmh 2 mod-oai-pmh:3.14.0-SNAPSHOT.402 4096 3690 0 3076 384 512 edge-connexion 2 edge-connexion:1.4.0-SNAPSHOT.88 1024 896 0 768 88 128 mod-notes 2 mod-notes:5.3.0-SNAPSHOT.325 1024 896 0 952 384 512 mod-kb-ebsco-java 3 mod-kb-ebsco-java:4.2.0-SNAPSHOT.178 1024 896 0 768 88 128 mod-organizations-storage 2 mod-organizations-storage:4.8.0-SNAPSHOT.133 1024 896 0 700 88 128 mod-data-export-spring 2 mod-data-export-spring:3.3.1-SNAPSHOT.167 2048 1844 0 1536 384 512 mod-login 2 mod-login:7.12.0-SNAPSHOT.326 1440 1298 0 768 384 512 pub-okapi 2 pub-okapi:2023.06.14 1024 896 0 768 0 0 mod-eusage-reports 2 mod-eusage-reports:3.0.0-SNAPSHOT.73 1024 896 0 768 88 128

 

Ramsons release snapshot.

Dataset Size 12 M Authority records in mod-entities-links, 100K and 300 K prepared data set of deleted authority records

Methodology/Approach

Overview: starting from Orchid release Authority records is stored in mod-entities-links schema in DB. There are tables [tenant]_mod_entities_links.authority where all authority records is stored and [tenant]_mod_entities_links.authority_archive - where deleted authority records is stored.

In order to prepare data set (generating some number of deleted Authority records) Additional sql script was created:

DO $$ DECLARE num_records_to_move INT := [specify number of records here]; -- Change this to the desired number of records BEGIN -- Step 1: Insert random records from authority to authority_archive with 'deleted' set to true INSERT INTO [tenant]_mod_entities_links.authority_archive ( id, natural_id, source_file_id, source, heading, heading_type, _version, subject_heading_code, sft_headings, saft_headings, identifiers, notes, deleted, created_date, updated_date, created_by_user_id, updated_by_user_id ) SELECT id, natural_id, source_file_id, source, heading, heading_type, _version, subject_heading_code, sft_headings, saft_headings, identifiers, notes, true AS deleted, created_date, updated_date, created_by_user_id, updated_by_user_id FROM [tenant]_mod_entities_links.authority WHERE id NOT IN (SELECT id FROM [tenant]_mod_entities_links.authority_archive) -- Exclude existing IDs ORDER BY random() -- Select random records LIMIT num_records_to_move; END $$;

 

Note: to run this script, just copy it into PGAdmin (or another DB management tool), replace [tenant] with exact tenant id, replace [specify number of records here] with number of records to be deleted and execute it. Script above will “move“ records from authority table to authority_archive without deleting, so script is harmless do dataset and may be executed multiple times.

JMeter script designed to call in loop [GET] authority-storage/authorities endpoint with parameters: limit, deleted, offset. On each step of a loop offset parameter is changing - providing pagination by 2000 records as requested in ticket.

Preparation and execution steps:

  1. Run SQL script in order to generate deleted Authority records. Check number of records that already existing in authority_archive beforehand.

  2. Put JMeter script into load generator. As [GET] authority-storage/authorities endpoint is fast, latency is crucial here, so script can’t be executed from local machine.

  3. Execute JMeter script with needed configurations. Example:

    jmeter -n -t RCON_Export_Deleted_Records.jmx -l export_authority300K_1loop.jtl  -Jloops=1 -Jcount_of_records_in_db=300000

Analysis:

  1. Collect JMeter results. [GET] authority-storage/authorities avg response times and TC_Export Deleted Records transaction controller duration.

  2. Collect CPU, Memory, usage stats for workflow related modules: mod-entities-links, okapi, nginx-okapi, pub-okapi, mod-users, mod-authtoken, mod-login.

  3. Collect DB stats (CPU, connection)

  4. This test is “fast“ so additional tests was performed to get more information about system behaviour. (tests with 10 loops of JMeter script)

Test Artifacts