DatastoreMutationPool сбрасывается в хранилище данных перед обратным вызовом? - PullRequest
1 голос
/ 21 марта 2011

Я использую 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
    ...
}

1 Ответ

2 голосов
/ 22 марта 2011

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

...