示例#1
0
        public override RestoreQueue GetRestoreCandidate()
        {
            RestoreQueue queueItem;

            using (IUpdateContext updateContext = PersistentStore.OpenUpdateContext(UpdateContextSyncMode.Flush))
            {
                QueryRestoreQueueParameters parms = new QueryRestoreQueueParameters();

                parms.PartitionArchiveKey    = _partitionArchive.GetKey();
                parms.ProcessorId            = ServerPlatform.ProcessorId;
                parms.RestoreQueueStatusEnum = RestoreQueueStatusEnum.Restoring;
                IQueryRestoreQueue broker = updateContext.GetBroker <IQueryRestoreQueue>();

                // Stored procedure only returns 1 result.
                queueItem = broker.FindOne(parms);



                if (queueItem != null)
                {
                    updateContext.Commit();
                }
            }
            if (queueItem == null)
            {
                using (IUpdateContext updateContext = PersistentStore.OpenUpdateContext(UpdateContextSyncMode.Flush))
                {
                    RestoreQueueSelectCriteria criteria = new RestoreQueueSelectCriteria();
                    criteria.RestoreQueueStatusEnum.EqualTo(RestoreQueueStatusEnum.Restoring);
                    IRestoreQueueEntityBroker restoreQueueBroker = updateContext.GetBroker <IRestoreQueueEntityBroker>();

                    if (restoreQueueBroker.Count(criteria) > HsmSettings.Default.MaxSimultaneousRestores)
                    {
                        return(null);
                    }

                    QueryRestoreQueueParameters parms = new QueryRestoreQueueParameters();

                    parms.PartitionArchiveKey    = _partitionArchive.GetKey();
                    parms.ProcessorId            = ServerPlatform.ProcessorId;
                    parms.RestoreQueueStatusEnum = RestoreQueueStatusEnum.Pending;
                    IQueryRestoreQueue broker = updateContext.GetBroker <IQueryRestoreQueue>();

                    parms.RestoreQueueStatusEnum = RestoreQueueStatusEnum.Pending;
                    queueItem = broker.FindOne(parms);

                    if (queueItem != null)
                    {
                        updateContext.Commit();
                    }
                }
            }
            return(queueItem);
        }
        /// <summary>
        /// Get a list of restore candidates for the archive.
        /// </summary>
        /// <remarks>
        /// Note that at the current time only one cadidate is returned at a time.
        /// </remarks>
        /// <returns>A restore candidate.  null will be returned if no candidates exist.</returns>
        public virtual RestoreQueue GetRestoreCandidate()
        {
            RestoreQueue queueItem;

            using (IUpdateContext updateContext = PersistentStore.OpenUpdateContext(UpdateContextSyncMode.Flush))
            {
                QueryRestoreQueueParameters parms = new QueryRestoreQueueParameters();

                parms.PartitionArchiveKey    = _partitionArchive.GetKey();
                parms.ProcessorId            = ServerPlatform.ProcessorId;
                parms.RestoreQueueStatusEnum = RestoreQueueStatusEnum.Pending;
                IQueryRestoreQueue broker = updateContext.GetBroker <IQueryRestoreQueue>();

                // Stored procedure only returns 1 result.
                queueItem = broker.FindOne(parms);

                if (queueItem != null)
                {
                    updateContext.Commit();
                }
            }

            return(queueItem);
        }