Exemple #1
0
        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);
        }
Exemple #2
0
        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)));
        }
Exemple #3
0
        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)));
        }