Regeneration of DISABLE operations when setting instance operations

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

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
35/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
java

Línea de trabajo

Comienza con getActiveInstanceOperation() y getInstanceOperation(), luego reproduce las dos solicitudes EVACUATE mediante la API setInstanceOperation e inspecciona la configuración de la instancia en ZooKeeper. Rastrea por qué EVACUATE provoca una nueva operación DISABLE cuando HELIX_ENABLED=false en los campos legacy. El trabajo está terminado cuando las operaciones EVACUATE repetidas ya no regeneran marcas de tiempo DISABLE ni entradas LEGACY_DISABLED_TYPE, y las transiciones de instancia proceden con normalidad.

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

Descripción

bug
Describe the bug

There is a bug in the instance operation handling logic that causes an infinite cycle of regenerated DISABLE operations when applying operations like EVACUATE to an instance with HELIX_ENABLED=false in legacy fields. This prevents proper instance lifecycle transitions and causes unexpected behavior in instance swapping scenarios.

To Reproduce
  1. Create an instance in the cluster.
  2. Set DISABLE operation with USER source:
    Apply to InstanceConf...
    curl -X POST "http://<host>:<port>/admin/v2/clusters/<cluster>/instances/<instance>?command=setInstanceOperation&instanceOperationSource=USER&instanceOperation=DISABLE"
  3. Set EVACUATE operation with AUTOMATION source:
    Apply to InstanceConf...
    curl -X POST "http://<host>:<port>/admin/v2/clusters/<cluster>/instances/<instance>?command=setInstanceOperation&instanceOperationSource=AUTOMATION&instanceOperation=EVACUATE"
  4. Set EVACUATE operation again with AUTOMATION source
  5. Check the instance configuration in ZooKeeper

After the second EVACUATE operation, a new DISABLE operation is generated with:

  1. Updated timestamp (more recent than the EVACUATE timestamp)
  2. Added LEGACY_DISABLED_TYPE field
  3. The cycle repeats with each subsequent evacuate operation
Expected behavior

The DISABLE operation should not be regenerated with new timestamps when setting a different operation. Instance operations should be updated consistently without creating an infinite cycle.

Additional context

RCA:
The regeneration happens because:

  1. getActiveInstanceOperation() returns the last operation (EVACUATE)
  2. EVACUATE is in INSTANCE_DISABLED_OVERRIDABLE_OPERATIONS
  3. This causes getInstanceOperation() to override it with a newly generated DISABLE operation
Lenguaje dominante
Java
Estrellas
505
Forks
258
Merge medio
4 d 20 h
PR fusionados (30 d)
3

Preparar el entorno

  • Sin Dockerfile ni archivo de Docker Compose
  • Tiene una plantilla de pull request
  • Sin 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.

Más de apache/helix

Todos los issues de apache/helix

Issues similares

Más issues de Java

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.