Skip to content

fix: resource cache after finalizer add #1244

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
May 27, 2022
Merged

Conversation

csviri
Copy link
Collaborator

@csviri csviri commented May 26, 2022

Fix for the following error happens in some cases.
The cause was, that if there are event sources registered and a new resource is created, the finalizer was added, but is was not cached in tempCache, so if an event source produced an event just after, but before the update event from finalizer add arrived, the reconciliation used the resource from the cache without the finalizer (the first version), so controller tried to add the finalizer again.

The fix is actually trivial, just caching the resource to tempCache, as we do at any other update (not patch) operation.

job-example', namespace='default'}
2022-05-26 22:51:04,117 "48" i.j.o.p.e.EventProcessor       [DEBUG] [default.basic-session-cluster.36958] Skipping executing controller for resource id: ResourceID{name='basic-session-cluster', namespace='default'}. Controller in execution: true. Latest Resource present: true
2022-05-26 22:51:04,117 "64" i.j.o.p.e.ReconciliationDispatcher [DEBUG] [default.basic-session-job-example.36957] Adding finalizer for resource: 3ca8a128-d8b6-4d73-a975-270502dcc332 version: 36957
2022-05-26 22:51:04,117 "64" i.j.o.p.e.ReconciliationDispatcher [DEBUG] [default.basic-session-job-example.36957] Trying to replace resource basic-session-job-example, version: 36957
2022-05-26 22:51:04,117 "44" i.j.o.p.e.EventProcessor       [DEBUG] [default.basic-session-job-example.36959] Skipping executing controller for resource id: ResourceID{name='basic-session-job-example', namespace='default'}. Controller in execution: true. Latest Resource present: true
2022-05-26 22:51:04,123 "64" i.j.o.p.e.ReconciliationDispatcher [ERROR] [default.basic-session-job-example.36957] Error during event processing ExecutionScope{ resource id: ResourceID{name='basic-session-job-example', namespace='default'}, version: 36957} failed.
io.fabric8.kubernetes.client.KubernetesClientException: Failure executing: PUT at: https://192.168.49.2:8443/apis/flink.apache.org/v1beta1/namespaces/default/flinksessionjobs/basic-session-job-example. Message: Operation cannot be fulfilled on flinksessionjobs.flink.apache.org "basic-session-job-example": the object has been modified; please apply your changes to the latest version and try again. Received status: Status(apiVersion=v1, code=409, details=StatusDetails(causes=[], group=flink.apache.org, kind=flinksessionjobs, name=basic-session-job-example, retryAfterSeconds=null, uid=null, additionalProperties={}), kind=Status, message=Operation cannot be fulfilled on flinksessionjobs.flink.apache.org "basic-session-job-example": the object has been modified; please apply your changes to the latest version and try again, metadata=ListMeta(_continue=null, remainingItemCount=null, resourceVersion=null, selfLink=null, additionalProperties={}), reason=Conflict, status=Failure, additionalProperties={}).
	at io.fabric8.kubernetes.client.dsl.base.OperationSupport.requestFailure(OperationSupport.java:682)
	at io.fabric8.kubernetes.client.dsl.base.OperationSupport.requestFailure(OperationSupport.java:661)
	at io.fabric8.kubernetes.client.dsl.base.OperationSupport.assertResponseCode(OperationSupport.java:612)
	at io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleResponse(OperationSupport.java:555)
	at io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleResponse(OperationSupport.java:518)
	at io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleUpdate(OperationSupport.java:342)
	at io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleUpdate(OperationSupport.java:322)
	at io.fabric8.kubernetes.client.dsl.base.BaseOperation.handleUpdate(BaseOperation.java:649)
	at io.fabric8.kubernetes.client.dsl.base.HasMetadataOperation.lambda$replace$1(HasMetadataOperation.java:195)
	at io.fabric8.kubernetes.client.dsl.base.HasMetadataOperation.replace(HasMetadataOperation.java:200)
	at io.fabric8.kubernetes.client.dsl.base.HasMetadataOperation.replace(HasMetadataOperation.java:141)
	at io.fabric8.kubernetes.client.dsl.base.HasMetadataOperation.replace(HasMetadataOperation.java:43)
	at io.javaoperatorsdk.operator.processing.event.ReconciliationDispatcher$CustomResourceFacade.replaceResourceWithLock(ReconciliationDispatcher.java:346)
	at io.javaoperatorsdk.operator.processing.event.ReconciliationDispatcher.updateCustomResourceWithFinalizer(ReconciliationDispatcher.java:303)
	at io.javaoperatorsdk.operator.processing.event.ReconciliationDispatcher.handleReconcile(ReconciliationDispatcher.java:102)
	at io.javaoperatorsdk.operator.processing.event.ReconciliationDispatcher.handleDispatch(ReconciliationDispatcher.java:81)
	at io.javaoperatorsdk.operator.processing.event.ReconciliationDispatcher.handleExecution(ReconciliationDispatcher.java:56)
	at io.javaoperatorsdk.operator.processing.event.EventProcessor$ControllerExecution.run(EventProcessor.java:356)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:829)

@csviri csviri self-assigned this May 26, 2022
@sonarqubecloud
Copy link

Kudos, SonarCloud Quality Gate passed!    Quality Gate passed

Bug A 0 Bugs
Vulnerability A 0 Vulnerabilities
Security Hotspot A 0 Security Hotspots
Code Smell A 0 Code Smells

100.0% 100.0% Coverage
0.0% 0.0% Duplication

@csviri csviri merged commit b6dfbfd into main May 27, 2022
@csviri csviri deleted the finalizer-add-cache-fix branch May 27, 2022 06:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants