Skip to content

Commit d73d9a8

Browse files
authored
Merge pull request #130 from russgold/watch-builder
Use WatchBuilder to create Watch objects
2 parents 770459b + f86a7fe commit d73d9a8

File tree

11 files changed

+613
-137
lines changed

11 files changed

+613
-137
lines changed

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

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@
33

44
package oracle.kubernetes.operator;
55

6-
import java.util.concurrent.atomic.AtomicBoolean;
7-
8-
import com.google.gson.reflect.TypeToken;
96
import io.kubernetes.client.ApiException;
107
import io.kubernetes.client.util.Watch;
118
import oracle.kubernetes.operator.domain.model.oracle.kubernetes.weblogic.domain.v1.Domain;
129
import oracle.kubernetes.operator.helpers.ClientHelper;
1310
import oracle.kubernetes.operator.helpers.ClientHolder;
11+
import oracle.kubernetes.operator.builders.WatchBuilder;
1412
import oracle.kubernetes.operator.watcher.Watcher;
1513
import oracle.kubernetes.operator.watcher.Watching;
1614
import oracle.kubernetes.operator.watcher.WatchingEventDestination;
1715

16+
import java.util.concurrent.atomic.AtomicBoolean;
17+
1818
/**
1919
* This class handles Domain watching. It receives domain events and sends
2020
* them into the operator for processing.
@@ -73,14 +73,9 @@ protected Watching<Domain> createWatching(ClientHolder client) {
7373
*/
7474
@Override
7575
public Watch<Domain> initiateWatch(Object context, String resourceVersion) throws ApiException {
76-
return Watch.createWatch(client.getApiClient(),
77-
client.callBuilder().with($ -> {
78-
$.resourceVersion = resourceVersion;
79-
$.timeoutSeconds = 30;
80-
$.watch = true;
81-
}).listDomainCall(ns),
82-
new TypeToken<Watch.Response<Domain>>() {
83-
}.getType());
76+
return new WatchBuilder(client)
77+
.withResourceVersion(resourceVersion)
78+
.createDomainsInNamespaceWatch(ns);
8479
}
8580

8681
@Override

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

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,20 @@
33

44
package oracle.kubernetes.operator;
55

6-
import java.util.Map;
7-
import java.util.concurrent.atomic.AtomicBoolean;
8-
9-
import com.google.gson.reflect.TypeToken;
106
import io.kubernetes.client.ApiException;
117
import io.kubernetes.client.models.V1ObjectMeta;
128
import io.kubernetes.client.models.V1beta1Ingress;
139
import io.kubernetes.client.util.Watch;
1410
import oracle.kubernetes.operator.helpers.ClientHelper;
1511
import oracle.kubernetes.operator.helpers.ClientHolder;
12+
import oracle.kubernetes.operator.builders.WatchBuilder;
1613
import oracle.kubernetes.operator.watcher.Watcher;
1714
import oracle.kubernetes.operator.watcher.Watching;
1815
import oracle.kubernetes.operator.watcher.WatchingEventDestination;
1916

17+
import java.util.Map;
18+
import java.util.concurrent.atomic.AtomicBoolean;
19+
2020
/**
2121
* This class handles Ingress watching. It receives Ingress change events and sends
2222
* them into the operator for processing.
@@ -75,15 +75,10 @@ protected Watching<V1beta1Ingress> createWatching(ClientHolder client) {
7575
*/
7676
@Override
7777
public Watch<V1beta1Ingress> initiateWatch(Object context, String resourceVersion) throws ApiException {
78-
return Watch.createWatch(client.getApiClient(),
79-
client.callBuilder().with($ -> {
80-
$.resourceVersion = resourceVersion;
81-
$.labelSelector = LabelConstants.DOMAINUID_LABEL; // Any Ingress with a domainUID label
82-
$.timeoutSeconds = 30;
83-
$.watch = true;
84-
}).listIngressCall(ns),
85-
new TypeToken<Watch.Response<V1beta1Ingress>>() {
86-
}.getType());
78+
return new WatchBuilder(client)
79+
.withResourceVersion(resourceVersion)
80+
.withLabelSelector(LabelConstants.DOMAINUID_LABEL) // Any Ingress with a domainUID label
81+
.createIngressWatch(ns);
8782
}
8883

8984
@Override

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

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,6 @@
22
// Licensed under the Universal Permissive License v 1.0 as shown at http://oss.oracle.com/licenses/upl.
33
package oracle.kubernetes.operator;
44

5-
import java.util.List;
6-
import java.util.Map;
7-
import java.util.concurrent.ConcurrentHashMap;
8-
import java.util.concurrent.ConcurrentMap;
9-
import java.util.concurrent.atomic.AtomicBoolean;
10-
11-
import com.google.gson.reflect.TypeToken;
12-
135
import io.kubernetes.client.ApiException;
146
import io.kubernetes.client.models.V1ObjectMeta;
157
import io.kubernetes.client.models.V1Pod;
@@ -23,13 +15,20 @@
2315
import oracle.kubernetes.operator.logging.LoggingFacade;
2416
import oracle.kubernetes.operator.logging.LoggingFactory;
2517
import oracle.kubernetes.operator.logging.MessageKeys;
18+
import oracle.kubernetes.operator.builders.WatchBuilder;
2619
import oracle.kubernetes.operator.watcher.Watcher;
2720
import oracle.kubernetes.operator.watcher.Watching;
2821
import oracle.kubernetes.operator.watcher.WatchingEventDestination;
2922
import oracle.kubernetes.operator.work.NextAction;
3023
import oracle.kubernetes.operator.work.Packet;
3124
import oracle.kubernetes.operator.work.Step;
3225

26+
import java.util.List;
27+
import java.util.Map;
28+
import java.util.concurrent.ConcurrentHashMap;
29+
import java.util.concurrent.ConcurrentMap;
30+
import java.util.concurrent.atomic.AtomicBoolean;
31+
3332
/**
3433
* Watches for Pods to become Ready or leave Ready state
3534
*
@@ -101,15 +100,10 @@ private Watching<V1Pod> createWatching(ClientHolder client) {
101100
*/
102101
@Override
103102
public Watch<V1Pod> initiateWatch(Object context, String resourceVersion) throws ApiException {
104-
return Watch.createWatch(client.getApiClient(),
105-
client.callBuilder().with($ -> {
106-
$.resourceVersion = resourceVersion;
107-
$.labelSelector = LabelConstants.DOMAINUID_LABEL; // Any Pod with a domainUID label
108-
$.timeoutSeconds = 30;
109-
$.watch = true;
110-
}).listPodCall(ns),
111-
new TypeToken<Watch.Response<V1Pod>>() {
112-
}.getType());
103+
return new WatchBuilder(client)
104+
.withResourceVersion(resourceVersion)
105+
.withLabelSelector(LabelConstants.DOMAINUID_LABEL) // Any Pod with a domainUID label
106+
.createPodWatch(ns);
113107
}
114108

115109
@Override

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

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,20 @@
33

44
package oracle.kubernetes.operator;
55

6-
import java.util.Map;
7-
import java.util.concurrent.atomic.AtomicBoolean;
8-
9-
import com.google.gson.reflect.TypeToken;
106
import io.kubernetes.client.ApiException;
117
import io.kubernetes.client.models.V1ObjectMeta;
12-
import io.kubernetes.client.models.V1Pod;
138
import io.kubernetes.client.models.V1Service;
149
import io.kubernetes.client.util.Watch;
1510
import oracle.kubernetes.operator.helpers.ClientHelper;
1611
import oracle.kubernetes.operator.helpers.ClientHolder;
12+
import oracle.kubernetes.operator.builders.WatchBuilder;
1713
import oracle.kubernetes.operator.watcher.Watcher;
1814
import oracle.kubernetes.operator.watcher.Watching;
1915
import oracle.kubernetes.operator.watcher.WatchingEventDestination;
2016

17+
import java.util.Map;
18+
import java.util.concurrent.atomic.AtomicBoolean;
19+
2120
/**
2221
* This class handles Service watching. It service change events and sends
2322
* them into the operator for processing.
@@ -76,15 +75,10 @@ protected Watching<V1Service> createWatching(ClientHolder client) {
7675
*/
7776
@Override
7877
public Watch<V1Service> initiateWatch(Object context, String resourceVersion) throws ApiException {
79-
return Watch.createWatch(client.getApiClient(),
80-
client.callBuilder().with($ -> {
81-
$.resourceVersion = resourceVersion;
82-
$.labelSelector = LabelConstants.DOMAINUID_LABEL; // Any Service with a domainUID label
83-
$.timeoutSeconds = 30;
84-
$.watch = true;
85-
}).listServiceCall(ns),
86-
new TypeToken<Watch.Response<V1Service>>() {
87-
}.getType());
78+
return new WatchBuilder(client)
79+
.withResourceVersion(resourceVersion)
80+
.withLabelSelector(LabelConstants.DOMAINUID_LABEL) // Any Service with a domainUID label
81+
.createServiceWatch(ns);
8882
}
8983

9084
@Override
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
// Copyright 2018, Oracle Corporation and/or its affiliates. All rights reserved.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at http://oss.oracle.com/licenses/upl.
3+
package oracle.kubernetes.operator.builders;
4+
5+
import io.kubernetes.client.ProgressRequestBody;
6+
import io.kubernetes.client.ProgressResponseBody;
7+
8+
public interface CallParams {
9+
/**
10+
* Returns a boolean indicating whether partially initialized results should be included in the response.
11+
* @return the current setting of the parameter. Defaults to including everything.
12+
*/
13+
Boolean getIncludeUninitialized();
14+
15+
/**
16+
* Returns the limit on the number of updates to send in a single reply.
17+
* @return the current setting of the parameter. Defaults to 500.
18+
*/
19+
Integer getLimit();
20+
21+
/**
22+
* Returns the timeout for the call.
23+
* @return the current setting. Defaults to 30 seconds.
24+
*/
25+
Integer getTimeoutSeconds();
26+
27+
/**
28+
* Returns a selector to limit results to those with matching fields.
29+
* @return the option, if specified. Defaults to null, indicating no record filtering.
30+
*/
31+
String getFieldSelector();
32+
33+
/**
34+
* Returns a selector to limit results to those with matching labels.
35+
* @return the option, if specified. Defaults to null, indicating no record filtering.
36+
*/
37+
String getLabelSelector();
38+
39+
/**
40+
* Returns the &#39;pretty-print&#39; option to be sent. If &#39;true&#39;, then the output is pretty printed.
41+
* @return the option, if specified. Defaults to null.
42+
*/
43+
String getPretty();
44+
45+
/**
46+
* On a watch call: when specified, shows changes that occur after that particular version of a resource.
47+
* Defaults to changes from the beginning of history.
48+
* On a list call: when specified, requests values at least as recent as the specified value.
49+
* Defaults to returning the result from remote storage based on quorum-read flag;
50+
* - if it&#39;s 0, then we simply return what we currently have in cache, no guarantee;
51+
* - if set to non zero, then the result is at least as fresh as given version.
52+
* @return the current setting. Defaults to null.
53+
*/
54+
String getResourceVersion();
55+
56+
/**
57+
* Returns a listener for responses received, to specify on calls.
58+
* @return the set listener. Defaults to null.
59+
*/
60+
ProgressResponseBody.ProgressListener getProgressListener();
61+
62+
/**
63+
* Returns a listener for requests sent, to specify on calls.
64+
* @return the set listener. Defaults to null.
65+
*/
66+
ProgressRequestBody.ProgressRequestListener getProgressRequestListener();
67+
}
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
// Copyright 2018, Oracle Corporation and/or its affiliates. All rights reserved.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at http://oss.oracle.com/licenses/upl.
3+
package oracle.kubernetes.operator.builders;
4+
5+
import io.kubernetes.client.ProgressRequestBody;
6+
import io.kubernetes.client.ProgressResponseBody;
7+
8+
/**
9+
* An object which encapsulates common parameters for Kubernetes API calls.
10+
*/
11+
class CallParamsImpl implements CallParams {
12+
private static final int DEFAULT_LIMIT = 500;
13+
private static final int DEFAULT_TIMEOUT = 30;
14+
15+
private Boolean includeUninitialized;
16+
private Integer limit = CallParamsImpl.DEFAULT_LIMIT;
17+
private Integer timeoutSeconds = CallParamsImpl.DEFAULT_TIMEOUT;
18+
private String fieldSelector;
19+
private String labelSelector;
20+
private String pretty;
21+
private String resourceVersion;
22+
private ProgressResponseBody.ProgressListener progressListener;
23+
private ProgressRequestBody.ProgressRequestListener progressRequestListener;
24+
25+
@Override
26+
public Boolean getIncludeUninitialized() {
27+
return includeUninitialized;
28+
}
29+
30+
@Override
31+
public Integer getLimit() {
32+
return limit;
33+
}
34+
35+
@Override
36+
public Integer getTimeoutSeconds() {
37+
return timeoutSeconds;
38+
}
39+
40+
@Override
41+
public String getFieldSelector() {
42+
return fieldSelector;
43+
}
44+
45+
@Override
46+
public String getLabelSelector() {
47+
return labelSelector;
48+
}
49+
50+
@Override
51+
public String getPretty() {
52+
return pretty;
53+
}
54+
55+
@Override
56+
public String getResourceVersion() {
57+
return resourceVersion;
58+
}
59+
60+
@Override
61+
public ProgressResponseBody.ProgressListener getProgressListener() {
62+
return progressListener;
63+
}
64+
65+
@Override
66+
public ProgressRequestBody.ProgressRequestListener getProgressRequestListener() {
67+
return progressRequestListener;
68+
}
69+
70+
void setIncludeUninitialized(Boolean includeUninitialized) {
71+
this.includeUninitialized = includeUninitialized;
72+
}
73+
74+
void setLimit(Integer limit) {
75+
this.limit = limit;
76+
}
77+
78+
void setTimeoutSeconds(Integer timeoutSeconds) {
79+
this.timeoutSeconds = timeoutSeconds;
80+
}
81+
82+
void setFieldSelector(String fieldSelector) {
83+
this.fieldSelector = fieldSelector;
84+
}
85+
86+
void setLabelSelector(String labelSelector) {
87+
this.labelSelector = labelSelector;
88+
}
89+
90+
void setPretty(String pretty) {
91+
this.pretty = pretty;
92+
}
93+
94+
void setResourceVersion(String resourceVersion) {
95+
this.resourceVersion = resourceVersion;
96+
}
97+
98+
void setProgressListener(ProgressResponseBody.ProgressListener progressListener) {
99+
this.progressListener = progressListener;
100+
}
101+
102+
void setProgressRequestListener(ProgressRequestBody.ProgressRequestListener progressRequestListener) {
103+
this.progressRequestListener = progressRequestListener;
104+
}
105+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright 2018, Oracle Corporation and/or its affiliates. All rights reserved.
2+
// Licensed under the Universal Permissive License v 1.0 as shown at http://oss.oracle.com/licenses/upl.
3+
package oracle.kubernetes.operator.builders;
4+
5+
import io.kubernetes.client.ApiException;
6+
7+
/**
8+
* An exception used to bypass functional programming incompatability with checked exceptions. This is thrown
9+
* by a function object and the underlying ApiException is then rethrown by the caller of the function object.
10+
*/
11+
class UncheckedApiException extends RuntimeException {
12+
UncheckedApiException(ApiException e) {
13+
super(e);
14+
}
15+
16+
@Override
17+
public synchronized ApiException getCause() {
18+
return (ApiException) super.getCause();
19+
}
20+
}

0 commit comments

Comments
 (0)