public bool IsFinalStatus(BulkOperationStatus <DownloadStatus> status) { return (status.Status == DownloadStatus.Completed || status.Status == DownloadStatus.Failed || status.Status == DownloadStatus.FailedFullSyncRequired); }
private void OnBulkOperation(IHttpContext context, Func<string, IndexQuery, bool, RavenJArray> batchOperation) { var match = urlMatcher.Match(context.GetRequestUrl()); var index = match.Groups[2].Value; if (string.IsNullOrEmpty(index)) { context.SetStatusToBadRequest(); return; } var allowStale = context.GetAllowStale(); var indexQuery = context.GetIndexQueryFromHttpContext(maxPageSize: int.MaxValue); var status = new BulkOperationStatus(); var sp = Stopwatch.StartNew(); long id = 0; var task = Task.Factory.StartNew(() => { var array = batchOperation(index, indexQuery, allowStale); status.State = array; status.Completed = true; context.Log(log => log.Debug("\tBatch Operation worked on {0:#,#;;0} documents in {1}, task #: {2}", array.Length, sp.Elapsed, id)); }); Database.AddTask(task, status, out id); context.WriteJson(new { OperationId = id }); }
private HttpResponseMessage OnBulkOperation(Func <string, IndexQuery, bool, RavenJArray> batchOperation, string index) { if (string.IsNullOrEmpty(index)) { return(GetEmptyMessage(HttpStatusCode.BadRequest)); } var allowStale = GetAllowStale(); var indexQuery = GetIndexQuery(maxPageSize: int.MaxValue); var status = new BulkOperationStatus(); var sp = Stopwatch.StartNew(); long id = 0; var task = Task.Factory.StartNew(() => { var array = batchOperation(index, indexQuery, allowStale); status.State = array; status.Completed = true; //TODO: log //context.Log(log => log.Debug("\tBatch Operation worked on {0:#,#;;0} documents in {1}, task #: {2}", array.Length, sp.Elapsed, id)); }); Database.Tasks.AddTask(task, status, out id); return(GetMessageWithObject(new { OperationId = id })); }
private void OnBulkOperation(IHttpContext context, Func <string, IndexQuery, bool, RavenJArray> batchOperation) { var match = urlMatcher.Match(context.GetRequestUrl()); var index = match.Groups[2].Value; if (string.IsNullOrEmpty(index)) { context.SetStatusToBadRequest(); return; } var allowStale = context.GetAllowStale(); var indexQuery = context.GetIndexQueryFromHttpContext(maxPageSize: int.MaxValue); var status = new BulkOperationStatus(); var sp = Stopwatch.StartNew(); long id = 0; var task = Task.Factory.StartNew(() => { var array = batchOperation(index, indexQuery, allowStale); status.State = array; status.Completed = true; context.Log(log => log.Debug("\tBatch Operation worked on {0:#,#;;0} documents in {1}, task #: {2}", array.Length, sp.Elapsed, id)); }); Database.AddTask(task, status, out id); context.WriteJson(new { OperationId = id }); }
public bool IsFinalStatus(BulkOperationStatus <UploadStatus> status) { return (status.Status == UploadStatus.Completed || status.Status == UploadStatus.CompletedWithErrors || status.Status == UploadStatus.Failed || status.Status == UploadStatus.Expired || status.Status == UploadStatus.Aborted); }
private HttpResponseMessage OnBulkOperation(Func <string, IndexQuery, BulkOperationOptions, Action <BulkOperationProgress>, RavenJArray> batchOperation, string index, CancellationTimeout timeout) { if (string.IsNullOrEmpty(index)) { return(GetEmptyMessage(HttpStatusCode.BadRequest)); } var option = new BulkOperationOptions { AllowStale = GetAllowStale(), MaxOpsPerSec = GetMaxOpsPerSec(), StaleTimeout = GetStaleTimeout(), RetrieveDetails = GetRetrieveDetails() }; var indexQuery = GetIndexQuery(maxPageSize: int.MaxValue); var status = new BulkOperationStatus(); long id; var task = Task.Factory.StartNew(() => { using (DocumentCacher.SkipSetDocumentsInDocumentCache()) { status.State["Batch"] = batchOperation(index, indexQuery, option, x => { status.MarkProgress(x); }); } }).ContinueWith(t => { if (timeout != null) { timeout.Dispose(); } if (t.IsFaulted == false) { status.MarkCompleted($"Processed {status.OperationProgress.ProcessedEntries} items"); return; } var exception = t.Exception.ExtractSingleInnerException(); status.MarkFaulted(exception.Message); }); Database.Tasks.AddTask(task, status, new TaskActions.PendingTaskDescription { StartTime = SystemTime.UtcNow, TaskType = TaskActions.PendingTaskType.IndexBulkOperation, Description = index }, out id, timeout.CancellationTokenSource); return(GetMessageWithObject(new { OperationId = id }, HttpStatusCode.Accepted)); }
private HttpResponseMessage OnBulkOperation(Func <string, IndexQuery, BulkOperationOptions, RavenJArray> batchOperation, string index, CancellationTimeout timeout) { if (string.IsNullOrEmpty(index)) { return(GetEmptyMessage(HttpStatusCode.BadRequest)); } var option = new BulkOperationOptions { AllowStale = GetAllowStale(), MaxOpsPerSec = GetMaxOpsPerSec(), StaleTimeout = GetStaleTimeout(), RetrieveDetails = GetRetrieveDetails() }; var indexQuery = GetIndexQuery(maxPageSize: int.MaxValue); var status = new BulkOperationStatus(); long id; var task = Task.Factory.StartNew(() => { status.State = batchOperation(index, indexQuery, option); }).ContinueWith(t => { if (timeout != null) { timeout.Dispose(); } if (t.IsFaulted == false) { status.Completed = true; return; } var exception = t.Exception.ExtractSingleInnerException(); status.State = RavenJObject.FromObject(new { Error = exception.Message }); status.Faulted = true; status.Completed = true; }); Database.Tasks.AddTask(task, status, new TaskActions.PendingTaskDescription { StartTime = SystemTime.UtcNow, TaskType = TaskActions.PendingTaskType.IndexBulkOperation, Payload = index }, out id, timeout.CancellationTokenSource); return(GetMessageWithObject(new { OperationId = id })); }
/// <summary> /// Submit the download request and then use the BulkDownloadOperation result to /// track status until the download is complete using TrackAsync. /// </summary> /// <param name="submitDownloadParameters"></param> /// <returns></returns> private async Task SubmitTrackDownloadAsync( SubmitDownloadParameters submitDownloadParameters, Progress <BulkOperationProgressInfo> progress, CancellationToken cancellationToken) { var bulkDownloadOperation = await BulkServiceManager.SubmitDownloadAsync(submitDownloadParameters); BulkOperationStatus <DownloadStatus> downloadStatus = await bulkDownloadOperation.TrackAsync( progress : progress, cancellationToken : cancellationToken); var resultFilePath = await bulkDownloadOperation.DownloadResultFileAsync( localResultDirectoryName : FileDirectory, localResultFileName : ResultFileName, decompress : true, overwrite : true // Set this value true if you want to overwrite the same file. ); OutputStatusMessage(string.Format("Download result file: {0}", resultFilePath)); }
private HttpResponseMessage OnBulkOperation(Func <string, IndexQuery, bool, RavenJArray> batchOperation, string index, CancellationTokenSource cts) { if (string.IsNullOrEmpty(index)) { return(GetEmptyMessage(HttpStatusCode.BadRequest)); } var allowStale = GetAllowStale(); var indexQuery = GetIndexQuery(maxPageSize: int.MaxValue); var status = new BulkOperationStatus(); var sp = Stopwatch.StartNew(); long id = 0; var task = Task.Factory.StartNew(() => { try { var array = batchOperation(index, indexQuery, allowStale); status.State = array; status.Completed = true; } finally { cts.Dispose(); } //TODO: log //context.Log(log => log.Debug("\tBatch Operation worked on {0:#,#;;0} documents in {1}, task #: {2}", array.Length, sp.Elapsed, id)); }); Database.Tasks.AddTask(task, status, new TaskActions.PendingTaskDescription { StartTime = SystemTime.UtcNow, TaskType = TaskActions.PendingTaskType.IndexBulkOperation, Payload = index }, out id, cts); return(GetMessageWithObject(new { OperationId = id })); }
/// <summary> /// Submit the download request and then use the BulkDownloadOperation result to /// track status until the download is complete e.g. either using /// TrackAsync or GetStatusAsync. /// </summary> /// <param name="submitDownloadParameters"></param> /// <returns></returns> private async Task SubmitAndDownloadAsync(SubmitDownloadParameters submitDownloadParameters) { var bulkDownloadOperation = await BulkServiceManager.SubmitDownloadAsync(submitDownloadParameters); // You may optionally cancel the TrackAsync operation after a specified time interval. var tokenSource = new CancellationTokenSource(); tokenSource.CancelAfter(TimeoutInMilliseconds); BulkOperationStatus <DownloadStatus> downloadStatus = await bulkDownloadOperation.TrackAsync(null, tokenSource.Token); // You can use TrackAsync to poll until complete as shown above, // or use custom polling logic with GetStatusAsync as shown below. //BulkOperationStatus<DownloadStatus> downloadStatus; //var waitTime = new TimeSpan(0, 0, 5); //for (int i = 0; i < 24; i++) //{ // Thread.Sleep(waitTime); // downloadStatus = await bulkDownloadOperation.GetStatusAsync(); // if (downloadStatus.Status == DownloadStatus.Completed) // { // break; // } //} var resultFilePath = await bulkDownloadOperation.DownloadResultFileAsync( FileDirectory, ResultFileName, decompress : true, overwrite : true // Set this value true if you want to overwrite the same file. ); OutputStatusMessage(string.Format("Download result file: {0}\n", resultFilePath)); }
private async Task RefreshStatus() { _currentStatus = await GetStatusWithRetries().ConfigureAwait(false); }
private HttpResponseMessage OnBulkOperation(Func<string, IndexQuery, BulkOperationOptions, RavenJArray> batchOperation, string index, CancellationTimeout timeout) { if (string.IsNullOrEmpty(index)) return GetEmptyMessage(HttpStatusCode.BadRequest); var option = new BulkOperationOptions { AllowStale = GetAllowStale(), MaxOpsPerSec = GetMaxOpsPerSec(), StaleTimeout = GetStaleTimeout(), RetrieveDetails = GetRetrieveDetails() }; var indexQuery = GetIndexQuery(maxPageSize: int.MaxValue); var status = new BulkOperationStatus(); long id; var task = Task.Factory.StartNew(() => { status.State = batchOperation(index, indexQuery, option); }).ContinueWith(t => { if (timeout != null) timeout.Dispose(); if (t.IsFaulted == false) { status.Completed = true; return; } var exception = t.Exception.ExtractSingleInnerException(); status.State = RavenJObject.FromObject(new { Error = exception.Message }); status.Faulted = true; status.Completed = true; }); Database.Tasks.AddTask(task, status, new TaskActions.PendingTaskDescription { StartTime = SystemTime.UtcNow, TaskType = TaskActions.PendingTaskType.IndexBulkOperation, Payload = index }, out id, timeout.CancellationTokenSource); return GetMessageWithObject(new { OperationId = id }); }
private HttpResponseMessage OnBulkOperation(Func<string, IndexQuery, bool, RavenJArray> batchOperation, string index) { if (string.IsNullOrEmpty(index)) return GetEmptyMessage(HttpStatusCode.BadRequest); var allowStale = GetAllowStale(); var indexQuery = GetIndexQuery(maxPageSize: int.MaxValue); var status = new BulkOperationStatus(); var sp = Stopwatch.StartNew(); long id = 0; var task = Task.Factory.StartNew(() => { var array = batchOperation(index, indexQuery, allowStale); status.State = array; status.Completed = true; //TODO: log //context.Log(log => log.Debug("\tBatch Operation worked on {0:#,#;;0} documents in {1}, task #: {2}", array.Length, sp.Elapsed, id)); }); Database.Tasks.AddTask(task, status, out id); return GetMessageWithObject(new { OperationId = id }); }