@Override public Collection<DatabaseDocument<T>> getAndTag(DatabaseQuery<T> query, int n, String... tags) { Collection<DatabaseDocument<T>> list = new ArrayList<DatabaseDocument<T>>(); Collection<DatabaseDocument<T>> c = cache.getAndTag(query, n, tags); if (c != null) { list.addAll(c); } if (list.size() == 0) { for (String t : tags) { query.requireNotFetchedByStage(t); } list = writer.getAndTag(query, n, addCacheTag(tags)); for (DatabaseDocument<T> d : list) { for (String t : tags) { d.setFetchedBy(t, new Date()); } } cache.add(list); } return list; }
@Override public DatabaseDocument<T> getAndTag(DatabaseQuery<T> query, String... tags) { DatabaseDocument<T> doc = cache.getAndTag(query, tags); if (doc == null) { for (String t : tags) { query.requireNotFetchedByStage(t); } doc = writer.getAndTag(query, addCacheTag(tags)); if (doc != null) { for (String t : tags) { doc.setFetchedBy(t, new Date()); } cache.add(doc); } } return getCopy(doc); }