コード例 #1
0
 public bool IsFinalStatus(BulkOperationStatus <DownloadStatus> status)
 {
     return
         (status.Status == DownloadStatus.Completed ||
          status.Status == DownloadStatus.Failed ||
          status.Status == DownloadStatus.FailedFullSyncRequired);
 }
コード例 #2
0
ファイル: DocumentBatch.cs プロジェクト: robashton/ravendb
		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
			});
		}
コード例 #3
0
        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 }));
        }
コード例 #4
0
ファイル: DocumentBatch.cs プロジェクト: ramzaniayoob/ravendb
        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
            });
        }
コード例 #5
0
 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);
 }
コード例 #6
0
        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 }));
        }
コード例 #8
0
        /// <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));
        }
コード例 #9
0
        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 }));
        }
コード例 #10
0
        /// <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));
        }
コード例 #11
0
 private async Task RefreshStatus()
 {
     _currentStatus = await GetStatusWithRetries().ConfigureAwait(false);
 }
コード例 #12
0
        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 });
        }
コード例 #13
0
		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 });
		}