66
66
import io .kubernetes .client .openapi .models .V1Toleration ;
67
67
import io .kubernetes .client .openapi .models .V1Volume ;
68
68
import io .kubernetes .client .openapi .models .V1VolumeMount ;
69
+ import io .kubernetes .client .util .PatchUtils ;
69
70
70
71
import okhttp3 .Response ;
71
72
@@ -159,11 +160,8 @@ boolean restart(int shardId) {
159
160
final int currentContainerCount = statefulSet .getSpec ().getReplicas ();
160
161
final int newContainerCount = currentContainerCount + containersToAdd .size ();
161
162
162
- final V1StatefulSetSpec newSpec = new V1StatefulSetSpec ();
163
- newSpec .setReplicas (newContainerCount );
164
-
165
163
try {
166
- doPatch ( newSpec );
164
+ patchStatefulsetReplicas ( newContainerCount );
167
165
} catch (ApiException ae ) {
168
166
throw new TopologyRuntimeManagementException (
169
167
ae .getMessage () + "\n details\n " + ae .getResponseBody ());
@@ -184,28 +182,37 @@ public void removeContainers(Set<PackingPlan.ContainerPlan> containersToRemove)
184
182
final int currentContainerCount = statefulSet .getSpec ().getReplicas ();
185
183
final int newContainerCount = currentContainerCount - containersToRemove .size ();
186
184
187
- final V1StatefulSetSpec newSpec = new V1StatefulSetSpec ();
188
- newSpec .setReplicas (newContainerCount );
189
-
190
185
try {
191
- doPatch ( newSpec );
186
+ patchStatefulsetReplicas ( newContainerCount );
192
187
} catch (ApiException e ) {
193
188
throw new TopologyRuntimeManagementException (
194
189
e .getMessage () + "\n details\n " + e .getResponseBody ());
195
190
}
196
191
}
197
192
198
- private void doPatch ( V1StatefulSetSpec patchedSpec ) throws ApiException {
193
+ private void patchStatefulsetReplicas ( int replicas ) throws ApiException {
199
194
final String body =
200
195
String .format (JSON_PATCH_STATEFUL_SET_REPLICAS_FORMAT ,
201
- patchedSpec . getReplicas (). toString () );
196
+ replicas );
202
197
final V1Patch patch = new V1Patch (body );
203
- appsClient .patchNamespacedStatefulSet (getTopologyName (),
204
- getNamespace (), patch , null , null , null , null );
198
+
199
+ PatchUtils .patch (V1StatefulSet .class ,
200
+ () ->
201
+ appsClient .patchNamespacedStatefulSetCall (
202
+ getTopologyName (),
203
+ getNamespace (),
204
+ patch ,
205
+ null ,
206
+ null ,
207
+ null ,
208
+ null ,
209
+ null ),
210
+ V1Patch .PATCH_FORMAT_JSON_PATCH ,
211
+ appsClient .getApiClient ());
205
212
}
206
213
207
214
private static final String JSON_PATCH_STATEFUL_SET_REPLICAS_FORMAT =
208
- " {\" op\" :\" replace\" ,\" path\" :\" /spec/replicas\" ,\" value\" :%s} " ;
215
+ "[ {\" op\" :\" replace\" ,\" path\" :\" /spec/replicas\" ,\" value\" :%d}] " ;
209
216
210
217
V1StatefulSet getStatefulSet () throws ApiException {
211
218
return appsClient .readNamespacedStatefulSet (getTopologyName (), getNamespace (),
0 commit comments