Автор: Савенко Дмитрий
Дата создания: 10.10.2005
Версия: 0.1
Дата последнего изменения: 11.10.2005


ASSIMILATOR

Это механизм, с помощью которого проект извещается о завершении (успешном или нет) рабочего модуля. Он запускается один раз для каждого рабочего модуля. Если рабочий модуль был завершен успешно (т.е. если есть канонический результат), функция читает выходной файл (или файлы) и обрабатывает информацию, например, сохраняет ее в базу данных. Если же рабочий модуль завершен с ошибкой, функция может сделать запись в логе, послать e-mail и т.д.

Система BOINC предоставляет заготовку ассимилятора (sched/assimilate.c), для которой нужно дописать функцию

int assimilate_handler(
    WORKUNIT& wu, vector& results, RESULT& canononical_result
);

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

В любом случае, вектор results будет содержать все результаты рабочих модулей (включая неуспешные и неотправленные). Все файлы обычно находятся на диске. Возможно также, что выполняются оба условия из приведенных выше.

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

Для работы с файлами необходимо использовать функции, приведенные здесь.