private async Task <ExecutedJob> GetRun(string runId) { var key = $"{_options.KeyPrefix}_{runId}_run"; var value = await _connection.GetDatabase().StringGetAsync(key); return(value.HasValue ? BsonSerializer.FromBson <ExecutedJob>(value) : null); }
private async Task <IEnumerable <Job> > GetJobs(IEnumerable <string> names) { var keys = names.Select(w => (RedisKey)$"{_options.KeyPrefix}_job_{w}_meta").ToArray(); var data = await _connection.GetDatabase().StringGetAsync(keys); return(data.Where(w => w.HasValue).Select(w => BsonSerializer.FromBson <Job>(w))); }
private async Task ExecuteJobRetry() { using (var retryLock = await _lockFactory.CreateLockAsync( $"{_options.KeyPrefix}_retry_lock", TimeSpan.FromMinutes(10))) { if (!retryLock.IsAcquired) { return; } var key = $"{_options.KeyPrefix}_job_retries"; var runIds = await _connection.GetDatabase().SetMembersAsync(key); var raw = await _connection.GetDatabase() .StringGetAsync(runIds.Select(w => (RedisKey)$"{_options.KeyPrefix}_{w}_run").ToArray()); var runs = raw.Where(w => w.HasValue).Select(w => BsonSerializer.FromBson <ExecutedJob>(w)); var valid = runs.Where(w => w != null && w.Status == JobStatus.Retrying && DateTime.UtcNow.Ticks >= w.NextRetry); if (valid.Any()) { await EnqueueMany(valid); } } }
public async Task <IEnumerable <ExecutedJob> > GetRuns(string job) { var db = _connection.GetDatabase(); var ids = await db.SetMembersAsync($"{_options.KeyPrefix}_{job}_runs"); var keys = ids.Select(w => (RedisKey)$"{_options.KeyPrefix}_{w.ToString()}_run").ToArray(); var values = await db.StringGetAsync(keys); return(values .Where(w => w.HasValue) .Select(w => BsonSerializer.FromBson <ExecutedJob>(w))); }