Skip to content

Commit 33962a0

Browse files
rvansasebersole
authored andcommitted
HHH-10272 Make pending-puts cache template configurable
1 parent b421040 commit 33962a0

20 files changed

+181
-54
lines changed

hibernate-infinispan/hibernate-infinispan.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ test {
6060
// Use Infinispan's test JGroups stack that uses TEST_PING
6161
systemProperties['hibernate.cache.infinispan.jgroups_cfg'] = '2lc-test-tcp.xml'
6262
// systemProperties['log4j.configuration'] = 'file:/log4j/log4j-infinispan.xml'
63-
enabled = false
63+
enabled = project.hasProperty('testInfinispan')
6464
// Without this I have trouble running specific test using --tests switch
6565
doFirst {
6666
filter.includePatterns.each {

hibernate-infinispan/src/main/java/org/hibernate/cache/infinispan/InfinispanRegionFactory.java

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,14 @@
5757
import org.infinispan.configuration.cache.CacheMode;
5858
import org.infinispan.configuration.cache.Configuration;
5959
import org.infinispan.configuration.cache.ConfigurationBuilder;
60+
import org.infinispan.configuration.cache.ExpirationConfiguration;
6061
import org.infinispan.configuration.parsing.ConfigurationBuilderHolder;
6162
import org.infinispan.configuration.parsing.ParserRegistry;
6263
import org.infinispan.factories.GlobalComponentRegistry;
6364
import org.infinispan.manager.DefaultCacheManager;
6465
import org.infinispan.manager.EmbeddedCacheManager;
6566
import org.infinispan.transaction.TransactionMode;
6667
import org.infinispan.transaction.lookup.GenericTransactionManagerLookup;
67-
import org.infinispan.util.concurrent.IsolationLevel;
6868
import org.infinispan.util.logging.Log;
6969
import org.infinispan.util.logging.LogFactory;
7070

@@ -221,14 +221,14 @@ public class InfinispanRegionFactory implements RegionFactory {
221221
* Locking is still required since the putFromLoad validator
222222
* code uses conditional operations (i.e. putIfAbsent)
223223
*/
224-
public static final Configuration PENDING_PUTS_CACHE_CONFIGURATION = new ConfigurationBuilder()
224+
public static final Configuration DEFAULT_PENDING_PUTS_CACHE_CONFIGURATION = new ConfigurationBuilder()
225225
.clustering().cacheMode(CacheMode.LOCAL)
226226
.transaction().transactionMode(TransactionMode.NON_TRANSACTIONAL)
227227
.expiration().maxIdle(TimeUnit.SECONDS.toMillis(60))
228-
.storeAsBinary().enabled(false)
229-
.locking().isolationLevel(IsolationLevel.READ_COMMITTED)
230228
.jmxStatistics().disable().build();
231229

230+
private Configuration pendingPutsCacheConfiguration;
231+
232232
private EmbeddedCacheManager manager;
233233

234234
private final Map<String, TypeOverrides> typeOverrides = new HashMap<String, TypeOverrides>();
@@ -389,7 +389,24 @@ public void start(SessionFactoryOptions settings, Properties properties) throws
389389
}
390390
}
391391
defineGenericDataTypeCacheConfigurations( properties );
392-
manager.defineConfiguration( PENDING_PUTS_CACHE_NAME, PENDING_PUTS_CACHE_CONFIGURATION );
392+
pendingPutsCacheConfiguration = manager.getCacheConfiguration(PENDING_PUTS_CACHE_NAME);
393+
if (pendingPutsCacheConfiguration == null) {
394+
// We need this configuration to be in place, so this is a fallback if the user did not define it
395+
pendingPutsCacheConfiguration = DEFAULT_PENDING_PUTS_CACHE_CONFIGURATION;
396+
manager.defineConfiguration(PENDING_PUTS_CACHE_NAME, pendingPutsCacheConfiguration);
397+
}
398+
else {
399+
if (pendingPutsCacheConfiguration.clustering().cacheMode().isClustered()) {
400+
throw new IllegalStateException("Pending-puts cache must not be clustered!");
401+
}
402+
if (pendingPutsCacheConfiguration.transaction().transactionMode().isTransactional()) {
403+
throw new IllegalStateException("Pending-puts cache must not be transactional!");
404+
}
405+
ExpirationConfiguration expiration = pendingPutsCacheConfiguration.expiration();
406+
if (expiration.maxIdle() <= 0 && expiration.lifespan() <= 0) {
407+
log.warn("Pending-puts cache should expire old entries");
408+
}
409+
}
393410
}
394411
catch (CacheException ce) {
395412
throw ce;
@@ -731,4 +748,8 @@ private TypeOverrides overrideStatisticsIfPresent(TypeOverrides override, Proper
731748
}
732749
return override;
733750
}
751+
752+
public Configuration getPendingPutsCacheConfiguration() {
753+
return pendingPutsCacheConfiguration;
754+
}
734755
}

hibernate-infinispan/src/main/java/org/hibernate/cache/infinispan/collection/CollectionRegionImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
package org.hibernate.cache.infinispan.collection;
88

99
import org.hibernate.cache.CacheException;
10+
import org.hibernate.cache.infinispan.InfinispanRegionFactory;
1011
import org.hibernate.cache.infinispan.access.AccessDelegate;
1112
import org.hibernate.cache.infinispan.impl.BaseTransactionalDataRegion;
1213
import org.hibernate.cache.spi.CacheDataDescription;
1314
import org.hibernate.cache.spi.CacheKeysFactory;
1415
import org.hibernate.cache.spi.CollectionRegion;
15-
import org.hibernate.cache.spi.RegionFactory;
1616
import org.hibernate.cache.spi.access.AccessType;
1717
import org.hibernate.cache.spi.access.CollectionRegionAccessStrategy;
1818
import org.infinispan.AdvancedCache;
@@ -39,7 +39,7 @@ public class CollectionRegionImpl extends BaseTransactionalDataRegion implements
3939
*/
4040
public CollectionRegionImpl(
4141
AdvancedCache cache, String name, TransactionManager transactionManager,
42-
CacheDataDescription metadata, RegionFactory factory, CacheKeysFactory cacheKeysFactory) {
42+
CacheDataDescription metadata, InfinispanRegionFactory factory, CacheKeysFactory cacheKeysFactory) {
4343
super( cache, name, transactionManager, metadata, factory, cacheKeysFactory );
4444
}
4545

hibernate-infinispan/src/main/java/org/hibernate/cache/infinispan/entity/EntityRegionImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
package org.hibernate.cache.infinispan.entity;
88

99
import org.hibernate.cache.CacheException;
10+
import org.hibernate.cache.infinispan.InfinispanRegionFactory;
1011
import org.hibernate.cache.infinispan.access.AccessDelegate;
1112
import org.hibernate.cache.infinispan.impl.BaseTransactionalDataRegion;
1213
import org.hibernate.cache.spi.CacheDataDescription;
1314
import org.hibernate.cache.spi.CacheKeysFactory;
1415
import org.hibernate.cache.spi.EntityRegion;
15-
import org.hibernate.cache.spi.RegionFactory;
1616
import org.hibernate.cache.spi.access.AccessType;
1717
import org.hibernate.cache.spi.access.EntityRegionAccessStrategy;
1818

@@ -40,7 +40,7 @@ public class EntityRegionImpl extends BaseTransactionalDataRegion implements Ent
4040
*/
4141
public EntityRegionImpl(
4242
AdvancedCache cache, String name, TransactionManager transactionManager,
43-
CacheDataDescription metadata, RegionFactory factory, CacheKeysFactory cacheKeysFactory) {
43+
CacheDataDescription metadata, InfinispanRegionFactory factory, CacheKeysFactory cacheKeysFactory) {
4444
super( cache, name, transactionManager, metadata, factory, cacheKeysFactory);
4545
}
4646

hibernate-infinispan/src/main/java/org/hibernate/cache/infinispan/impl/BaseGeneralDataRegion.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
package org.hibernate.cache.infinispan.impl;
88

99
import org.hibernate.cache.CacheException;
10+
import org.hibernate.cache.infinispan.InfinispanRegionFactory;
1011
import org.hibernate.cache.infinispan.util.Caches;
1112
import org.hibernate.cache.spi.GeneralDataRegion;
12-
import org.hibernate.cache.spi.RegionFactory;
1313

1414
import org.hibernate.engine.spi.SessionImplementor;
1515
import org.infinispan.AdvancedCache;
@@ -33,7 +33,7 @@ public abstract class BaseGeneralDataRegion extends BaseRegion implements Genera
3333
*/
3434
public BaseGeneralDataRegion(
3535
AdvancedCache cache, String name,
36-
RegionFactory factory) {
36+
InfinispanRegionFactory factory) {
3737
super( cache, name, null, factory );
3838
this.putCache = Caches.ignoreReturnValuesCache( cache );
3939
}

hibernate-infinispan/src/main/java/org/hibernate/cache/infinispan/impl/BaseRegion.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,15 @@
88

99
import java.util.Collections;
1010
import java.util.Map;
11-
import java.util.concurrent.atomic.AtomicReference;
11+
1212
import javax.transaction.SystemException;
1313
import javax.transaction.Transaction;
1414
import javax.transaction.TransactionManager;
1515

1616
import org.hibernate.cache.CacheException;
17-
import org.hibernate.cache.infinispan.access.PutFromLoadValidator;
17+
import org.hibernate.cache.infinispan.InfinispanRegionFactory;
1818
import org.hibernate.cache.infinispan.util.Caches;
1919
import org.hibernate.cache.spi.Region;
20-
import org.hibernate.cache.spi.RegionFactory;
2120

2221
import org.hibernate.cache.spi.access.AccessType;
2322
import org.infinispan.AdvancedCache;
@@ -42,7 +41,7 @@ public abstract class BaseRegion implements Region {
4241
protected final AdvancedCache cache;
4342
protected final AdvancedCache localAndSkipLoadCache;
4443
protected final TransactionManager tm;
45-
private final RegionFactory factory;
44+
protected final InfinispanRegionFactory factory;
4645

4746
protected volatile long lastRegionInvalidation = Long.MIN_VALUE;
4847
protected int invalidations = 0;
@@ -55,7 +54,7 @@ public abstract class BaseRegion implements Region {
5554
* @param transactionManager transaction manager may be needed even for non-transactional caches.
5655
* @param factory for this region
5756
*/
58-
public BaseRegion(AdvancedCache cache, String name, TransactionManager transactionManager, RegionFactory factory) {
57+
public BaseRegion(AdvancedCache cache, String name, TransactionManager transactionManager, InfinispanRegionFactory factory) {
5958
this.cache = cache;
6059
this.name = name;
6160
this.tm = transactionManager;
@@ -254,4 +253,8 @@ protected void runInvalidation(boolean inTransaction) {
254253
localAndSkipLoadCache.clear();
255254
}
256255
}
256+
257+
public InfinispanRegionFactory getRegionFactory() {
258+
return factory;
259+
}
257260
}

hibernate-infinispan/src/main/java/org/hibernate/cache/infinispan/impl/BaseTransactionalDataRegion.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import org.hibernate.cache.infinispan.util.VersionedEntry;
2222
import org.hibernate.cache.spi.CacheDataDescription;
2323
import org.hibernate.cache.spi.CacheKeysFactory;
24-
import org.hibernate.cache.spi.RegionFactory;
2524
import org.hibernate.cache.spi.TransactionalDataRegion;
2625

2726
import org.hibernate.cache.spi.access.AccessType;
@@ -79,16 +78,15 @@ protected enum Strategy {
7978
*/
8079
public BaseTransactionalDataRegion(
8180
AdvancedCache cache, String name, TransactionManager transactionManager,
82-
CacheDataDescription metadata, RegionFactory factory, CacheKeysFactory cacheKeysFactory) {
81+
CacheDataDescription metadata, InfinispanRegionFactory factory, CacheKeysFactory cacheKeysFactory) {
8382
super( cache, name, transactionManager, factory);
8483
this.metadata = metadata;
8584
this.cacheKeysFactory = cacheKeysFactory;
8685

8786
Configuration configuration = cache.getCacheConfiguration();
8887
requiresTransaction = configuration.transaction().transactionMode().isTransactional()
8988
&& !configuration.transaction().autoCommit();
90-
// TODO: make these timeouts configurable
91-
tombstoneExpiration = InfinispanRegionFactory.PENDING_PUTS_CACHE_CONFIGURATION.expiration().maxIdle();
89+
tombstoneExpiration = factory.getPendingPutsCacheConfiguration().expiration().maxIdle();
9290
if (!isRegionAccessStrategyEnabled()) {
9391
strategy = Strategy.NONE;
9492
}

hibernate-infinispan/src/main/java/org/hibernate/cache/infinispan/naturalid/NaturalIdRegionImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
package org.hibernate.cache.infinispan.naturalid;
88

99
import org.hibernate.cache.CacheException;
10+
import org.hibernate.cache.infinispan.InfinispanRegionFactory;
1011
import org.hibernate.cache.infinispan.access.AccessDelegate;
1112
import org.hibernate.cache.infinispan.impl.BaseTransactionalDataRegion;
1213
import org.hibernate.cache.spi.CacheDataDescription;
1314
import org.hibernate.cache.spi.CacheKeysFactory;
1415
import org.hibernate.cache.spi.NaturalIdRegion;
15-
import org.hibernate.cache.spi.RegionFactory;
1616
import org.hibernate.cache.spi.access.AccessType;
1717
import org.hibernate.cache.spi.access.NaturalIdRegionAccessStrategy;
1818
import org.infinispan.AdvancedCache;
@@ -40,7 +40,7 @@ public class NaturalIdRegionImpl extends BaseTransactionalDataRegion
4040
*/
4141
public NaturalIdRegionImpl(
4242
AdvancedCache cache, String name, TransactionManager transactionManager,
43-
CacheDataDescription metadata, RegionFactory factory, CacheKeysFactory cacheKeysFactory) {
43+
CacheDataDescription metadata, InfinispanRegionFactory factory, CacheKeysFactory cacheKeysFactory) {
4444
super( cache, name, transactionManager, metadata, factory, cacheKeysFactory );
4545
}
4646

hibernate-infinispan/src/main/java/org/hibernate/cache/infinispan/query/QueryResultsRegionImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010
import javax.transaction.TransactionManager;
1111

1212
import org.hibernate.cache.CacheException;
13+
import org.hibernate.cache.infinispan.InfinispanRegionFactory;
1314
import org.hibernate.cache.infinispan.impl.BaseTransactionalDataRegion;
1415
import org.hibernate.cache.infinispan.util.Caches;
1516
import org.hibernate.cache.infinispan.util.InvocationAfterCompletion;
1617
import org.hibernate.cache.spi.QueryResultsRegion;
17-
import org.hibernate.cache.spi.RegionFactory;
1818
import org.hibernate.engine.spi.SessionImplementor;
1919
import org.hibernate.resource.transaction.TransactionCoordinator;
2020
import org.infinispan.AdvancedCache;
@@ -52,7 +52,7 @@ public class QueryResultsRegionImpl extends BaseTransactionalDataRegion implemen
5252
* @param name of the query region
5353
* @param factory for the query region
5454
*/
55-
public QueryResultsRegionImpl(AdvancedCache cache, String name, TransactionManager transactionManager, RegionFactory factory) {
55+
public QueryResultsRegionImpl(AdvancedCache cache, String name, TransactionManager transactionManager, InfinispanRegionFactory factory) {
5656
super( cache, name, transactionManager, null, factory, null );
5757
// If Infinispan is using INVALIDATION for query cache, we don't want to propagate changes.
5858
// We use the Timestamps cache to manage invalidation

hibernate-infinispan/src/main/java/org/hibernate/cache/infinispan/timestamp/ClusteredTimestampsRegionImpl.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,12 @@
1111
import javax.transaction.Transaction;
1212

1313
import org.hibernate.cache.CacheException;
14+
import org.hibernate.cache.infinispan.InfinispanRegionFactory;
1415
import org.hibernate.cache.infinispan.util.Caches;
15-
import org.hibernate.cache.spi.RegionFactory;
1616

1717
import org.hibernate.engine.spi.SessionImplementor;
1818
import org.infinispan.AdvancedCache;
1919
import org.infinispan.commons.util.CloseableIterable;
20-
import org.infinispan.container.entries.CacheEntry;
2120
import org.infinispan.context.Flag;
2221
import org.infinispan.notifications.Listener;
2322
import org.infinispan.notifications.cachelistener.annotation.CacheEntryModified;
@@ -51,7 +50,7 @@ public class ClusteredTimestampsRegionImpl extends TimestampsRegionImpl {
5150
*/
5251
public ClusteredTimestampsRegionImpl(
5352
AdvancedCache cache,
54-
String name, RegionFactory factory) {
53+
String name, InfinispanRegionFactory factory) {
5554
super( cache, name, factory );
5655
cache.addListener( this );
5756
populateLocalCache();

0 commit comments

Comments
 (0)