@Override
public void process(final KeyFilter filter, final CacheLoaderTask task, Executor executor, boolean fetchValue, boolean fetchMetadata) {
scanForUnknownDirectories();
ExecutorAllCompletionService eacs = new ExecutorAllCompletionService(executor);
final TaskContextImpl taskContext = new TaskContextImpl();
for (final DirectoryLoaderAdaptor dir : openDirectories.values()) {
eacs.submit(new Callable<Void>() {
@Override
public Void call() throws Exception {
try {
final HashSet<MarshalledEntry> allInternalEntries = new HashSet<MarshalledEntry>();
dir.loadAllEntries(allInternalEntries, Integer.MAX_VALUE, ctx.getMarshaller());
for (MarshalledEntry me : allInternalEntries) {
if (taskContext.isStopped())
break;
if (filter == null || filter.shouldLoadKey(me.getKey())) {
task.processEntry(me, taskContext);
}
}