Пример #1
0
 public virtual Task <IReadOnlyList <VersionedInstanceIdentifier> > GetInstanceIdentifiersByWatermarkRangeAsync(
     WatermarkRange watermarkRange,
     IndexStatus indexStatus,
     CancellationToken cancellationToken = default)
 {
     throw new BadRequestException(DicomSqlServerResource.SchemaVersionNeedsToBeUpgraded);
 }
        public void GivenPreviouslySerializedMessage_WhenDeserializingWithNewSettings_ThenDeserializeSuccessfully()
        {
            var queryTags = new List <ExtendedQueryTagStoreEntry>
            {
                new ExtendedQueryTagStoreEntry(1, "01", "DT", "foo", QueryTagLevel.Instance, ExtendedQueryTagStatus.Adding, QueryStatus.Enabled, 0),
                new ExtendedQueryTagStoreEntry(2, "02", "DT", "bar", QueryTagLevel.Study, ExtendedQueryTagStatus.Adding, QueryStatus.Enabled, 0),
            };
            var       range       = new WatermarkRange(5, 10);
            const int threadCount = 7;

            var    before = new ReindexBatchArguments(queryTags, range, threadCount);
            string json   = JsonConvert.SerializeObject(
                before,
                new JsonSerializerSettings
            {
                TypeNameHandling = TypeNameHandling.Objects,
                TypeNameAssemblyFormatHandling = TypeNameAssemblyFormatHandling.Simple,
            });

            ReindexBatchArguments actual = JsonConvert.DeserializeObject <ReindexBatchArguments>(json, JsonSerializerSettings);

            Assert.Equal(before.QueryTags, actual.QueryTags, new TagEntryComparer());
            Assert.Equal(before.ThreadCount, actual.ThreadCount);
            Assert.Equal(before.WatermarkRange, actual.WatermarkRange);
        }
Пример #3
0
 internal static ReindexBatchArguments FromOptions(
     IReadOnlyCollection <ExtendedQueryTagStoreEntry> queryTags,
     WatermarkRange watermarkRange,
     QueryTagIndexingOptions indexingOptions)
 {
     EnsureArg.IsNotNull(indexingOptions, nameof(indexingOptions));
     return(new ReindexBatchArguments(queryTags, watermarkRange, indexingOptions.BatchThreadCount));
 }
Пример #4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ReindexBatchArguments"/> class with the specified values.
        /// </summary>
        /// <param name="queryTags">The tag entries.</param>
        /// <param name="watermarkRange">The inclusive watermark range.</param>
        /// <param name="threadCount">The number of threads available for each batch.</param>
        /// <exception cref="ArgumentNullException"><paramref name="queryTags"/> is <see langword="null"/>.</exception>
        /// <exception cref="ArgumentOutOfRangeException">
        /// <paramref name="threadCount"/> is less than <c>1</c>.
        /// </exception>
        public ReindexBatchArguments(
            IReadOnlyCollection <ExtendedQueryTagStoreEntry> queryTags,
            WatermarkRange watermarkRange,
            int threadCount)
        {
            EnsureArg.IsNotNull(queryTags, nameof(queryTags));
            EnsureArg.IsGte(threadCount, 1, nameof(threadCount));

            QueryTags      = queryTags;
            ThreadCount    = threadCount;
            WatermarkRange = watermarkRange;
        }
        public void GivenBadValues_WhenContructing_ThenThrowExceptions()
        {
            var queryTags = new List <ExtendedQueryTagStoreEntry>
            {
                new ExtendedQueryTagStoreEntry(1, "01", "DT", "foo", QueryTagLevel.Instance, ExtendedQueryTagStatus.Adding, QueryStatus.Enabled, 0),
                new ExtendedQueryTagStoreEntry(2, "02", "DT", "bar", QueryTagLevel.Study, ExtendedQueryTagStatus.Adding, QueryStatus.Enabled, 0),
            };
            var       range       = new WatermarkRange(5, 10);
            const int threadCount = 7;

            Assert.Throws <ArgumentNullException>(() => new ReindexBatchArguments(null, range, threadCount));
            Assert.Throws <ArgumentOutOfRangeException>(() => new ReindexBatchArguments(queryTags, range, -threadCount));
        }
Пример #6
0
        public OperationProgress GetProgress()
        {
            int percentComplete = 0;

            if (Completed.HasValue)
            {
                WatermarkRange range = Completed.GetValueOrDefault();
                percentComplete = range.End == 1 ? 100 : (int)((double)(range.End - range.Start + 1) / range.End * 100);
            }

            return(new OperationProgress
            {
                PercentComplete = percentComplete,
                ResourceIds = QueryTagKeys?.Select(x => x.ToString(CultureInfo.InvariantCulture)).ToList(),
            });
        }
        public void GivenValues_WhenConstructing_ThenAssignProperties()
        {
            var queryTags = new List <ExtendedQueryTagStoreEntry>
            {
                new ExtendedQueryTagStoreEntry(1, "01", "DT", "foo", QueryTagLevel.Instance, ExtendedQueryTagStatus.Adding, QueryStatus.Enabled, 0),
                new ExtendedQueryTagStoreEntry(2, "02", "DT", "bar", QueryTagLevel.Study, ExtendedQueryTagStatus.Adding, QueryStatus.Enabled, 0),
            };
            var       range       = new WatermarkRange(5, 10);
            const int threadCount = 7;

            var actual = new ReindexBatchArguments(queryTags, range, threadCount);

            Assert.Same(queryTags, actual.QueryTags);
            Assert.Equal(range, actual.WatermarkRange);
            Assert.Equal(threadCount, actual.ThreadCount);
        }
Пример #8
0
        public override async Task <IReadOnlyList <VersionedInstanceIdentifier> > GetInstanceIdentifiersByWatermarkRangeAsync(
            WatermarkRange watermarkRange,
            IndexStatus indexStatus,
            CancellationToken cancellationToken = default)
        {
            var results = new List <VersionedInstanceIdentifier>();

            using (SqlConnectionWrapper sqlConnectionWrapper = await SqlConnectionWrapperFactory.ObtainSqlConnectionWrapperAsync(cancellationToken))
                using (SqlCommandWrapper sqlCommandWrapper = sqlConnectionWrapper.CreateSqlCommand())
                {
                    VLatest.GetInstancesByWatermarkRange.PopulateCommand(
                        sqlCommandWrapper,
                        watermarkRange.Start,
                        watermarkRange.End,
                        (byte)indexStatus);

                    using (var reader = await sqlCommandWrapper.ExecuteReaderAsync(CommandBehavior.SequentialAccess, cancellationToken))
                    {
                        while (await reader.ReadAsync(cancellationToken))
                        {
                            (string rStudyInstanceUid, string rSeriesInstanceUid, string rSopInstanceUid, long watermark) = reader.ReadRow(
                                VLatest.Instance.StudyInstanceUid,
                                VLatest.Instance.SeriesInstanceUid,
                                VLatest.Instance.SopInstanceUid,
                                VLatest.Instance.Watermark);

                            results.Add(new VersionedInstanceIdentifier(
                                            rStudyInstanceUid,
                                            rSeriesInstanceUid,
                                            rSopInstanceUid,
                                            watermark));
                        }
                    }
                }

            return(results);
        }