-
Bug
-
Resolution: Done
-
Major
-
None
-
None
-
None
We are using a shared transactional cache with an underlying JDBC store. The cache is configured as REPL_SYNC.
When executing cache.put() operations, the entry is added to the cache, but in some cases it is not written to the database. In approximately 50% of the test cases, the value is not persisted successfully.
The setup works correctly when running with a single node (no clustering). However, when using two nodes, the problem occurs.
I have created a test project to reproduce the issue. The project is configured to use Infinispan 14.0.35, which is the version we currently use. The same issue also occurs with newer versions, including Infinispan 15.
Test-Project: https://github.com/thaefner/infinispan-jdbc-store-bug
Please refer to the README.md for instructions on how to set up the database and IP addresses.
We have debugged Infinispan but have not been able to identify where the problem occurs. It may be related to the following code section:
infinispan/persistence/jdbc-common/src/main/java/org/infinispan/persistence/jdbc/common/sql/BaseTableOperations.java
Line 166 in 20cae30
| public void batchUpdates(Connection connection, int writePublisherCount, Publisher<Object> removePublisher, |
We use the JDBC cache store as our primary persistence mechanism. Therefore, this issue is a major showstopper for us, as it leads to data loss in production.
At the moment, the only workaround available to us is to run the system in a single-node cluster, which is not a viable solution for all of our customers.
Expected behavior
cache.put() should always persist into the database.
Actual behavior
When executing cache.put() operations, the entry is added to the cache, but in some cases it is not written to the database. In approximately 50% of the test cases, the value is not persisted successfully.
How to Reproduce?
Test-Project: https://github.com/thaefner/infinispan-jdbc-store-bug
- links to