Skip to content

Commit befaeea

Browse files
anpanigrANTARYAMI.PANIGRAHI@ORACLE.COMANTARYAMI.PANIGRAHI@ORACLE.COM
authored
Integration Test : JTA Service Migration (#2332)
* Integration Test : JTA Service Migration Co-authored-by: [email protected] <[email protected]> Co-authored-by: [email protected] <[email protected]>
1 parent fd69894 commit befaeea

File tree

2 files changed

+102
-8
lines changed

2 files changed

+102
-8
lines changed

integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMiiJmsRecovery.java renamed to integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMiiServiceMigration.java

Lines changed: 94 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
* a stopped pod/managed server to a live pod/managed server.
7272
* Configuration :
7373
* MII cluster domain with 2 managed servers
74-
* Two set of JMS Resources with FileStore and JDBC Store
74+
* Two sets of JMS Resources with FileStore and JDBC Store
7575
* All resources are targeted to cluster with enabled JMS service migration
7676
* Two Distributed Queue(s) one with FileStore and the other with JDBC Store
7777
* Separate ORACLE Datasource for cluster leasing
@@ -82,12 +82,14 @@
8282
* (d) Make sure all 100 messages got recovered once the
8383
* JMS Service@managed-server2 is migrated to managed-server1
8484
* Above steps are repeated for both FileStore and JDBCStore based Distributed Queue.
85+
* This test class verifies the JTA Service Migration with shutdown-recovery
86+
* migration policy by verifying the JTA Recovery Service runtime MBean
8587
*/
8688

8789
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
88-
@DisplayName("Test JMS service migration on cluster scale down")
90+
@DisplayName("Test JMS/JTA service migration on cluster scale down")
8991
@IntegrationTest
90-
class ItMiiJmsRecovery {
92+
class ItMiiServiceMigration {
9193

9294
private static String opNamespace = null;
9395
private static String domainNamespace = null;
@@ -175,7 +177,7 @@ public static void initAll(@Namespaces(2) List<String> namespaces) {
175177
createSecretForBaseImages(domainNamespace);
176178

177179
// create PV, PVC for logs/data
178-
createPV(pvName, domainUid, ItMiiJmsRecovery.class.getSimpleName());
180+
createPV(pvName, domainUid, ItMiiServiceMigration.class.getSimpleName());
179181
createPVC(pvName, pvcName, domainUid, domainNamespace);
180182

181183
// create job to change permissions on PV hostPath
@@ -289,6 +291,52 @@ public void testMiiJmsServiceMigrationWithJdbcStore() {
289291
"JdbcJmsServer@[email protected]");
290292
}
291293

294+
/**
295+
* Verify JTA Recovery Service is migrated to an available active server.
296+
* when a server is shutdown ( cluster is scaled down )
297+
* The MigrationPolicy on the ServerTemplate is set to 'shutdown-recovery'
298+
* so that the JTA recovery service is migrated to an active server in the
299+
* cluster when a server is shutdown. This can be checked by verifying the
300+
* JTARecoveryService runtime MBean for the stopped server in an active
301+
* server. For example say managed server ms2 is down, make sure that the JTA
302+
* recovery service for ms2 is active on the running managed server ms1
303+
* Also make sure that the JTA Recovery service (ms2) is migrated back to
304+
* server ms2 when the server ms2 is re-started.
305+
*/
306+
@Test
307+
@Order(3)
308+
@DisplayName("Verify JTA Recovery Service migration to an active server")
309+
public void testMiiJtaServiceMigration() {
310+
311+
// Restart the managed server(2) if shutdown by previous test method
312+
// Make sure that JTA Recovery service is active on managed-server2
313+
restartManagedServer("managed-server2");
314+
assertTrue(checkJtaRecoveryServiceRuntime("managed-server2", "managed-server2", "true"),
315+
"JTARecoveryService@managed-server2 is not on managed-server2 before migration");
316+
317+
// Stop the server managed-server2 by patching the cluster
318+
boolean psuccess = assertDoesNotThrow(() ->
319+
scaleCluster(domainUid, domainNamespace, "cluster-1", 1),
320+
String.format("replica patching to 1 failed for domain %s in namespace %s", domainUid, domainNamespace));
321+
assertTrue(psuccess,
322+
String.format("Cluster replica patching failed for domain %s in namespace %s", domainUid, domainNamespace));
323+
checkPodDoesNotExist(managedServerPrefix + "2", domainUid, domainNamespace);
324+
325+
assertTrue(checkJtaRecoveryServiceRuntime("managed-server1", "managed-server2", "true"),
326+
"JTA RecoveryService@managed-server2 is not migrated to managed-server1");
327+
logger.info("JTA RecoveryService@managed-server2 is migrated to managed-server1");
328+
329+
// Restart the managed server(2) to make sure the JTA Recovery Service is
330+
// migrated back to original hosting server
331+
restartManagedServer("managed-server2");
332+
assertTrue(checkJtaRecoveryServiceRuntime("managed-server2", "managed-server2", "true"),
333+
"JTARecoveryService@managed-server2 is not on managed-server2 after restart");
334+
logger.info("JTA RecoveryService@managed-server2 is migrated back to managed-server1");
335+
assertTrue(checkJtaRecoveryServiceRuntime("managed-server1", "managed-server2", "false"),
336+
"JTARecoveryService@managed-server2 is not deactivated on managed-server1 after restart");
337+
logger.info("JTA RecoveryService@managed-server2 is deactivated on managed-server1 after restart");
338+
}
339+
292340
private void restartManagedServer(String serverName) {
293341

294342
String commonParameters = " -d " + domainUid + " -n " + domainNamespace;
@@ -317,17 +365,18 @@ private void runJmsClientOnAdminPod(String action, String queue) {
317365
}
318366

319367
/*
320-
* Verify the JMS Server Runtime through rest API.
368+
* Verify the JMS Server Runtime through REST API.
321369
* Get the JMSServer Runtime ClusterJmsServer@managed-server2 found on
322370
* specified managed server.
323-
* @param managedServer name of managed server to look for JMSServerRuntime
324-
* @returns true if MBEAN is found otherwise false
371+
* @param managedServer name of the managed server to look for JMSServerRuntime
372+
* @returns true if MBean is found otherwise false
325373
**/
326374
private boolean checkJmsServerRuntime(String managedServer) {
327375
ExecResult result = null;
328376
int adminServiceNodePort
329377
= getServiceNodePort(domainNamespace, getExternalServicePodName(adminServerPodName), "default");
330-
StringBuffer curlString = new StringBuffer("status=$(curl --user weblogic:welcome1 ");
378+
StringBuffer curlString = new StringBuffer("status=$(curl --user "
379+
+ ADMIN_USERNAME_DEFAULT + ":" + ADMIN_PASSWORD_DEFAULT + " ");
331380
curlString.append("http://" + K8S_NODEPORT_HOST + ":" + adminServiceNodePort)
332381
.append("/management/weblogic/latest/domainRuntime/serverRuntimes/")
333382
.append(managedServer)
@@ -351,4 +400,41 @@ private boolean checkJmsServerRuntime(String managedServer) {
351400
return true;
352401
}
353402

403+
/*
404+
* Verify the JTA Recovery Service Runtime through REST API.
405+
* Get the JTA Recovery Service Runtime for a server on a
406+
* specified managed server.
407+
* @param managedServer name of the server to look for RecoveyServerRuntime
408+
* @param recoveryService name of RecoveyServerRuntime (managed server)
409+
* @param active is the recovery active (true or false )
410+
* @returns true if MBean is found otherwise false
411+
**/
412+
private boolean checkJtaRecoveryServiceRuntime(String managedServer, String recoveryService, String active) {
413+
ExecResult result = null;
414+
int adminServiceNodePort
415+
= getServiceNodePort(domainNamespace, getExternalServicePodName(adminServerPodName), "default");
416+
StringBuffer curlString = new StringBuffer("curl --user "
417+
+ ADMIN_USERNAME_DEFAULT + ":" + ADMIN_PASSWORD_DEFAULT + " ");
418+
curlString.append("\"http://" + K8S_NODEPORT_HOST + ":" + adminServiceNodePort)
419+
.append("/management/weblogic/latest/domainRuntime/serverRuntimes/")
420+
.append(managedServer)
421+
.append("/JTARuntime/recoveryRuntimeMBeans/")
422+
.append(recoveryService)
423+
.append("?fields=active&links=none\"")
424+
.append(" --show-error ");
425+
logger.info("checkJtaRecoveryServiceRuntime: curl command {0}", new String(curlString));
426+
withStandardRetryPolicy
427+
.conditionEvaluationListener(
428+
condition -> logger.info("Waiting for JTA Recovery Service to migrate "
429+
+ "(elapsed time {0} ms, remaining time {1} ms)",
430+
condition.getElapsedTimeInMS(),
431+
condition.getRemainingTimeInMS()))
432+
.until(assertDoesNotThrow(() -> {
433+
return () -> {
434+
return exec(new String(curlString), true).stdout().contains("{\"active\": " + active + "}");
435+
};
436+
}));
437+
return true;
438+
}
439+
354440
}

integration-tests/src/test/resources/wdt-models/jms.recovery.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,14 @@ topology:
55
"cluster-1":
66
DataSourceForAutomaticMigration: LeasingDataSource
77
AutoMigrationTableName: ACTIVE
8+
9+
ServerTemplate:
10+
"cluster-1-template":
11+
Cluster: 'cluster-1'
12+
JTAMigratableTarget:
13+
Cluster: 'cluster-1'
14+
MigrationPolicy: 'shutdown-recovery'
15+
StrictOwnershipCheck: true
816
resources:
917
FileStore:
1018
ClusterFileStore:

0 commit comments

Comments
 (0)