Detección automática de ciclos en tiempo real de llamadas a funciones

8

Me estoy topando con una pared mentalmente cuando trato de pensar en una manera de resolver este problema. En mi trabajo, procesamos los datos del cliente a través de una lógica de razonamiento complejo. A veces esta lógica causará bucles infinitos. En realidad, sabemos cómo eliminar solo parte de la lógica que causará esto, pero por razones políticas no se nos permite tocar la lógica ... sigh

De todos modos, decidí abrir mi boca grande y sugerir que debe haber alguna forma de detectar ciclos en las llamadas lógicas, por lo que aquí tengo la tarea de encontrar una manera de detectar ciclos en la lógica y luego pasar el bucle si uno pasa.

Se me ocurrió un plan aproximado, pero quería ver si alguna de las personas inteligentes de aquí tenía alguna opinión.

Para comenzar, ya tengo acceso a todas las llamadas de funciones y sus entradas a través de nuestro registro, por lo que mi plan fue el siguiente:

  1. encuentre la manera de hacer un hash en las combinaciones de llamada de función / entradas
  2. asigne los combos anteriores a un ID de llamada
  3. mantener una lista de todas las llamadas realizadas hasta ahora
  4. use el mapa de 2 y la lista de 3 para crear una representación potencialmente cíclica de las llamadas
  5. Ejecute el algoritmo de detección de ciclos de Brent en esta lista para ver si ha ocurrido un ciclo.

Siento que esto es bastante complicado. Me preguntaba si otros tenían alguna opinión.

El lenguaje de programación para esto es Java, y la lógica está en Drools. Con los oyentes de eventos puedo ver exactamente qué reglas se activan y los hechos que las activan. A veces no hay reglas que se activen, solo se activan los grupos de flujo de reglas. Mi pensamiento fue que al mantener una lista de todas las activaciones anteriores, puedo reconstruir el orden de las llamadas en algo parecido a una lista vinculada y aplicar algún algoritmo de detección de ciclos. Luego, después de cada activación, debo comprobar si esta activación ha iniciado un bucle.

    
pregunta Hangman4358 24.01.2017 - 19:23

1 respuesta

1

Estoy de acuerdo en que esto parece demasiado complicado.

Creo que sería bastante difícil identificar correctamente todas las situaciones de bucle. No identificar un bucle puede no ser un factor decisivo si también tiene un tiempo de espera para recurrir. Sin embargo, matar incorrectamente un proceso que no era un bucle podría ser bastante problemático.

También, podría decirse que equivale a alterar la lógica que no puedes tocar, solo de una manera realmente indirecta. Aunque me doy cuenta de que la diferencia puede satisfacer las preocupaciones políticas.

Sería bastante reacio a intentar este enfoque. Ahorrar un poco de tiempo en comparación con un tiempo de espera parece poco probable que sea una justificación comercial suficiente para la complejidad de la implementación de esto y los riesgos involucrados.

    
respondido por el user82096 20.04.2017 - 14:52

Lea otras preguntas en las etiquetas