Сбрасывается ли пул DatastoreMutationPool в хранилище данных перед обратным вызовом?

Я использую mapreduce, и мне нужно сохранить некоторые объекты, когда их нет в хранилище данных. Я добавляю новые объекты в DatastoreMutationPool, чтобы эти объекты могли сохраняться с помощью пакетных вызовов. Когда mapreduce завершается, вызывается функция обратного вызова. Функция обратного вызова будет использовать некоторые из этих сущностей. Мой вопрос: все ли эти объекты будут сброшены в хранилище данных до вызова функции обратного вызова, или они все еще могут находиться в DatastoreMutationPool, но не в хранилище данных.

Спасибо.

Пример картографа:

public class MyMapper extends AppEngineMapper<Key, Entity, NullWritable, NullWritable> {
     @Override
     public void map(Key key, Entity value, Context context) {
         ...
         DatastoreMutationPool mutationPool = this.getAppEngineContext(context).getMutationPool();
     mutationPool.put(entity);
     }
}

Пример обратного вызова:

@RequestMapping(value="/callback/function",method=RequestMethod.POST)
public void callback(@RequestParam("job_id") String jobIdName){
    JobID jobId = JobID.forName(jobIdName);
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    //search for some entities persisted in the mapper
    ...
}

person Javi    schedule 21.03.2011    source источник


Ответы (1)


Пул мутаций является per-mapper, в то время как обратный вызов запускается вне mappers после завершения mapreduce. В результате вы можете ожидать, что все пулы мутаций будут очищены к моменту выполнения вашего обратного вызова.

person Nick Johnson    schedule 22.03.2011