Exemplo n.º 1
0
        public string rocksdb_get(
            /*rocksdb_t**/ IntPtr db,
            /*const rocksdb_readoptions_t**/ IntPtr read_options,
            string key,
            out IntPtr errptr,
            ColumnFamilyHandle cf = null,
            Encoding encoding     = null)
        {
            if (encoding == null)
            {
                encoding = Encoding.UTF8;
            }
            long bvlength;

            unsafe
            {
                fixed(char *k = key)
                {
                    int   klength  = key.Length;
                    int   bklength = encoding.GetByteCount(k, klength);
                    var   buffer   = Marshal.AllocHGlobal(bklength);
                    byte *bk       = (byte *)buffer.ToPointer();

                    encoding.GetBytes(k, klength, bk, bklength);

                    var resultPtr = cf == null
                        ? rocksdb_get(db, read_options, bk, bklength, out bvlength, out errptr)
                        : rocksdb_get_cf(db, read_options, cf.Handle, bk, bklength, out bvlength, out errptr);

#if DEBUG
                    Zero(bk, bklength);
#endif
                    Marshal.FreeHGlobal(buffer);

                    if (errptr != IntPtr.Zero)
                    {
                        return(null);
                    }
                    if (resultPtr == IntPtr.Zero)
                    {
                        return(null);
                    }

                    byte *bv      = (byte *)resultPtr.ToPointer();
                    int   vlength = encoding.GetCharCount(bv, (int)bvlength);
                    fixed(char *v = new char[vlength])
                    {
                        encoding.GetChars(bv, (int)bvlength, v, vlength);
                        rocksdb_free(resultPtr);
                        return(new string(v, 0, vlength));
                    }
                }
            }
        }
Exemplo n.º 2
0
 public unsafe void Delete(byte *key, ulong klen, ColumnFamilyHandle cf = null)
 {
     if (cf == null)
     {
         Native.Instance.rocksdb_writebatch_delete(handle, key, klen);
     }
     else
     {
         Native.Instance.rocksdb_writebatch_delete_cf(handle, cf.Handle, key, klen);
     }
 }
Exemplo n.º 3
0
        /// <inheritdoc/>
        public override long GetTxNonce(Guid chainId, Address address)
        {
            ColumnFamilyHandle cf = GetColumnFamily(_chainDb, chainId);

            byte[] key   = TxNonceKey(address);
            byte[] bytes = _chainDb.Get(key, cf);

            return(bytes is null
                ? 0
                : RocksDBStoreBitConverter.ToInt64(bytes));
        }
Exemplo n.º 4
0
 public unsafe void Merge(byte *key, ulong klen, byte *val, ulong vlen, ColumnFamilyHandle cf = null)
 {
     if (cf == null)
     {
         Native.Instance.rocksdb_writebatch_merge(handle, key, klen, val, vlen);
     }
     else
     {
         Native.Instance.rocksdb_writebatch_merge_cf(handle, cf.Handle, key, klen, val, vlen);
     }
 }
Exemplo n.º 5
0
 public void CompactRange(byte[] start, byte[] limit, ColumnFamilyHandle cf = null)
 {
     if (cf == null)
     {
         Native.Instance.rocksdb_compact_range(Handle, start, (UIntPtr)(start?.GetLongLength(0) ?? 0L), limit, (UIntPtr)(limit?.GetLongLength(0) ?? 0L));
     }
     else
     {
         Native.Instance.rocksdb_compact_range_cf(Handle, cf.Handle, start, (UIntPtr)(start?.GetLongLength(0) ?? 0L), limit, (UIntPtr)(limit?.GetLongLength(0) ?? 0L));
     }
 }
Exemplo n.º 6
0
 public void Remove(byte[] key, long keyLength, ColumnFamilyHandle cf = null, WriteOptions writeOptions = null)
 {
     if (cf == null)
     {
         Native.Instance.rocksdb_delete(Handle, (writeOptions ?? DefaultWriteOptions).Handle, key, (UIntPtr)keyLength);
     }
     else
     {
         Native.Instance.rocksdb_delete_cf(Handle, (writeOptions ?? DefaultWriteOptions).Handle, cf.Handle, key, (UIntPtr)keyLength);
     }
 }
Exemplo n.º 7
0
 public IDbStore GetDbStore(string partitionName)
 {
     Preconditions.CheckNonWhiteSpace(partitionName, nameof(partitionName));
     if (!this.entityDbStoreDictionary.TryGetValue(partitionName, out IDbStore entityDbStore))
     {
         ColumnFamilyHandle handle = this.db.CreateColumnFamily(this.optionsProvider.GetColumnFamilyOptions(), partitionName);
         entityDbStore = new ColumnFamilyDbStore(this.db, handle);
         entityDbStore = this.entityDbStoreDictionary.GetOrAdd(partitionName, entityDbStore);
     }
     return(entityDbStore);
 }
 public unsafe void Put(byte *key, ulong klen, byte *val, ulong vlen, ColumnFamilyHandle cf = null)
 {
     if (cf is null)
     {
         Native.Instance.rocksdb_writebatch_wi_put(handle, key, (UIntPtr)klen, val, (UIntPtr)vlen);
     }
     else
     {
         Native.Instance.rocksdb_writebatch_wi_put_cf(handle, cf.Handle, key, (UIntPtr)klen, val, (UIntPtr)vlen);
     }
 }
 public WriteBatchWithIndex Delete(byte[] key, ulong klen, ColumnFamilyHandle cf = null)
 {
     if (cf == null)
     {
         Native.Instance.rocksdb_writebatch_wi_delete(handle, key, klen);
     }
     else
     {
         Native.Instance.rocksdb_writebatch_wi_delete_cf(handle, cf.Handle, key, klen);
     }
     return(this);
 }
Exemplo n.º 10
0
 public void rocksdb_delete(
     /*rocksdb_t**/ IntPtr db,
     /*const rocksdb_writeoptions_t**/ IntPtr writeOptions,
     /*const*/ string key,
     ColumnFamilyHandle cf)
 {
     rocksdb_delete(db, writeOptions, key, out IntPtr errptr, cf);
     if (errptr != IntPtr.Zero)
     {
         throw new RocksDbException(errptr);
     }
 }
Exemplo n.º 11
0
 public WriteBatch Merge(byte[] key, ulong klen, byte[] val, ulong vlen, ColumnFamilyHandle cf = null)
 {
     if (cf == null)
     {
         Native.Instance.rocksdb_writebatch_merge(handle, key, (UIntPtr)klen, val, (UIntPtr)vlen);
     }
     else
     {
         Native.Instance.rocksdb_writebatch_merge_cf(handle, cf.Handle, key, (UIntPtr)klen, val, (UIntPtr)vlen);
     }
     return(this);
 }
Exemplo n.º 12
0
 public WriteBatch Put(byte[] key, ulong klen, byte[] val, ulong vlen, ColumnFamilyHandle cf = null)
 {
     if (cf == null)
     {
         Native.Instance.rocksdb_writebatch_put(handle, key, klen, val, vlen);
     }
     else
     {
         Native.Instance.rocksdb_writebatch_put_cf(handle, cf.Handle, key, klen, val, vlen);
     }
     return(this);
 }
Exemplo n.º 13
0
 public void rocksdb_delete_cf(
     /*rocksdb_t**/ IntPtr db,
     /*const rocksdb_writeoptions_t**/ IntPtr writeOptions,
     /*const*/ byte[] key,
     long keylen,
     ColumnFamilyHandle cf)
 {
     rocksdb_delete_cf(db, writeOptions, cf.Handle, key, (UIntPtr)keylen, out IntPtr errptr);
     if (errptr != IntPtr.Zero)
     {
         throw new RocksDbException(errptr);
     }
 }
Exemplo n.º 14
0
        public WriteBatch Delete(byte[] key, ulong klen, ColumnFamilyHandle cf = null)
        {
            if (cf is null)
            {
                Native.Instance.rocksdb_writebatch_delete(handle, key, (UIntPtr)klen);
            }
            else
            {
                Native.Instance.rocksdb_writebatch_delete_cf(handle, cf.Handle, key, (UIntPtr)klen);
            }

            return(this);
        }
Exemplo n.º 15
0
        /// <inheritdoc/>
        public override void ForkBlockIndexes(
            Guid sourceChainId,
            Guid destinationChainId,
            HashDigest <SHA256> branchPoint)
        {
            HashDigest <SHA256>?genesisHash = IterateIndexes(sourceChainId, 0, 1)
                                              .Cast <HashDigest <SHA256>?>()
                                              .FirstOrDefault();

            if (genesisHash is null || branchPoint.Equals(genesisHash))
            {
                return;
            }

            ColumnFamilyHandle cf = GetColumnFamily(_chainDb, destinationChainId);
            var  writeBatch       = new WriteBatch();
            long index            = 0;

            try
            {
                foreach (Iterator it in IterateDb(_chainDb, IndexKeyPrefix, sourceChainId))
                {
                    byte[] hashBytes = it.Value();
                    writeBatch.Put(it.Key(), hashBytes, cf);
                    index += 1;

                    if (writeBatch.Count() >= ForkWriteBatchSize)
                    {
                        _chainDb.Write(writeBatch);
                        writeBatch.Dispose();
                        writeBatch = new WriteBatch();
                    }

                    if (branchPoint.ToByteArray().SequenceEqual(hashBytes))
                    {
                        break;
                    }
                }
            }
            finally
            {
                _chainDb.Write(writeBatch);
                writeBatch.Dispose();
            }

            _chainDb.Put(
                IndexCountKey,
                RocksDBStoreBitConverter.GetBytes(index),
                cf
                );
        }
Exemplo n.º 16
0
 public void rocksdb_delete(
     /*rocksdb_t**/ IntPtr db,
     /*const rocksdb_writeoptions_t**/ IntPtr writeOptions,
     /*const*/ string key,
     out IntPtr errptr,
     ColumnFamilyHandle cf,
     Encoding encoding = null)
 {
     var bkey = (encoding ?? Encoding.UTF8).GetBytes(key);
     if (cf == null)
         rocksdb_delete(db, writeOptions, bkey, bkey.GetLongLength(0), out errptr);
     else
         rocksdb_delete_cf(db, writeOptions, cf.Handle, bkey, bkey.GetLongLength(0), out errptr);
 }
Exemplo n.º 17
0
 public void rocksdb_put(
     /*rocksdb_t**/ IntPtr db,
     /*const rocksdb_writeoptions_t**/ IntPtr writeOptions,
     string key,
     string val,
     ColumnFamilyHandle cf = null,
     Encoding encoding     = null)
 {
     rocksdb_put(db, writeOptions, key, val, out IntPtr errptr, cf, encoding);
     if (errptr != IntPtr.Zero)
     {
         throw new RocksDbException(errptr);
     }
 }
Exemplo n.º 18
0
        public ColumnFamilyDbStore(IRocksDb db, ColumnFamilyHandle handle)
        {
            this.db     = Preconditions.CheckNotNull(db, nameof(db));
            this.Handle = Preconditions.CheckNotNull(handle, nameof(handle));

            var iterator = db.NewIterator(this.Handle);

            this.count = 0;
            while (iterator.Valid())
            {
                this.count += 1;
                iterator    = iterator.Next();
            }
        }
Exemplo n.º 19
0
 public unsafe void Remove(ReadOnlySpan <byte> key, ColumnFamilyHandle cf = null, WriteOptions writeOptions = null)
 {
     fixed(byte *keyPtr = &MemoryMarshal.GetReference(key))
     {
         if (cf is null)
         {
             Native.Instance.rocksdb_delete(Handle, (writeOptions ?? DefaultWriteOptions).Handle, keyPtr, (UIntPtr)key.Length);
         }
         else
         {
             Native.Instance.rocksdb_delete_cf(Handle, (writeOptions ?? DefaultWriteOptions).Handle, cf.Handle, keyPtr, (UIntPtr)key.Length);
         }
     }
 }
        public void rocksdb_transaction_put(
            /* rocksdb_transaction_t* */ IntPtr txn,
            /*const rocksdb_writeoptions_t**/ IntPtr writeOptions,
            string key,
            string val,
            ColumnFamilyHandle cf = null,
            Encoding encoding     = null)
        {
            IntPtr errptr = IntPtr.Zero;

            unsafe
            {
                if (encoding == null)
                    encoding = Encoding.UTF8;
                fixed(char *k = key, v = val)
                {
                    int   klength  = key.Length;
                    int   vlength  = val.Length;
                    int   bklength = encoding.GetByteCount(k, klength);
                    int   bvlength = encoding.GetByteCount(v, vlength);
                    var   buffer   = Marshal.AllocHGlobal(bklength + bvlength);
                    byte *bk       = (byte *)buffer.ToPointer();

                    encoding.GetBytes(k, klength, bk, bklength);
                    byte *bv = bk + bklength;

                    encoding.GetBytes(v, vlength, bv, bvlength);
                    UIntPtr sklength = (UIntPtr)bklength;
                    UIntPtr svlength = (UIntPtr)bvlength;

                    if (cf == null)
                    {
                        rocksdb_transaction_put(txn, bk, sklength, bv, svlength, out errptr);
                    }
                    else
                    {
                        rocksdb_transaction_put_cf(txn, cf.Handle, bk, sklength, bv, svlength, out errptr);
                    }
#if DEBUG
                    Zero(bk, bklength);
#endif
                    Marshal.FreeHGlobal(buffer);
                }
            }
            if (errptr != IntPtr.Zero)
            {
                throw new RocksDbException(errptr);
            }
        }
Exemplo n.º 21
0
        public byte[] rocksdb_writebatch_wi_get_from_batch(
            IntPtr wb,
            IntPtr options,
            byte[] key,
            ulong keyLength       = 0,
            ColumnFamilyHandle cf = null)
        {
            var result = rocksdb_writebatch_wi_get_from_batch(wb, options, key, keyLength == 0 ? (ulong)key.Length : keyLength, out IntPtr errptr, cf);

            if (errptr != IntPtr.Zero)
            {
                throw new RocksDbException(errptr);
            }
            return(result);
        }
Exemplo n.º 22
0
        public string rocksdb_writebatch_wi_get_from_batch(
            IntPtr wb,
            IntPtr options,
            string key,
            ColumnFamilyHandle cf,
            Encoding encoding = null)
        {
            var result = rocksdb_writebatch_wi_get_from_batch(wb, options, key, out IntPtr errptr, cf, encoding);

            if (errptr != IntPtr.Zero)
            {
                throw new RocksDbException(errptr);
            }
            return(result);
        }
Exemplo n.º 23
0
        public byte[] rocksdb_get(
            IntPtr db,
            IntPtr read_options,
            byte[] key,
            long keyLength        = 0,
            ColumnFamilyHandle cf = null)
        {
            var result = rocksdb_get(db, read_options, key, keyLength == 0 ? key.Length : keyLength, out IntPtr errptr, cf);

            if (errptr != IntPtr.Zero)
            {
                throw new RocksDbException(errptr);
            }
            return(result);
        }
Exemplo n.º 24
0
        public string rocksdb_get(
            /*rocksdb_t**/ IntPtr db,
            /*const rocksdb_readoptions_t**/ IntPtr read_options,
            string key,
            ColumnFamilyHandle cf,
            Encoding encoding = null)
        {
            var result = rocksdb_get(db, read_options, key, out IntPtr errptr, cf, encoding);

            if (errptr != IntPtr.Zero)
            {
                throw new RocksDbException(errptr);
            }
            return(result);
        }
        public string rocksdb_transaction_get(
            /* rocksdb_transaction_t* */ IntPtr txn,
            /*const rocksdb_readoptions_t**/ IntPtr read_options,
            string key,
            ColumnFamilyHandle cf,
            System.Text.Encoding encoding = null)
        {
            var result = raw_rocksdb_transaction_get(txn, read_options, key, out IntPtr errptr, cf, encoding);

            if (errptr != IntPtr.Zero)
            {
                throw new RocksDbException(errptr);
            }
            return(result);
        }
            JObject GetCachedJson(ReadOnlySpan <byte> key, ColumnFamilyHandle family, Func <JObject> factory)
            {
                var value = db.Get(key, family);

                if (value != null)
                {
                    return(JObject.Parse(value));
                }
                else
                {
                    var json = factory();
                    db.Put(key, json.ToByteArray(false), family);
                    return(json);
                }
            }
Exemplo n.º 27
0
        public byte[] rocksdb_get(
            IntPtr db,
            IntPtr read_options,
            ReadOnlySpan <byte> key,
            ColumnFamilyHandle cf = null)
        {
            var result = rocksdb_get(db, read_options, key, out IntPtr errptr, cf);

            if (errptr != IntPtr.Zero)
            {
                throw new RocksDbException(errptr);
            }

            return(result);
        }
        public void rocksdb_transaction_delete(
            /* rocksdb_transaction_t* */ IntPtr txn,
            /*const*/ byte[] key,
            ColumnFamilyHandle cf)
        {
            UIntPtr kLength = (UIntPtr)key.GetLongLength(0);

            if (cf == null)
            {
                rocksdb_transaction_delete(txn, key, kLength);
            }
            else
            {
                rocksdb_transaction_delete_cf(txn, cf.Handle, key, kLength);
            }
        }
Exemplo n.º 29
0
        public unsafe WriteBatch Delete(ReadOnlySpan <byte> key, ColumnFamilyHandle cf = null)
        {
            fixed(byte *keyPtr = &MemoryMarshal.GetReference(key))
            {
                if (cf is null)
                {
                    Native.Instance.rocksdb_writebatch_delete(handle, keyPtr, (UIntPtr)key.Length);
                }
                else
                {
                    Native.Instance.rocksdb_writebatch_delete_cf(handle, cf.Handle, keyPtr, (UIntPtr)key.Length);
                }
            }

            return(this);
        }
Exemplo n.º 30
0
        public bool TryGetColumnFamily(string name, out ColumnFamilyHandle handle)
        {
            if (columnFamilies is null)
            {
                throw new RocksDbSharpException("Database not opened for column families");
            }

            if (columnFamilies.TryGetValue(name, out var internalHandle))
            {
                handle = internalHandle;
                return(true);
            }

            handle = null;
            return(false);
        }