<div dir="ltr"><div style="color:rgb(0,0,0);font-family:"Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;font-size:13.3333px"><b>Problem : </b></div><div style="color:rgb(0,0,0);font-family:"Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;font-size:13.3333px"><br></div><div style="color:rgb(0,0,0);font-family:"Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;font-size:13.3333px">Midpoint in default configuration recomputes objects by first retrieving them ALL from repository, then passing each object to a worker thread. If the object was updated meanwhile (e.g. live-synced or updated from gui) before it is recomputed by the worker thread, this update can be overwritten by the object version retrieved when the recompute task started. It happened on my deployment several times.</div><div style="color:rgb(0,0,0);font-family:"Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;font-size:13.3333px"><br></div><div style="color:rgb(0,0,0);font-family:"Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;font-size:13.3333px"><b style="background-color:transparent;font-size:10pt">Is your deployment affected? :</b></div><div style="color:rgb(0,0,0);font-family:"Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;font-size:13.3333px"><br></div><div style="color:rgb(0,0,0);font-family:"Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;font-size:13.3333px">Hard to say, i don't see any relevant log message to check. I had to check by debugging the running recompute task and verifying that SqlRepositoryServiceImpl.searchObjectsIterative calls ObjectRetriever.searchObjectsIterativeByPaging (ok) and not ObjectRetriever.searchObjectsIterativeAttempt (can loose updates).</div><div style="color:rgb(0,0,0);font-family:"Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;font-size:13.3333px"><br></div><div style="color:rgb(0,0,0);font-family:"Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;font-size:13.3333px">Deployments with MySQL or H2 backend should be ok with default configuration (check sources SqlRepositoryConfiguration.computeDefaultIterativeSearchParameters). Did not verify the runtime.</div><div style="color:rgb(0,0,0);font-family:"Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;font-size:13.3333px"><br></div><div style="color:rgb(0,0,0);font-family:"Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;font-size:13.3333px"><b>Solution:</b></div><div style="color:rgb(0,0,0);font-family:"Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;font-size:13.3333px"><br></div><div style="color:rgb(0,0,0);font-family:"Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;font-size:13.3333px">Configure <font face="courier new, monospace">iterativeSearchByPaging</font> and <font face="courier new, monospace">iterativeSearchByPagingBatchSize</font> in config.xml <font face="courier new, monospace">midpoint/repository</font> element. Don't know if all backends support this setting but postgres (which i use) does.</div><div style="color:rgb(0,0,0);font-family:"Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;font-size:13.3333px"><br></div><div style="color:rgb(0,0,0);font-family:"Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;font-size:13.3333px"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:10pt;font-family:"Courier New";color:rgb(51,51,51);background-color:transparent;vertical-align:baseline;white-space:pre-wrap"><configuration></span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:10pt;font-family:"Courier New";color:rgb(51,51,51);background-color:transparent;vertical-align:baseline;white-space:pre-wrap">    <midpoint></span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:10pt;font-family:"Courier New";color:rgb(51,51,51);background-color:transparent;vertical-align:baseline;white-space:pre-wrap">        <repository></span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:10pt;font-family:"Courier New";color:rgb(51,51,51);background-color:transparent;vertical-align:baseline;white-space:pre-wrap">            …</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:10pt;font-family:"Courier New";color:rgb(51,51,51);background-color:transparent;vertical-align:baseline;white-space:pre-wrap">            <iterativeSearchByPaging>true</iterativeSearchByPaging></span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:10pt;font-family:"Courier New";color:rgb(51,51,51);background-color:transparent;vertical-align:baseline;white-space:pre-wrap">            <iterativeSearchByPagingBatchSize>17</iterativeSearchByPagingBatchSize></span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:10pt;font-family:"Courier New";color:rgb(51,51,51);background-color:transparent;vertical-align:baseline;white-space:pre-wrap">            …</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:10pt;font-family:"Courier New";color:rgb(51,51,51);background-color:transparent;vertical-align:baseline;white-space:pre-wrap">        </repository></span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:10pt;font-family:"Courier New";color:rgb(51,51,51);background-color:transparent;vertical-align:baseline;white-space:pre-wrap">    </midpoint></span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:10pt;font-family:"Courier New";color:rgb(51,51,51);background-color:transparent;vertical-align:baseline;white-space:pre-wrap"></configuration></span></p></div><div style="color:rgb(0,0,0);font-family:"Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;font-size:13.3333px"><br></div><div style="color:rgb(0,0,0);font-family:"Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;font-size:13.3333px">After setting these parameters the objects to recompute are read in 'pages' and fed to worker threads until the request queue between the reader thread and worker threads is full, then the reader is blocked. The size of the queue is hardcoded as 2 * number-of-worker-threads.</div><div style="color:rgb(0,0,0);font-family:"Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;font-size:13.3333px"><br></div><div style="color:rgb(0,0,0);font-family:"Lucida Grande","Lucida Sans Unicode",Arial,sans-serif;font-size:13.3333px">By setting the <span style="font-family:"courier new",monospace;font-size:13.3333px">iterativeSearchByPagingBatchSize</span><span style="font-size:13.3333px;background-color:transparent"> you can still loose updates, but the time window when this can happen shrinks from number-of-objects to max(page size, 2*num-of-worker-threads). Without much thought i set the page size to (</span><span style="font-size:13.3333px;background-color:transparent">2 * number-of-worker-threads) + 1.</span></div><div><br></div><div>good luck</div><div>arnost</div><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><p style="color:rgb(0,0,0);font-family:Verdana,Arial,Helvetica,sans-serif;font-size:10.3846px"></p><table style="font-family:Verdana,Arial,Helvetica,sans-serif;border-collapse:collapse;padding:0px;margin:0px;border-width:0px;border-style:solid;width:482px"><tbody><tr style="padding:0px;margin:0px;border:0px solid gray"><td style="color:rgb(0,0,0);font-family:Arial,sans-serif;font-size:11px;width:160px;vertical-align:bottom;padding:0px;border:0px solid gray"><p><span style="font-size:14px;font-weight:bold">Arnošt Starosta</span><br>solution architect<br><br>gsm: [+420] 603 794 932<br>e-mail: <a href="mailto:arnost.starosta@ami.cz" target="_blank">arnost.starosta@ami.cz</a></p></td><td style="color:rgb(0,0,0);font-family:Verdana,Arial,Helvetica,sans-serif;font-size:10px;border-width:0px 1px 0px 0px;border-style:solid;border-color:gray rgb(204,204,204) gray gray;padding:0px">   </td><td style="color:rgb(0,0,0);font-family:Verdana,Arial,Helvetica,sans-serif;font-size:10px;padding:0px;border:0px solid gray">   </td><td style="color:rgb(0,0,0);font-family:Arial,sans-serif;font-size:11px;vertical-align:bottom;padding:0px;width:123px;border:0px solid gray"><p>AMI Praha a.s.<br>Pláničkova 11<br>162 00 Praha 6<br>tel.: [+420] 274 783 239<br>web: <a href="http://www.ami.cz/" target="_blank">www.ami.cz</a></p></td><td style="color:rgb(0,0,0);font-family:Verdana,Arial,Helvetica,sans-serif;font-size:10px;border-width:0px 1px 0px 0px;border-style:solid;border-color:gray rgb(204,204,204) gray gray;padding:0px">   </td><td style="color:rgb(0,0,0);font-family:Verdana,Arial,Helvetica,sans-serif;font-size:10px;padding:0px;border:0px solid gray">   </td><td style="color:rgb(0,0,0);font-family:Arial,sans-serif;font-size:11px;margin:8px;width:116px;border:0px solid gray"><p><img src="http://www.ami.cz/images/podpis/ami_logo.gif" alt="AMI Praha a.s." style="border: 0px;"></p></td></tr><tr style="padding:0px;margin:0px;border:0px solid gray"><td colspan="7" style="color:rgb(0,0,0);font-family:Verdana,Arial,Helvetica,sans-serif;font-size:10px;padding:0px;width:480px;border:0px solid gray"><br><a href="http://www.ami.cz/reseni-a-sluzby/bezpecnost-dat/identity-management" target="_blank"><img src="http://www.ami.cz/images/podpis/AMI-podpis-IdM_1.png" alt="AMI Praha a.s." style="border: 0px; width: 480px; height: 82px;"></a></td></tr><tr style="padding:0px;margin:0px;border:0px solid gray"><td colspan="7" style="color:rgb(128,128,128);font-family:Arial,sans-serif;font-size:11px;padding:0px;border:0px solid gray"><br>Textem tohoto e-mailu podepisující neslibuje uzavřít ani neuzavírá za společnost AMI Praha a.s.<br>jakoukoliv smlouvu. Každá smlouva, pokud bude uzavřena, musí mít výhradně písemnou formu.<br><br></td></tr></tbody></table></div></div></div></div>
</div>