Hi,
I have tried configuring the binary and binary metadata caches as non-transactional with no changes. Errors appear sooner or later. Typically after 3 hours of continued heavy use (100 threads when load testing with JMeter).
- I'm using an embedded version of ModeShape, it is embedded in a webapp that can be executed in any application server, tests are done with Tomcat (TomEE).
- transactions are controlled inside of ModeShape
- I do have eviction and I have seen in my latest test the error you mention.
- I will try MS 3.8.1 Final although when we tried this version we saw more crashes -under normal use, not heavy use- than with 3.8.0 Final. I cannot move to MS 4 at this time but I may be able to in the future.
- Here follows my last configuration just in case it might be useful to someone who is using Oracle and clustering.
modeshape_config.json:
{
"name" : "mpw.repository",
"jndiName" : "",
"transactionMode" : "auto",
"storage" : {
"cacheName" : "mpw.cache",
"cacheConfiguration" : "mpw/infinispan_config.xml",
"binaryStorage" : {
"type" : "cache",
"dataCacheName" : "mpw.data_cache",
"metadataCacheName" : "mpw.metadata_cache"
}
},
"monitoring" : {
"enabled" : false
},
"security" : {
"anonymous" : {
"username" : "<anonymous>",
"roles" : [],
"useOnFailedLogin" : false
},
"providers" : [
{ "classname" : "com....AuthenticationProvider" }
]
},
"query" : {
"indexStorage" : {
"type" : "filesystem",
"location" : "mpw/index",
"lockingStrategy":"simple",
"fileSystemAccessType":"auto"
}
},
"clustering" : {
"clusterName" : "mpw-modeshape-cluster",
"channelConfiguration" : "tcp.xml"
}
}
infinispan_config.xml:
<infinispan
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:config:5.2 http://www.infinispan.org/schemas/infinispan-config-5.2.xsd
urn:infinispan:config:jdbc:5.2 http://www.infinispan.org/schemas/infinispan-cachestore-jdbc-config-5.2.xsd"
xmlns="urn:infinispan:config:5.2">
<global>
<!-- Defines the global settings shared by all caches -->
<globalJmxStatistics enabled="false" allowDuplicateDomains="true"/>
<shutdown hookBehavior="REGISTER" />
<transport clusterName="mpw-infinispan-cluster">
<properties>
<property name="configurationFile" value="tcp.xml" />
</properties>
</transport>
</global>
<!--
Defines the default behavior for all caches, including those created dynamically (e.g., when a
repository uses a cache that doesn't exist in this configuration).
-->
<default/>
<!-- Repository store -->
<namedCache name="mpw.cache">
<clustering mode="replication">
<sync />
</clustering>
<!-- The original GenericTransactionManagerLookup did not work for Websphere 8. -->
<transaction transactionManagerLookupClass="com.....CustomGenericTransactionManagerLookup"
transactionMode="TRANSACTIONAL" lockingMode="PESSIMISTIC"/>
<eviction maxEntries="1000" strategy="LIRS"/>
<!--<deadlockDetection enabled="true" spinDuration="1000"/>-->
<locking useLockStriping="false" lockAcquisitionTimeout="15000"/> <!--concurrencylevel="150" -->
<!--
Define the cache loaders (i.e., cache stores). Passivation is false because we want *all*
data to be persisted, not just what doesn't fit into memory. Shared is false because there
are no other caches sharing this file store. We set preload to false for lazy loading;
may be improved by preloading and configuring eviction.
We can have multiple cache loaders, which get chained. But we'll define just one.
-->
<loaders passivation="false" shared="true" preload="false">
<stringKeyedJdbcStore xmlns="urn:infinispan:config:jdbc:5.2" fetchPersistentState="false" ignoreModifications="false" purgeOnStartup="false">
<connectionPool connectionUrl="jdbc:oracle:thin:@...:1521:ORCL" username="c##ISPN_USER" password="..." driverClass="oracle.jdbc.OracleDriver"/>
<stringKeyedTable dropOnExit="false" createOnStart="true" prefix="ISPN">
<idColumn name="ID_COLUMN" type="VARCHAR2(500)"/>
<dataColumn name="DATA_COLUMN" type="BLOB"/>
<timestampColumn name="TIMESTAMP_COLUMN" type="NUMBER(19)"/>
</stringKeyedTable>
</stringKeyedJdbcStore>
</loaders>
</namedCache>
<!-- binary store -->
<namedCache name="mpw.data_cache">
<clustering mode="replication">
<sync />
</clustering>
<transaction transactionManagerLookupClass="com...CustomGenericTransactionManagerLookup"
transactionMode="NON_TRANSACTIONAL" lockingMode="PESSIMISTIC"/>
<eviction maxEntries="1000" strategy="LIRS"/>
<locking useLockStriping="false" lockAcquisitionTimeout="15000" />
<loaders passivation="false" shared="true" preload="false">
<stringKeyedJdbcStore xmlns="urn:infinispan:config:jdbc:5.2" fetchPersistentState="false" ignoreModifications="false" purgeOnStartup="false">
<connectionPool connectionUrl="jdbc:oracle:thin:@...:1521:ORCL" username="c##ISPN_USER" password="..." driverClass="oracle.jdbc.OracleDriver"/>
<stringKeyedTable dropOnExit="false" createOnStart="true" prefix="ISPN">
<idColumn name="ID_COLUMN" type="VARCHAR2(500)"/>
<dataColumn name="DATA_COLUMN" type="BLOB"/>
<timestampColumn name="TIMESTAMP_COLUMN" type="NUMBER(19)"/>
</stringKeyedTable>
</stringKeyedJdbcStore>
</loaders>
</namedCache>
<!-- binary metadata store -->
<namedCache name="mpw.metadata_cache">
<clustering mode="replication">
<sync />
</clustering>
<transaction transactionManagerLookupClass="com...CustomGenericTransactionManagerLookup"
transactionMode="NON_TRANSACTIONAL" lockingMode="PESSIMISTIC"/>
<eviction maxEntries="1000" strategy="LIRS"/>
<locking useLockStriping="false" lockAcquisitionTimeout="15000" />
<loaders passivation="false" shared="true" preload="false">
<stringKeyedJdbcStore xmlns="urn:infinispan:config:jdbc:5.2" fetchPersistentState="false" ignoreModifications="false" purgeOnStartup="false">
<connectionPool connectionUrl="jdbc:oracle:thin:@...:1521:ORCL" username="c##ISPN_USER" password="..." driverClass="oracle.jdbc.OracleDriver"/>
<stringKeyedTable dropOnExit="false" createOnStart="true" prefix="ISPN">
<idColumn name="ID_COLUMN" type="VARCHAR2(500)"/>
<dataColumn name="DATA_COLUMN" type="BLOB"/>
<timestampColumn name="TIMESTAMP_COLUMN" type="NUMBER(19)"/>
</stringKeyedTable>
</stringKeyedJdbcStore>
</loaders>
</namedCache>
</infinispan>
Note that transactionMode for the last two caches is NON_TRANSACTIONAL although in every test but the last one the value was TRANSACTIONAL.
Thanks and regards,
pau