<p dir="ltr">Ok, if Bill reviews and is happy to include in 1.9.x let&#39;s do it.</p>
<div class="gmail_quote">On 22 Mar 2016 16:29, &quot;Marek Posolda&quot; &lt;<a href="mailto:mposolda@redhat.com">mposolda@redhat.com</a>&gt; wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000">
    <div>Yeah, there might be some risk of
      regression. On the other hand, there are DB queries during each
      social login or every time when you click on &quot;federated
      identities&quot; in account management. <br>
      <br>
      If you think missing caching is acceptable from performance
      perspective etc, I can merge just to master and avoid 1.9.x.<br>
      <br>
      Marek<br>
      <br>
      On 22/03/16 17:18, Stian Thorgersen wrote:<br>
    </div>
    <blockquote type="cite">
      <p dir="ltr">Is this really critical for 1.9.x? I&#39;m worried about
        us intruding more complexity so late and I&#39;d rather postpone to
        2.x.</p>
      <div class="gmail_quote">On 22 Mar 2016 15:36, &quot;Marek Posolda&quot;
        &lt;<a href="mailto:mposolda@redhat.com" target="_blank">mposolda@redhat.com</a>&gt;
        wrote:<br type="attribution">
        <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 22/03/16
          15:18, Bill Burke wrote:<br>
          &gt; Some comments on code:<br>
          &gt;<br>
          &gt; * Why have a special flag in invalidateUser?  Just
          invalidate the links<br>
          &gt; if they exist.  Aggressive eviction isn&#39;t a bad thing, is
          it?<br>
          The only reason was performance. The flag &quot;false&quot; is used when
          you&#39;re<br>
          adding new user. But this new user is not yet in cache, so
          calling<br>
          &quot;getFederatedIdentities&quot; will always need to send DB query to
          get all<br>
          links of user. But when you&#39;re adding new user, you know that
          this user<br>
          doesn&#39;t yet have any social links. So in the end, without the
          flag there<br>
          will be one more DB query, which will always return empty set.<br>
          <br>
          Currently we don&#39;t support store/load of social links from
          federation<br>
          provider. But maybe in the future, if we support it and we
          chain cache<br>
          on top of federation storage, it could theoretically happen
          that new<br>
          user have social links at the moment when he is registered. So
          I can do<br>
          what you proposed as it seems to be a bit safer for the
          future.<br>
          <br>
          Marek<br>
          &gt;<br>
          &gt; On a side note, cache needs more refactoring, we&#39;re
          reusing the same<br>
          &gt; pattern over and over.  Wonder if functions can help.<br>
          &gt;<br>
          &gt;<br>
          &gt; On 3/22/2016 5:42 AM, Marek Posolda wrote:<br>
          &gt;&gt; Until now, we don&#39;t have support for caching of
          identityProvider<br>
          &gt;&gt; (social) links. So every social login or every going
          to &quot;federated<br>
          &gt;&gt; identities&quot; tab in account management needs to send
          DB queries. I was<br>
          &gt;&gt; looking at fixing it and I&#39;ve send PR<br>
          &gt;&gt; <a href="https://github.com/keycloak/keycloak/pull/2404" rel="noreferrer" target="_blank">https://github.com/keycloak/keycloak/pull/2404</a>
          . It turned to be a bit<br>
          &gt;&gt; tricky because of:<br>
          &gt;&gt;<br>
          &gt;&gt; 1) Caching needs to be done on both directions. For
          social login, you<br>
          &gt;&gt; need to lookup user by social link. But on the other
          hand, you also need<br>
          &gt;&gt; to look all social/identityProvider links of
          particular user when you go<br>
          &gt;&gt; to account management etc.<br>
          &gt;&gt;<br>
          &gt;&gt; 2) Because of &quot;store token&quot; option, the link may need
          to be updated in<br>
          &gt;&gt; DB quite often (in theory even during each social
          login).<br>
          &gt;&gt;<br>
          &gt;&gt; I was thinking that storing links directly on
          CachedUser doesn&#39;t work<br>
          &gt;&gt; very well, because during each update of social link
          (which may be often<br>
          &gt;&gt; because of &quot;store token&quot;) the user would need to be
          fully invalidated<br>
          &gt;&gt; from cache. Having separate cache entry for each
          social link also has<br>
          &gt;&gt; some downsides (many items in cache, need to have
          separate entry for<br>
          &gt;&gt; store the all links of user anyway). So I ended up
          with having the cache<br>
          &gt;&gt; entry, which contains list of all links of particular
          user. It needs to<br>
          &gt;&gt; be updated when any social link is added,removed or
          updated. This seemed<br>
          &gt;&gt; to me like good compromise. WDYT?<br>
          &gt;&gt;<br>
          &gt;&gt; There are also entries for lookup user by federated
          identity, so you<br>
          &gt;&gt; don&#39;t need to query DB during social login.<br>
          &gt;&gt;<br>
          &gt;&gt; So ATM there are not DB queries during social login
          or during go to<br>
          &gt;&gt; &quot;federated identities&quot; . I hope I handled all corner
          cases and<br>
          &gt;&gt; invalidations correctly, but if someone want to take
          look it will be<br>
          &gt;&gt; good. I don&#39;t want to add new regressions atm :-)<br>
          &gt;&gt;<br>
          &gt;&gt; Marek<br>
          &gt;&gt;<br>
          &gt;&gt;<br>
          &gt;&gt;<br>
          &gt;&gt;<br>
          &gt;&gt;<br>
          &gt;&gt;<br>
          &gt;&gt; _______________________________________________<br>
          &gt;&gt; keycloak-dev mailing list<br>
          &gt;&gt; <a href="mailto:keycloak-dev@lists.jboss.org" target="_blank">keycloak-dev@lists.jboss.org</a><br>
          &gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/keycloak-dev" rel="noreferrer" target="_blank">https://lists.jboss.org/mailman/listinfo/keycloak-dev</a><br>
          <br>
          _______________________________________________<br>
          keycloak-dev mailing list<br>
          <a href="mailto:keycloak-dev@lists.jboss.org" target="_blank">keycloak-dev@lists.jboss.org</a><br>
          <a href="https://lists.jboss.org/mailman/listinfo/keycloak-dev" rel="noreferrer" target="_blank">https://lists.jboss.org/mailman/listinfo/keycloak-dev</a><br>
        </blockquote>
      </div>
    </blockquote>
    <br>
  </div>

</blockquote></div>