@Override
public void process(KeyFilter filter, CacheLoaderTask task, Executor executor, boolean fetchValue, boolean fetchMetadata) {
record("process");
log.tracef("Processing entries in store %s with filter %s and callback %s", storeName, filter, task);
final long currentTimeMillis = timeService.wallClockTime();
TaskContext tx = new TaskContextImpl();
for (Iterator<Map.Entry<Object, byte[]>> i = store.entrySet().iterator(); i.hasNext();) {
Map.Entry<Object, byte[]> entry = i.next();
if (tx.isStopped()) break;
if (filter == null || filter.accept(entry.getKey())) {
MarshalledEntry se = deserialize(entry.getKey(), entry.getValue(), fetchValue, fetchMetadata);
if (isExpired(se, currentTimeMillis)) {
log.tracef("Key %s exists, but has expired. Entry is %s", entry.getKey(), se);
i.remove();