Skip to content

Commit

Permalink
fix perf issue
Browse files Browse the repository at this point in the history
  • Loading branch information
tharindu1st committed Mar 13, 2024
1 parent f88096e commit 769cce3
Show file tree
Hide file tree
Showing 18 changed files with 34,129 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public class SubscriptionDataStoreImpl implements SubscriptionDataStore {

// Maps for keeping Subscription related details.
private Map<String, ApplicationKeyMapping> applicationKeyMappingMap = new ConcurrentHashMap<>();
private Map<String, ApplicationMapping> applicationMappingMap = new ConcurrentHashMap<>();
private Map<String, Map<String, ApplicationMapping>> applicationMappingMap = new ConcurrentHashMap<>();
private Map<String, Application> applicationMap = new ConcurrentHashMap<>();
private Map<String, Subscription> subscriptionMap = new ConcurrentHashMap<>();

Expand Down Expand Up @@ -149,14 +149,19 @@ public void addApplicationKeyMappings(List<ApplicationKeyMappingDTO> application

public void addApplicationMappings(List<ApplicationMappingDto> applicationMappingList) {

Map<String, ApplicationMapping> newApplicationMappingMap = new ConcurrentHashMap<>();
Map<String, Map<String, ApplicationMapping>> newApplicationMappingMap = new ConcurrentHashMap<>();
for (ApplicationMappingDto applicationMapping : applicationMappingList) {
ApplicationMapping appMapping = new ApplicationMapping();
appMapping.setUuid(applicationMapping.getUuid());
appMapping.setApplicationUUID(applicationMapping.getApplicationRef());
appMapping.setSubscriptionUUID(applicationMapping.getSubscriptionRef());
appMapping.setOrganization(applicationMapping.getOrganizationId());
newApplicationMappingMap.put(appMapping.getCacheKey(), appMapping);
Map<String, ApplicationMapping> applicationMappings = new HashMap<>();
if (newApplicationMappingMap.containsKey(appMapping.getApplicationUUID())) {
applicationMappings = newApplicationMappingMap.get(appMapping.getApplicationUUID());
}
applicationMappings.put(appMapping.getCacheKey(), appMapping);
newApplicationMappingMap.put(appMapping.getApplicationUUID(), applicationMappings);
}
if (log.isDebugEnabled()) {
log.debug("Total Application Mappings in new cache: {}", newApplicationMappingMap.size());
Expand All @@ -176,15 +181,12 @@ public ApplicationKeyMapping getMatchingApplicationKeyMapping(String application
@Override
public Set<ApplicationMapping> getMatchingApplicationMappings(String uuid) {

Set<ApplicationMapping> applicationMappings = new HashSet<>();
if (StringUtils.isNotEmpty(uuid)) {
for (ApplicationMapping applicationMapping : applicationMappingMap.values()) {
if (applicationMapping.getApplicationUUID().equals(uuid)) {
applicationMappings.add(applicationMapping);
}
if (applicationMappingMap.containsKey(uuid)) {
return new HashSet<>(applicationMappingMap.get(uuid).values());
}
}
return applicationMappings;
return new HashSet<>();
}

@Override
Expand Down Expand Up @@ -309,11 +311,12 @@ public void addApplicationMapping(org.wso2.apk.enforcer.discovery.subscription.A
resolvedApplicationMapping.setApplicationUUID(applicationMapping.getApplicationRef());
resolvedApplicationMapping.setSubscriptionUUID(applicationMapping.getSubscriptionRef());
resolvedApplicationMapping.setOrganization(applicationMapping.getOrganization());
if (applicationMappingMap.containsKey(resolvedApplicationMapping.getCacheKey())) {
applicationMappingMap.replace(resolvedApplicationMapping.getCacheKey(), resolvedApplicationMapping);
} else {
applicationMappingMap.put(resolvedApplicationMapping.getCacheKey(), resolvedApplicationMapping);
Map<String, ApplicationMapping> applicationMappings = new HashMap<>();
if (applicationMappingMap.containsKey(resolvedApplicationMapping.getApplicationUUID())) {
applicationMappings = applicationMappingMap.get(resolvedApplicationMapping.getApplicationUUID());
}
applicationMappings.put(resolvedApplicationMapping.getCacheKey(), resolvedApplicationMapping);
applicationMappingMap.put(resolvedApplicationMapping.getApplicationUUID(), applicationMappings);
}

@Override
Expand Down Expand Up @@ -344,7 +347,11 @@ public void removeApplicationMapping(org.wso2.apk.enforcer.discovery.subscriptio
resolvedApplicationMapping.setApplicationUUID(applicationMapping.getApplicationRef());
resolvedApplicationMapping.setSubscriptionUUID(applicationMapping.getSubscriptionRef());
resolvedApplicationMapping.setOrganization(applicationMapping.getOrganization());
applicationMappingMap.remove(resolvedApplicationMapping.getCacheKey());
Map<String, ApplicationMapping> applicationMappings =
applicationMappingMap.get(applicationMapping.getApplicationRef());
if (applicationMappings != null) {
applicationMappings.remove(resolvedApplicationMapping.getCacheKey());
}
}

@Override
Expand Down
2 changes: 1 addition & 1 deletion test/performance/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ sudo apt install openjdk-11-jre-headless
sudo snap install kubectl --classic
wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-5.5.tgz
tar -xvzf apache-jmeter-5.5.tgz apache-jmeter-5.5
sudo apt install jq
sudo snap install jq

cd apache-jmeter-5.5/bin/
mkdir payloads
Expand Down
13 changes: 13 additions & 0 deletions test/performance/artifacts/api.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,16 @@ spec:
sandbox: null
apiProperties: []
status: null

---
apiVersion: dp.wso2.com/v1alpha2
kind: APIPolicy
metadata:
name: default-api-policy
spec:
default:
subscriptionValidation: true
targetRef:
group: dp.wso2.com
kind: API
name: default-api-definition-endpoint-test
35 changes: 35 additions & 0 deletions test/performance/artifacts/subscriptions.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
apiVersion: cp.wso2.com/v1alpha2
kind: Subscription
metadata:
name: perf-test-subscription
spec:
api:
name: "APIDefinitionEndpointDefault"
version: "3.14"
organization: "default"
subscriptionStatus: "UNBLOCKED"
---
apiVersion: cp.wso2.com/v1alpha2
kind: Application
metadata:
name: perf-test-application
spec:
name: "application1"
organization: "default"
owner: "admin"
securitySchemes:
oauth2:
environments:
- appId: "123-456-789"
envId: "Default"
keyType: "PRODUCTION"

---
apiVersion: cp.wso2.com/v1alpha2
kind: ApplicationMapping
metadata:
name: perf-test-application-mapping
spec:
applicationRef: "perf-test-application"
subscriptionRef: "perf-test-subscription"
---
50 changes: 50 additions & 0 deletions test/performance/deployment/deploy100subscriptions.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#!/bin/bash

for i in {101..1000}
do
result=$(echo "scale=0; $i/100" | bc)
echo "apiVersion: cp.wso2.com/v1alpha2
kind: Subscription
metadata:
name: perf-test-subscription-$i
spec:
api:
name: "APIDefinitionEndpointDefault"
version: \""3.14"\"
organization: "default"
subscriptionStatus: "UNBLOCKED"
---">>perf-test-subsciption-$result.yaml
done

for i in {101..1000}
do
result=$(echo "scale=0; $i/100" | bc)
echo "apiVersion: cp.wso2.com/v1alpha2
kind: Application
metadata:
name: perf-test-application-$i
spec:
name: "application-$i"
organization: "default"
owner: "admin"
securitySchemes:
oauth2:
environments:
- appId: "$(uuidgen)"
envId: "Default"
keyType: "PRODUCTION"
---">>perf-test-subsciption-$result.yaml
done

for i in {101..1000}
do
result=$(echo "scale=0; $i/100" | bc)
echo "apiVersion: cp.wso2.com/v1alpha2
kind: ApplicationMapping
metadata:
name: perf-test-application-mapping-$i
spec:
applicationRef: "perf-test-application-$i"
subscriptionRef: "perf-test-subscription-$i"
---">>perf-test-subsciption-$result.yaml
done
Loading

0 comments on commit 769cce3

Please sign in to comment.