Code Monkey home page Code Monkey logo

client-c's Introduction

Overview

TiKV Client C++ allow you to access TiKV from C and C++ applications.

The code is in an early alpha status. Currently, it is only used by TiFlash.

License

Apache-2.0 License

Docs

The docs can be found here.

Building

Install dependencies (adjust for your platform):

sudo dnf install cmake grpc-devel poco-devel abseil-cpp-devel gcc-c++

Update submodules

git submodule update --init --recursive

Build:

mkdir build
cd build
cmake ..
make

client-c's People

Contributors

birdstorm avatar breezewish avatar coocood avatar disksing avatar dveeden avatar fzhedu avatar gengliqi avatar guo-shaoge avatar hanfei1991 avatar hongyunyan avatar iosmanthus avatar jayson-huang avatar leiysky avatar lidezhu avatar littlefall avatar lloyd-pottiger avatar schrodingerzhu avatar siddontang avatar solotzg avatar windtalker avatar xzhangxian1008 avatar yibin87 avatar yongman avatar ystaticy avatar ywqzzy avatar zanmato1984 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

client-c's Issues

Coprocessor support.

If we want to support TiDB SQL in other languages, we must need a coprocessor support.

compile error in googletest

Compile error in google test when using -DENABLE_TESTS=on.

 error: definition of implicit copy constructor for 'StartsWithMatcher<std::wstring>' is deprecated because it has a user-declared copy assignment operator

txn throw exception Region epoch not match after retries

./pd-server --version
Release Version: v4.0.0-rc.2-563-gaa22efb5-dirty
Edition: Community
Git Commit Hash: aa22efb50906e2d0fb1306bd2af6813969e46d73
Git Branch: master
UTC Build Time: 2021-05-27 04:38:59

Release Version: 5.1.0-alpha
Edition: Community
Git Commit Hash: cd905a208293c2b0c1fca9aa2756d5c26392b38c
Git Commit Branch: master
UTC Build Time: 2021-05-28 09:25:25
Rust Version: rustc 1.53.0-nightly (16bf626a3 2021-04-14)
Enable Features: jemalloc mem-profiling portable sse protobuf-codec test-engines-rocksdb cloud-aws cloud-gcp
Profile: release

src:
count=1000000
Txn txn(test_cluster.get());

try{
    char keyName[32];
    std::string keyValue( 512, 'x');

    auto begin_tm = timeSinceEpochMillisec();
    for( int i = 1;i<=count;i++){
        sprintf(keyName, "c%d", i);
        txn.set(keyName, keyValue);
    }
    txn.commit();
    auto end_tm = timeSinceEpochMillisec();
    printf("time:%ld\n", end_tm- begin_tm);
}
catch ( Exception & e) {
    std::cerr << "exception caught: " << e.displayText() << '\n';
}

[19:42:06] [(0)] Information: load store id 2001 address 172.16.16.21:20160
[19:43:33] [(0)] Warning: region {44103,3,29} find error: EpochNotMatch current epoch of region 44103 is conf_ver: 3 version: 30
[19:43:33] [(0)] Information: region stale for region {44103,3,29}.
[19:43:33] [(0)] Information: try drop region {44103,3,29}
[19:43:33] [(0)] Information: drop region 44103 because of send failure
[19:43:33] [(0)] Warning: region {44127,3,30} find error: peer is not leader for region 44127, leader may None
[19:43:33] [(0)] Information: report not leader but doesn't have new leader
[19:43:33] [(0)] Information: try drop region {44127,3,30}
[19:43:33] [(0)] Information: drop region 44127 because of send failure
[19:43:53] [(0)] Warning: write commit exception: Exception: Region epoch not match after retries: Region {44103,3,29} not in region cache.
exception caught: Exception: Region epoch not match after retries: Region {44103,3,29} not in region cache.

Check and resolve invalid stores periodicly

TiDB has a background goroutine to check validation of stores periodicly, while client-c will check it as soon as receiving an error.

I think it's better to implement such a eager way to update region cache.

Fix warnings

client-c/src/kv/LockResolver.cc: In member function ‘pingcap::kv::AsyncResolveDataPtr pingcap::kv::LockResolver::checkAllSecondaries(pingcap::kv::Backoffer&, pingcap::kv::LockPtr, pingcap::kv::TxnStatus&)’:
client-c/src/kv/LockResolver.cc:390:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (size_t i = 0; i < status.primary_lock->secondaries_size(); i++)
                        ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from client-c/src/kv/2pc.cc:2:0:
client-c/include/pingcap/kv/2pc.h: In constructor ‘pingcap::kv::TwoPhaseCommitter::TwoPhaseCommitter(pingcap::kv::Txn*, bool)’:
client-c/include/pingcap/kv/2pc.h:110:14: warning: ‘pingcap::kv::TwoPhaseCommitter::log’ will be initialized after [-Wreorder]
     Logger * log;
              ^~~
client-c/include/pingcap/kv/2pc.h:106:10: warning:   ‘bool pingcap::kv::TwoPhaseCommitter::use_async_commit’ [-Wreorder]
     bool use_async_commit;
          ^~~~~~~~~~~~~~~~
client-c/src/kv/2pc.cc:42:1: warning:   when initialized here [-Wreorder]
 TwoPhaseCommitter::TwoPhaseCommitter(Txn * txn, bool _use_async_commit)
 ^~~~~~~~~~~~~~~~~
In file included from client-c/src/kv/2pc.cc:2:0:
client-c/include/pingcap/kv/2pc.h:106:10: warning: ‘pingcap::kv::TwoPhaseCommitter::use_async_commit’ will be initialized after [-Wreorder]
     bool use_async_commit;
          ^~~~~~~~~~~~~~~~
client-c/include/pingcap/kv/2pc.h:92:31: warning:   ‘std::chrono::milliseconds pingcap::kv::TwoPhaseCommitter::start_time’ [-Wreorder]
     std::chrono::milliseconds start_time;
                               ^~~~~~~~~~
client-c/src/kv/2pc.cc:42:1: warning:   when initialized here [-Wreorder]
 TwoPhaseCommitter::TwoPhaseCommitter(Txn * txn, bool _use_async_commit)
 ^~~~~~~~~~~~~~~~~
client-c/src/kv/2pc.cc: In member function ‘void pingcap::kv::TwoPhaseCommitter::prewriteSingleBatch(pingcap::kv::Backoffer&, const pingcap::kv::TwoPhaseCommitter::BatchKeys&)’:
client-c/src/kv/2pc.cc:152:34: warning: unused variable ‘v’ [-Wunused-variable]
                 for (auto & [k, v] : mutations)
                                  ^

delete key

does client-c support deleting at present?

Refine MVCC Write

Currently, the MVCC Write is only used by test, some features is yet to add, like rollback asyncly after write fails. Maybe we'd better maintain serveral rollback queues rather than per rollback per thread.

Set grpc keepalive configuration for client

Currently, the keepalive configuration is not set for client.
So if a server is shut down abnormally, the client can not detect the failure of the server side thus it may hang forever.

SafePoint Check in Scanner

Currently we only support get gc safe point from grpc api, but indeed, we should get safe point from etcd kv, and check if the safe point is out-date during mvcc scan.

Add compilation options -DENABLE_TESTS=ON cause project compile fail

Add compilation options such as:cmake -DENABLE_TESTS=ON ..
This command causes compilation to fail,As mentioned in the pingcap Developer Forum, grpc is compiled with dynamic libraries. The old version of clien-c can be compiled and used temporarily, but the latest version cannot. Moreover, we recommend using static libraries.Please fix it as soon as possible. Thank you

Separating network layer from protocol/processing

I would recommend creating a separate protocol/processing layer from network layer which will allow for use in different languages and application stacks.
e.g. I would like to use TiKV in OpenResty (Nginx + Lua) stack where Nginx async socket needs to be used for network communication.

unused variable

[2021-08-17T06:17:00.986Z] /build/contrib/client-c/src/kv/2pc.cc: In member function 'void pingcap::kv::TwoPhaseCommitter::prewriteSingleBatch(pingcap::kv::Backoffer&, const pingcap::kv::TwoPhaseCommitter::BatchKeys&)':

[2021-08-17T06:17:00.986Z] /build/contrib/client-c/src/kv/2pc.cc:152:34: warning: unused variable 'v' [-Wunused-variable]

[2021-08-17T06:17:00.986Z]                  for (auto & [k, v] : mutations)

[2021-08-17T06:17:00.986Z]

Unify the url of submodule to https url

The git clone protocol of some submodule is ssh, unify the url of submodule to https url.

[submodule "third_party/kvproto"]
	path = third_party/kvproto
	url = [email protected]:pingcap/kvproto.git
[submodule "third_party/googletest"]
	path = third_party/googletest
	url = [email protected]:google/googletest.git
[submodule "third_party/libfiu"]
	path = third_party/libfiu
	url = https://github.com/albertito/libfiu.git

Multi languages binding

This project should be packed as a shared lib with ffi interface so as to support other languages.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.