Там кроме кода возврата проверяется ещё успешность обновления. После его успешного завершения isSourceUpdateNeeded должен возвращать false, иначе там всё зациклится нафиг.
Вроде задышало, но пока тест не совсем полноценный - на ноутбуке не стоит осмозис, и make обламывается. Завтра буду внедрять на комп, на котором быстрая версия валидатора.
Ну и мне надо кое-что подкрутить, типа zOsmStat, чтобы он свой лог раскладывал по папкам)
Вопросы. Очередь должна быть отсортирована сперва по приоритету, потом по дате последней попытки. Сейчас так?
И можно сделать форматирование history.txt? Я неформатированный как-то не очень понимаю.)
Но если какое-то задание нуждается в обновлении source, то задание перекидывается в очередь обновлений и помещается обратно в конец очереди обработки только после успешного выполнения обновления, поэтому итоговый порядок выполнения конвертации может быть другой. Это позволяет освободить потоки обработки на занятие собственно обработкой, чтобы карты, требующие обновлений не тормозили другие, которым оно не нужно.
Если такой алгоритм не годится - скажи как лучше его поменять.
если у этой карты больший приоритет (1), то вполне нормально, что она тормознет все другие, с меньшим приоритетом (6). К тому же сейчас все приоритеты временные, после успешного обновления сбрасываются в 6.
А когда оно выполнится, это обновление? когда пройдут все задания, не нуждающиеся в обновлениях source?
Проблема в том, что обновление одного source, от которого зависит несколько карт может заблокировать вообще всю обработку до своего завершения.
Я просто не знаю характерное время этих обновлений. Если они выполняются быстро - то можно и блокировать, потери времени будут небольшими. А вот если долго, то комп будет всё это время простаивать в ожидании, в то время как он мог бы заняться полезным делом.
Ещё можно перейти к очередям с приоритетами, тогда конвертация приоритетной карты запустится сразу после завершения обновления и освобождения очередного обработчика.
Обновление будет выполнятся параллельно с конвертацией других карт. А вот конвертация карт с обновлённым source уже будет после заданий без обновлений.
То что обновление выполняется параллельно с конвертацией других карт, это очень хорошо. Но после того как обновление source завершилось, задание должно переместиться не в конец очереди конвертаций, а в начало, и конвертация должна начаться сразу же, как одно из процессорных ядер освободится.