public PosixPageFileBackedMemoryMapPager(string file, long?initialFileSize = null) { var instanceId = Interlocked.Increment(ref _counter); _file = "/" + Syscall.getpid() + "-" + instanceId + "-" + file; _fd = Rt.shm_open(_file, OpenFlags.O_RDWR | OpenFlags.O_CREAT, (int)FilePermissions.ALLPERMS); if (_fd == -1) { PosixHelper.ThrowLastError(Marshal.GetLastWin32Error()); } SysPageSize = Syscall.sysconf(SysconfName._SC_PAGESIZE); if (initialFileSize.HasValue) { _totalAllocationSize = NearestSizeToPageSize(initialFileSize.Value); } _totalAllocationSize = NearestSizeToPageSize(_totalAllocationSize); var result = Syscall.ftruncate(_fd, _totalAllocationSize); if (result != 0) { PosixHelper.ThrowLastError(result); } NumberOfAllocatedPages = _totalAllocationSize / PageSize; PagerState.Release(); PagerState = CreatePagerState(); }
public PosixTempMemoryMapPager(StorageEnvironmentOptions options, VoronPathSetting file, long?initialFileSize = null) : base(options, canPrefetchAhead: false) { _options = options; FileName = file; PosixHelper.EnsurePathExists(file.FullPath); _fd = Syscall.open(FileName.FullPath, OpenFlags.O_RDWR | PerPlatformValues.OpenFlags.O_CREAT | PerPlatformValues.OpenFlags.O_EXCL, FilePermissions.S_IWUSR | FilePermissions.S_IRUSR); if (_fd == -1) { var err = Marshal.GetLastWin32Error(); Syscall.ThrowLastError(err, "Cannot open " + FileName); } DeleteOnClose = true; SysPageSize = Syscall.sysconf(PerPlatformValues.SysconfNames._SC_PAGESIZE); if (SysPageSize <= 0) // i.e. -1 because _SC_PAGESIZE defined differently on various platforms { var err = Marshal.GetLastWin32Error(); Syscall.ThrowLastError(err, "Got SysPageSize <= 0 for " + FileName); } _totalAllocationSize = NearestSizeToPageSize(initialFileSize ?? _totalAllocationSize); PosixHelper.AllocateFileSpace(_options, _fd, _totalAllocationSize, FileName.FullPath); NumberOfAllocatedPages = _totalAllocationSize / Constants.Storage.PageSize; SetPagerState(CreatePagerState()); }
public PosixMemoryMapPager(string file, long?initialFileSize = null) { _file = file; _fd = Syscall.open(file, OpenFlags.O_RDWR | OpenFlags.O_CREAT | OpenFlags.O_SYNC, FilePermissions.S_IWUSR | FilePermissions.S_IRUSR); if (_fd == -1) { PosixHelper.ThrowLastError(Marshal.GetLastWin32Error()); } SysPageSize = Syscall.sysconf(SysconfName._SC_PAGESIZE); _totalAllocationSize = GetFileSize(); if (_totalAllocationSize == 0 && initialFileSize.HasValue) { _totalAllocationSize = NearestSizeToPageSize(initialFileSize.Value); } if (_totalAllocationSize == 0 || _totalAllocationSize % SysPageSize != 0 || _totalAllocationSize != GetFileSize()) { _totalAllocationSize = NearestSizeToPageSize(_totalAllocationSize); PosixHelper.AllocateFileSpace(_fd, (ulong)_totalAllocationSize); } NumberOfAllocatedPages = _totalAllocationSize / PageSize; PagerState.Release(); PagerState = CreatePagerState(); }
public PosixMemoryMapPager(string file, long?initialFileSize = null) { _file = file; //todo, do we need O_SYNC here? //todo, ALLPERMS ? _fd = Syscall.open(file, OpenFlags.O_RDWR | OpenFlags.O_CREAT | OpenFlags.O_SYNC, FilePermissions.ALLPERMS); if (_fd == -1) { PosixHelper.ThrowLastError(Marshal.GetLastWin32Error()); } SysPageSize = Syscall.sysconf(SysconfName._SC_PAGESIZE); _totalAllocationSize = GetFileSize(); if (_totalAllocationSize == 0 && initialFileSize.HasValue) { _totalAllocationSize = NearestSizeToPageSize(initialFileSize.Value); } if (_totalAllocationSize == 0 || _totalAllocationSize % SysPageSize != 0) { _totalAllocationSize = NearestSizeToPageSize(_totalAllocationSize); var result = Syscall.ftruncate(_fd, _totalAllocationSize); if (result != 0) { PosixHelper.ThrowLastError(result); } } NumberOfAllocatedPages = _totalAllocationSize / PageSize; PagerState.Release(); PagerState = CreatePagerState(); }
public PosixTempMemoryMapPager(int pageSize, string file, long?initialFileSize = null) : base(pageSize) { _file = file; PosixHelper.EnsurePathExists(file); _fd = Syscall.open(_file, OpenFlags.O_RDWR | OpenFlags.O_CREAT | OpenFlags.O_EXCL, FilePermissions.S_IWUSR | FilePermissions.S_IRUSR); if (_fd == -1) { var err = Marshal.GetLastWin32Error(); PosixHelper.ThrowLastError(err); } DeleteOnClose = true; SysPageSize = Syscall.sysconf(SysconfName._SC_PAGESIZE); _totalAllocationSize = NearestSizeToPageSize(initialFileSize ?? _totalAllocationSize); PosixHelper.AllocateFileSpace(_fd, (ulong)_totalAllocationSize); NumberOfAllocatedPages = _totalAllocationSize / _pageSize; PagerState.Release(); PagerState = CreatePagerState(); }
public PosixMemoryMapPager(StorageEnvironmentOptions options, VoronPathSetting file, long?initialFileSize = null, bool usePageProtection = false) : base(options, canPrefetchAhead: true, usePageProtection: usePageProtection) { _options = options; FileName = file; _copyOnWriteMode = options.CopyOnWriteMode && file.FullPath.EndsWith(Constants.DatabaseFilename); _isSyncDirAllowed = Syscall.CheckSyncDirectoryAllowed(FileName.FullPath); PosixHelper.EnsurePathExists(FileName.FullPath); _fd = Syscall.open(file.FullPath, OpenFlags.O_RDWR | PerPlatformValues.OpenFlags.O_CREAT, FilePermissions.S_IWUSR | FilePermissions.S_IRUSR); if (_fd == -1) { var err = Marshal.GetLastWin32Error(); Syscall.ThrowLastError(err, "when opening " + file); } SysPageSize = Syscall.sysconf(PerPlatformValues.SysconfNames._SC_PAGESIZE); if (SysPageSize <= 0) // i.e. -1 because _SC_PAGESIZE defined differently on various platforms { var err = Marshal.GetLastWin32Error(); Syscall.ThrowLastError(err, "Got SysPageSize <= 0 for " + FileName); } _totalAllocationSize = GetFileSize(); if (_totalAllocationSize == 0 && initialFileSize.HasValue) { _totalAllocationSize = NearestSizeToPageSize(initialFileSize.Value); } if (_totalAllocationSize == 0 || _totalAllocationSize % SysPageSize != 0 || _totalAllocationSize != GetFileSize()) { _totalAllocationSize = NearestSizeToPageSize(_totalAllocationSize); PosixHelper.AllocateFileSpace(_options, _fd, _totalAllocationSize, file.FullPath); } if (_isSyncDirAllowed && Syscall.SyncDirectory(file.FullPath) == -1) { var err = Marshal.GetLastWin32Error(); Syscall.ThrowLastError(err, "sync dir for " + file); } NumberOfAllocatedPages = _totalAllocationSize / Constants.Storage.PageSize; SetPagerState(CreatePagerState()); }
public PosixMemoryMapPager(StorageEnvironmentOptions options, string file, long?initialFileSize = null, bool usePageProtection = false) : base(options, usePageProtection) { FileName = file; _copyOnWriteMode = options.CopyOnWriteMode && file.EndsWith(Constants.DatabaseFilename); _isSyncDirAllowed = PosixHelper.CheckSyncDirectoryAllowed(FileName); PosixHelper.EnsurePathExists(FileName); _fd = Syscall.open(file, OpenFlags.O_RDWR | OpenFlags.O_CREAT, FilePermissions.S_IWUSR | FilePermissions.S_IRUSR); if (_fd == -1) { var err = Marshal.GetLastWin32Error(); PosixHelper.ThrowLastError(err, "when opening " + file); } SysPageSize = Syscall.sysconf(SysconfName._SC_PAGESIZE); _totalAllocationSize = GetFileSize(); if (_totalAllocationSize == 0 && initialFileSize.HasValue) { _totalAllocationSize = NearestSizeToPageSize(initialFileSize.Value); } if (_totalAllocationSize == 0 || _totalAllocationSize % SysPageSize != 0 || _totalAllocationSize != GetFileSize()) { _totalAllocationSize = NearestSizeToPageSize(_totalAllocationSize); PosixHelper.AllocateFileSpace(_fd, (ulong)_totalAllocationSize, file); } if (_isSyncDirAllowed && PosixHelper.SyncDirectory(file) == -1) { var err = Marshal.GetLastWin32Error(); PosixHelper.ThrowLastError(err, "sync dir for " + file); } NumberOfAllocatedPages = _totalAllocationSize / PageSize; SetPagerState(CreatePagerState()); }
public PosixMemoryMapPager(int pageSize, string file, long?initialFileSize = null) : base(pageSize) { _file = file; _isSyncDirAllowed = PosixHelper.CheckSyncDirectoryAllowed(_file); PosixHelper.EnsurePathExists(_file); _fd = Syscall.open(file, OpenFlags.O_RDWR | OpenFlags.O_CREAT, FilePermissions.S_IWUSR | FilePermissions.S_IRUSR); if (_fd == -1) { var err = Marshal.GetLastWin32Error(); PosixHelper.ThrowLastError(err); } SysPageSize = Syscall.sysconf(SysconfName._SC_PAGESIZE); _totalAllocationSize = GetFileSize(); if (_totalAllocationSize == 0 && initialFileSize.HasValue) { _totalAllocationSize = NearestSizeToPageSize(initialFileSize.Value); } if (_totalAllocationSize == 0 || _totalAllocationSize % SysPageSize != 0 || _totalAllocationSize != GetFileSize()) { _totalAllocationSize = NearestSizeToPageSize(_totalAllocationSize); PosixHelper.AllocateFileSpace(_fd, (ulong)_totalAllocationSize); } if (_isSyncDirAllowed && PosixHelper.SyncDirectory(file) == -1) { var err = Marshal.GetLastWin32Error(); PosixHelper.ThrowLastError(err); } NumberOfAllocatedPages = _totalAllocationSize / _pageSize; PagerState.Release(); PagerState = CreatePagerState(); }
public PosixTempMemoryMapPager(string file, long?initialFileSize = null) { var instanceId = Interlocked.Increment(ref _counter); _file = "/var/tmp/ravendb-" + Syscall.getpid() + "-" + instanceId + "-" + file; _fd = Syscall.open(_file, OpenFlags.O_RDWR | OpenFlags.O_CREAT | OpenFlags.O_EXCL, FilePermissions.S_IWUSR | FilePermissions.S_IRUSR); if (_fd == -1) { PosixHelper.ThrowLastError(Marshal.GetLastWin32Error()); } DeleteOnClose = true; SysPageSize = Syscall.sysconf(SysconfName._SC_PAGESIZE); _totalAllocationSize = NearestSizeToPageSize(initialFileSize ?? _totalAllocationSize); PosixHelper.AllocateFileSpace(_fd, (ulong)_totalAllocationSize); NumberOfAllocatedPages = _totalAllocationSize / PageSize; PagerState.Release(); PagerState = CreatePagerState(); }