Open() public method

Open the environment.
public Open ( EnvironmentOpenFlags openFlags = EnvironmentOpenFlags.None, UnixAccessMode accessMode = UnixAccessMode.Default ) : void
openFlags EnvironmentOpenFlags
accessMode UnixAccessMode
return void
        /// <summary>
        /// Initializes a new instance of the <see cref="LightningStorageEngine"/> class.
        /// </summary>
        /// <param name="dataPath">The database path.</param>
        public LightningStorageEngine(string dataPath)
        {
            DataPath = dataPath;            

            if (!Directory.Exists(DataPath))
                Directory.CreateDirectory(DataPath);

            _log.Info($"Data Path: {DataPath}");
            _log.Info($"Compression Option: {LightningStorageUtils._compressionOption}");

            var config = new EnvironmentConfiguration
            {
                MaxDatabases = MAX_DATABASES,               
                MapSize = MAX_MAP_SIZE,                
                MaxReaders = MAX_READERS                
            };            

            _environment = new LightningEnvironment(DataPath, config);

            var openFlags = EnvironmentOpenFlags.WriteMap | 
                            EnvironmentOpenFlags.NoMetaSync | 
                            EnvironmentOpenFlags.MapAsync | 
                            EnvironmentOpenFlags.NoThreadLocalStorage;

            _environment.Open(openFlags); 

            _openDatabases = new ConcurrentDictionary<string, LightningDatabase>();                  
            _writeOperationsQueue = new BlockingCollection<WriteOperation>();
            _cancellationTokenSource = new CancellationTokenSource();
            _cancellationToken = _cancellationTokenSource.Token;

            Task.Factory.StartNew(() => BackgroundWriter(), TaskCreationOptions.LongRunning);
        }
Beispiel #2
0
        public void TestGet()
        {
            using (var env = new LightningEnvironment("pathtofolder"))
            {
                env.MaxDatabases = 2;
                env.Open();

                using (var tx = env.BeginTransaction(TransactionBeginFlags.ReadOnly))
                {
                    var db = tx.OpenDatabase("custom");
                    var result = tx.Get(db, "hello");
                    Debug.Assert(result == "world");
                }
            }
        }
Beispiel #3
0
        public void TestCreateOpenDataBaseAndPut()
        {
            using (var env = new LightningEnvironment("pathtofolder"))
            {
                env.MaxDatabases = 2;
                env.Open();

                using (var tx = env.BeginTransaction())
                using (var db = tx.OpenDatabase("custom", new DatabaseConfiguration { Flags = DatabaseOpenFlags.Create }))
                {
                    tx.Put(db, "hello", "world");
                    tx.Commit();
                }
            }
        }
        public LightningDocumentStorageFactory(string rootFolder, long mapSize)
        {
            _rootFolder = rootFolder;
            LightningEnvironment = new LightningEnvironment(rootFolder);
            LightningEnvironment.MapSize = mapSize;
            LightningEnvironment.MaxDatabases = 2;
            LightningEnvironment.Open();

            using (var txn = LightningEnvironment.BeginTransaction())
            {
                using (txn.OpenDatabase(null, new DatabaseConfiguration { Flags = DatabaseOpenFlags.Create }))
                {
                    txn.Commit();
                }
            }
        }
Beispiel #5
0
        private LightningEnvironment NewEnvironment(out LightningDatabase db, bool delete = true)
        {
            if (delete && Directory.Exists(_path))
                Directory.Delete(_path, true);

            if (!Directory.Exists(_path))
                Directory.CreateDirectory(_path);

            var env = new LightningEnvironment(_path, EnvironmentOpenFlags.None)
                          {
                              MapSize = 1024 * 1024 * 1024 * (long)10
                          };
            env.Open();
            var tx = env.BeginTransaction();
            db = tx.OpenDatabase();
			tx.Commit();

            return env;
        }
        internal static void PrepareSparseDatabase(string jetDirectory)
        {
            // detect windows OS
            var isWindows = Environment.OSVersion.Platform != PlatformID.MacOSX && Environment.OSVersion.Platform != PlatformID.Unix;
            if (!isWindows)
                return;

            // ensure db is created
            using (var jetInstance = new LightningEnvironment(jetDirectory))
                jetInstance.Open();

            // check if db is on NTFS filesystem
            var dbPath = Path.Combine(jetDirectory, "data.mdb");
            var dbFileRoot = Path.GetPathRoot(dbPath);
            var dbDrive = DriveInfo.GetDrives().FirstOrDefault(x => x.RootDirectory.FullName == dbFileRoot);
            if (dbDrive != null && dbDrive.DriveFormat == "NTFS")
            {
                //TODO better way to set the sparse flag?
                // ensure db is sparse
                Process.Start(new ProcessStartInfo
                {
                    FileName = "fsutil.exe",
                    WorkingDirectory = jetDirectory,
                    Arguments = "sparse setflag data.mdb",
                    CreateNoWindow = true,
                    WindowStyle = ProcessWindowStyle.Hidden
                }).WaitForExit();
            }
        }