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(); }
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); } }
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(); } }
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; }
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(); }
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); }); }
public PageService(DiskService diskService) { _diskService = diskService; _cacheService = new CacheService(); }
internal TransactionService(DiskService disk, CacheService cache, JournalService journal) { _disk = disk; _cache = cache; _journal = journal; }
public DataService(DiskService disk, CacheService cache, PageService pager) { _disk = disk; _cache = cache; _pager = pager; }
public DiskController(DiskService diskService) { _diskService = diskService; }