Skip to content

Commit 2321ae2

Browse files
Search concurrent test in 512 MB heap size
Signed-off-by: Bharathwaj G <bharath78910@gmail.com>
1 parent 12ac2a8 commit 2321ae2

2 files changed

Lines changed: 96 additions & 8 deletions

File tree

client/rest-high-level/src/test/java/org/opensearch/client/PitIT.java

Lines changed: 94 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,26 @@
1111
import org.apache.http.client.methods.HttpPost;
1212
import org.apache.http.client.methods.HttpPut;
1313
import org.opensearch.OpenSearchStatusException;
14-
import org.opensearch.action.search.CreatePitRequest;
15-
import org.opensearch.action.search.CreatePitResponse;
16-
import org.opensearch.action.search.DeletePitInfo;
17-
import org.opensearch.action.search.DeletePitRequest;
18-
import org.opensearch.action.search.DeletePitResponse;
19-
import org.opensearch.action.search.GetAllPitNodesResponse;
14+
import org.opensearch.action.search.*;
2015
import org.opensearch.common.unit.TimeValue;
2116
import org.opensearch.core.action.ActionListener;
2217
import org.junit.Before;
18+
import org.opensearch.monitor.jvm.JvmInfo;
2319

2420
import java.io.IOException;
21+
import java.lang.management.ManagementFactory;
22+
import java.lang.management.MemoryMXBean;
2523
import java.util.ArrayList;
24+
import java.util.LinkedList;
2625
import java.util.List;
2726
import java.util.concurrent.CountDownLatch;
27+
import java.util.concurrent.CyclicBarrier;
2828
import java.util.concurrent.TimeUnit;
29+
import java.util.concurrent.atomic.AtomicInteger;
2930
import java.util.stream.Collectors;
3031

32+
import static org.hamcrest.Matchers.containsString;
33+
3134
/**
3235
* Tests point in time API with rest high level client
3336
*/
@@ -72,6 +75,91 @@ public void testCreateAndDeletePit() throws IOException {
7275
assertTrue(deletePitResponse.getDeletePitResults().get(0).getPitId().equals(createPitResponse.getId()));
7376
}
7477

78+
public void testMaxRunningAsynchronousSearchContexts1() throws Exception {
79+
JvmInfo jvmInfo = JvmInfo.jvmInfo();
80+
//ByteSizeValue maxHeapSize = jvmInfo.getMem().getHeapMax();
81+
String useCompressedOops = jvmInfo.useCompressedOops();
82+
MemoryMXBean MEMORY_MX_BEAN = ManagementFactory.getMemoryMXBean();
83+
double size =MEMORY_MX_BEAN.getHeapMemoryUsage().getUsed();
84+
logger.info("USED size here : {}", MEMORY_MX_BEAN.getHeapMemoryUsage().getUsed()/1024/1024);
85+
logger.info("heap size [{}], compressed ordinary object pointers [{}]", JvmInfo.jvmInfo().getMem().getHeapMax(), useCompressedOops);
86+
try {
87+
int numThreads = 50;
88+
List<Thread> threadsList = new LinkedList<>();
89+
logger.info(threadsList.size());
90+
CyclicBarrier barrier = new CyclicBarrier(numThreads + 1);
91+
for (int i = 0; i < numThreads; i++) {
92+
threadsList.add(new Thread(() -> {
93+
try {
94+
SearchRequest validRequest = new SearchRequest();
95+
validRequest.indices("index");
96+
//validRequest.keepAlive(TimeValue.timeValueHours(1));
97+
logger.info("USED size before : {}", MEMORY_MX_BEAN.getHeapMemoryUsage().getUsed() / 1024 / 1024);
98+
//client
99+
100+
SearchResponse searchResponse = execute(validRequest, highLevelClient()::search, highLevelClient()::searchAsync);
101+
assertNotNull(searchResponse);
102+
logger.info("USED size after : {}", MEMORY_MX_BEAN.getHeapMemoryUsage().getUsed() / 1024 / 1024);
103+
} catch (IOException e) {
104+
fail("submit request failed");
105+
} finally {
106+
try {
107+
108+
barrier.await();
109+
} catch (Exception e) {
110+
fail();
111+
}
112+
}
113+
}
114+
));
115+
}
116+
threadsList.forEach(Thread::start);
117+
barrier.await();
118+
for (Thread thread : threadsList) {
119+
logger.info("USED size thread : {}", MEMORY_MX_BEAN.getHeapMemoryUsage().getUsed() / 1024 / 1024);
120+
thread.join();
121+
}
122+
123+
124+
//updateClusterSettings(AsynchronousSearchActiveStore.NODE_CONCURRENT_RUNNING_SEARCHES_SETTING.getKey(), 0);
125+
threadsList.clear();
126+
AtomicInteger numFailures = new AtomicInteger();
127+
for (int i = 0; i < numThreads; i++) {
128+
threadsList.add(new Thread(() -> {
129+
try {
130+
SearchRequest validRequest = new SearchRequest();
131+
//validRequest.waitForCompletionTimeout(TimeValue.timeValueMillis(1));
132+
SearchResponse searchResponse = execute(validRequest, highLevelClient()::search, highLevelClient()::searchAsync);
133+
} catch (Exception e) {
134+
assertTrue(e instanceof ResponseException);
135+
assertThat(e.getMessage(), containsString("Trying to create too many concurrent searches"));
136+
numFailures.getAndIncrement();
137+
138+
} finally {
139+
try {
140+
numFailures.getAndIncrement();
141+
barrier.await();
142+
} catch (Exception e) {
143+
fail();
144+
}
145+
}
146+
}
147+
));
148+
}
149+
threadsList.forEach(Thread::start);
150+
barrier.await();
151+
for (Thread thread : threadsList) {
152+
thread.join();
153+
}
154+
assertEquals(numFailures.get(), 50);
155+
// updateClusterSettings(AsynchronousSearchActiveStore.NODE_CONCURRENT_RUNNING_SEARCHES_SETTING.getKey(),
156+
// AsynchronousSearchActiveStore.NODE_CONCURRENT_RUNNING_SEARCHES);
157+
} catch (Exception e) {
158+
logger.info("========== EXCEPTION : " + e.getMessage());
159+
logger.info("============== USED SIZE : " + MEMORY_MX_BEAN.getHeapMemoryUsage().getUsed() / 1024 / 1024);
160+
}
161+
}
162+
75163
public void testDeleteAllAndListAllPits() throws IOException, InterruptedException {
76164
CreatePitRequest pitRequest = new CreatePitRequest(new TimeValue(1, TimeUnit.DAYS), true, "index");
77165
CreatePitResponse pitResponse = execute(pitRequest, highLevelClient()::createPit, highLevelClient()::createPitAsync);

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@
1313
org.gradle.caching=true
1414
org.gradle.warning.mode=none
1515
org.gradle.parallel=true
16-
org.gradle.jvmargs=-Xmx3g -XX:+HeapDumpOnOutOfMemoryError -Xss2m \
16+
org.gradle.jvmargs=-Xmx512M -XX:+HeapDumpOnOutOfMemoryError -Xss2m \
1717
--add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED \
1818
--add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED \
1919
--add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED \
2020
--add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED \
2121
--add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
22-
options.forkOptions.memoryMaximumSize=3g
22+
options.forkOptions.memoryMaximumSize=512M
2323

2424
# Disable Gradle Enterprise Gradle plugin's test retry
2525
systemProp.gradle.enterprise.testretry.enabled=false

0 commit comments

Comments
 (0)