@Override public void updateWithMap( final int inputId, final Map<K, TIntArrayList> newData, Callable<Collection<K>> oldKeysGetter) throws StorageException { super.updateWithMap(inputId, newData, oldKeysGetter); }
@Override protected void updateWithMap( final int inputId, @NotNull final Map<Integer, SerializedStubTree> newData, @NotNull Callable<Collection<Integer>> oldKeysGetter) throws StorageException { checkNameStorage(); final Map<StubIndexKey, Map<Object, int[]>> newStubTree = getStubTree(newData); final StubIndexImpl stubIndex = getStubIndex(); final Collection<StubIndexKey> allStubIndices = stubIndex.getAllStubIndexKeys(); try { // first write-lock affected stub indices to avoid deadlocks for (StubIndexKey key : allStubIndices) { stubIndex.getWriteLock(key).lock(); } try { getWriteLock().lock(); final Map<Integer, SerializedStubTree> oldData = readOldData(inputId); final Map<StubIndexKey, Map<Object, int[]>> oldStubTree = getStubTree(oldData); super.updateWithMap(inputId, newData, oldKeysGetter); updateStubIndices( getAffectedIndices(oldStubTree, newStubTree), inputId, oldStubTree, newStubTree); } finally { getWriteLock().unlock(); } } finally { for (StubIndexKey key : allStubIndices) { stubIndex.getWriteLock(key).unlock(); } } }