public override Serialize.ByteBuffer Get(long txnId, Serialize.ByteBuffer key) { int outValueBufferLen = 64 * 1024; while (true) { using var _key = new GoSlice(key.Bytes, key.ReadIndex, key.Size); using var error = new GoSlice(1024); using var outvalue = new GoSlice(outValueBufferLen); long rc = Get(txnId, _key, outvalue, error); if (rc < 0) { var str = GetErrorString(rc, error); if (str.Equals("key not exist")) // 这是tikv clieng.go 返回的错误。 { return(null); } if (str.Equals("ZezeSpecialError: value is nil.")) { return(null); } var strBufferNotEnough = "ZezeSpecialError: outvalue buffer not enough. BufferNeed="; if (str.StartsWith(strBufferNotEnough)) { outValueBufferLen = int.Parse(str.Substring(strBufferNotEnough.Length)); continue; } throw new Exception(str); } byte[] rcvalue = new byte[rc]; Marshal.Copy(outvalue.Data, rcvalue, 0, rcvalue.Length); return(Serialize.ByteBuffer.Wrap(rcvalue)); } }
public override void Delete(long txnId, Serialize.ByteBuffer key) { using var _key = new GoSlice(key.Bytes, key.ReadIndex, key.Size); using var error = new GoSlice(1024); long rc = Delete(txnId, _key, error); if (rc < 0) { throw new Exception(GetErrorString(rc, error)); } }
public override void Put(long txnId, Serialize.ByteBuffer key, Serialize.ByteBuffer value) { using var _key = new GoSlice(key.Bytes, key.ReadIndex, key.Size); using var _value = new GoSlice(value.Bytes, value.ReadIndex, value.Size); using var error = new GoSlice(1024); long rc = Put(txnId, _key, _value, error); if (rc < 0) { throw new Exception(GetErrorString(rc, error)); } }
internal void AppendInputBuffer(long socketSessionId, Zeze.Serialize.ByteBuffer buffer) { lock (this) { if (ToBuffer.TryGetValue(socketSessionId, out var exist)) { exist.Append(buffer.Bytes, buffer.ReadIndex, buffer.Size); return; } Serialize.ByteBuffer newBuffer = Serialize.ByteBuffer.Allocate(); ToBuffer.Add(socketSessionId, newBuffer); newBuffer.Append(buffer.Bytes, buffer.ReadIndex, buffer.Size); } }
public override long Scan(long txnId, Serialize.ByteBuffer keyprefix, Func <byte[], byte[], bool> callback) { using var _keyprefix = new GoSlice(keyprefix.Bytes, keyprefix.ReadIndex, keyprefix.Size); using var error = new GoSlice(1024); long rc = Scan(txnId, _keyprefix, new Walker( (key, keylen, value, valuelen) => { var _key = new byte[keylen]; var _value = new byte[valuelen]; Marshal.Copy(key, _key, 0, _key.Length); Marshal.Copy(value, _value, 0, _value.Length); return(callback(_key, _value) ? 0 : -1); }), error); if (rc < 0) { throw new Exception(GetErrorString(rc, error)); } return(rc); }
public BufferCodec(Serialize.ByteBuffer buffer) { Buffer = buffer; }
public abstract long Scan(long txnId, Serialize.ByteBuffer keyprefix, Func <byte[], byte[], bool> callback);
public abstract void Delete(long txnId, Serialize.ByteBuffer key);
public abstract Serialize.ByteBuffer Get(long txnId, Serialize.ByteBuffer key);
public abstract void Put(long txnId, Serialize.ByteBuffer key, Serialize.ByteBuffer value);