Skip to content

Commit 1f064f0

Browse files
committed
Bug 38126872 - Build: Intermittent failure topics.TopicsStorageRecoveryTests.shouldRecoverAfterCleanStorageRestart
(merge 14.1.1-2206 -> ce/22.06 117162) [git-p4: depot-paths = "//dev/coherence-ce/release/coherence-ce-v22.06/": change = 117163]
1 parent 5417392 commit 1f064f0

File tree

3 files changed

+43
-81
lines changed

3 files changed

+43
-81
lines changed

prj/test/functional/topics/src/main/java/topics/AbstractTopicsStorageRecoveryTests.java

Lines changed: 43 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.oracle.bedrock.runtime.coherence.options.OperationalOverride;
2323
import com.oracle.bedrock.runtime.coherence.options.RoleName;
2424
import com.oracle.bedrock.runtime.coherence.options.WellKnownAddress;
25+
import com.oracle.bedrock.runtime.java.features.JmxFeature;
2526
import com.oracle.bedrock.runtime.java.options.SystemProperty;
2627
import com.oracle.bedrock.runtime.options.DisplayName;
2728
import com.oracle.bedrock.runtime.options.StabilityPredicate;
@@ -51,9 +52,10 @@
5152
import org.junit.Test;
5253
import org.junit.rules.TestName;
5354
import topics.callables.GetTopicServiceName;
54-
import topics.callables.ResumeService;
55-
import topics.callables.SuspendService;
5655

56+
import javax.management.MBeanInfo;
57+
import javax.management.MBeanServerConnection;
58+
import javax.management.ObjectName;
5759
import java.io.DataInput;
5860
import java.io.DataOutput;
5961
import java.io.File;
@@ -84,7 +86,7 @@
8486
* enabled and is removed via a clean shutdown (as would happen in k8s
8587
* using the operator).
8688
*/
87-
@SuppressWarnings("CallToPrintStackTrace")
89+
@SuppressWarnings({"CallToPrintStackTrace", "resource"})
8890
public abstract class AbstractTopicsStorageRecoveryTests
8991
{
9092
@Before
@@ -350,8 +352,7 @@ optComplete, withIdentifyingName(sName)))
350352

351353
// Suspend the services - we do this via the storage member like the Operator would
352354
Logger.info(">>>> Suspending service " + sServiceName + " published=" + cPublished.get());
353-
Boolean fSuspended = member.invoke(new SuspendService(sServiceName));
354-
assertThat(fSuspended, is(true));
355+
suspendService(sServiceName);
355356
Logger.info(">>>> Suspended service " + sServiceName + " published=" + cPublished.get());
356357

357358
// shutdown the storage members
@@ -368,10 +369,7 @@ optComplete, withIdentifyingName(sName)))
368369

369370
// The cache service should still be suspended so resume it via a storage member like the operator would
370371
Logger.info(">>>> Resuming service " + sServiceName + " published=" + cPublished.get());
371-
member = s_storageCluster.stream().findAny().orElse(null);
372-
assertThat(member, is(notNullValue()));
373-
Boolean fResumed = member.invoke(new ResumeService(sServiceName));
374-
assertThat(fResumed, is(true));
372+
resumeService(sServiceName);
375373
Logger.info(">>>> Resumed service " + sServiceName + " published=" + cPublished.get());
376374
Logger.info(">>>> Awake. published=" + cPublished.get());
377375

@@ -396,7 +394,7 @@ optComplete, withIdentifyingName(sName)))
396394
{
397395
CoherenceClusterMember member = s_storageCluster.stream().findAny().orElse(null);
398396
assertThat(member, is(notNullValue()));
399-
member.submit(new ResumeService(sServiceName)).get(1, TimeUnit.MINUTES);
397+
resumeService(sServiceName);
400398
CompletableFuture.runAsync(publisher::close).get(1, TimeUnit.MINUTES);
401399
}
402400
}
@@ -429,8 +427,7 @@ public void shouldRecoverWaitingSubscriberAfterCleanStorageRestart() throws Exce
429427

430428
// Suspend the services - we do this via the storage member like the Operator would
431429
Logger.info(">>>> Suspending service " + sServiceName);
432-
Boolean fSuspended = member.invoke(new SuspendService(sServiceName));
433-
assertThat(fSuspended, is(true));
430+
suspendService(sServiceName);
434431
Logger.info(">>>> Suspended service " + sServiceName);
435432

436433
// futures should not be completed
@@ -455,10 +452,7 @@ public void shouldRecoverWaitingSubscriberAfterCleanStorageRestart() throws Exce
455452

456453
// The topics cache service should still be suspended so resume it via a storage member like the operator would
457454
Logger.info(">>>> Resuming service " + sServiceName);
458-
member = s_storageCluster.stream().findAny().orElse(null);
459-
assertThat(member, is(notNullValue()));
460-
Boolean fResumed = member.invoke(new ResumeService(sServiceName));
461-
assertThat(fResumed, is(true));
455+
resumeService(sServiceName);
462456
Logger.info(">>>> Resumed service " + sServiceName);
463457

464458
// futures should not be completed
@@ -501,6 +495,37 @@ public void shouldRecoverWaitingSubscriberAfterCleanStorageRestart() throws Exce
501495

502496
// ----- helper methods -------------------------------------------------
503497

498+
protected void suspendService(String sServiceName) throws Exception
499+
{
500+
CoherenceCluster cluster = s_storageCluster;
501+
CoherenceClusterMember member = cluster.getAny();
502+
JmxFeature jmxFeature = member.get(JmxFeature.class);
503+
assertThat(jmxFeature, is(notNullValue()));
504+
505+
MBeanServerConnection connection = jmxFeature.getDeferredJMXConnector().get().getMBeanServerConnection();
506+
ObjectName objectName = new ObjectName("Coherence:type=Cluster");
507+
MBeanInfo info = connection.getMBeanInfo(objectName);
508+
assertThat(info, is(notNullValue()));
509+
510+
connection.invoke(objectName, "suspendService", new Object[]{sServiceName}, new String[]{"java.lang.String"});
511+
}
512+
513+
protected void resumeService(String sServiceName) throws Exception
514+
{
515+
CoherenceCluster cluster = s_storageCluster;
516+
CoherenceClusterMember member = cluster.getAny();
517+
JmxFeature jmxFeature = member.get(JmxFeature.class);
518+
assertThat(jmxFeature, is(notNullValue()));
519+
520+
MBeanServerConnection connection = jmxFeature.getDeferredJMXConnector().get().getMBeanServerConnection();
521+
ObjectName objectName = new ObjectName("Coherence:type=Cluster");
522+
MBeanInfo info = connection.getMBeanInfo(objectName);
523+
assertThat(info, is(notNullValue()));
524+
525+
connection.invoke(objectName, "resumeService", new Object[]{sServiceName}, new String[]{"java.lang.String"});
526+
}
527+
528+
504529
protected void restartCluster()
505530
{
506531
Logger.info(">>>> Stopping storage.");
@@ -549,6 +574,7 @@ private CoherenceCluster startCluster(String suffix)
549574
Logging.atMax(),
550575
JMXManagementMode.ALL,
551576
DisplayName.of(sMethodName + '-' + suffix),
577+
JmxFeature.enabled(),
552578
s_testLogs.builder());
553579

554580
builder.with(ClusterName.of(sMethodName),
@@ -661,7 +687,7 @@ public int hashCode()
661687
@ClassRule
662688
public static TestLogs s_testLogs = new TestLogs(TopicsRecoveryTests.class);
663689

664-
protected static CoherenceCluster s_storageCluster;
690+
protected static volatile CoherenceCluster s_storageCluster;
665691

666692
/**
667693
* A JUnit rule that will cause the test to fail if it runs too long.

prj/test/functional/topics/src/main/java/topics/callables/ResumeService.java

Lines changed: 0 additions & 32 deletions
This file was deleted.

prj/test/functional/topics/src/main/java/topics/callables/SuspendService.java

Lines changed: 0 additions & 32 deletions
This file was deleted.

0 commit comments

Comments
 (0)