<div dir="ltr"><div><div>Hello,</div><div><br></div>I want to better understand how retries of a data connector work in shibboleth.<br></div><div><br></div><div><u>Example code:</u><br></div><div><br></div><div>From the attributes resolver file:<br></div><div><br></div>    <!--      Primary    --><br>    <DataConnector id="myDatabase" noRetryDelay="PT30S" xsi:type="RelationalDatabase" validatorRef="shibboleth.NonFailFastValidator"><br>        <BeanManagedConnection>OracleDBdataSource</BeanManagedConnection><br>        <FailoverDataConnector ref="FailoverAWSmysql" /><br>        <QueryTemplate><br>            .... redacted SQL query for getting some attributes... <br>        </QueryTemplate><br> <br>        <Column columnName="...." attributeID="...." /><br>        <ResultCache elementTimeToLive="PT60S"/><br><div>    </DataConnector><br><br>    <!--      Failover  --><br>    <DataConnector id="FailoverAWSmysql" xsi:type="RelationalDatabase" validatorRef="shibboleth.NonFailFastValidator"><br>        <BeanManagedConnection>MySQLdataSource</BeanManagedConnection><br>        <QueryTemplate><br></div><div>            .... redacted <br></div><div>        </QueryTemplate><br> <br>        <Column columnName="...." attributeID="...." /><br></div><div>        .... redacted ....<br></div><div>        <ResultCache elementTimeToLive="PT60S"/><br>    </DataConnector><br><br>from conf/global.xml:<br><br>    <bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig"><br>        <property name="poolName" value="springHikariCP" /><br>        <property name="connectionTimeout" value="2000" /><br>        <property name="validationTimeout" value="1000" /><br>        <property name="maximumPoolSize" value="20" />  <br>        <property name="dataSourceClassName" value="oracle.jdbc.pool.OracleDataSource" /><br>        <property name="dataSourceProperties"><br>            <props></div><div>                .... redacted ....<br>            </props><br>        </property><br>    </bean><br><br>    <bean id="hikariConfigMySQL" class="com.zaxxer.hikari.HikariConfig"><br>        <property name="poolName" value="springHikariCPmysql" /><br>        <property name="connectionTimeout" value="10000" /><br>        <property name="maximumPoolSize" value="20" />  <br>        <property name="dataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" /><br>        <property name="dataSourceProperties"><br>            <props><br></div><div>                .... redacted ....<br></div><div>            </props><br>        </property><br>    </bean></div><div><br></div><div><u>Scenario:</u></div><div><u><br></u></div><div>1. Let's say the shibboleth app is trying to get attributes from the primary data connector.</div><div>2. Assume a thread grabs a connection from the primary HikariCP but upon execution the ResolutionException is raised.<br></div><div><br></div><div><u>Questions:</u></div><div><ul><li>After #2 occurs, what happens next? Does the thread pause for 30 seconds (noRetryDelay) to retry the primary connector? Or does it immediately go to the failover data connector and then pending the result of that lookup, it may or may not retry the entire path?<br></li><li>How many times will the data connector retry? Is there a limit? Where is the limit set? Is it hard coded?<br></li><li>Is it true that the only exception that the retry or failover logic responds to is the <a href="https://git.shibboleth.net/view/?p=java-identity-provider.git;a=blob;f=idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnector.java;hb=28bccab21a065a57c4f03cd34da4011b5b9dca9f#l154">ResolutionException</a> (for data connectors)?<br></li></ul><div>If we can keep the answers scoped to my example code above that would be helpful for me to understand it better.</div><div><br></div><div>Thanks,<br></div></div><div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><p style="line-height:1.38;margin-left:6.24pt;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(102,102,102);background-color:transparent;font-weight:700;vertical-align:baseline;white-space:pre-wrap">Kyle Lawlor-Bagcal, Web and Mobile Team Lead</span><span style="font-size:11pt;font-family:Arial;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap"><br></span></p><p style="line-height:1.38;margin-left:6.24pt;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap">Teachers College Information Technology (TCIT) </span></p><p style="line-height:1.38;margin-left:6.24pt;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(28,69,135);background-color:transparent;font-weight:700;vertical-align:baseline;white-space:pre-wrap">Teachers College</span><span style="font-size:11pt;font-family:Arial;color:rgb(28,69,135);background-color:transparent;vertical-align:baseline;white-space:pre-wrap"> | Columbia University</span><span style="font-size:11pt;font-family:Arial;color:rgb(102,102,102);background-color:transparent;vertical-align:baseline;white-space:pre-wrap"><br></span></p></div></div></div></div>