2015-08-18 2 views
0

У нас есть несколько тысяч рабочих процессов SWF, которые потерпели неудачу в прошлом году из-за различных ошибок в работе. Поскольку ошибки были долгоживущими, все попытки активности не выполнялись, и рабочие процессы были закрыты. Я хочу повторно запустить все эти неудавшиеся рабочие процессы, набрав при этом последний выполненный (и не выполненный) вид активности. Основной регенератор рабочего процесса.Программно переработанные рабочие процессы SWF

Консоль SWF имеет команду Re-Run, но она позволяет вам выбирать только двадцать пять рабочих процессов за раз, гораздо меньше, чем тысячи, которые мне нужны.

Я мог бы использовать команду CLI start-workflow-execution (или аналогичный вызов API), но я не могу понять, где взять самый последний поток операций, как это делает операция «Повторная работа консоли». Я могу получить самый последний ввод рабочего потока от get-workflow-execution-history, но для этого требуется, чтобы я знал последние runId, и я не могу найти способ получить это.

Резюмируя:

  1. Единственный способ, которым я могу думать, чтобы программно повторно запустить SWF рабочих процессов является: для каждого неудачного рабочего процесса, магически захватить ее последнюю runId, а затем захватить свой самый последний вход рабочего процесса с помощью get-workflow-execution-history, затем перезапустите его, используя этот вход через start-workflow-execution. Есть ли способ лучше?
  2. Если ответ на # 1 - «Нет лучшего способа», то как я могу найти последние runId для конкретного workflowId?

(Тот факт, что я не могу найти какую-либо документацию или обсуждение таких перезапускает заставляет меня беспокоиться, что я приближаюсь это неправильный путь, так что я приветствую установку прямо мне обратную связь.)

UPDATE: Вопрос с более высоким уровнем: какой правильный способ обрабатывать рабочие процессы, которые завершались из-за условий ошибки, которые выдержали все попытки? Тот факт, что так сложно перезапускать рабочие процессы SWF, заставляет меня думать, что я недопонимаю парадигму SWF.

ответ

1

Я не думаю, что вы можете сделать это таким образом. Максимальное сохранение истории рабочего процесса составляет 90 дней, поэтому, даже если вы перейдете по пути получения истории выполнения рабочего процесса, вы сможете перезапустить неудачные рабочие процессы за последние 90 дней. Также у aws есть ограничение на уровне аккаунта на количество и скорость, с которой вы можете совершать вызовы swf api, поэтому, как только вы начнете звонить в цикле, чтобы получить историю и запустить рабочий процесс, вы слишком быстро достигнете этого уровня и начнете получать исключение. . Лучший способ приблизиться к этому - посмотреть, в какой точке запуска рабочего процесса и заново запустить неудачные кавычки, передав один и тот же ввод.

+0

Ваше предложение звучит так же, как я предложил: перезапустите неудавшийся рабочий процесс, передав тот же самый вход, когда рабочий процесс был ранее запущен. Я что-то упустил? (Ограничение скорости на уровне аккаунта Хорошая неприятность, чтобы вызвать, но я могу обойти это.) – MonkeyWithDarts

+0

Нет. Если у вас есть список неудачных рабочих процессов и входных данных, с которых они были запущены, тогда просто запустите их и запустите снова. – Rohit

+0

С гигантской звездочкой, Не используйте этот подход для чего-либо более 90 дней. – MonkeyWithDarts

2
  1. Звучит разумно. Обратите внимание, что повторный рабочий процесс не перезапускает его из последнего неудавшегося действия, но с самого начала (история пуста).
  2. Вы можете использовать ListClosedWorkflowExecutions, чтобы получить самую последнюю версию «runId». Обратите внимание, что он поддерживает workflowId в качестве параметра фильтра.

UPDATE: Более высокий уровень вопрос: Что такое правильный способ обработки рабочих процессов, прекращенных в связи с условиями ошибок, которые пережили все повторные попытки?

У SWF есть все, чтобы повторить рабочий процесс с момента его отказа, поскольку сохраняется история выполнения рабочего процесса. К сожалению, AWS Flow Framework из коробки не выполняет восстановление состояния из предыдущего запуска. Но это не присущее ограничение, и эта функция может быть добавлена.

+0

Да, перезагрузка с самого начала - это то, на что я рассчитывал. (Я бы хотел перезапустить с той же историей, что и предыдущий рабочий процесс, но я не вижу никакого способа сделать это, и это может иметь непреднамеренные последствия. Я соглашусь на перезапуск с самого начала.) Что вы скажете @ Вопрос Рохита о максимальном сроке хранения истории операций? – MonkeyWithDarts

+0

Если вы собираетесь использовать его после периода хранения, вы всегда можете сбрасывать историю на S3. –

+0

Моя мысль - иметь ветку, которая использует этот (^^) подход, когда daysSinceStarted <90 и вытащит из хранилища, когда daysSinceStarted> = 90. – MonkeyWithDarts

Смежные вопросы