@Override public int reindex(List<K> keys, int batchSize, ReindexOperation<E> reindexOperation) { int count = 0; List<List<K>> batches = Lists.partition(keys, batchSize); for (List<K> batchKeys : batches) { List<E> batch = get(batchKeys); batch = reindexOperation == null ? batch : reindexOperation.apply(batch); if (reindexOperation != null) { // we only re-save the batch when a re-index op is supplied, otherwise the data can't have changed. ofy().save().entities(batch).now(); } if (shouldSearch()) { index(batch).complete(); } count += batch.size(); ofy().clear(); // Clear the Objectify cache to free memory for next batch Logger.info("Reindexed %d entities of type %s, %d of %d", batch.size(), entityType.getSimpleName(), count, keys.size()); } return count; }
/** * Clear memcache and Objectify session cache. */ private void clearAllCaches() { memcache.clearAll(); ObjectifyService.ofy().flush(); ObjectifyService.ofy().clear(); } }