operator-framework / operator-framework/java-operator-sdk

Simple core and layered reconciler implementation for v6

Abierto
#3,563 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Lenguaje dominante
Java
Estrellas
944
Forks
242
Merge medio
1 d 4 h
PR fusionados (30 d)
43

Descripción

TL;DR We could make the core of the framework simpler by introducing a more layered architecture. While keeping the migration for the users trivial.

Problem definition

Currently the core of a framework has baked logic to work with higher level logic like:

  • Adding finalizers by implementing Cleaner interface
  • Managed workflows inside the controller
  • Automatic generation filtering
  • Catching error and error handling, thus updateErrorStatus method.

We recently added a generic mode Trigger reconciliation on all events

While it makes a nice API for the users, an maybe even nice out of the box experience, makes the core of the framework more complex - and even for users I assume hard to follow, if some wants to read the code.

What we could do in next major version is to layer those functionalities:

  1. The core will just work on top of a simplified Reconciler interface. What will handle basically be the all event mode. So we won't support finalizers, UpdateControl.patch methods ,and most of the functionality of ReconciliationDispatcher would be moved to an abstract Reconciler implementation: GenericReconciler.
  2. Retry, Rate limiting would stay as it is now
  3. The managed workflow handling would an additional extension of GenericReconciler: WorkflowReconciler. That will handle the managed workflow discovery, their configuration etc.

Migration

Note that migration for the users could be kept trivial, basically just extending the GenericReconciler / WorkflowReconciler (Where we could support the UpdateControl etc as is now) instead of implementing Reconciler.

Pros

  • The core would be much simpler
  • The logic around these extended reconcilers much easier to be followed by the users (from source code)

Cons

  • This does not provide direct value for users, other than easier to handle

Notes

  • before we make a decision, we should explore this first in a proptotype
  • TODO: proper design description

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Lee las responsabilidades actuales de Reconciler y ReconciliationDispatcher, incluido updateErrorStatus, y luego crea un prototipo de las capas propuestas GenericReconciler y WorkflowReconciler. Se considera terminado cuando haya un prototipo funcional y una descripción de diseño adecuada que explique la separación principal y mantenga trivial la migración para los usuarios existentes.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
java, kubernetes
Área
backend-api-design
Tipo de issue
Refactorización
Dificultad
5/5
Tiempo estimado
Más de una semana
Estado de actividad
Tranquilo
Claridad
Necesita aclaración
Aptitud para principiantes
25/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.