Skip to content

Commit f22dd54

Browse files
authored
Backport crio-pipeline PV exists issue when creating PV in release/3.4 (#2895)
* Backport crio-pipeline PV exists issue when creating PV in release/3.4
1 parent f48f793 commit f22dd54

File tree

9 files changed

+106
-25
lines changed

9 files changed

+106
-25
lines changed

integration-tests/src/test/java/oracle/weblogic/kubernetes/ItFmwSample.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import static oracle.weblogic.kubernetes.utils.FileUtils.replaceStringInFile;
4747
import static oracle.weblogic.kubernetes.utils.ImageUtils.createSecretForBaseImages;
4848
import static oracle.weblogic.kubernetes.utils.OperatorUtils.installAndVerifyOperator;
49+
import static oracle.weblogic.kubernetes.utils.PersistentVolumeUtils.deletePVPVCAndVerify;
4950
import static oracle.weblogic.kubernetes.utils.PodUtils.getExternalServicePodName;
5051
import static oracle.weblogic.kubernetes.utils.SecretUtils.createSecretWithUsernamePassword;
5152
import static oracle.weblogic.kubernetes.utils.ThreadSafeLogger.getLogger;
@@ -251,6 +252,9 @@ private void createPvPvc(String domainUid) {
251252
String pvName = domainUid + "-weblogic-sample-pv";
252253
String pvcName = domainUid + "-weblogic-sample-pvc";
253254

255+
// delete pv and pvc if exists
256+
deletePVPVCAndVerify(pvName, null, pvcName, domainNamespace);
257+
254258
Path pvpvcBase = Paths.get(tempSamplePath.toString(),
255259
"scripts/create-weblogic-domain-pv-pvc");
256260

integration-tests/src/test/java/oracle/weblogic/kubernetes/ItLBTwoDomainsApache.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import static oracle.weblogic.kubernetes.utils.LoadBalancerUtils.installAndVerifyApache;
5151
import static oracle.weblogic.kubernetes.utils.OperatorUtils.installAndVerifyOperator;
5252
import static oracle.weblogic.kubernetes.utils.PersistentVolumeUtils.createPVPVCAndVerify;
53+
import static oracle.weblogic.kubernetes.utils.PersistentVolumeUtils.getUniquePvOrPvcName;
5354
import static oracle.weblogic.kubernetes.utils.ThreadSafeLogger.getLogger;
5455
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
5556
import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -68,8 +69,8 @@ class ItLBTwoDomainsApache {
6869

6970
private static final int numberOfDomains = 2;
7071
private static final String wlSecretName = "weblogic-credentials";
71-
private static final String apachePvcName = "apache-custom-file-pvc";
72-
private static final String apachePvName = "apache-custom-file-pv";
72+
private static final String apachePvcName = getUniquePvOrPvcName("apache-custom-file-pvc");
73+
private static final String apachePvName = getUniquePvOrPvcName("apache-custom-file-pv");
7374

7475
private static List<String> domainUids = new ArrayList<>();
7576
private static String miiDomainUid = null;

integration-tests/src/test/java/oracle/weblogic/kubernetes/ItTwoDomainsManagedByTwoOperators.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@
107107
import static oracle.weblogic.kubernetes.utils.OperatorUtils.installAndVerifyOperator;
108108
import static oracle.weblogic.kubernetes.utils.PersistentVolumeUtils.createPVPVCAndVerify;
109109
import static oracle.weblogic.kubernetes.utils.PersistentVolumeUtils.createfixPVCOwnerContainer;
110+
import static oracle.weblogic.kubernetes.utils.PersistentVolumeUtils.getUniquePvOrPvcName;
110111
import static oracle.weblogic.kubernetes.utils.PodUtils.checkPodDoesNotExist;
111112
import static oracle.weblogic.kubernetes.utils.PodUtils.checkPodRestarted;
112113
import static oracle.weblogic.kubernetes.utils.PodUtils.getExternalServicePodName;
@@ -131,8 +132,8 @@ class ItTwoDomainsManagedByTwoOperators {
131132
private static final int numberOfDomains = 2;
132133
private static final int numberOfOperators = 2;
133134
private static final String wlSecretName = "weblogic-credentials";
134-
private static final String defaultSharingPvcName = "default-sharing-pvc";
135-
private static final String defaultSharingPvName = "default-sharing-pv";
135+
private static final String defaultSharingPvcName = getUniquePvOrPvcName("default-sharing-pvc");
136+
private static final String defaultSharingPvName = getUniquePvOrPvcName("default-sharing-pv");
136137

137138
private static String defaultNamespace = "default";
138139
private static String domain1Uid = null;
@@ -344,8 +345,8 @@ private void createTwoDomainsOnPVUsingWlstAndVerify() {
344345

345346
String domainUid = domainUids.get(i);
346347
String domainNamespace = domainNamespaces.get(i);
347-
String pvName = domainUid + "-pv-" + domainNamespace;
348-
String pvcName = domainUid + "-pvc";
348+
String pvName = getUniquePvOrPvcName(domainUid + "-pv-" + domainNamespace);
349+
String pvcName = getUniquePvOrPvcName(domainUid + "-pvc");
349350

350351
// create WebLogic credentials secret
351352
createSecretWithUsernamePassword(wlSecretName, domainNamespace, ADMIN_USERNAME_DEFAULT, ADMIN_PASSWORD_DEFAULT);

integration-tests/src/test/java/oracle/weblogic/kubernetes/ItWlsSamples.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
import static oracle.weblogic.kubernetes.utils.ImageUtils.createSecretForBaseImages;
5656
import static oracle.weblogic.kubernetes.utils.ImageUtils.dockerLoginAndPushImageToRegistry;
5757
import static oracle.weblogic.kubernetes.utils.OperatorUtils.installAndVerifyOperator;
58+
import static oracle.weblogic.kubernetes.utils.PersistentVolumeUtils.deletePVPVCAndVerify;
5859
import static oracle.weblogic.kubernetes.utils.PodUtils.checkPodDoesNotExist;
5960
import static oracle.weblogic.kubernetes.utils.PodUtils.checkPodExists;
6061
import static oracle.weblogic.kubernetes.utils.SecretUtils.createSecretWithUsernamePassword;
@@ -447,6 +448,9 @@ private void createPvPvc(String domainName) {
447448
String pvName = domainName + "-weblogic-sample-pv";
448449
String pvcName = domainName + "-weblogic-sample-pvc";
449450

451+
// delete pv and pvc if exists
452+
deletePVPVCAndVerify(pvName, null, pvcName, domainNamespace);
453+
450454
Path pvpvcBase = Paths.get(tempSamplePath.toString(),
451455
"scripts/create-weblogic-domain-pv-pvc");
452456

integration-tests/src/test/java/oracle/weblogic/kubernetes/assertions/TestAssertions.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -700,6 +700,17 @@ public static Callable<Boolean> pvcExists(String pvcName, String namespace) {
700700
return PersistentVolumeClaim.pvcExists(pvcName, namespace);
701701
}
702702

703+
/**
704+
* Check whether persistent volume claims with pvcName does NOT exist in the specified namespace.
705+
*
706+
* @param pvcName persistent volume claim to check
707+
* @param namespace the namespace in which the persistent volume claim to be checked
708+
* @return true if the persistent volume claim exists in the namespace, false otherwise
709+
*/
710+
public static Callable<Boolean> pvcNotExist(String pvcName, String namespace) {
711+
return PersistentVolumeClaim.pvcNotExist(pvcName, namespace);
712+
}
713+
703714
/**
704715
* Check whether the cluster role exists.
705716
*

integration-tests/src/test/java/oracle/weblogic/kubernetes/assertions/impl/PersistentVolumeClaim.java

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.util.List;
88
import java.util.concurrent.Callable;
99

10+
import io.kubernetes.client.openapi.ApiException;
1011
import io.kubernetes.client.openapi.models.V1PersistentVolumeClaim;
1112
import io.kubernetes.client.openapi.models.V1PersistentVolumeClaimList;
1213

@@ -20,26 +21,46 @@ public class PersistentVolumeClaim {
2021
* @return true if the persistent volume claim exists in the namespace, false otherwise
2122
*/
2223
public static Callable<Boolean> pvcExists(String pvcName, String namespace) {
23-
return () -> {
24+
return () -> doesPVCExist(pvcName, namespace);
25+
}
2426

25-
List<V1PersistentVolumeClaim> v1PersistentVolumeClaims = new ArrayList<>();
27+
/**
28+
* Check whether persistent volume claims with pvcName does NOT exist in the specified namespace.
29+
*
30+
* @param pvcName persistent volume claim to check
31+
* @param namespace the namespace in which the persistent volume claim to be checked
32+
* @return true if the persistent volume claim exists in the namespace, false otherwise
33+
*/
34+
public static Callable<Boolean> pvcNotExist(String pvcName, String namespace) {
35+
return () -> !doesPVCExist(pvcName, namespace);
36+
}
2637

27-
V1PersistentVolumeClaimList v1PersistentVolumeClaimList = Kubernetes.listPersistentVolumeClaims(namespace);
28-
if (v1PersistentVolumeClaimList != null) {
29-
v1PersistentVolumeClaims = v1PersistentVolumeClaimList.getItems();
30-
}
38+
/**
39+
* Check whether persistent volume claims with pvcName exists in the specified namespace.
40+
*
41+
* @param pvcName persistent volume claim to check
42+
* @param namespace the namespace in which the persistent volume claim to be checked
43+
* @return true if the persistent volume claim exists in the namespace, false otherwise
44+
* @throws ApiException throws API exception if Kubernetes api call fails
45+
*/
46+
public static boolean doesPVCExist(String pvcName, String namespace) throws ApiException {
47+
List<V1PersistentVolumeClaim> v1PersistentVolumeClaims = new ArrayList<>();
48+
49+
V1PersistentVolumeClaimList v1PersistentVolumeClaimList = Kubernetes.listPersistentVolumeClaims(namespace);
50+
if (v1PersistentVolumeClaimList != null) {
51+
v1PersistentVolumeClaims = v1PersistentVolumeClaimList.getItems();
52+
}
3153

32-
for (V1PersistentVolumeClaim v1PersistentVolumeClaim : v1PersistentVolumeClaims) {
33-
if (v1PersistentVolumeClaim.getMetadata() != null) {
34-
if (v1PersistentVolumeClaim.getMetadata().getName() != null) {
35-
if (v1PersistentVolumeClaim.getMetadata().getName().equals(pvcName)) {
36-
return true;
37-
}
54+
for (V1PersistentVolumeClaim v1PersistentVolumeClaim : v1PersistentVolumeClaims) {
55+
if (v1PersistentVolumeClaim.getMetadata() != null) {
56+
if (v1PersistentVolumeClaim.getMetadata().getName() != null) {
57+
if (v1PersistentVolumeClaim.getMetadata().getName().equals(pvcName)) {
58+
return true;
3859
}
3960
}
4061
}
62+
}
4163

42-
return false;
43-
};
64+
return false;
4465
}
4566
}

integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/CommonLBTestUtils.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
import static oracle.weblogic.kubernetes.utils.JobUtils.createJobAndWaitUntilComplete;
7878
import static oracle.weblogic.kubernetes.utils.PersistentVolumeUtils.createPVPVCAndVerify;
7979
import static oracle.weblogic.kubernetes.utils.PersistentVolumeUtils.createfixPVCOwnerContainer;
80+
import static oracle.weblogic.kubernetes.utils.PersistentVolumeUtils.getUniquePvOrPvcName;
8081
import static oracle.weblogic.kubernetes.utils.PodUtils.getExternalServicePodName;
8182
import static oracle.weblogic.kubernetes.utils.PodUtils.setPodAntiAffinity;
8283
import static oracle.weblogic.kubernetes.utils.SecretUtils.createSecretWithUsernamePassword;
@@ -123,8 +124,8 @@ public static void createMultipleDomainsSharingPVUsingWlstAndVerify(String domai
123124
createSecretWithUsernamePassword(wlSecretName, domainNamespace, ADMIN_USERNAME_DEFAULT, ADMIN_PASSWORD_DEFAULT);
124125
Path pvHostPath = get(PV_ROOT, testClassName, "sharing-persistentVolume");
125126

126-
String sharingPvName = domainNamespace + "-sharing-pv";
127-
String sharingPvcName = domainNamespace + "-sharing-pvc";
127+
String sharingPvName = getUniquePvOrPvcName(domainNamespace + "-sharing-pv");
128+
String sharingPvcName = getUniquePvOrPvcName(domainNamespace + "-sharing-pvc");
128129

129130
V1PersistentVolume v1pv = new V1PersistentVolume()
130131
.spec(new V1PersistentVolumeSpec()

integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/DomainUtils.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@
9696
import static oracle.weblogic.kubernetes.utils.JobUtils.createJobAndWaitUntilComplete;
9797
import static oracle.weblogic.kubernetes.utils.PersistentVolumeUtils.createPVPVCAndVerify;
9898
import static oracle.weblogic.kubernetes.utils.PersistentVolumeUtils.createfixPVCOwnerContainer;
99+
import static oracle.weblogic.kubernetes.utils.PersistentVolumeUtils.getUniquePvOrPvcName;
99100
import static oracle.weblogic.kubernetes.utils.PodUtils.checkPodDoesNotExist;
100101
import static oracle.weblogic.kubernetes.utils.PodUtils.setPodAntiAffinity;
101102
import static oracle.weblogic.kubernetes.utils.SecretUtils.createSecretWithUsernamePassword;
@@ -240,8 +241,8 @@ public static Domain createDomainOnPvUsingWdt(String domainUid,
240241

241242
int t3ChannelPort = getNextFreePort();
242243

243-
final String pvName = domainUid + "-pv"; // name of the persistent volume
244-
final String pvcName = domainUid + "-pvc"; // name of the persistent volume claim
244+
final String pvName = getUniquePvOrPvcName(domainUid + "-pv"); // name of the persistent volume
245+
final String pvcName = getUniquePvOrPvcName(domainUid + "-pvc"); // name of the persistent volume claim
245246

246247
// create pull secrets for WebLogic image when running in non Kind Kubernetes cluster
247248
// this secret is used only for non-kind cluster

integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/PersistentVolumeUtils.java

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,14 @@
3434
import static oracle.weblogic.kubernetes.actions.TestActions.createPersistentVolume;
3535
import static oracle.weblogic.kubernetes.actions.TestActions.createPersistentVolumeClaim;
3636
import static oracle.weblogic.kubernetes.actions.TestActions.deletePersistentVolume;
37+
import static oracle.weblogic.kubernetes.actions.TestActions.deletePersistentVolumeClaim;
3738
import static oracle.weblogic.kubernetes.actions.impl.UniqueName.random;
3839
import static oracle.weblogic.kubernetes.assertions.TestAssertions.pvExists;
3940
import static oracle.weblogic.kubernetes.assertions.TestAssertions.pvNotExists;
4041
import static oracle.weblogic.kubernetes.assertions.TestAssertions.pvcExists;
42+
import static oracle.weblogic.kubernetes.assertions.TestAssertions.pvcNotExist;
43+
import static oracle.weblogic.kubernetes.assertions.impl.PersistentVolume.doesPVExist;
44+
import static oracle.weblogic.kubernetes.assertions.impl.PersistentVolumeClaim.doesPVCExist;
4145
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.testUntil;
4246
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.withStandardRetryPolicy;
4347
import static oracle.weblogic.kubernetes.utils.ThreadSafeLogger.getLogger;
@@ -283,17 +287,50 @@ public static synchronized V1Container createfixPVCOwnerContainer(String pvName,
283287
return container;
284288
}
285289

290+
291+
/**
292+
* Delete PV and PVC and verify that they are deleted.
293+
* @param pvName pv name
294+
* @param labelSelector label selector for PV
295+
* @param pvcName pvc name
296+
* @param domainNamespace domain namespace where the pvc exists
297+
*/
298+
public static void deletePVPVCAndVerify(String pvName, String labelSelector, String pvcName, String domainNamespace) {
299+
// delete pvc first if exists
300+
if (assertDoesNotThrow(() -> doesPVCExist(pvcName, domainNamespace))) {
301+
deletePersistentVolumeClaim(pvcName, domainNamespace);
302+
}
303+
testUntil(
304+
assertDoesNotThrow(() -> pvcNotExist(pvName, domainNamespace),
305+
String.format("pvNotExists failed for pv %s", pvName)),
306+
getLogger(), "pv {0} to be deleted", pvName);
307+
308+
// delete pv first if exists
309+
if (assertDoesNotThrow(() -> doesPVExist(pvName, labelSelector))) {
310+
deletePersistentVolume(pvName);
311+
}
312+
testUntil(
313+
assertDoesNotThrow(() -> pvNotExists(pvName, labelSelector),
314+
String.format("pvNotExists failed for pv %s", pvName)),
315+
getLogger(), "pv {0} to be deleted", pvName);
316+
}
317+
286318
/**
287319
* Get a unique name for pv or pvc with a supplied prefix.
288320
* @param prefix prefix for pv or pvc name
321+
* @param suffix suffix for pv or pvc name
289322
* @return full pv or pvc name
290323
*/
291-
public static String getUniquePvOrPvcName(String prefix) {
324+
public static String getUniquePvOrPvcName(String prefix, String... suffix) {
292325
char[] name = new char[6];
293326
for (int i = 0; i < name.length; i++) {
294327
name[i] = (char) (random.nextInt(25) + (int) 'a');
295328
}
296329
String pvOrPvcName = prefix + new String(name);
330+
for (String s : suffix) {
331+
pvOrPvcName += s;
332+
}
333+
297334
getLogger().info("Creating unique pv|pvc name {0}", pvOrPvcName);
298335
return pvOrPvcName;
299336
}

0 commit comments

Comments
 (0)