Skip to content

Commit ecf0c20

Browse files
committed
changes for review comments and merge with latest develop
2 parents fe772f1 + dffa7ca commit ecf0c20

File tree

18 files changed

+983
-94
lines changed

18 files changed

+983
-94
lines changed

integration-tests/src/test/java/oracle/kubernetes/operator/utils/Domain.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -993,15 +993,20 @@ private void callShellScriptByExecToPod(
993993
.append("'");
994994
logger.info("Command to call kubectl sh file " + cmdKubectlSh);
995995
ExecResult result = ExecCommand.exec(cmdKubectlSh.toString());
996-
if (result.exitValue() != 0) {
997-
throw new RuntimeException(
998-
"FAILURE: command " + cmdKubectlSh + " failed, returned " + result.stderr());
999-
}
1000-
String output = result.stdout().trim();
1001-
logger.info("Command returned " + output);
1002-
if (!output.contains("Deployment State : completed")) {
1003-
throw new RuntimeException("Failure: webapp deployment failed." + output);
1004-
}
996+
String resultStr =
997+
"Command= '"
998+
+ cmdKubectlSh
999+
+ "'"
1000+
+ ", exitValue="
1001+
+ result.exitValue()
1002+
+ ", stdout='"
1003+
+ result.stdout()
1004+
+ "'"
1005+
+ ", stderr='"
1006+
+ result.stderr()
1007+
+ "'";
1008+
if (result.exitValue() != 0 || !resultStr.contains("Deployment State : completed"))
1009+
throw new RuntimeException("FAILURE: webapp deploy failed - " + resultStr);
10051010
}
10061011

10071012
private void callWebAppAndWaitTillReady(String curlCmd) throws Exception {

integration-tests/src/test/resources/statedump.sh

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ function state_dump {
4242
kubectl get all,crd,cm,pv,pvc,ns,roles,rolebindings,clusterroles,clusterrolebindings,secrets --show-labels=true --all-namespaces=true > ${DUMP_DIR}/kgetmany.out
4343
kubectl get domains --show-labels=true --all-namespaces=true > ${DUMP_DIR}/kgetdomains.out
4444

45-
# Get all pod logs and redirect/copy to files
45+
# Get all pod logs/describes and redirect/copy to files
4646

4747
set +x
4848
local namespaces="`kubectl get namespaces | egrep -v -e "(STATUS|kube)" | awk '{ print $1 }'`"
@@ -63,13 +63,38 @@ function state_dump {
6363
done
6464
done
6565

66-
6766
mkdir -p $ARCHIVE_DIR || fail Could not archive, could not create target directory \'$ARCHIVE_DIR\'.
6867

69-
# use a run to archive PV, /sharedparent mounts to PV_ROOT in the K8S cluster
70-
echo "Archiving pv directory using a kubernetes run. Look for it on k8s cluster in $PV_ROOT/acceptance_test_pv_archive"
71-
local outfile=${DUMP_DIR}/archive_pv_run.out
68+
# Get various k8s resource describes and redirect/copy to files
69+
70+
set +x
71+
local ktype
72+
local kobj
73+
local fname
74+
for namespace in $namespaces; do
75+
for ktype in pod job deploy rs service pvc ingress cm secret domain; do
76+
for kobj in `kubectl get $ktype -n $namespace -o=jsonpath='{range .items[*]}{" "}{.metadata.name}{end}'`; do
77+
fname="${DUMP_DIR}/kubectl.describe.$ktype.$kobj.ns-$namespace"
78+
echo "Generating $fname"
79+
kubectl describe $ktype $kobj -n $namespace > $fname
80+
done
81+
done
82+
done
83+
84+
# treat pv differently as a pv is not namespaced:
85+
for ktype in pv; do
86+
for kobj in `kubectl get $ktype -o=jsonpath='{range .items[*]}{" "}{.metadata.name}{end}'`; do
87+
fname="${DUMP_DIR}/kubectl.describe.$ktype.$kobj"
88+
echo "Generating $fname"
89+
kubectl describe $ktype $kobj > $fname
90+
done
91+
done
92+
set -x
7293

94+
# use a job to archive PV, /scratch mounts to PV_ROOT in the K8S cluster
95+
echo "Archiving pv directory using a kubernetes job. Look for it on k8s cluster in $PV_ROOT/acceptance_test_pv_archive"
96+
local outfile=${DUMP_DIR}/archive_pv_job.out
97+
7398
if [ "$WERCKER" = "true" ]; then
7499
$SCRIPTPATH/job.sh "/scripts/archive.sh /scratch/acceptance_test_pv /scratch/acceptance_test_pv_archive" 2>&1 | tee ${outfile}
75100
if [ "$?" = "0" ]; then

operator/src/main/java/oracle/kubernetes/operator/DomainProcessorImpl.java

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -887,7 +887,13 @@ static Step createDomainUpPlan(DomainPresenceInfo info) {
887887
Step strategy =
888888
Step.chain(
889889
domainIntrospectionSteps(
890-
info, new DomainStatusStep(info, bringAdminServerUp(info, managedServerStrategy))));
890+
info,
891+
new DomainStatusStep(
892+
info,
893+
bringAdminServerUp(
894+
info,
895+
getPodAwaiterStepFactory(info.getNamespace()),
896+
managedServerStrategy))));
891897

892898
strategy =
893899
DomainStatusUpdater.createProgressingStep(
@@ -901,6 +907,10 @@ static Step createDomainUpPlan(DomainPresenceInfo info) {
901907
strategy);
902908
}
903909

910+
private static PodAwaiterStepFactory getPodAwaiterStepFactory(String namespace) {
911+
return Main.podWatchers.get(namespace);
912+
}
913+
904914
static Step createDomainDownPlan(DomainPresenceInfo info) {
905915
String ns = info.getNamespace();
906916
String domainUID = info.getDomainUID();
@@ -924,7 +934,7 @@ public UpHeadStep(DomainPresenceInfo info, Step next) {
924934

925935
@Override
926936
public NextAction apply(Packet packet) {
927-
PodWatcher pw = Main.podWatchers.get(info.getNamespace());
937+
PodWatcher pw = (PodWatcher) Main.podWatchers.get(info.getNamespace());
928938
info.setDeleting(false);
929939
packet
930940
.getComponents()
@@ -969,7 +979,7 @@ public DownHeadStep(DomainPresenceInfo info, String ns, Step next) {
969979
public NextAction apply(Packet packet) {
970980
info.setDeleting(true);
971981
unregisterStatusUpdater(ns, info.getDomainUID());
972-
PodWatcher pw = Main.podWatchers.get(ns);
982+
PodWatcher pw = (PodWatcher) Main.podWatchers.get(ns);
973983
packet
974984
.getComponents()
975985
.put(
@@ -991,8 +1001,9 @@ public NextAction apply(Packet packet) {
9911001

9921002
// pre-conditions: DomainPresenceInfo SPI
9931003
// "principal"
994-
private static Step bringAdminServerUp(DomainPresenceInfo info, Step next) {
995-
return Step.chain(bringAdminServerUpSteps(info, next));
1004+
static Step bringAdminServerUp(
1005+
DomainPresenceInfo info, PodAwaiterStepFactory podAwaiterStepFactory, Step next) {
1006+
return Step.chain(bringAdminServerUpSteps(info, podAwaiterStepFactory, next));
9961007
}
9971008

9981009
private static Step[] domainIntrospectionSteps(DomainPresenceInfo info, Step next) {
@@ -1007,10 +1018,11 @@ private static Step[] domainIntrospectionSteps(DomainPresenceInfo info, Step nex
10071018
next,
10081019
jws,
10091020
Main.isNamespaceStopping(dom.getMetadata().getNamespace())));
1010-
return resources.toArray(new Step[resources.size()]);
1021+
return resources.toArray(new Step[0]);
10111022
}
10121023

1013-
private static Step[] bringAdminServerUpSteps(DomainPresenceInfo info, Step next) {
1024+
private static Step[] bringAdminServerUpSteps(
1025+
DomainPresenceInfo info, PodAwaiterStepFactory podAwaiterStepFactory, Step next) {
10141026
List<Step> resources = new ArrayList<>();
10151027
resources.add(new BeforeAdminServiceStep(null));
10161028
resources.add(PodHelper.createAdminPodStep(null));
@@ -1024,8 +1036,8 @@ private static Step[] bringAdminServerUpSteps(DomainPresenceInfo info, Step next
10241036
}
10251037

10261038
resources.add(ServiceHelper.createForServerStep(null));
1027-
resources.add(new WatchPodReadyAdminStep(Main.podWatchers, next));
1028-
return resources.toArray(new Step[resources.size()]);
1039+
resources.add(new WatchPodReadyAdminStep(podAwaiterStepFactory, next));
1040+
return resources.toArray(new Step[0]);
10291041
}
10301042

10311043
private static Step bringManagedServersUp(Step next) {

operator/src/main/java/oracle/kubernetes/operator/JobWatcher.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,12 @@
1919
import oracle.kubernetes.operator.TuningParameters.WatchTuning;
2020
import oracle.kubernetes.operator.builders.WatchBuilder;
2121
import oracle.kubernetes.operator.builders.WatchI;
22-
import oracle.kubernetes.operator.helpers.CallBuilderFactory;
22+
import oracle.kubernetes.operator.helpers.CallBuilder;
2323
import oracle.kubernetes.operator.helpers.ResponseStep;
2424
import oracle.kubernetes.operator.logging.LoggingFacade;
2525
import oracle.kubernetes.operator.logging.LoggingFactory;
2626
import oracle.kubernetes.operator.logging.MessageKeys;
2727
import oracle.kubernetes.operator.watcher.WatchListener;
28-
import oracle.kubernetes.operator.work.ContainerResolver;
2928
import oracle.kubernetes.operator.work.NextAction;
3029
import oracle.kubernetes.operator.work.Packet;
3130
import oracle.kubernetes.operator.work.Step;
@@ -184,13 +183,10 @@ public NextAction apply(Packet packet) {
184183
completeCallbackRegistrations.put(metadata.getName(), complete);
185184

186185
// Timing window -- job may have come ready before registration for callback
187-
CallBuilderFactory factory =
188-
ContainerResolver.getInstance().getContainer().getSPI(CallBuilderFactory.class);
189186
fiber
190187
.createChildFiber()
191188
.start(
192-
factory
193-
.create()
189+
new CallBuilder()
194190
.readJobAsync(
195191
metadata.getName(),
196192
metadata.getNamespace(),

operator/src/main/java/oracle/kubernetes/operator/helpers/JobHelper.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import io.kubernetes.client.models.V1PodList;
1212
import io.kubernetes.client.models.V1Volume;
1313
import io.kubernetes.client.models.V1VolumeMount;
14-
import java.util.ArrayList;
1514
import java.util.List;
1615
import java.util.Map;
1716
import java.util.concurrent.atomic.AtomicBoolean;
@@ -98,7 +97,7 @@ protected List<V1VolumeMount> getAdditionalVolumeMounts() {
9897
List<V1EnvVar> getConfiguredEnvVars(TuningParameters tuningParameters) {
9998
// Pod for introspector job would use same environment variables as for admin server
10099
List<V1EnvVar> vars =
101-
new ArrayList<>(getDomain().getAdminServerSpec().getEnvironmentVariables());
100+
PodHelper.createCopy(getDomain().getAdminServerSpec().getEnvironmentVariables());
102101

103102
addEnvVar(vars, "NAMESPACE", getNamespace());
104103
addEnvVar(vars, "DOMAIN_UID", getDomainUID());

operator/src/main/java/oracle/kubernetes/operator/helpers/PodHelper.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ protected V1PodSpec createSpec(TuningParameters tuningParameters) {
116116

117117
@Override
118118
List<V1EnvVar> getConfiguredEnvVars(TuningParameters tuningParameters) {
119-
List<V1EnvVar> vars = new ArrayList<>(getServerSpec().getEnvironmentVariables());
119+
List<V1EnvVar> vars = createCopy(getServerSpec().getEnvironmentVariables());
120120
overrideContainerWeblogicEnvVars(vars);
121121
return vars;
122122
}
@@ -288,7 +288,7 @@ protected List<String> getContainerCommand() {
288288
@Override
289289
@SuppressWarnings("unchecked")
290290
List<V1EnvVar> getConfiguredEnvVars(TuningParameters tuningParameters) {
291-
List<V1EnvVar> envVars = (List<V1EnvVar>) packet.get(ProcessingConstants.ENVVARS);
291+
List<V1EnvVar> envVars = createCopy((List<V1EnvVar>) packet.get(ProcessingConstants.ENVVARS));
292292

293293
List<V1EnvVar> vars = new ArrayList<>();
294294
if (envVars != null) {
@@ -355,4 +355,14 @@ private Step deletePod(String name, String namespace, Step next) {
355355
.deletePodAsync(name, namespace, deleteOptions, new DefaultResponseStep<>(next));
356356
}
357357
}
358+
359+
public static List<V1EnvVar> createCopy(List<V1EnvVar> envVars) {
360+
ArrayList<V1EnvVar> copy = new ArrayList<>();
361+
if (envVars != null) {
362+
for (V1EnvVar envVar : envVars) {
363+
copy.add(new V1EnvVar().name(envVar.getName()).value(envVar.getValue()));
364+
}
365+
}
366+
return copy;
367+
}
358368
}

operator/src/main/java/oracle/kubernetes/operator/steps/WatchPodReadyAdminStep.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@
55
package oracle.kubernetes.operator.steps;
66

77
import io.kubernetes.client.models.V1Pod;
8-
import java.util.Map;
98
import oracle.kubernetes.operator.PodAwaiterStepFactory;
10-
import oracle.kubernetes.operator.PodWatcher;
119
import oracle.kubernetes.operator.ProcessingConstants;
1210
import oracle.kubernetes.operator.helpers.DomainPresenceInfo;
1311
import oracle.kubernetes.operator.wlsconfig.WlsDomainConfig;
@@ -17,11 +15,12 @@
1715
import oracle.kubernetes.operator.work.Step;
1816

1917
public class WatchPodReadyAdminStep extends Step {
20-
private final Map<String, PodWatcher> podWatchers;
2118

22-
public WatchPodReadyAdminStep(Map<String, PodWatcher> podWatchers, Step next) {
19+
private final PodAwaiterStepFactory podAwaiterStepFactory;
20+
21+
public WatchPodReadyAdminStep(PodAwaiterStepFactory podAwaiterStepFactory, Step next) {
2322
super(next);
24-
this.podWatchers = podWatchers;
23+
this.podAwaiterStepFactory = podAwaiterStepFactory;
2524
}
2625

2726
@Override
@@ -31,7 +30,7 @@ public NextAction apply(Packet packet) {
3130
(WlsDomainConfig) packet.get(ProcessingConstants.DOMAIN_TOPOLOGY);
3231
V1Pod adminPod = info.getServers().get(domainTopology.getAdminServerName()).getPod().get();
3332

34-
PodWatcher pw = podWatchers.get(adminPod.getMetadata().getNamespace());
33+
PodAwaiterStepFactory pw = podAwaiterStepFactory;
3534
packet
3635
.getComponents()
3736
.put(

0 commit comments

Comments
 (0)