mirror of
https://github.com/bitwarden/server.git
synced 2025-02-18 02:11:22 +01:00
Retry quartz initialization (#1570)
This commit is contained in:
parent
d977d27d7d
commit
57dd6c7294
@ -15,6 +15,8 @@ namespace Bit.Core.Jobs
|
|||||||
{
|
{
|
||||||
public abstract class BaseJobsHostedService : IHostedService, IDisposable
|
public abstract class BaseJobsHostedService : IHostedService, IDisposable
|
||||||
{
|
{
|
||||||
|
private const int MaximumJobRetries = 10;
|
||||||
|
|
||||||
private readonly IServiceProvider _serviceProvider;
|
private readonly IServiceProvider _serviceProvider;
|
||||||
private readonly ILogger<JobListener> _listenerLogger;
|
private readonly ILogger<JobListener> _listenerLogger;
|
||||||
protected readonly ILogger _logger;
|
protected readonly ILogger _logger;
|
||||||
@ -68,23 +70,42 @@ namespace Bit.Core.Jobs
|
|||||||
{
|
{
|
||||||
foreach (var (job, trigger) in Jobs)
|
foreach (var (job, trigger) in Jobs)
|
||||||
{
|
{
|
||||||
var dupeT = await _scheduler.GetTrigger(trigger.Key);
|
for (var retry = 0; retry < MaximumJobRetries; retry++)
|
||||||
if (dupeT != null)
|
|
||||||
{
|
{
|
||||||
await _scheduler.RescheduleJob(trigger.Key, trigger);
|
// There's a race condition when starting multiple containers simultaneously, retry until it succeeds..
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var dupeT = await _scheduler.GetTrigger(trigger.Key);
|
||||||
|
if (dupeT != null)
|
||||||
|
{
|
||||||
|
await _scheduler.RescheduleJob(trigger.Key, trigger);
|
||||||
|
}
|
||||||
|
|
||||||
|
var jobDetail = JobBuilder.Create(job)
|
||||||
|
.WithIdentity(job.FullName)
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
var dupeJ = await _scheduler.GetJobDetail(jobDetail.Key);
|
||||||
|
if (dupeJ != null)
|
||||||
|
{
|
||||||
|
await _scheduler.DeleteJob(jobDetail.Key);
|
||||||
|
}
|
||||||
|
|
||||||
|
await _scheduler.ScheduleJob(jobDetail, trigger);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
if (retry == MaximumJobRetries - 1)
|
||||||
|
{
|
||||||
|
throw new Exception("Job failed to start after 10 retries.");
|
||||||
|
}
|
||||||
|
|
||||||
|
_logger.LogWarning($"Exception while trying to schedule job: {job.FullName}, {e}");
|
||||||
|
var random = new Random();
|
||||||
|
Thread.Sleep(random.Next(50, 250));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var jobDetail = JobBuilder.Create(job)
|
|
||||||
.WithIdentity(job.FullName)
|
|
||||||
.Build();
|
|
||||||
|
|
||||||
var dupeJ = await _scheduler.GetJobDetail(jobDetail.Key);
|
|
||||||
if (dupeJ != null)
|
|
||||||
{
|
|
||||||
await _scheduler.DeleteJob(jobDetail.Key);
|
|
||||||
}
|
|
||||||
|
|
||||||
await _scheduler.ScheduleJob(jobDetail, trigger);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user