<font size=2 face="sans-serif">Hello Matej<br>
<br>
No worries about the delay, my customer has not responded so you are ahead
of schedule. You are correct, the purpose of this PR is to trigger the
&quot;dirty&quot; state in liberty's session storage. Let me try and describe
the flow again and hopefully it will be clearer: <br>
<br>
<br>
A1) The application is started for the first time. A conversation map is
created and stored into the session context. This marks it as dirty.<br>
A2) The application puts stuff into the map. Lets say this leaves the map
in State A</font>
<br><font size=2 face="sans-serif">A3) The server is told to shut down.<br>
A4) Liberty sees the map is dirty and saves map State A to persistent storage.
</font>
<br>
<br><font size=2 face="sans-serif">B1) The server starts again. <br>
B2) Weld retrieves the conversation map (State A) from persistent storage.
Since it already has a map it does not put anything into session storage.
Thus the map is clean. </font>
<br><font size=2 face="sans-serif">B3) The application does more stuff,
moving the map to (State B). <br>
B3) The server is told to shut down.<br>
B4) Liberty sees the map is clean, it doesn't transfer anything to persistent
storage. </font>
<br>
<br><font size=2 face="sans-serif">C1) The server starts again. <br>
C2) Weld retrieves the conversation map (State A). This is the wrong state.
<br>
<br>
<br>
My PR changes B2 so that Weld will set the same map back into session storage.
Then in B4 liberty will see the map is dirty and save State B to storage,
ensuring the correct state is retrieved at C2. &nbsp;</font>
<br>
<br><font size=2 face="sans-serif">We do have alternative solutions, for
example you can configure Liberty to store everything regardless of whether
it is dirty or not. However this has performance implications and so my
customer does not want to use that option. <br>
<br>
Regards<br>
Benjamin<br>
</font>
<br>
<br>
<br>
<br><font size=1 color=#5f5f5f face="sans-serif">From: &nbsp; &nbsp; &nbsp;
&nbsp;</font><font size=1 face="sans-serif">Matej Novotny &lt;manovotn@redhat.com&gt;</font>
<br><font size=1 color=#5f5f5f face="sans-serif">To: &nbsp; &nbsp; &nbsp;
&nbsp;</font><font size=1 face="sans-serif">Benjamin Confino &lt;BENJAMIC@uk.ibm.com&gt;</font>
<br><font size=1 color=#5f5f5f face="sans-serif">Cc: &nbsp; &nbsp; &nbsp;
&nbsp;</font><font size=1 face="sans-serif">weld-dev@lists.jboss.org,
Allan Zhang &lt;zhang@ca.ibm.com&gt;, Shinji Ohtsuka &lt;EB92769@jp.ibm.com&gt;,
Emily Jiang &lt;EMIJIANG@uk.ibm.com&gt;</font>
<br><font size=1 color=#5f5f5f face="sans-serif">Date: &nbsp; &nbsp; &nbsp;
&nbsp;</font><font size=1 face="sans-serif">05/05/2020 12:17</font>
<br><font size=1 color=#5f5f5f face="sans-serif">Subject: &nbsp; &nbsp;
&nbsp; &nbsp;</font><font size=1 face="sans-serif">[EXTERNAL] Re:
[weld-dev] Propagation of org.jboss.weld.context.ConversationContext.conversations
through session failover</font>
<br>
<hr noshade>
<br>
<br>
<br><tt><font size=2>I finally found some time to look into this, it took
longer than I anticipated, sorry for that.<br>
<br>
Firstly, I am not quite following the flow of the reproducer you described.<br>
Weld creates the conversation map and stores in into the session on creation.
We then retrieve this map from session whenever needed and store additional
things into it.<br>
All the while we use the same map (the same reference, or object if you
will)....so Liberty should see the same state in it, right? Or am I missing
something obvious?<br>
<br>
I am not familiar with how Liberty deals with server shutdown and how it
stores session attributes, but i would expect that if you just grab the
existing map from there, it will be up to date.<br>
The PRs you sent seem superfluous to me - you are overriding the attribute
with exactly the same thing. probably just to trigger &quot;dirty&quot;
state in your session storage?<br>
<br>
Regards<br>
Matej<br>
<br>
----- Original Message -----<br>
&gt; From: &quot;Benjamin Confino&quot; &lt;BENJAMIC@uk.ibm.com&gt;<br>
&gt; To: &quot;Matej Novotny&quot; &lt;manovotn@redhat.com&gt;<br>
&gt; Cc: weld-dev@lists.jboss.org, &quot;Allan Zhang&quot; &lt;zhang@ca.ibm.com&gt;,
&quot;Shinji Ohtsuka&quot; &lt;EB92769@jp.ibm.com&gt;, &quot;Emily Jiang&quot;<br>
&gt; &lt;EMIJIANG@uk.ibm.com&gt;<br>
&gt; Sent: Wednesday, April 29, 2020 11:56:43 AM<br>
&gt; Subject: RE: [weld-dev] Propagation of org.jboss.weld.context.ConversationContext.conversations
through session<br>
&gt; failover<br>
&gt; <br>
&gt; Thank you for the heads up. When it's time to think about delivery
I'll be<br>
&gt; sure to create a PR against 3.1 and I presume you'd like me to leave<br>
&gt; master alone for now?<br>
&gt; <br>
&gt; Regards<br>
&gt; Benjamin<br>
&gt; <br>
&gt; <br>
&gt; <br>
&gt; From: &nbsp; Matej Novotny &lt;manovotn@redhat.com&gt;<br>
&gt; To: &nbsp; &nbsp; Benjamin Confino &lt;BENJAMIC@uk.ibm.com&gt;<br>
&gt; Cc: &nbsp; &nbsp; weld-dev@lists.jboss.org, Allan Zhang &lt;zhang@ca.ibm.com&gt;,
Shinji<br>
&gt; Ohtsuka &lt;EB92769@jp.ibm.com&gt;, Emily Jiang &lt;EMIJIANG@uk.ibm.com&gt;<br>
&gt; Date: &nbsp; 29/04/2020 09:51<br>
&gt; Subject: &nbsp; &nbsp; &nbsp; &nbsp;[EXTERNAL] Re: [weld-dev] Propagation
of<br>
&gt; org.jboss.weld.context.ConversationContext.conversations through session<br>
&gt; failover<br>
&gt; <br>
&gt; <br>
&gt; <br>
&gt; Hi,<br>
&gt; <br>
&gt; I'll take a look later today.<br>
&gt; Note that master branch is no longer Weld 3.x, it is 4.x (Jakarta
EE 9)<br>
&gt; and the CI there is going bonkers yet as I am in the middle of changing<br>
&gt; it.<br>
&gt; If you want to file a PR against Weld 3, you can use 3.1 branch for
that.<br>
&gt; <br>
&gt; Regards<br>
&gt; Matej<br>
&gt; <br>
&gt; ----- Original Message -----<br>
&gt; &gt; From: &quot;Benjamin Confino&quot; &lt;BENJAMIC@uk.ibm.com&gt;<br>
&gt; &gt; To: weld-dev@lists.jboss.org<br>
&gt; &gt; Cc: &quot;Allan Zhang&quot; &lt;zhang@ca.ibm.com&gt;, &quot;Shinji
Ohtsuka&quot;<br>
&gt; &lt;EB92769@jp.ibm.com&gt;, &quot;Emily Jiang&quot; &lt;EMIJIANG@uk.ibm.com&gt;<br>
&gt; &gt; Sent: Tuesday, April 28, 2020 2:31:44 PM<br>
&gt; &gt; Subject: [weld-dev] Propagation of<br>
&gt; org.jboss.weld.context.ConversationContext.conversations through session<br>
&gt; failover<br>
&gt; &gt; <br>
&gt; &gt; Hello weld<br>
&gt; &gt; <br>
&gt; &gt; I had a customer report that they were getting conversation not
found<br>
&gt; &gt; exceptions when restarting their server and visiting a url with
a ?cid=1<br>
&gt; &gt; suffix.<br>
&gt; &gt; <br>
&gt; &gt; After investigation I believe the issue is that weld was acquiring
it's<br>
&gt; &gt; ConversationContext.conversations from the session database via<br>
&gt; &gt; com.ibm.ws.session.store.db.DatabaseSession.getMultiRowAppData().
Once<br>
&gt; weld<br>
&gt; &gt; had retrieved the conversations map it would then decide that
since the<br>
&gt; map<br>
&gt; &gt; was already in the session attributes there was no need to put
it back<br>
&gt; into<br>
&gt; &gt; the attributes.<br>
&gt; &gt; <br>
&gt; &gt; This means that Liberty did not realise the conversations map
had been<br>
&gt; &gt; updated, and did not store it's updated state into the database
when the<br>
&gt; &gt; server shut down again.<br>
&gt; &gt; <br>
&gt; &gt; I have submitted a pair of pull requests that asks weld to mark
the<br>
&gt; &gt; conversation map as dirty upon access - this behaviour is gated
behind<br>
&gt; &gt; ConfigurationKey.RESET_HTTP_SESSION_ATTR_ON_BEAN_ACCESS - I have
tested<br>
&gt; it<br>
&gt; &gt; locally and it works. The next step is to prepare a test fix
for the<br>
&gt; &gt; customer to verify. However I wanted to send you this quick note
to keep<br>
&gt; you<br>
&gt; &gt; in the loop.<br>
&gt; &gt; <br>
&gt; &gt; Regards<br>
&gt; &gt; Benjamin<br>
&gt; &gt; Unless stated otherwise above:<br>
&gt; &gt; IBM United Kingdom Limited - Registered in England and Wales
with number<br>
&gt; &gt; 741598.<br>
&gt; &gt; Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire
PO6<br>
&gt; 3AU<br>
&gt; &gt; <br>
&gt; &gt; _______________________________________________<br>
&gt; &gt; weld-dev mailing list<br>
&gt; &gt; weld-dev@lists.jboss.org<br>
&gt; &gt; <br>
&gt; </font></tt><a href="https://lists.jboss.org/mailman/listinfo/weld-dev"><tt><font size=2>https://lists.jboss.org/mailman/listinfo/weld-dev</font></tt></a><tt><font size=2><br>
&gt; <br>
&gt; <br>
&gt; <br>
&gt; <br>
&gt; <br>
&gt; Unless stated otherwise above:<br>
&gt; IBM United Kingdom Limited - Registered in England and Wales with
number<br>
&gt; 741598.<br>
&gt; Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire
PO6 3AU<br>
&gt; <br>
<br>
</font></tt>
<br>
<br><font size=2 face="sans-serif"><br>
Unless stated otherwise above:<br>
IBM United Kingdom Limited - Registered in England and Wales with number
741598. <br>
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6
3AU<br>
</font>