public void lockReads(String group, Collection<Id> locks) { List<Id> newLocks = new ArrayList<>(locks.size()); Set<Id> locked = locksOfGroup(group); for (Id lock : locks) { if (!locked.contains(lock)) { newLocks.add(lock); } } this.locks.lockReads(group, newLocks); }
@Watched(prefix = "index") private Set<Id> doIndexQuery(IndexLabel indexLabel, ConditionQuery query) { Set<Id> ids = InsertionOrderUtil.newSet(); LockUtil.Locks locks = new LockUtil.Locks(this.graph().name()); try { locks.lockReads(LockUtil.INDEX_LABEL_DELETE, indexLabel.id()); locks.lockReads(LockUtil.INDEX_LABEL_REBUILD, indexLabel.id()); Iterator<BackendEntry> entries = super.query(query); while(entries.hasNext()) { HugeIndex index = this.serializer.readIndex(graph(), query, entries.next()); ids.addAll(index.elementIds()); if (query.reachLimit(ids.size())) { break; } } } finally { locks.unlock(); } return ids; }
public void lockReads(String group, Collection<Id> locks) { List<Id> newLocks = new ArrayList<>(locks.size()); for (Id lock : locks) { Set<Id> locked = locksOfGroup(group); if (!locked.contains(lock)) { newLocks.add(lock); } } this.locks.lockReads(group, newLocks); }
@Watched(prefix = "index") private Set<Id> doIndexQuery(IndexLabel indexLabel, ConditionQuery query) { Set<Id> ids = InsertionOrderUtil.newSet(); LockUtil.Locks locks = new LockUtil.Locks(this.graph().name()); try { locks.lockReads(LockUtil.INDEX_LABEL_DELETE, indexLabel.id()); locks.lockReads(LockUtil.INDEX_LABEL_REBUILD, indexLabel.id()); Iterator<BackendEntry> entries = super.query(query); while(entries.hasNext()) { HugeIndex index = this.serializer.readIndex(graph(), query, entries.next()); ids.addAll(index.elementIds()); if (query.reachLimit(ids.size())) { break; } } } finally { locks.unlock(); } return ids; }