Added retry logic to ConnectAndBind

This commit is contained in:
2025-10-08 22:56:45 +02:00
parent 45f9f5a2bf
commit bd72b1075a
2 changed files with 27 additions and 6 deletions

View File

@@ -13,4 +13,5 @@ public class LdapConfig
public string UsersOu { get; set; } = "ou=users";
public string GroupsOu { get; set; } = "ou=groups";
public string MigrationsOu { get; set; } = "ou=migrations";
public int ConnectionRetryCount { get; set; } = 10;
}

View File

@@ -22,6 +22,11 @@ public partial class LdapService : IDisposable
}
private async Task ConnectAndBind()
{
int retries = 0;
while (retries++ < _opts.ConnectionRetryCount)
{
try
{
if (!_conn.Connected)
{
@@ -31,11 +36,26 @@ public partial class LdapService : IDisposable
}
catch (SystemException ex)
{
_logger.LogCritical("Unable to connect to LDAP: {ex.Message}\n{ex.StackTrace}", [ex.Message, ex.StackTrace]);
_logger.LogWarning("Unable to connect to LDAP: {ex.Message}\n{ex.StackTrace}", [ex.Message, ex.StackTrace]);
throw;
}
}
await _conn.BindAsync(_opts.BindDn, _opts.BindPassword);
return;
}
catch (Exception ex)
{
if (retries == _opts.ConnectionRetryCount)
{
_logger.LogError("Unable to connect to LDAP: {ex.Message}\n{ex.StackTrace}", [ex.Message, ex.StackTrace]);
throw;
}
else
{
_logger.LogWarning("Unable to connect to LDAP: {ex.Message}\n{ex.StackTrace}", [ex.Message, ex.StackTrace]);
}
}
}
}
public string AssetsBaseDn => string.IsNullOrEmpty(_opts.AssetsOu) ? _opts.BaseDn : $"{_opts.AssetsOu},{_opts.BaseDn}";