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 UsersOu { get; set; } = "ou=users";
public string GroupsOu { get; set; } = "ou=groups"; public string GroupsOu { get; set; } = "ou=groups";
public string MigrationsOu { get; set; } = "ou=migrations"; public string MigrationsOu { get; set; } = "ou=migrations";
public int ConnectionRetryCount { get; set; } = 10;
} }

View File

@@ -23,19 +23,39 @@ public partial class LdapService : IDisposable
private async Task ConnectAndBind() private async Task ConnectAndBind()
{ {
if (!_conn.Connected) int retries = 0;
while (retries++ < _opts.ConnectionRetryCount)
{ {
try try
{ {
await _conn.ConnectAsync(_opts.Host, _opts.Port); if (!_conn.Connected)
{
try
{
await _conn.ConnectAsync(_opts.Host, _opts.Port);
}
catch (SystemException ex)
{
_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 (SystemException ex) catch (Exception ex)
{ {
_logger.LogCritical("Unable to connect to LDAP: {ex.Message}\n{ex.StackTrace}", [ex.Message, ex.StackTrace]); if (retries == _opts.ConnectionRetryCount)
throw; {
_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]);
}
} }
} }
await _conn.BindAsync(_opts.BindDn, _opts.BindPassword);
} }
public string AssetsBaseDn => string.IsNullOrEmpty(_opts.AssetsOu) ? _opts.BaseDn : $"{_opts.AssetsOu},{_opts.BaseDn}"; public string AssetsBaseDn => string.IsNullOrEmpty(_opts.AssetsOu) ? _opts.BaseDn : $"{_opts.AssetsOu},{_opts.BaseDn}";