Вложенные фабрики создают странный цикл в Groovy Builder

Я пытаюсь реализовать DSL с Groovy, который анализирует следующий скрипт Groovy

sched_default = schedule {

    actions {

        parallel {
            command(host: server1, command: "echo 'parallel' >> output.txt")

            sequence {
                command(host: server1, command: "echo 'inner sequence' >> output.txt")
                command(host: server2, command: "echo 'inner sequence' >> output.txt")
            }
        }
    }
}

Поэтому я делегирую замыкание (переданное при вызове расписания) пользовательскому ScheduleBuilder, где зарегистрированы соответствующие фабрики для соответствующих методов.

Если я запускаю какие-либо из них изолированно, они работают как шарм. Тем не менее, вложение этих методов приводит к странному циклу и, наконец, к исключению.

Некоторые выходные данные трассировки указывают на то, что параллельный блок никогда не закрывается, но внутренний блок последовательности зацикливается до возникновения исключения.

ParallelFactory.newInstance
    CommandFactory.newInstance
    CommandFactory.onNodeCompleted
    CommandFactory.newInstance
    CommandFactory.onNodeCompleted
    SequenceFactory.newInstance
        CommandFactory.newInstance
        CommandFactory.onNodeCompleted
        CommandFactory.newInstance
        CommandFactory.onNodeCompleted
    SequenceFactory.onNodeCompleted
    [...repeated for seven times in total...]
    SequenceFactory.newInstance
        CommandFactory.newInstance
        CommandFactory.onNodeCompleted
        CommandFactory.newInstance
        CommandFactory.onNodeCompleted
    SequenceFactory.onNodeCompleted
Caught: groovy.lang.MissingMethodException: No signature of method: NestedTest.actions() is applicable for argument types: (NestedTest$_run_closure3$_closure11) values: [NestedTest$_run_closure3$_closure11@7e7b159b]
groovy.lang.MissingMethodException: No signature of method: NestedTest.actions() is applicable for argument types: (NestedTest$_run_closure3$_closure11) values: [NestedTest$_run_closure3$_closure11@7e7b159b]
    at NestedTest$_run_closure3.doCall(NestedTest.groovy:77)
    at NestedTest$_run_closure3.doCall(NestedTest.groovy)
    at Test.schedule(Test.groovy:110)

Я действительно не могу объяснить это поведение и не знаю, как дальше отлаживать это сообщение об ошибке, поэтому любая помощь очень ценится!

0 ответов

Другие вопросы по тегам