-
Notifications
You must be signed in to change notification settings - Fork 281
Add a cli for server load test #3101
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Add a cli for server load test #3101
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #3101 +/- ##
============================================
+ Coverage 64.24% 69.43% +5.18%
- Complexity 10398 12538 +2140
============================================
Files 840 919 +79
Lines 71755 77911 +6156
Branches 8611 9309 +698
============================================
+ Hits 46099 54097 +7998
+ Misses 23004 20984 -2020
- Partials 2652 2830 +178 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
What's the difference between this test and the one we wrote with forge fire? Can we run the forgefire test on a one-node cluster if we wanted to verify performance of a single server? |
try { | ||
putBlobSizeDistributionMap.putAll(objectMapper.readValue(putBlobSizeDistribution, Map.class)); | ||
int previousSize = 0; | ||
for (String key : Arrays.asList("0.5", "0.75", "0.95", "0.999")) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is it possible that the distribution input is 0.3/0.6/0.9... Is this a valid input?
|
||
SSLFactory sslFactory = new NettySslHttp2Factory(new SSLConfig(verifiableProperties)); | ||
Http2ClientConfig http2ClientConfig = new Http2ClientConfig(verifiableProperties); | ||
connectionPool = |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What is connectionPool used for?
|
||
private void start() { | ||
connectionPool.start(); | ||
// Assume each operation is going to take 20 milliseconds to finish on average, which means one thread can execute |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Curious why 20ms? How to determine this
|
||
for (int i = 0; i < numThreads; i++) { | ||
try { | ||
loadTestThreads.get(i).join(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we need to set timeout for single thread?
Summary
Create a tool to generate synthetic load to a single ambry-server instance for testing. It can generate all get, put, delete, update ttl traffic at the desired qps, either at the same time, or separately. It doesn't provide any client side metric so all the performance result has to be observed from server side metric.
Testing Done
Use this tool to test a single server.