private static void BackgroundJobsPostStart() { var jobs = new List <IJob>(); var indexer = DependencyResolver.Current.GetService <IIndexingService>(); if (indexer != null) { indexer.RegisterBackgroundJobs(jobs); } if (ConfigurationManager.AppSettings.Get("EnablePackageStatisticsBackgroundJob").Equals(bool.TrueString, StringComparison.InvariantCultureIgnoreCase)) { jobs.Add(new UpdateStatisticsJob(TimeSpan.FromMinutes(15), () => new EntitiesContext(), timeout: TimeSpan.FromMinutes(30))); } if (ConfigurationManager.AppSettings.Get("EnableWorkItemsBackgroundJob").Equals(bool.TrueString, StringComparison.InvariantCultureIgnoreCase)) { jobs.Add(new WorkItemCleanupJob(TimeSpan.FromDays(1), () => new EntitiesContext(), timeout: TimeSpan.FromDays(4))); } var jobCoordinator = new WebFarmJobCoordinator(new EntityWorkItemRepository(() => new EntitiesContext())); _jobManager = new JobManager(jobs, jobCoordinator) { RestartSchedulerOnFailure = true }; _jobManager.Fail(e => ErrorLog.GetDefault(null).Log(new Error(e))); _jobManager.Start(); }
public void WithNullJobThrowsArgumentNullException() { var repository = new Mock<IWorkItemRepository>(); var coordinator = new WebFarmJobCoordinator(repository.Object); var exception = Assert.Throws<ArgumentNullException>(() => coordinator.GetWork(null)); Assert.Equal("job", exception.ParamName); }
public void WithNullJobThrowsArgumentNullException() { var repository = new Mock <IWorkItemRepository>(); var coordinator = new WebFarmJobCoordinator(repository.Object); var exception = Assert.Throws <ArgumentNullException>(() => coordinator.GetWork(null)); Assert.Equal("job", exception.ParamName); }
public void ReturnsNullWhenActiveWorkersExistAndIsNotTimedOut() { var job = new FakeJob { Name = "jobname", Timeout = TimeSpan.MaxValue }; var repository = new Mock<IWorkItemRepository>(); repository.Setup(r => r.GetLastWorkItem(job)).Returns(new Mock<IWorkItem>().Object); var coordinator = new WebFarmJobCoordinator(repository.Object); var unitOfWork = coordinator.ReserveWork("worker-id", job); Assert.Null(unitOfWork); }
private static JobManager CreateJobManager() { var jobs = new IJob[] { new UpdateStatisticsJob(TimeSpan.FromSeconds(10), () => new EntitiesContext(), timeout: TimeSpan.FromMinutes(5)), new WorkItemCleanupJob(TimeSpan.FromDays(1), () => new EntitiesContext(), timeout: TimeSpan.FromDays(4)) }; var jobCoordinator = new WebFarmJobCoordinator(new EntityWorkItemRepository(() => new EntitiesContext())); var manager = new JobManager(jobs, jobCoordinator); manager.Fail(e => Elmah.ErrorLog.GetDefault(null).Log(new Error(e))); return(manager); }
private static void BackgroundJobsPostStart() { var jobs = new IJob[] { new UpdateStatisticsJob(TimeSpan.FromSeconds(10), () => new EntitiesContext(), timeout: TimeSpan.FromMinutes(5)), new WorkItemCleanupJob(TimeSpan.FromDays(1), () => new EntitiesContext(), timeout: TimeSpan.FromDays(4)), new LuceneIndexingJob(TimeSpan.FromMinutes(10), timeout: TimeSpan.FromMinutes(2)), }; var jobCoordinator = new WebFarmJobCoordinator(new EntityWorkItemRepository(() => new EntitiesContext())); _jobManager = new JobManager(jobs, jobCoordinator); _jobManager.Fail(e => ErrorLog.GetDefault(null).Log(new Error(e))); _jobManager.Start(); }
private static JobManager CreateJobWorkersManager() { var jobs = new IJob[] { new SampleJob(TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(20)), /* new ExceptionJob(TimeSpan.FromSeconds(15)), */ new WorkItemCleanupJob(TimeSpan.FromMinutes(1), TimeSpan.FromMinutes(5), new WorkItemsContext()) }; var coordinator = new WebFarmJobCoordinator(new EntityWorkItemRepository(() => new WorkItemsContext())); var manager = new JobManager(jobs, coordinator); manager.Fail(ex => Elmah.ErrorLog.GetDefault(null).Log(new Error(ex))); return manager; }
private static JobManager CreateJobWorkersManager() { var jobs = new IJob[] { new SampleJob(TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(20)), /* new ExceptionJob(TimeSpan.FromSeconds(15)), */ new WorkItemCleanupJob(TimeSpan.FromMinutes(1), TimeSpan.FromMinutes(5), new WorkItemsContext()) }; var coordinator = new WebFarmJobCoordinator(new EntityWorkItemRepository(() => new WorkItemsContext())); var manager = new JobManager(jobs, coordinator); manager.Fail(ex => Elmah.ErrorLog.GetDefault(null).Log(new Error(ex))); return(manager); }
public void ReturnsNullWhenActiveWorkersExistAndIsNotTimedOut() { var job = new FakeJob { Name = "jobname", Timeout = TimeSpan.MaxValue }; var repository = new Mock <IWorkItemRepository>(); repository.Setup(r => r.GetLastWorkItem(job)).Returns(new Mock <IWorkItem>().Object); var coordinator = new WebFarmJobCoordinator(repository.Object); var unitOfWork = coordinator.ReserveWork("worker-id", job); Assert.Null(unitOfWork); }
public void WithJobThatThrowsExceptionWhenCreatingTaskStillReturnsTask() { var job = new Mock<IJob>(); job.Setup(j => j.Name).Returns("job-name"); job.Setup(j => j.Execute()).Throws(new InvalidOperationException("Test Exception")); var repository = new Mock<IWorkItemRepository>(); repository.Setup(r => r.GetLastWorkItem(job.Object)).Returns((IWorkItem)null); repository.Setup(r => r.RunInTransaction(It.IsAny<Action>())).Callback<Action>(a => a()); repository.Setup(r => r.CreateWorkItem("worker-id", job.Object)).Returns(() => 123); var coordinator = new WebFarmJobCoordinator(repository.Object); var task = coordinator.GetWork(job.Object); Assert.NotNull(task); }
public void ReturnsUnitOfWorkWhenNoActiveWorkers() { var job = new FakeJob { Name = "jobname" }; var repository = new Mock <IWorkItemRepository>(); repository.Setup(r => r.GetLastWorkItem(job)).Returns((IWorkItem)null); repository.Setup(r => r.RunInTransaction(It.IsAny <Action>())).Callback <Action>(a => a()); repository.Setup(r => r.CreateWorkItem("worker-id", job)).Returns(123); var coordinator = new WebFarmJobCoordinator(repository.Object); var unitOfWork = coordinator.ReserveWork("worker-id", job); Assert.NotNull(unitOfWork); }
public void WithJobThatThrowsExceptionWhenCreatingTaskStillReturnsTask() { var job = new Mock <IJob>(); job.Setup(j => j.Name).Returns("job-name"); job.Setup(j => j.Execute()).Throws(new InvalidOperationException("Test Exception")); var repository = new Mock <IWorkItemRepository>(); repository.Setup(r => r.GetLastWorkItem(job.Object)).Returns((IWorkItem)null); repository.Setup(r => r.RunInTransaction(It.IsAny <Action>())).Callback <Action>(a => a()); repository.Setup(r => r.CreateWorkItem("worker-id", job.Object)).Returns(() => 123); var coordinator = new WebFarmJobCoordinator(repository.Object); var task = coordinator.GetWork(job.Object); Assert.NotNull(task); }
public void ReturnsUnitOfWorkWhenLastActiveWorkerIsTimedOut() { var job = new FakeJob { Name = "jobname", Timeout = TimeSpan.FromSeconds(10) }; var workItem = new Mock <IWorkItem>(); workItem.Setup(w => w.Id).Returns(1233); workItem.Setup(w => w.Started).Returns(DateTime.UtcNow.AddSeconds(-11)); var repository = new Mock <IWorkItemRepository>(); repository.Setup(r => r.GetLastWorkItem(job)).Returns(workItem.Object); repository.Setup(r => r.RunInTransaction(It.IsAny <Action>())).Callback <Action>(a => a()); repository.Setup(r => r.CreateWorkItem("worker-id", job)).Returns(123); var coordinator = new WebFarmJobCoordinator(repository.Object); var unitOfWork = coordinator.ReserveWork("worker-id", job); Assert.NotNull(unitOfWork); repository.Verify(r => r.SetWorkItemFailed(1233, It.IsAny <TimeoutException>())); }
private static void BackgroundJobsPostStart() { var jobs = new List <IJob>(); var indexer = DependencyResolver.Current.GetService <IIndexingService>(); if (indexer != null) { indexer.RegisterBackgroundJobs(jobs); } jobs.Add(new UpdateStatisticsJob(TimeSpan.FromMinutes(15), () => new EntitiesContext(), timeout: TimeSpan.FromMinutes(30))); jobs.Add(new WorkItemCleanupJob(TimeSpan.FromDays(1), () => new EntitiesContext(), timeout: TimeSpan.FromDays(4))); var jobCoordinator = new WebFarmJobCoordinator(new EntityWorkItemRepository(() => new EntitiesContext())); _jobManager = new JobManager(jobs, jobCoordinator) { RestartSchedulerOnFailure = true }; _jobManager.Fail(e => ErrorLog.GetDefault(null).Log(new Error(e))); _jobManager.Start(); }
public void ReturnsNullWhenActiveWorkersExistWithinTransaction() { var job = new FakeJob { Name = "jobname", Timeout = TimeSpan.MaxValue }; var complete = new Mock <IWorkItem>(); complete.Setup(wi => wi.Completed).Returns(DateTime.UtcNow); var active = new Mock <IWorkItem>(); active.Setup(wi => wi.Completed).Returns((DateTime?)null); var activeWorkerQueue = new Queue <IWorkItem>(new[] { complete.Object, active.Object }); var repository = new Mock <IWorkItemRepository>(); repository.Setup(r => r.GetLastWorkItem(job)).Returns(activeWorkerQueue.Dequeue); repository.Setup(r => r.RunInTransaction(It.IsAny <Action>())).Callback <Action>(a => a()); repository.Setup(r => r.CreateWorkItem("worker-id", job)).Throws(new InvalidOperationException()); var coordinator = new WebFarmJobCoordinator(repository.Object); var unitOfWork = coordinator.ReserveWork("worker-id", job); Assert.Null(unitOfWork); }
public void ReturnsUnitOfWorkWhenLastActiveWorkerIsTimedOut() { var job = new FakeJob { Name = "jobname", Timeout = TimeSpan.FromSeconds(10) }; var workItem = new Mock<IWorkItem>(); workItem.Setup(w => w.Id).Returns(1233); workItem.Setup(w => w.Started).Returns(DateTime.UtcNow.AddSeconds(-11)); var repository = new Mock<IWorkItemRepository>(); repository.Setup(r => r.GetLastWorkItem(job)).Returns(workItem.Object); repository.Setup(r => r.RunInTransaction(It.IsAny<Action>())).Callback<Action>(a => a()); repository.Setup(r => r.CreateWorkItem("worker-id", job)).Returns(123); var coordinator = new WebFarmJobCoordinator(repository.Object); var unitOfWork = coordinator.ReserveWork("worker-id", job); Assert.NotNull(unitOfWork); repository.Verify(r => r.SetWorkItemFailed(1233, It.IsAny<TimeoutException>())); }
public void ReturnsUnitOfWorkWhenNoActiveWorkers() { var job = new FakeJob { Name = "jobname" }; var repository = new Mock<IWorkItemRepository>(); repository.Setup(r => r.GetLastWorkItem(job)).Returns((IWorkItem)null); repository.Setup(r => r.RunInTransaction(It.IsAny<Action>())).Callback<Action>(a => a()); repository.Setup(r => r.CreateWorkItem("worker-id", job)).Returns(123); var coordinator = new WebFarmJobCoordinator(repository.Object); var unitOfWork = coordinator.ReserveWork("worker-id", job); Assert.NotNull(unitOfWork); }
public void ReturnsNullWhenActiveWorkersExistWithinTransaction() { var job = new FakeJob { Name = "jobname", Timeout = TimeSpan.MaxValue }; var complete = new Mock<IWorkItem>(); complete.Setup(wi => wi.Completed).Returns(DateTime.UtcNow); var active = new Mock<IWorkItem>(); active.Setup(wi => wi.Completed).Returns((DateTime?)null); var activeWorkerQueue = new Queue<IWorkItem>(new[] { complete.Object, active.Object }); var repository = new Mock<IWorkItemRepository>(); repository.Setup(r => r.GetLastWorkItem(job)).Returns(activeWorkerQueue.Dequeue); repository.Setup(r => r.RunInTransaction(It.IsAny<Action>())).Callback<Action>(a => a()); repository.Setup(r => r.CreateWorkItem("worker-id", job)).Throws(new InvalidOperationException()); var coordinator = new WebFarmJobCoordinator(repository.Object); var unitOfWork = coordinator.ReserveWork("worker-id", job); Assert.Null(unitOfWork); }