Example #1
0
        public void Disk_Read_Write()
        {
            var settings = new EngineSettings
            {
                MemorySegmentSize = 10,
                DataStream        = new MemoryStream(),
                LogStream         = new MemoryStream()
            };

            var disk  = new DiskService(settings);
            var pages = new List <PageBuffer>();

            // let's create 100 pages with 0-99 full data
            for (var i = 0; i < 100; i++)
            {
                var p = disk.NewPage();

                p.Fill((byte)i);  // fills with 0 - 99

                pages.Add(p);
            }

            // page will be saved in LOG file in PagePosition order (0-99)
            disk.WriteAsync(pages);

            // wait for async queue writes
            disk.Queue.Wait();

            // after release, no page can be read/write
            pages.Clear();

            // lets do some read tests
            var reader = disk.GetReader();

            for (var i = 0; i < 100; i++)
            {
                var p = reader.ReadPage(i * 8192, false, FileOrigin.Log);

                p.All((byte)i).Should().BeTrue();

                p.Release();
            }

            // test cache in use
            disk.Cache.PagesInUse.Should().Be(0);

            // wait all async threads
            disk.Dispose();
        }
Example #2
0
 private void BtnCarregaInfo_Click(object sender, EventArgs e)
 {
     try
     {
         LimpaGrades();
         XML.LeInfoXML();
         PreencheGrade(dtgES, XML.RetConteudoNodo(XML.XMLParams.InfoES));
         PreencheGrade(dtgIRQ, XML.RetConteudoNodo(XML.XMLParams.InfoIRQ));
         PreencheGrade(dtgMemo, XML.RetConteudoNodo(XML.XMLParams.Memo));
         PreencheGrade(dtgResumo, XML.GetNodoInfo(XML.XMLParams.ResumoSistema));
         DiskService.GetInfo(dataGridView1);
     }
     catch (Exception ex)
     {
         MessageBox.Show($"Erro carregar informações: {ex.Message}", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
 }
Example #3
0
        private void DoRecovery(BinaryReader reader)
        {
            // open disk service
            using (var disk = new DiskService(_connectionString))
            {
                disk.Lock();

                // while pages, read from redo, write on disk
                while (reader.BaseStream.Position != reader.BaseStream.Length)
                {
                    var page = this.ReadPageJournal(reader);

                    disk.WritePage(page);
                }

                reader.Close();

                disk.UnLock();
            }
        }
Example #4
0
        public ConfigurationViewModel(
            ConfigurationStore configuration,
            NetworkService networkService,
            DiskService diskService)
        {
            _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration));
            if (networkService == null)
            {
                throw new ArgumentNullException(nameof(networkService));
            }
            if (diskService == null)
            {
                throw new ArgumentNullException(nameof(diskService));
            }

            Networks     = networkService.GetNetworks();
            Disks        = diskService.GetDisks();
            _disk        = _configuration.Disk;
            _network     = _configuration.Network;
            _transparent = _configuration.Transparent;
        }
Example #5
0
        public void CacheAsync_Thread_ShareCounter()
        {
            // Set()   - Seta true - Se estiver bloqueado, vai liberar
            // Reset() - Seta false - Quando chegar no proximo Wait() vai aguardar
            // Wait()  - Trava a thread SE estiver false (Reset) - Passa reto se estiver true (Set)
            var wa = new ManualResetEventSlim(true);
            var wb = new ManualResetEventSlim(false);

            // serialize 2 threads
            void serialize(ManualResetEventSlim toBlock, ManualResetEventSlim toFree)
            {
                toBlock?.Reset();
                toFree.Set();
                toBlock?.Wait();
            }

            ;

            var disk = new DiskService(new EngineSettings {
                DataStream = new MemoryStream(), MemorySegmentSize = 10
            });

            var ta = new Task(() =>
            {
                var r = disk.GetReader();
                wa.Wait();

                // test starts here!!!
                var p0 = new HeaderPage(r.NewPage(), 0);

                p0.UserVersion = 25;

                disk.WriteAsync(new PageBuffer[] { p0.UpdateBuffer() });

                // (1 ->) jump to thread B
                serialize(wa, wb);
                // (2 <-) continue from thread B

                disk.Queue.Wait();

                // (3 ->) jump to thread B
                serialize(wa, wb);
            });

            var tb = new Task(() =>
            {
                var r = disk.GetReader();
                wb.Wait();

                // (1 <-) continue from thread A
                var p0 = r.ReadPage(0, false, FileOrigin.Log);

                // share counter can be 2 or 3
                // - if 2, page was not persisted yet on disk (async)
                // - if 1, page already persisted on disk
                var share = p0.ShareCounter;

                (share >= 1 && share <= 2).Should().BeTrue();

                // (2 ->) jump to thread A
                serialize(wb, wa);
                // (3 <-) continue from thread B

                // but now, I'm sure this page was saved and thread A release
                p0.ShareCounter.Should().Be(1);

                // let's release my page
                p0.Release();

                p0.ShareCounter.Should().Be(0);

                // release thread A
                serialize(null, wa);
            });

            ta.Start();
            tb.Start();

            Task.WaitAll(ta, tb);
        }
 public DefaultServiceFactory()
 {
     DiskService  = new DiskService(new LowLevelApi());
     ImageService = new DismImageService();
 }
Example #7
0
        public MainViewModel(IObservable <LogEvent> events, IDeployer <RaspberryPi> deployer, IPackageImporterFactory importerFactory, DiskService diskService,
                             UIServices uiServices, ISettingsService settingsService)
        {
            this.deployer               = deployer;
            this.importerFactory        = importerFactory;
            this.uiServices             = uiServices;
            this.settingsService        = settingsService;
            RefreshDisksCommmandWrapper = new CommandWrapper <Unit, ICollection <Disk> >(this,
                                                                                         ReactiveCommand.CreateFromTask(diskService.GetDisks), uiServices.DialogService);
            disksHelper = RefreshDisksCommmandWrapper.Command
                          .Select(x => x
                                  .Where(y => !y.IsBoot && !y.IsSystem && !y.IsOffline)
                                  .Select(disk => new DiskViewModel(disk)))
                          .ToProperty(this, x => x.Disks);

            ShowWarningCommand = ReactiveCommand.CreateFromTask(() => uiServices.DialogService.ShowAlert(this, Resources.TermsOfUseTitle,
                                                                                                         Resources.WarningNotice));

            ImportDriverPackageWrapper = new CommandWrapper <Unit, Unit>(this,
                                                                         ReactiveCommand.CreateFromTask(ImportDriverPackage), uiServices.DialogService);

            SetupPickWimCommand();

            var whenAnyValue = this.WhenAnyValue(x => x.SelectedDisk, (DiskViewModel disk) => disk != null);

            var canDeploy = this.WhenAnyObservable(x => x.WimMetadata.SelectedImageObs)
                            .Select(metadata => metadata != null)
                            .CombineLatest(whenAnyValue, (isWimSelected, isDiskSelected) => isDiskSelected && isWimSelected);

            FullInstallWrapper = new CommandWrapper <Unit, Unit>(this,
                                                                 ReactiveCommand.CreateFromTask(DeployUefiAndWindows, canDeploy), uiServices.DialogService);

            var isBusyObs = FullInstallWrapper.Command.IsExecuting;

            isBusyHelper = isBusyObs.ToProperty(this, model => model.IsBusy);

            progressHelper = progressSubject
                             .Where(d => !double.IsNaN(d))
                             .ObserveOn(SynchronizationContext.Current)
                             .ToProperty(this, model => model.Progress);

            isProgressVisibleHelper = progressSubject
                                      .Select(d => !double.IsNaN(d))
                                      .ToProperty(this, x => x.IsProgressVisible);

            SetupLogging(events);

            hasWimHelper = this.WhenAnyValue(model => model.WimMetadata, (WimMetadataViewModel x) => x != null)
                           .ToProperty(this, x => x.HasWim);

            DonateCommand = ReactiveCommand.Create(() => { Process.Start(DonationLink); });
        }
Example #8
0
 public PageService(DiskService diskService)
 {
     _diskService  = diskService;
     _cacheService = new CacheService();
 }
Example #9
0
 internal TransactionService(DiskService disk, CacheService cache, JournalService journal)
 {
     _disk = disk;
     _cache = cache;
     _journal = journal;
 }
Example #10
0
 public DataService(DiskService disk, CacheService cache, PageService pager)
 {
     _disk = disk;
     _cache = cache;
     _pager = pager;
 }
Example #11
0
 public DiskController(DiskService diskService)
 {
     _diskService = diskService;
 }