<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body link="#355491" alink="#4262a1" vlink="#355491" style="background: #e2e2e2; margin: 0; padding: 20px;">

<div>
        <table cellpadding="0" bgcolor="#FFFFFF" border="0" cellspacing="0" style="border: 1px solid #dadada; margin-bottom: 30px; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                <tbody>
                        <tr>

                                <td>

                                        <table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" style="border: solid 2px #ccc; background: #dadada; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                                                <tbody>
                                                        <tr>
                                                                <td bgcolor="#000000" valign="middle" height="58px" style="border-bottom: 1px solid #ccc; padding: 20px; -moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 5px; -webkit-border-top-left-radius: 5px;">
                                                                        <h1 style="color: #333333; font: bold 22px Arial, Helvetica, sans-serif; margin: 0; display: block !important;">
                                                                        <!-- To have a header image/logo replace the name below with your img tag -->
                                                                        <!-- Email clients will render the images when the message is read so any image -->
                                                                        <!-- must be made available on a public server, so that all recipients can load the image. -->
                                                                        <a href="https://community.jboss.org/index.jspa" style="text-decoration: none; color: #E1E1E1">JBoss Community</a></h1>
                                                                </td>

                                                        </tr>
                                                        <tr>
                                                                <td bgcolor="#FFFFFF" style="font: normal 12px Arial, Helvetica, sans-serif; color:#333333; padding: 20px;  -moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 5px; -webkit-border-bottom-left-radius: 5px;"><h3 style="margin: 10px 0 5px; font-size: 17px; font-weight: normal;">
    Intermittent cache invalidation failures
</h3>
<span style="margin-bottom: 10px;">
    reply from <a href="https://community.jboss.org/people/lkrzyzanek">Libor Krzyžanek</a> in <i>JBoss Cache</i> - <a href="https://community.jboss.org/message/794044#794044">View the full discussion</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><p>Hi, I'm geting regular but intermittent invaliation failures from my distributed JBoss Cache / Hibernate setup and I'm hoping someone can give me a few pointers on how to track down this problem.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>I can easily recreate the problem in our live environment, by updating a cached entity on one node, then checking the same entity on another node. Approx 50% of the time, the cache hasn't invalidated on the 2nd node, so the older version of the entity is shown.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>I'm using a TCP multicast (because this is on EC2 so I can't use UDP) and there are currently 8 nodes in the cache.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Debug logs aren't showing any messages that would indicate a problem and the logs are identical when the invalidation occurs and when it fails. Can anyone suggest suitable log setting that might show some more useful logs (switch all to trace level outputted far too much info to make sense of)?</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Thanks in advance for any help or suggestions!</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>JBoss Cache v3.1.0</p><p>JGroups v2.6.7</p><p>Hibernate v3.3.2</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>The debug logs I get on the node that is updating the entity are a follows:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p class="p1">23 Jan 2013 17:04:38,536 [http-bio-8443-exec-8] DEBUG InvalidationInterceptor:244 - Is a CRUD method</p><p class="p1">23 Jan 2013 17:04:38,550 [http-bio-8443-exec-8] DEBUG InvalidationInterceptor:244 - Is a CRUD method</p><p class="p1">23 Jan 2013 17:04:38,550 [http-bio-8443-exec-8] DEBUG InvalidationInterceptor:381 - Cache [XX.XX.XX.XX:6800] replicating InvalidateCommand{fqn=/mbCache/configData/ENTITY/com.package.EntityName#4881}</p><p class="p1" style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p class="p1" style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p class="p1" style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>My cache settings are:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p class="p1"><span class="s1">&#160;&#160;&#160; </span>&lt;!-- A <span class="s2">config</span> appropriate for entity/collection caching that</p><p class="p1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; uses pessimistic locking --&gt;</p><p class="p2"><span class="s1">&#160;&#160;&#160; </span><span class="s3">&lt;</span><span class="s4">cache-config</span><span class="s1"> </span><span class="s5">name</span><span class="s1">=</span>"pessimistic-entity"<span class="s3">&gt;</span></p><p class="p3" style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p class="p1"><span class="s1">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span>&lt;!-- Node locking scheme --&gt;</p><p class="p4">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span class="s3">&lt;</span><span class="s4">attribute</span> <span class="s5">name</span>=<span class="s6">"NodeLockingScheme"</span><span class="s3">&gt;</span>PESSIMISTIC<span class="s3">&lt;/</span><span class="s4">attribute</span><span class="s3">&gt;</span></p><p class="p3" style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p class="p4">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span class="s7">&lt;!--</span></p><p class="p1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; READ_COMMITTED is as strong as necessary for most </p><p class="p1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 2nd Level Cache use cases.</p><p class="p1">&#160;&#160;&#160;&#160;&#160;&#160;&#160; --&gt;</p><p class="p4">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span class="s3">&lt;</span><span class="s4">attribute</span> <span class="s5">name</span>=<span class="s6">"IsolationLevel"</span><span class="s3">&gt;</span>READ_COMMITTED<span class="s3">&lt;/</span><span class="s4">attribute</span><span class="s3">&gt;</span></p><p class="p3" style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p class="p1"><span class="s1">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span>&lt;!-- Mode of communication with peer caches.</p><p class="p5">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </p><p class="p1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; INVALIDATION_SYNC is highly recommended as the mode for use</p><p class="p1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; with entity and collection caches.</p><p class="p1">&#160;&#160;&#160;&#160;&#160;&#160;&#160; --&gt;</p><p class="p4">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span class="s3">&lt;</span><span class="s4">attribute</span> <span class="s5">name</span>=<span class="s6">"CacheMode"</span><span class="s3">&gt;</span>INVALIDATION_SYNC<span class="s3">&lt;/</span><span class="s4">attribute</span><span class="s3">&gt;</span></p><p class="p3" style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p class="p1"><span class="s1">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span>&lt;!-- Name of cluster. Needs to be the same for all members, in order</p><p class="p1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; to find each other --&gt;</p><p class="p4">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span class="s3">&lt;</span><span class="s4">attribute</span> <span class="s5">name</span>=<span class="s6">"ClusterName"</span><span class="s3">&gt;</span>pessimistic-entity<span class="s3">&lt;/</span><span class="s4">attribute</span><span class="s3">&gt;</span></p><p class="p3">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </p><p class="p1"><span class="s1">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span>&lt;!-- Use a UDP (<span class="s2">multicast</span>) based stack. A <span class="s2">udp</span>-sync stack might be</p><p class="p1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; slightly better (no JGroups FC) but we stick with <span class="s2">udp</span> to</p><p class="p1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; help ensure this cache and others like <span class="s2">timestamps</span>-cache</p><p class="p1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; that require FC can use the same underlying JGroups resources. --&gt;</p><p class="p2"><span class="s1">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span><span class="s3">&lt;</span><span class="s4">attribute</span><span class="s1"> </span><span class="s5">name</span><span class="s1">=</span>"MultiplexerStack"<span class="s3">&gt;</span><span class="s8">tcp</span><span class="s3">&lt;/</span><span class="s4">attribute</span><span class="s3">&gt;</span></p><p class="p3" style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p class="p1"><span class="s1">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span>&lt;!-- Whether or not to fetch state on joining a cluster. --&gt;</p><p class="p2"><span class="s1">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span><span class="s3">&lt;</span><span class="s4">attribute</span><span class="s1"> </span><span class="s5">name</span><span class="s1">=</span>"FetchInMemoryState"<span class="s3">&gt;</span><span class="s1">false</span><span class="s3">&lt;/</span><span class="s4">attribute</span><span class="s3">&gt;</span></p><p class="p3" style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p class="p4">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span class="s7">&lt;!--</span></p><p class="p1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; The max amount of time (in milliseconds) we wait until the</p><p class="p1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; state (<span class="s2">ie</span>. the contents of the cache) are retrieved from</p><p class="p1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; existing members at startup. Ignored if FetchInMemoryState=false.</p><p class="p1">&#160;&#160;&#160;&#160;&#160;&#160;&#160; --&gt;</p><p class="p2"><span class="s1">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span><span class="s3">&lt;</span><span class="s4">attribute</span><span class="s1"> </span><span class="s5">name</span><span class="s1">=</span>"StateRetrievalTimeout"<span class="s3">&gt;</span><span class="s1">20000</span><span class="s3">&lt;/</span><span class="s4">attribute</span><span class="s3">&gt;</span></p><p class="p3" style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p class="p4">&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span class="s7">&lt;!--</span></p><p class="p1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Number of milliseconds to wait until all responses for a</p><p class="p1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; synchronous call have been received.</p><p class="p1">&#160;&#160;&#160;&#160;&#160;&#160;&#160; --&gt;</p><p class="p6"><span class="s1">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span><span class="s3">&lt;</span>attribute<span class="s1"> </span><span class="s5">name</span><span class="s1">=</span><span class="s6">"SyncReplTimeout"</span><span class="s3">&gt;</span><span class="s1">20000</span><span class="s3">&lt;/</span>attribute<span class="s3">&gt;</span></p><p class="p3" style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p class="p1"><span class="s1">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span>&lt;!-- Max number of milliseconds to wait for a lock acquisition --&gt;</p><p class="p2"><span class="s1">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span><span class="s3">&lt;</span><span class="s4">attribute</span><span class="s1"> </span><span class="s5">name</span><span class="s1">=</span>"LockAcquisitionTimeout"<span class="s3">&gt;</span><span class="s1">15000</span><span class="s3">&lt;/</span><span class="s4">attribute</span><span class="s3">&gt;</span></p><p class="p3" style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p class="p4">&#160;&#160;&#160;&#160;&#160;&#160; <span class="s7">&lt;!--</span></p><p class="p1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Indicate whether to use <span class="s2">marshalling</span> or not. Set this to true if you </p><p class="p1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; are running under a scoped class loader, e.g., inside an application </p><p class="p1">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; server.</p><p class="p1">&#160;&#160;&#160;&#160;&#160;&#160; --&gt;</p><p class="p2"><span class="s1">&#160;&#160;&#160;&#160;&#160;&#160; </span><span class="s3">&lt;</span><span class="s4">attribute</span><span class="s1"> </span><span class="s5">name</span><span class="s1">=</span>"UseRegionBasedMarshalling"<span class="s3">&gt;</span><span class="s1">true</span><span class="s3">&lt;/</span><span class="s4">attribute</span><span class="s3">&gt;</span></p><p class="p1"><span class="s1">&#160;&#160;&#160;&#160;&#160;&#160; </span>&lt;!-- Must match the value of "useRegionBasedMarshalling" --&gt;</p><p class="p2"><span class="s1">&#160;&#160;&#160;&#160;&#160;&#160; </span><span class="s3">&lt;</span><span class="s4">attribute</span><span class="s1"> </span><span class="s5">name</span><span class="s1">=</span>"InactiveOnStartup"<span class="s3">&gt;</span><span class="s1">true</span><span class="s3">&lt;/</span><span class="s4">attribute</span><span class="s3">&gt;</span></p></div>

<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
    <p style="margin: 0;">Reply to this message by <a href="https://community.jboss.org/message/794044#794044">going to Community</a></p>
        <p style="margin: 0;">Start a new discussion in JBoss Cache at <a href="https://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2052">Community</a></p>
</div></td>
                        </tr>
                    </tbody>
                </table>


                </td>
            </tr>
        </tbody>
    </table>

</div>

</body>
</html>