HHH-12036 Use cache.clear() for bulk removal on non-tx cache
This commit is contained in:
parent
4b8cfe0c1f
commit
5d2c353437
|
@ -77,4 +77,17 @@ public class NonTxInvalidationCacheAccessDelegate extends InvalidationCacheAcces
|
||||||
// endInvalidatingKeys is called from NonTxInvalidationInterceptor, from the synchronization callback
|
// endInvalidatingKeys is called from NonTxInvalidationInterceptor, from the synchronization callback
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeAll() throws CacheException {
|
||||||
|
try {
|
||||||
|
if (!putValidator.beginInvalidatingRegion()) {
|
||||||
|
log.failedInvalidateRegion(region.getName());
|
||||||
|
}
|
||||||
|
cache.clear();
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
putValidator.endInvalidatingRegion();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -242,7 +242,7 @@ public abstract class BaseRegion implements Region {
|
||||||
// When we don't have transaction, we can do a clear operation (since we don't
|
// When we don't have transaction, we can do a clear operation (since we don't
|
||||||
// case about context) and can't do the one-by-one remove: remove() on tx cache
|
// case about context) and can't do the one-by-one remove: remove() on tx cache
|
||||||
// requires transactional context.
|
// requires transactional context.
|
||||||
if ( inTransaction ) {
|
if ( inTransaction && cache.getCacheConfiguration().transaction().transactionMode().isTransactional() ) {
|
||||||
log.tracef( "Transaction, clearing one element at the time" );
|
log.tracef( "Transaction, clearing one element at the time" );
|
||||||
Caches.removeAll( localAndSkipLoadCache );
|
Caches.removeAll( localAndSkipLoadCache );
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,6 +45,10 @@ import org.hibernate.test.cache.infinispan.util.ExpectingInterceptor;
|
||||||
import org.hibernate.test.cache.infinispan.util.JdbcResourceTransactionMock;
|
import org.hibernate.test.cache.infinispan.util.JdbcResourceTransactionMock;
|
||||||
import org.hibernate.test.cache.infinispan.util.TestInfinispanRegionFactory;
|
import org.hibernate.test.cache.infinispan.util.TestInfinispanRegionFactory;
|
||||||
import org.hibernate.test.cache.infinispan.util.TestSynchronization;
|
import org.hibernate.test.cache.infinispan.util.TestSynchronization;
|
||||||
|
import org.infinispan.Cache;
|
||||||
|
import org.infinispan.commands.write.ClearCommand;
|
||||||
|
import org.infinispan.test.TestingUtil;
|
||||||
|
import org.jboss.logging.Logger;
|
||||||
import org.hibernate.test.cache.infinispan.util.TestTimeService;
|
import org.hibernate.test.cache.infinispan.util.TestTimeService;
|
||||||
import org.hibernate.testing.AfterClassOnce;
|
import org.hibernate.testing.AfterClassOnce;
|
||||||
import org.hibernate.testing.BeforeClassOnce;
|
import org.hibernate.testing.BeforeClassOnce;
|
||||||
|
@ -513,7 +517,7 @@ public abstract class AbstractRegionAccessStrategyTest<R extends BaseRegion, S e
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
ExpectingInterceptor.get(remoteRegion.getCache())
|
ExpectingInterceptor.get(remoteRegion.getCache())
|
||||||
.when((ctx, cmd) -> cmd instanceof InvalidateCommand)
|
.when((ctx, cmd) -> cmd instanceof InvalidateCommand || cmd instanceof ClearCommand)
|
||||||
.countDown(endInvalidationLatch);
|
.countDown(endInvalidationLatch);
|
||||||
cleanup.add(() -> ExpectingInterceptor.cleanup(remoteRegion.getCache()));
|
cleanup.add(() -> ExpectingInterceptor.cleanup(remoteRegion.getCache()));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue