public List <AsyncQueueStep> GetActiveAsyncQueueRequests(int partitionId, string processInstanceName, TimeSpan failoverWaitThreshold, AsyncQueuePriority?priority = null, bool haRequestOnly = false, int batchSize = 10)
        {
            if (partitionId >= this.PartitionCount)
            {
                throw new ArgumentOutOfRangeException(string.Format("Invalid Parition Id {0} passed. Valid partition values are 0 to {1}", partitionId, this.PartitionCount - 1));
            }
            AsyncQueueSession.ValidateProcessInstanceName(processInstanceName);
            object propertyValue = this.GetAllPhysicalPartitions()[partitionId];
            MultiValuedProperty <AsyncQueueOwnerInfo> propertyValue2 = new MultiValuedProperty <AsyncQueueOwnerInfo>();
            QueryFilter queryFilter = QueryFilter.AndTogether(new QueryFilter[]
            {
                AsyncQueueSession.NewComparisonFilter(DalHelper.PhysicalInstanceKeyProp, propertyValue),
                AsyncQueueSession.NewComparisonFilter(AsyncQueueCommonSchema.ProcessInstanceNameProperty, processInstanceName),
                AsyncQueueSession.NewComparisonFilter(AsyncQueueCommonSchema.OwnerListQueryProperty, propertyValue2),
                AsyncQueueSession.NewComparisonFilter(AsyncQueueCommonSchema.BatchSizeQueryProperty, batchSize),
                AsyncQueueSession.NewComparisonFilter(AsyncQueueCommonSchema.FailoverWaitInSecondsQueryProperty, failoverWaitThreshold.TotalSeconds)
            });

            if (haRequestOnly)
            {
                AsyncQueueFlags asyncQueueFlags = AsyncQueueFlags.HARequest;
                queryFilter = QueryFilter.AndTogether(new QueryFilter[]
                {
                    queryFilter,
                    AsyncQueueSession.NewComparisonFilter(AsyncQueueCommonSchema.FlagsProperty, asyncQueueFlags)
                });
            }
            if (priority != null)
            {
                queryFilter = QueryFilter.AndTogether(new QueryFilter[]
                {
                    queryFilter,
                    AsyncQueueSession.NewComparisonFilter(AsyncQueueCommonSchema.PriorityProperty, (byte)priority.Value)
                });
            }
            return(this.dataProviderDirectory.Find <AsyncQueueStep>(queryFilter, null, true, null).Cast <AsyncQueueStep>().ToList <AsyncQueueStep>());
        }
        public void UpdateStepStatus(string processInstanceName, Guid requestId, Guid organizationalUnitRoot, Guid stepId, AsyncQueueStatus currentStatus, AsyncQueueStatus newStatus, out AsyncQueueRequestStatusInfo requestStatusInfo, TimeSpan?retryWaitInterval = null, string cookie = null)
        {
            requestStatusInfo = null;
            AsyncQueueSession.ValidateProcessInstanceName(processInstanceName);
            AsyncQueueRequestStatusUpdate asyncQueueRequestStatusUpdate = new AsyncQueueRequestStatusUpdate(organizationalUnitRoot, requestId, stepId);

            asyncQueueRequestStatusUpdate.ProcessInstanceName = processInstanceName;
            asyncQueueRequestStatusUpdate.CurrentStatus       = currentStatus;
            asyncQueueRequestStatusUpdate.Status = newStatus;
            asyncQueueRequestStatusUpdate.Cookie = cookie;
            if (retryWaitInterval != null)
            {
                asyncQueueRequestStatusUpdate.RetryInterval = (int)retryWaitInterval.Value.TotalSeconds;
            }
            asyncQueueRequestStatusUpdate[AsyncQueueRequestStatusUpdateSchema.RequestCompleteProperty]      = false;
            asyncQueueRequestStatusUpdate[AsyncQueueRequestStatusUpdateSchema.RequestStatusProperty]        = AsyncQueueStatus.None;
            asyncQueueRequestStatusUpdate[AsyncQueueRequestStatusUpdateSchema.RequestStartDatetimeProperty] = null;
            asyncQueueRequestStatusUpdate[AsyncQueueRequestStatusUpdateSchema.RequestEndDatetimeProperty]   = null;
            this.Save(this.dataProviderDirectory, asyncQueueRequestStatusUpdate);
            requestStatusInfo               = new AsyncQueueRequestStatusInfo();
            requestStatusInfo.Status        = asyncQueueRequestStatusUpdate.RequestStatus;
            requestStatusInfo.StartDatetime = asyncQueueRequestStatusUpdate.RequestStartDatetime;
            requestStatusInfo.EndDatetime   = asyncQueueRequestStatusUpdate.RequestEndDatetime;
        }