| Summary: | Null value read with RR can be replaced by cache loader value | ||
|---|---|---|---|
| Product: | [JBoss] JBoss Data Grid 6 | Reporter: | William Burns <wburns> |
| Component: | Infinispan | Assignee: | Tristan Tarrant <ttarrant> |
| Status: | VERIFIED --- | QA Contact: | Martin Gencur <mgencur> |
| Severity: | unspecified | Docs Contact: | |
| Priority: | unspecified | ||
| Version: | 6.2.0 | CC: | jdg-bugs, vjuranek |
| Target Milestone: | CR1 | ||
| Target Release: | 6.2.0 | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | Bug Fix | |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | Type: | Bug | |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
Currently the CacheLoaderInterceptor does the following check to determine if it should check the loader for a value if (e == null || e.isNull() || e.getValue() == null) { Unfortunately this means it checks the loader when a null value is in the entry when using RR. This can cause an issue if another transaction commits that key and puts a value that results in that value being inserted into the loader. This also is a performance issue for RR, since it has to check the loader over and over for a given key even if it was found null the first time. Initial thought is to do something like setSkipRemoteGet and that could actually be used for a dual purpose possibly. Version-Release number of selected component (if applicable): How reproducible: Steps to Reproduce: 1. Start a new transaction with Repeatable Read 2. Invoke get on the cache which returns null 3. Cache Loader updates the given key behind the scenes 4. Invoke get on the cache Actual results: The cache returns the new value that was inserted into cache loader (violates Repeatable Read). Expected results: The get should return null while in the same transaction Additional info: