Check-in-check-out Test Report (Ramsons) [non-ECS]


Test status: PASSED

Overview

  • Regression testing of Check-In/Check-Out (CI/CO) fixed load tests on okapi based environment in Ramsons non-ECS release.
  • The purposes of CI/CO testing:
    • To define response times of transaction controllers for Check-In and Check-Out
    • To define the response times for requests that take longer than 100 milliseconds

    • To find any trends for resource utilization and recommend improvements
    • To check how system behaves over extended period during longevity test
    • Compare results (current and previous

Summary

  • Common results:
    • CI/CO tests showed stable response times across low loads (8, 20 vUsers), a 50% increase under high load (75 vUsers), moderate degradation during longevity test, no memory leaks and up to 14% (80 ms) degradation in CO and up to 20% (100 ms) in CI 20 vUsers flow compared to Quesnelia release.
  • Tests #1, #2, #3, #4
    • Average response times in tests with 8, 20, 30 virtual users (vUsers) were the same in average. Average in 20 vUsers test CI - 482 ms, CO - 835 ms.
    • Average response times in test with 75 vUsers response times grew +50% compared to 20 vUsers. CI - 606 ms, CO - 1100 ms.
  • Test #5
    • Average response times in test #5 with 30 vUsers. CI - 519 ms, CO - 1130 ms.. There's expected degradation during 24 hours test if to compare with 30 vUsers test #3. CI - 37%, CO - 14%.
    • No memory leaks during longevity test. Two tests perform to get the results and both tests began erroring after 19 hours of running. The root course is under investigation.
  • Comparison with Quesnelia results:
    • CI/CO response times degradation (Tests #1, #2, #3, #4): 
      • Test,#vUsersCheck-Out Controller (CO)Check-In Controller (CI)
        110%15%
        220 14%20%
        330 7%7%
        475 6%4%
    • CI/CO response times degraded (test #5 - longevity test):
      • 30 vUsers - 6% in CO  and 14% in CI flow.

Resources

  • CPU utilization
    • Tests #1, #2, #3, #4 and longevity tests used CPU in correspondence with number of vUsers but there are some modules that spiked during 75 vUsers test -  mod-users-b - 132%, mod-authtoken-b - 98%, nginx-okapi - 84%.
  • Memory consumption
    • Tests #1, #2, #3, #4 and longevity tests didn't reveal some problems with memory usage by modules. So no memory leaks detected.
  • RDS CPU utilization average
    • 8 vUsers - 13%, 20 vUsers - 22%, 30 vUsers - 30%, 75 vUsers - 63% During longevity test CPU grew from 30% to 45%. So it has growing trend during longevity test. The same CPU utilization as it was in quesnelia.
  • CPU (User) usage by broker
    • As MSK cluster is linked to all PTF clusters so the time range which can reflect only CI/CO during longevity test (test #5) - from midnight till 7 a.m. Max consumption rate here - 10%. Also we may observe impact of other CI/CO tests - the max consumption rate - 40% for all clusters (tests #1, #2, #3, #4).

Recommendations & Jiras

  • mod-serials-management-b affect DB connection growth 200 connection in average. Disabling this module do not affect response times or error rate but significantly decrease DB connection number.
  • Revisions for modules should have CPU=0 as a default value so this should be changed on module deployment level.

Test Runs 

The following table contains  tests configuration information

Test #

vUsersRamp-up, sec

Duration, sec 

1

8802700
2202002700
3303002700
4757502700
53030086400

Results

Errors:

  • Error messages: POST_circulation/check-out-by-barcode (Submit_barcode_checkout)_POST_422. 422/Unprocessable Entity. Happen expectedly if instance was checked out already. Error rate - 0.002% which is acceptable.

Response time

The table contains results of Check-in, Check-out tests in Ramsons release. 

Test #1, #2, #3, #4

 Graph (Response times) Test #1

 Graph (Response times) Test #2

 Graph (Response times) Test #3

 Graph (Response times) Test #4


8 vUsers  (test #1)20 vUsers  (test #2)30 vUsers  (test #3)75 vUsers  (test #4)
Requests

Response Times (ms)

 Response Times (ms) Response Times (ms) Response Times (ms)
Label#Samples95th pctAverage#Samples95th pctAverage#Samples95th pctAverage#Samples95th pctAverage
Check-Out Controller18881008.7581144961006.3835.636588954.55822.011459214221100.28
Check-In Controller1322568.854703386559482.654973506455.4610971775606.04
POST_circulation/check-out-by-barcode (Submit_barcode_checkout)1888386289.984498368302.896589335288.9914595519384.38
POST_circulation/check-in-by-barcode (Submit_barcode_checkin)1322279.7227.943394273234.694982240209.2810991369277.67
GET_circulation/loans (Submit_barcode_checkout)1888235.55164.454496216162.686588195162.4814592319218.14

Test #5

 Graph (Response times) Test #5

 30 vUsers Longevity test


Requests
Samples, Response Times (ms)
Label#Samples95th pctAverage
Check-Out Controller18881008.751130
Check-In Controller1322568.85519
POST_circulation/check-out-by-barcode (Submit_barcode_checkout)1888386453.5
POST_circulation/check-in-by-barcode (Submit_barcode_checkin)1322279.7331.15

Comparisons

This table has comparison between average values of response times of Ramsons and Quesnelia releases


8 vUsers   (test #1)20 vUsers   (test #2)30 vUsers   (test #3)75 vUsers   (test #4)
RequestsResponse Times, milliseconds

QuesneliaRamsons

QuesneliaRamsons

QuesneliaRamsons

QuesneliaRamsons

LabelAverageDelta,msDifference,%AverageDelta,msDifference,%AverageDelta,msDifference,%AverageDelta,msDifference,%
Check-Out Controller741811709.45%729835.63106.6314.63%767822.0155.017.17%10391100.2861.285.90%
Check-In Controller4084706215.20%404482.6578.6519.47%427455.4628.466.67%580606.0426.044.49%

Comparison of longevity test

30 vUsers Longevity  (test #5)
Response Times, milliseconds

QuesneliaRamsons

AverageAverageDelta,msDifference,%
10651130656.10%
4545196514.32%


API requests where response times >= 100 milliseconds

API

30 vUsers  Ramsons

Average, ms

POST checkout-by-barcode288
POST checkin-by-barcode 209
GET circulation/loans162

Resources Utilization

CPU Utilization

During 45 minute tests CPU utilized mostly during high load (75 vUsers) by okapi - 84%, mod-authtoken spiked every 3 minutes from 5 to 30%, mod-inventory-storage - 23%, mod-inventory - 17%, mod-pubsub - 17%, nginx-okapi - 10%, mod-circulation - 10%, mod-circulation-storage - 3%

During longevity CPU utilized mostly by okapi - 37%, mod-authtoken spiked every 3 minutes from 5 to 20%, mod-inventory - 12%, mod-pubsub - 11%, mod-circulation - 5%, mod-circulation-storage - 3%

 CPU utilization by modules
CPU#1 8 vUsersCPU#2 20 vUsersCPU#3 30 vUsersCPU#4 75 vUsersCPU#5 30 vUsers Longevity
mod-authtoken-b16.93okapi-b24.66okapi-b36.73okapi-b85.34okapi-b39.51
okapi-b10.48mod-authtoken-b22.45mod-authtoken-b22.57mod-authtoken-b31.54mod-inventory-b12.55
mod-inventory-b9.52mod-inventory-b11.55mod-inventory-b12.17mod-inventory-storage-b24.14mod-pubsub-b11.67
mod-pubsub-b8.6mod-pubsub-b10.78mod-pubsub-b11.74mod-inventory-b17.6mod-authtoken-b9.99
mod-inventory-storage-b2.48mod-inventory-storage-b5.77mod-inventory-storage-b8.45mod-pubsub-b17.1mod-inventory-storage-b8.51
mod-entities-links-b2.2mod-circulation-b4.11mod-circulation-b4.68mod-circulation-b10.52mod-circulation-b5.05
mod-circulation-b1.49mod-circulation-storage-b2.58mod-circulation-storage-b3.29nginx-okapi10.42mod-circulation-storage-b3.43
mod-circulation-storage-b1.37mod-entities-links-b2.22mod-entities-links-b2.77mod-circulation-storage-b6.63mod-entities-links-b2.17
mod-source-record-storage-b1.32mod-search-b1.72mod-search-b2.06mod-patron-blocks-b2.53mod-patron-blocks-b1.7
mod-search-b1.28mod-source-record-storage-b1.37mod-patron-blocks-b1.32mod-entities-links-b2.22mod-search-b1.4
mod-data-import-b1.22mod-data-import-b1.35mod-data-import-b1.31mod-search-b1.71mod-source-record-storage-b1.31
edge-patron-b1.1mod-patron-blocks-b1.23mod-source-record-storage-b1.3mod-users-b1.54mod-data-import-b1.29
mod-patron-blocks-b0.57edge-patron-b1.14edge-patron-b1.13mod-data-import-b1.47edge-patron-b1.11
mod-source-record-manager-b0.56mod-source-record-manager-b0.59nginx-okapi0.83mod-source-record-storage-b1.37nginx-okapi0.88
mod-users-bl-b0.44mod-users-b0.55mod-users-b0.73edge-patron-b1.2mod-users-b0.78
mod-users-b0.26mod-users-bl-b0.53mod-source-record-manager-b0.58mod-configuration-b0.92mod-source-record-manager-b0.58
nginx-okapi0.23nginx-okapi0.51mod-users-bl-b0.47mod-feesfines-b0.63mod-users-bl-b0.48
mod-dcb-b0.13mod-configuration-b0.28mod-configuration-b0.39mod-source-record-manager-b0.61mod-configuration-b0.4
mod-quick-marc-b0.13mod-feesfines-b0.25mod-feesfines-b0.3pub-okapi0.53mod-feesfines-b0.35
mod-configuration-b0.13pub-okapi0.14pub-okapi0.22mod-users-bl-b0.52pub-okapi0.23
mod-feesfines-b0.11mod-quick-marc-b0.13mod-quick-marc-b0.13mod-quick-marc-b0.15mod-quick-marc-b0.14
pub-okapi0.06mod-dcb-b0.12mod-dcb-b0.12mod-dcb-b0.13mod-dcb-b0.13
mod-oa-b0.05mod-oa-b0.05mod-oa-b0.04mod-oa-b0.05mod-oa-b0.04
mod-di-converter-storage-b0.03mod-di-converter-storage-b0.03mod-di-converter-storage-b0.04mod-di-converter-storage-b0.04mod-di-converter-storage-b0.04
mod-patron-b0.03mod-patron-b0.03mod-patron-b0.03mod-patron-b0.03mod-patron-b0.03
pub-edge0pub-edge0pub-edge0pub-edge0pub-edge0

Tests #1, #2, #3, #4

During 45 minute tests CPU utilized mostly during high load (75 vUsers) by okapi - 84%, mod-authtoken spiked every 3 minutes from 5 to 30%, mod-inventory-storage - 23%, mod-inventory - 17%, mod-pubsub - 17%, nginx-okapi - 10%, mod-circulation - 10%, mod-circulation-storage - 3%

Test #5

During longevity CPU utilized mostly by okapi - 37%, mod-authtoken spiked every 3 minutes from 5 to 20%, mod-inventory - 12%, mod-pubsub - 11%, mod-circulation - 5%, mod-circulation-storage - 3%

Memory Consumption

Tests #1, #2, #3, #4 and test #5 didn't reveal some problems with memory usage by modules. So no memory leaks detected. Modules that consumed max memory - mod-search - 94%, mod-oa - 78%, mod-inventory - 72%, mod-dcb - 71%

 Memory usage by modules
Memory 75 vUsersMemory 30 vUsers Longevity
mod-oa-b78.29mod-oa-b79.24
mod-inventory-b78.2mod-pubsub-b68.44
mod-dcb-b60.51mod-dcb-b62.05
mod-data-import-b48.18mod-inventory-b59.98
okapi-b46.92mod-data-import-b59.06
mod-pubsub-b45.17okapi-b43.52
mod-users-b40.16mod-search-b42.38
mod-search-b38.06mod-users-b41.48
mod-feesfines-b33.39mod-feesfines-b34.33
mod-configuration-b32.08mod-circulation-storage-b31.93
mod-patron-blocks-b30.69mod-di-converter-storage-b31.53
mod-circulation-storage-b27.62mod-patron-blocks-b31.53
mod-quick-marc-b27.34mod-configuration-b31.47
mod-di-converter-storage-b26.27mod-quick-marc-b28.95
mod-entities-links-b26.21mod-users-bl-b27.94
mod-inventory-storage-b25.74mod-entities-links-b27.89
mod-circulation-b24.34mod-inventory-storage-b26.71
mod-patron-b24.29mod-circulation-b26.31
mod-source-record-storage-b22.38mod-patron-b25.78
mod-authtoken-b20.74mod-source-record-storage-b24.65
mod-users-bl-b20.18mod-authtoken-b21.89
edge-patron-b17.19edge-patron-b18.81
mod-source-record-manager-b13.53mod-source-record-manager-b16.55
pub-okapi4.97pub-okapi5.19
nginx-okapi4.97nginx-okapi5.19
pub-edge4.46pub-edge4.58

Tests #1, #2, #3, #4

Memory usage during 75 vUsers CI/CO test: mod-inventory - 78%, mod-oa - 78%, mod-dcb - 60%, mod-data-import - 48%, okapi - 46%, mod-pubsub - 45%, mod-users - 39%, mod-search - 38%. The memory trend doesn't reveal some problems.

Test #5

Memory consumption trends during longevity show steady growth for pubsub module which stopped after test completed with 68%.

RDS CPU Utilization

RDS CPU utilized:

8 vUsers - 12%, 20 vUsers - 20%, 30 vUsers - 25%, 75 vUsers - 56% During longevity test CPU grew from 25% to 40%. So it has growing trend during longevity test. The RDS CPU utilization is the same as in quesnelia release.

Tests #1, #2, #3, #4

Test #5

RDS Database Connections

For 45 minute and longevity tests RDS used max 885-920 connections. Without test it was 860 connections.

Tests #1, #2, #3, #4

Test #5

CPU (User) usage by broker

As MSK cluster is linked to all PTF clusters so the time range which can reflect only CI/CO during longevity test (test #5) - from midnight till 7 a.m. Max consumption rate here - 10%. Also we may observe impact of other CI/CO tests - the max consumption rate - 40% for all clusters (tests #1, #2, #3, #4).

Tests #1, #2, #3, #4

Test #5

Database load

Load by sqls (AAS) - SQL statements
Tests #1, #2, #3, #4
UPDATE fs09000000_mod_inventory_storage.item SET jsonb=$1 WHERE id=$2 RETURNING jsonb::text
INSERT INTO fs09000000_mod_pubsub.audit_message (id, event_id, event_type, tenant_id, audit_date, state, published_by, correlation_id, created_by, error_message) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10);
WITH deleted_rows AS ( delete from marc_indexers mi where exists( select ? from marc_records_tracking mrt where mrt.is_dirty = ? and mrt.marc_id = mi.marc_id and mrt.version > mi.version ) returning mi.marc_id), deleted_rows2 AS ( delete from marc_indexers mi where exists( select ? from records_lb where records_lb.id = mi.marc_id and records_lb.state = ? ) returning mi.marc_id) INSERT IN
SELECT fs09000000_mod_inventory_storage.count_estimate('SELECT * FROM fs09000000_mod_inventory_storage.material_type WHERE id=''025ba2c5-5e96-4667-a677-8186463aee69''')
UPDATE fs09000000_mod_login.auth_attempts SET jsonb = $1::jsonb WHERE id='9883ca16-ef27-41f7-81d7-6693b79cddad'
INSERT INTO fs09000000_mod_authtoken.refresh_tokens (id, user_id, is_revoked, expires_at) VALUES ($1, $2, $3, $4)
SELECT upsert('circulation_logs', $1::uuid, $2::jsonb)

Test #5
INSERT INTO fs09000000_mod_pubsub.audit_message (id, event_id, event_type, tenant_id, audit_date, state, published_by, correlation_id, created_by, error_message) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10);
SELECT fs09000000_mod_patron_blocks.count_estimate('SELECT jsonb FROM fs09000000_mod_patron_blocks.patron_block_limits WHERE (jsonb->>''patronGroupId'') = ''5fc96cbd-a860-42a7-8d2b-72af30206712''')
UPDATE fs09000000_mod_inventory_storage.item SET jsonb=$1 WHERE id=$2 RETURNING jsonb::text
SELECT jsonb FROM fs09000000_mod_patron_blocks.user_summary WHERE (jsonb->>'userId') = '4cd01954-62da-46c5-8558-ebd222bc48eb'
SELECT fs09000000_mod_inventory_storage.count_estimate('SELECT jsonb,id FROM fs09000000_mod_inventory_storage.service_point WHERE id=''7068e104-aa14-4f30-a8bf-71f71cc15e07''')
UPDATE fs09000000_mod_login.auth_attempts SET jsonb = $1::jsonb WHERE id='9883ca16-ef27-41f7-81d7-6693b79cddad'
INSERT INTO fs09000000_mod_authtoken.refresh_tokens (id, user_id, is_revoked, expires_at) VALUES ($1, $2, $3, $4)
SELECT upsert('circulation_logs', $1::uuid, $2::jsonb)
SELECT COUNT(*) FROM fs09000000_mod_users.users
SELECT fs09000000_mod_circulation_storage.count_estimate('SELECT jsonb,id FROM fs09000000_mod_circulation_storage.loan_policy WHERE id=''2be97fb5-eb89-46b3-a8b4-776cea57a99e''')

During 45 minute tests (#1, #2, #3, #4) we see that the longest request is UPDATE fs09000000_mod_inventory_storage.item SET with 38 ms/request

During longevity test (#5) INSERT INTO fs09000000_mod_pubsub.audit_message - 41 ms and SELECT fs09000000_mod_inventory_storage.count_estimate - 107 ms.

Other observation is that we see a lot of UPDATE fs09000000_mod_login.auth_attempts and INSERT INTO fs09000000_mod_authtoken.refresh_tokens which is new. It may be connected to every 10 minutes token refresh.

Tests #1, #2, #3, #4

Test #5


Appendix

Infrastructure

PTF -environment rcp1
  • rcp1 9 m6g.2xlarge EC2 instances located in US East (N. Virginia)us-east-1 
  • 1 instance of db.r6g.xlarge database instance: Writer instance
  • MSK fse-tenant
      • 4 kafka.m7g.xlarge brokers in 2 zones (2 brokers per zone)
      • Apache Kafka version 3.7.x, metadata mode - KRaft

      • EBS storage volume per broker 300 GiB

      • auto.create.topics.enable=true
      • log.retention.minutes=480
      • default.replication.factor=2
  • OpenSearch 2.13 ptf-test cluster
    • r6g.2xlarge.search 4 data nodes

    • r6g.large.search 3 dedicated master nodes

DB table records size:

  • fs09000000
    • instances -            27829992
    • items -                  28977562
    • holding records - 27888818

Modules

 All modules
ModuleTask Definition RevisionModule VersionTask CountMem Hard LimitMem Soft LimitCPU UnitsXmxMetaspace SizeMax Metaspace Size
mod-remote-storage2mod-remote-storage:3.3.024920447210243960512512
mod-ncip2mod-ncip:1.15.421024896076888128
mod-finance-storage2mod-finance-storage:8.7.021024896102470088128
mod-agreements2mod-agreements:7.1.02159214880000
mod-ebsconet2mod-ebsconet:2.3.0212481024128700128256
mod-organizations2mod-organizations:2.0.021024896070088128
edge-sip22edge-sip2:3.3.021024896076888128
mod-settings2mod-settings:1.1.02102489620076888128
mod-serials-management2mod-serials-management:1.1.002480231201792384512
edge-dematic2edge-dematic:2.3.011024896076888128
mod-data-import2mod-data-import:3.2.11204818442561292384512
mod-search11mod-search:4.0.0225922480204814405121024
mod-inn-reach1mod-inn-reach:3.2.1-SNAPSHOT.102236003240102428805121024
mod-record-specifications11mod-record-specifications:1.0.021024896076888128
mod-tags2mod-tags:2.3.021024896076888128
mod-authtoken2mod-authtoken:2.16.121440115251292288128
edge-courses2edge-courses:1.5.021024896076888128
mod-notify2mod-notify:3.3.021024896076888128
mod-inventory-update2mod-inventory-update:4.0.021024896076888128
mod-configuration2mod-configuration:5.11.021024896076888128
mod-orders-storage2mod-orders-storage:13.8.02102489651270088128
edge-caiasoft2edge-caiasoft:2.3.121024896076888128
mod-login-saml2mod-login-saml:2.9.121024896076888128
mod-erm-usage-harvester2mod-erm-usage-harvester:5.0.021024896076888128
mod-password-validator2mod-password-validator:3.3.02144012980768384512
mod-gobi2mod-gobi:2.9.021024896070088128
mod-licenses2mod-licenses:6.1.022480231201792384512
edge-dcb2edge-dcb:1.2.021024896076888128
mod-bulk-operations2mod-bulk-operations:2.1.123072260010241536384512
mod-fqm-manager11mod-fqm-manager:3.0.12300026001282048384512
mod-graphql2mod-graphql:1.12.221024896076888128
mod-finance2mod-finance:5.0.021024896070088128
mod-erm-usage2mod-erm-usage:5.0.021024896076888128
mod-batch-print2mod-batch-print:1.2.021024896076888128
mod-tlr2mod-tlr:1.0.0-SNAPSHOT.821024896076888128
mod-lists6mod-lists:3.0.126000260012876888128
mod-copycat2mod-copycat:1.7.021024512076888128
mod-entities-links6mod-entities-links:3.1.0225922480400144001024
mod-permissions4mod-permissions:6.6.02168415445121024384512
pub-edge2pub-edge:2023.06.1421024896076800
mod-orders2mod-orders:12.9.122048144010241024384512
edge-patron2edge-patron:5.2.02102489625676888128
edge-ncip2edge-ncip:1.10.121024896076888128
mod-marc-migrations26mod-marc-migrations:1.0.0-SNAPSHOT.821024896076888128
edge-inn-reach1edge-inn-reach:3.3.0-SNAPSHOT.6921024896076888128
mod-users-bl2mod-users-bl:7.9.221440115251292288128
mod-oa1mod-oa:2.1.0-SNAPSHOT.6621024896076888128
mod-invoice2mod-invoice:5.9.021440115251292288128
mod-inventory-storage5mod-inventory-storage:28.0.1240963690204830765121024
mod-user-import2mod-user-import:3.9.021024896076888128
mod-sender2mod-sender:1.13.021024896076888128
edge-oai-pmh2edge-oai-pmh:2.10.021512136010241440384512
mod-data-export-worker2mod-data-export-worker:3.3.123072204810242048384512
mod-rtac2mod-rtac:3.7.021024896076888128
mod-circulation-storage2mod-circulation-storage:17.3.022880259215361814384512
mod-source-record-storage4mod-source-record-storage:5.9.025600500020483500384512
mod-calendar3mod-calendar:3.2.021024896076888128
mod-event-config2mod-event-config:2.8.021024896076888128
mod-courses2mod-courses:1.4.1121024896076888128
mod-circulation-item2mod-circulation-item:1.1.0210248960000
mod-inventory2mod-inventory:21.0.022880259210241814384512
mod-email2mod-email:1.18.021024896076888128
mod-requests-mediated10mod-requests-mediated:1.0.0-SNAPSHOT.421024896076888128
mod-di-converter-storage2mod-di-converter-storage:2.3.021024896076888128
mod-pubsub2mod-pubsub:2.15.02153614401024922384512
mod-circulation2mod-circulation:24.3.022880259215361814384512
edge-orders2edge-orders:3.1.021024896076888128
edge-rtac2edge-rtac:2.8.021024896076888128
mod-template-engine2mod-template-engine:1.21.021024896076888128
mod-users2mod-users:19.4.021024896076888128
mod-patron-blocks2mod-patron-blocks:1.11.021024896102476888128
mod-audit2mod-audit:2.10.021024896076888128
edge-fqm2edge-fqm:3.0.021024896076888128
mod-source-record-manager2mod-source-record-manager:3.9.025600500020483500384512
nginx-edge2nginx-edge:2023.06.14210248960000
mod-quick-marc2mod-quick-marc:6.0.012288217601664384512
nginx-okapi2nginx-okapi:2023.06.14210248960000
okapi-b2okapi:5.3.03168414401024922384512
mod-feesfines2mod-feesfines:19.2.021024896076888128
mod-invoice-storage2mod-invoice-storage:5.9.021872153610241024384512
mod-reading-room3mod-reading-room:1.0.021024896076888128
mod-service-interaction2mod-service-interaction:4.1.02204818442561290384512
mod-dcb2mod-dcb:1.2.021024896076888128
mod-data-export2mod-data-export:5.1.01204818442048000
mod-patron2mod-patron:6.2.021024896076888128
mod-oai-pmh2mod-oai-pmh:3.14.124096369020483076384512
edge-connexion2edge-connexion:1.3.121024896076888128
mod-notes2mod-notes:6.0.0210248960952384512
mod-kb-ebsco-java2mod-kb-ebsco-java:5.0.021024896076888128
mod-login2mod-login:7.12.12144012981024768384512
mod-organizations-storage2mod-organizations-storage:4.8.121024896070088128
mod-data-export-spring2mod-data-export-spring:3.4.01204818442561536384512
pub-okapi2pub-okapi:2023.06.1421024896076800
edge-erm1edge-erm:1.3.021024896076888128
mod-eusage-reports2mod-eusage-reports:3.0.021024896076888128


Methodology/Approach

Description

Testing includes data preparation step and testing itself

  • Data preparation for each test takes up to 20 minutes and consists of truncating involved in testing tables, populating data and updating statuses of items.
  • Test itself depends on duration and virtual users number creating necessary load.

In Ramsons token expiration set to 10 minutes by default so to run any tests use new login implementation from the script. Pay attention to Backend Listener. Replace value of application parameter to make the results visible in Grafana dashboard.

Module configuration recommended setup

Update revision in source-record-storage module to exclude every 30 minutes SQL statements - delete rows in marc_indexers (miWITH deleted_rows

{
"name": "srs.marcIndexers.delete.interval.seconds",
"value": "86400"
},

Update mod-serials module. Set number of task with 0 to exclude significant database connection growth.

DB trigger setup in Ramsons

Usual PTF CI/CO data preparation script won’t work in Ramsons. To solve that disable trigger updatecompleteupdateddate_item_insert_update before data preparation for the tenant and enable it before test start.

The sql file was updated to do that step from the script.

Data preparation

First step

  • To prepare data establish connection by AWS keys, then run from bash .sql script first (take from the title of code block and replace [PASSWORD] with correct password.
export PGPASSWORD='[PASSWORD]';psql -f checkin-checkout-db-restore.sql -a --echo-all -h 127.0.0.1 -U folio
-- Disable trigger
ALTER TABLE fs09000000_mod_inventory_storage.item
DISABLE TRIGGER updatecompleteupdateddate_item_insert_update;

TRUNCATE TABLE fs09000000_mod_patron_blocks.user_summary;
TRUNCATE TABLE fs09000000_mod_circulation_storage.loan;
TRUNCATE TABLE fs09000000_mod_circulation_storage.audit_loan;
TRUNCATE TABLE fs09000000_mod_circulation_storage.request;
TRUNCATE TABLE fs09000000_mod_circulation_storage.patron_action_session;
TRUNCATE TABLE fs09000000_mod_circulation_storage.scheduled_notice;
TRUNCATE TABLE fs09000000_mod_notify.notify_data;

UPDATE fs09000000_mod_inventory_storage.item 
SET jsonb = jsonb_set(jsonb, '{status, name}', '"Available"')
WHERE jsonb->'status'->>'name' != 'Available';

UPDATE fs09000000_mod_users.users 
SET jsonb = jsonb_set(jsonb, '{active}', '"true"') 
WHERE jsonb->'active' != 'true';

-- Enable trigger
ALTER TABLE fs09000000_mod_inventory_storage.item
ENABLE TRIGGER updatecompleteupdateddate_item_insert_update;

Second step

  • Run command from scripts folder uploaded to S3 bucket ./circ-data-load.sh psql_rcp1.conf [tenant] - where replace [tenant] with tenant Id, change parameters in psql_rcp1.conf file with valid data.
  • Troubleshooting:
    • If the command executed from local machine you may encounter with too long query error message. To solve it use PGAdmin to run 2 long queries UPDATE ${TENANT}_mod_inventory_storage.item SET jsonb = jsonb_set(jsonb, '{status, name}', '\"Checked out\"') where id IN.
    • Other possible issue - incorrect encoding (on Windows machine). To solve it just add ENCODING 'UTF8'
      • Use pattern: copy ${TENANT}_mod_circulation_storage.loan(id, jsonb) FROM '${LOANS}' DELIMITER E'\t'  ENCODING 'UTF8'


Use .jmx file script for Ramson release. If any changes were made then upload the artefacts to S3 bucket and AWS instance load generator.


To start test from AWS instance (load generator) use template for the command. Test locally before start.

8 vUsers - 
nohup jmeter -n -t /home/ptf/testdata/RCP1/CICO/circulation_checkInCheckOut_rcp1.jmx -l rcp1_8vUsers.jtl -e -o /home/ptf/testdata/RCP1/CICO/results/8vUsers -JGlobal_duration=2700 -JCICO_vusers=8 -JCICO_rampup=80

20vUsers - 
nohup jmeter -n -t /home/ptf/testdata/RCP1/CICO/circulation_checkInCheckOut_rcp1.jmx -l rcp1_20vUsers.jtl -e -o /home/ptf/testdata/RCP1/CICO/results/20vUsers -JGlobal_duration=2700 -JCICO_vusers=20 -JCICO_rampup=200

30vUsers - 
nohup jmeter -n -t /home/ptf/testdata/RCP1/CICO/circulation_checkInCheckOut_rcp1.jmx -l rcp1_30vUsers.jtl -e -o /home/ptf/testdata/RCP1/CICO/results/30vUsers -JGlobal_duration=2700 -JCICO_vusers=30 -JCICO_rampup=300


75vUsers - 
nohup jmeter -n -t /home/ptf/testdata/RCP1/CICO/circulation_checkInCheckOut_rcp1.jmx -l rcp1_75vUsers.jtl -e -o /home/ptf/testdata/RCP1/CICO/results/75vUsers -JGlobal_duration=2700 -JCICO_vusers=75 -JCICO_rampup=750


Test CI/CO with 8, 20, 30, 75 concurrent users for 45 minutes each. 

Test CI/CO with 30 users for 24 hours to detect any trends in memory. 

To create widgets in AWS dashboard to monitor and collect CI/CO related modules parameters (service CPU and Memory) use these json:

 CPU and Memory widget jsons
JSON widgets to monitor service CPU consumption
{
"metrics": [
[ "AWS/ECS", "CPUUtilization", "ServiceName", "pub-edge", "ClusterName", "rcp1-pvt", { "region": "us-east-1" } ],
[ "...", "mod-eusage-reports-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-pubsub-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-data-export-spring-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-data-import-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "edge-rtac-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-users-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-organizations-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-graphql-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-event-config-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-audit-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-organizations-storage-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-tags-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-ncip-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-feesfines-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-user-import-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "pub-okapi", ".", ".", { "region": "us-east-1" } ],
[ "...", "okapi-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-entities-links-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-sender-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "nginx-okapi", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-circulation-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-kb-ebsco-java-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-dcb-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "edge-dematic-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-oai-pmh-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-inventory-update-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-search-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "edge-orders-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-orders-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-invoice-storage-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-circulation-item-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-batch-print-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "edge-sip2-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-inventory-storage-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-licenses-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "nginx-edge", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-invoice-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-login-saml-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-agreements-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-di-converter-storage-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-erm-usage-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-copycat-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "edge-courses-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-oa-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-email-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-serials-management-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "edge-patron-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-permissions-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-gobi-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-configuration-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-calendar-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-patron-blocks-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "edge-fqm-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-service-interaction-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-circulation-storage-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "edge-caiasoft-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-finance-storage-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-authtoken-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "edge-connexion-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "edge-ncip-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-notes-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-bulk-operations-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "edge-oai-pmh-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-erm-usage-harvester-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-settings-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-notify-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-source-record-storage-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-quick-marc-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-login-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-inventory-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-rtac-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-inn-reach-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-lists-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-finance-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-password-validator-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-orders-storage-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-fqm-manager-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "edge-dcb-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-source-record-manager-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-users-bl-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-template-engine-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-courses-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-patron-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-ebsconet-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-data-export-worker-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-remote-storage-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "edge-inn-reach-b", ".", ".", { "region": "us-east-1", "visible": false } ]
],
"view": "timeSeries",
"period": 60,
"yAxis": {
"left": {
"min": 0
}
},
"stacked": false,
"title": "CI/CO Service CPU Utilization",
"region": "us-east-1",
"stat": "Average"
}
JSON widgets to monitor service Memory consumption
{
"metrics": [
[ "AWS/ECS", "MemoryUtilization", "ServiceName", "pub-edge", "ClusterName", "rcp1-pvt", { "region": "us-east-1" } ],
[ "...", "mod-eusage-reports-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-pubsub-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-data-export-spring-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-data-import-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "edge-rtac-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-users-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-organizations-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-graphql-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-event-config-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-audit-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-organizations-storage-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-tags-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-ncip-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-feesfines-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-user-import-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "pub-okapi", ".", ".", { "region": "us-east-1" } ],
[ "...", "okapi-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-entities-links-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-sender-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "nginx-okapi", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-circulation-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-kb-ebsco-java-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-dcb-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "edge-dematic-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-oai-pmh-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-inventory-update-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-search-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "edge-orders-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-orders-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-invoice-storage-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-circulation-item-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-batch-print-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "edge-sip2-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-inventory-storage-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-licenses-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "nginx-edge", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-invoice-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-login-saml-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-agreements-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-di-converter-storage-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-erm-usage-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-copycat-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "edge-courses-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-oa-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-email-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-serials-management-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "edge-patron-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-permissions-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-gobi-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-configuration-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-calendar-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-patron-blocks-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "edge-fqm-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-service-interaction-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-circulation-storage-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "edge-caiasoft-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-finance-storage-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-authtoken-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "edge-connexion-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "edge-ncip-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-notes-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-bulk-operations-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "edge-oai-pmh-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-erm-usage-harvester-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-settings-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-notify-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-source-record-storage-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-quick-marc-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-login-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-inventory-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-rtac-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-inn-reach-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-lists-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-finance-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-password-validator-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-orders-storage-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-fqm-manager-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "edge-dcb-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-source-record-manager-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-users-bl-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-template-engine-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-courses-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-patron-b", ".", ".", { "region": "us-east-1" } ],
[ "...", "mod-ebsconet-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-data-export-worker-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "mod-remote-storage-b", ".", ".", { "region": "us-east-1", "visible": false } ],
[ "...", "edge-inn-reach-b", ".", ".", { "region": "us-east-1", "visible": false } ]
],
"view": "timeSeries",
"period": 60,
"yAxis": {
"left": {
"min": 0
}
},
"stacked": false,
"title": "CI/CO Service Memory Usage",
"region": "us-east-1",
"stat": "Average"
}

File with raw data
Use the file to get raw data and comparison tables