@@ -40,27 +40,41 @@ public AbstractDependentResource() {
40
40
public ReconcileResult <R > reconcile (P primary , Context <P > context ) {
41
41
var count = count (primary , context ).orElse (1 );
42
42
if (isBulkResourceCreation (primary , context )) {
43
- initDiscriminators (count );
43
+ cleanupBulkResourcesIfRequired (count , resourceDiscriminator .size (), primary , context );
44
+ adjustDiscriminators (count );
44
45
}
45
46
ReconcileResult <R > result = new ReconcileResult <>();
46
47
for (int i = 0 ; i < count ; i ++) {
47
- var res = reconcileWithIndex (primary , i , context );
48
+ var res = reconcileIndexAware (primary , i , context );
48
49
result .addReconcileResult (res );
49
50
}
50
51
return result ;
51
52
}
52
53
53
- private void initDiscriminators (int count ) {
54
- if (resourceDiscriminator .size () == count ) {
54
+ private void cleanupBulkResourcesIfRequired (int targetCount , int actualCount , P primary ,
55
+ Context <P > context ) {
56
+ if (targetCount >= actualCount ) {
55
57
return ;
56
58
}
57
- if (resourceDiscriminator .size () < count ) {
58
- for (int i = resourceDiscriminator .size () - 1 ; i < count ; i ++) {
59
- resourceDiscriminator .add (bulkResourceDiscriminatorFactory .createResourceDiscriminator (i ));
60
- }
59
+ for (int i = targetCount ; i < actualCount ; i ++) {
60
+ var resource = getSecondaryResourceIndexAware (primary , i , context );
61
+ var index = i ;
62
+ resource .ifPresent (r -> {
63
+ deleteBulkResourceWithIndex (primary , r , index , context );
64
+ });
65
+ }
66
+ }
67
+
68
+ protected void deleteBulkResourceWithIndex (P primary , R resource , int i , Context <P > context ) {
69
+ throw new IllegalStateException ("Implement if handling bulk resources." );
70
+ }
71
+
72
+ private void adjustDiscriminators (int count ) {
73
+ if (resourceDiscriminator .size () == count ) {
74
+ return ;
61
75
}
62
76
if (resourceDiscriminator .size () < count ) {
63
- for (int i = resourceDiscriminator .size () - 1 ; i < count ; i ++) {
77
+ for (int i = resourceDiscriminator .size (); i < count ; i ++) {
64
78
resourceDiscriminator .add (bulkResourceDiscriminatorFactory .createResourceDiscriminator (i ));
65
79
}
66
80
}
@@ -69,12 +83,12 @@ private void initDiscriminators(int count) {
69
83
}
70
84
}
71
85
72
- protected ReconcileResult <R > reconcileWithIndex (P primary , int i , Context <P > context ) {
73
- Optional <R > maybeActual = getSecondaryResource (primary , i , context );
86
+ protected ReconcileResult <R > reconcileIndexAware (P primary , int i , Context <P > context ) {
87
+ Optional <R > maybeActual = getSecondaryResourceIndexAware (primary , i , context );
74
88
if (creatable || updatable ) {
75
89
if (maybeActual .isEmpty ()) {
76
90
if (creatable ) {
77
- var desired = desired (primary , i , context );
91
+ var desired = desiredIndexAware (primary , i , context );
78
92
throwIfNull (desired , primary , "Desired" );
79
93
logForOperation ("Creating" , primary , desired );
80
94
var createdResource = handleCreate (desired , primary , context );
@@ -90,7 +104,8 @@ protected ReconcileResult<R> reconcileWithIndex(P primary, int i, Context<P> con
90
104
match = updater .match (actual , primary , context );
91
105
}
92
106
if (!match .matched ()) {
93
- final var desired = match .computedDesired ().orElse (desired (primary , context ));
107
+ final var desired =
108
+ match .computedDesired ().orElse (desiredIndexAware (primary , i , context ));
94
109
throwIfNull (desired , primary , "Desired" );
95
110
logForOperation ("Updating" , primary , desired );
96
111
var updatedResource = handleUpdate (actual , desired , primary , context );
@@ -108,6 +123,11 @@ protected ReconcileResult<R> reconcileWithIndex(P primary, int i, Context<P> con
108
123
return ReconcileResult .noOperation (maybeActual .orElse (null ));
109
124
}
110
125
126
+ private R desiredIndexAware (P primary , int i , Context <P > context ) {
127
+ return isBulkResourceCreation (primary , context ) ? desired (primary , i , context )
128
+ : desired (primary , context );
129
+ }
130
+
111
131
// todo check
112
132
protected Optional <R > getSecondaryResource (P primary , Context <P > context ) {
113
133
if (resourceDiscriminator .isEmpty ()) {
@@ -117,7 +137,7 @@ protected Optional<R> getSecondaryResource(P primary, Context<P> context) {
117
137
}
118
138
}
119
139
120
- protected Optional <R > getSecondaryResource (P primary , int index , Context <P > context ) {
140
+ protected Optional <R > getSecondaryResourceIndexAware (P primary , int index , Context <P > context ) {
121
141
if (index > 0 && resourceDiscriminator .isEmpty ()) {
122
142
throw new IllegalStateException (
123
143
"Handling resources in bulk bot no resource discriminators set." );
0 commit comments