Beispiel #1
0
        public Store(string path)
        {
            var families = new ColumnFamilies();

            db            = RocksDb.OpenReadOnly(Options.Default, Path.GetFullPath(path), families, false);
            defaultFamily = db.GetDefaultColumnFamily();
        }
Beispiel #2
0
        public Store(string path)
        {
            var families = new ColumnFamilies();

            try
            {
                foreach (var family in RocksDb.ListColumnFamilies(Options.Default, Path.GetFullPath(path)))
                {
                    families.Add(new ColumnFamilies.Descriptor(family, new ColumnFamilyOptions()));
                }
            }
            catch { }

            db = RocksDb.Open(Options.Default, Path.GetFullPath(path), families);

            ColumnFamilyHandle defaultFamily = db.GetDefaultColumnFamily();

            byte[] value = db.Get(SYS_Version, defaultFamily, Options.ReadDefault);
            if (value != null && Version.TryParse(Encoding.ASCII.GetString(value), out Version version) && version >= Version.Parse("3.0.0"))
            {
                return;
            }

            if (value != null)
            {
                // Clean all families only if the version are different

                Parallel.For(0, byte.MaxValue + 1, (x) => db.DropColumnFamily(x.ToString()));
                _families.Clear();
            }

            // Update version

            db.Put(SYS_Version, Encoding.ASCII.GetBytes(Assembly.GetExecutingAssembly().GetName().Version.ToString()), defaultFamily, Options.WriteDefault);
        }
        public IStore GetStore(string?path)
        {
            if (path == null)
            {
                return(new RocksDbStore(db, db.GetDefaultColumnFamily(), readOnly, shared: true));
            }

            if (db.TryGetColumnFamily(path, out var columnFamily))
            {
                return(new RocksDbStore(db, columnFamily, readOnly, shared: true));
            }

            if (!readOnly)
            {
                columnFamily = db.CreateColumnFamily(defaultColumnFamilyOptions, path);
                return(new RocksDbStore(db, columnFamily, readOnly, shared: true));
            }

            throw new InvalidOperationException("invalid store path");
        }
Beispiel #4
0
 static ColumnFamilyHandle GetColumnFamilyHandle(RocksDb db, string?columnFamilyName)
 {
     return(string.IsNullOrEmpty(columnFamilyName)
         ? db.GetDefaultColumnFamily() : db.GetColumnFamily(columnFamilyName));
 }