Sto correndo mentalmente contro un muro quando cerco di pensare a un modo per risolvere questo problema. Nel mio lavoro elaboriamo i dati dei clienti attraverso una complessa logica di ragionamento. A volte questa logica causerà un loop infinito. In realtà sappiamo come rimuovere solo parte della logica che causerà questo, ma per motivi politici non siamo autorizzati a toccare la logica .... sigh
Ad ogni modo, ho deciso di aprire la mia bocca e suggerire che ci deve essere un modo per rilevare i cicli nelle chiamate logiche, quindi qui ho il compito di trovare un modo per rilevare i cicli nella logica e quindi passare oltre il ciclo se succede.
Ho elaborato un piano approssimativo, ma volevo vedere se qualcuno delle persone intelligenti avesse qualche input.
Per iniziare, ho già accesso a ogni chiamata di funzione e ai suoi input tramite la nostra registrazione, quindi il mio piano era il seguente:
- trova un modo per cancellare le combinazioni di chiamata / input di funzione
- mappa le combo di cui sopra in un ID di chiamata
- tieni un elenco di tutte le chiamate effettuate finora
- utilizza la mappa da 2 e l'elenco da 3 per creare una rappresentazione potenzialmente ciclica delle chiamate
- Esegui l'algoritmo di rilevamento del ciclo di Brent in questo elenco per verificare se è avvenuto un ciclo.
Mi sento come se fosse abbastanza contorto. Mi chiedevo se gli altri avessero qualche input.
Il linguaggio di programmazione per questo è Java e la logica è in Drools. Con gli ascoltatori di eventi posso vedere esattamente quali regole attivare e i fatti che li attivano. A volte nessuna regola attiva solo i gruppi di regole attivati. Pensavo che mantenendo un elenco di tutte le attivazioni perverse posso ricostruire l'ordine di chiamata in qualcosa di simile a un elenco collegato e applicare un algoritmo di rilevazione del ciclo. Quindi, dopo ogni attivazione, devo controllare se questa attivazione ha avviato un ciclo.