Exemple #1
0
        public async Task Reset(ILuceneWriteContext writer, long generation, IProgress <StorageIndexChangeLogWatcherInitializationProgress> progress = null)
        {
            //TODO: This method is almost identical to the one above except for a few things that could be parameterized.
            progress = progress ?? new Progress <StorageIndexChangeLogWatcherInitializationProgress>();

            log.Get(generation, true, 0); //NOTE: Reset to the generation but don't fetch any changes yet.
            long latest = log.LatestGeneration;

            progress.Report(new StorageIndexChangeLogWatcherInitializationProgress(area, new ChangeCount(0, 0, 0), generation, latest, false));

            await Task.Run(async() =>
            {
                while (true)
                {
                    IStorageChangeCollection changes = log.Get(true, batch);
                    if (changes.Count < 1)
                    {
                        progress.Report(new StorageIndexChangeLogWatcherInitializationProgress(area, changes.Count, changes.Generation, latest, true));
                        return;
                    }

                    await writer.WriteAll(changes.Created.Select(change => change.CreateEntity()));
                    await writer.WriteAll(changes.Updated.Select(change => change.CreateEntity()));
                    await writer.DeleteAll(changes.Deleted.Select(change => change.CreateEntity()));

                    progress.Report(new StorageIndexChangeLogWatcherInitializationProgress(area, changes.Count, changes.Generation, latest, false));
                }
            });
        }
Exemple #2
0
        public async Task Initialize(ILuceneWriteContext writer, IProgress <StorageIndexChangeLogWatcherInitializationProgress> progress = null)
        {
            progress = progress ?? new Progress <StorageIndexChangeLogWatcherInitializationProgress>();
            await Task.Run(async() =>
            {
                long latest = log.LatestGeneration;
                while (true)
                {
                    IStorageChangeCollection changes = log.Get(false, batch);
                    if (changes.Count < 1)
                    {
                        progress.Report(new StorageIndexChangeLogWatcherInitializationProgress(area, changes.Count, changes.Generation, latest, true));
                        return;
                    }
                    await writer.WriteAll(changes.Partitioned.Select(change => change.CreateEntity()));

                    progress.Report(new StorageIndexChangeLogWatcherInitializationProgress(area, changes.Count, changes.Generation, latest, false));
                }
            });
        }