Fixes the wrong key setup in watcher
Signed-off-by: Tao He <sighingnow@gmail.com>
This commit is contained in:
parent
639c7e9f24
commit
cb45a843bb
|
|
@ -18,10 +18,10 @@ etcdv3::AsyncWatchAction::AsyncWatchAction(
|
||||||
watch_create_req.set_key(parameters.key);
|
watch_create_req.set_key(parameters.key);
|
||||||
} else {
|
} else {
|
||||||
if (parameters.key.empty()) {
|
if (parameters.key.empty()) {
|
||||||
watch_create_req.set_range_end(etcdv3::NUL);
|
watch_create_req.set_key(etcdv3::NUL);
|
||||||
watch_create_req.set_range_end(etcdv3::NUL);
|
watch_create_req.set_range_end(etcdv3::NUL);
|
||||||
} else {
|
} else {
|
||||||
watch_create_req.set_range_end(parameters.key);
|
watch_create_req.set_key(parameters.key);
|
||||||
watch_create_req.set_range_end(detail::string_plus_one(parameters.key));
|
watch_create_req.set_range_end(detail::string_plus_one(parameters.key));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -76,8 +76,6 @@ void etcdv3::AsyncWatchAction::waitForResponse()
|
||||||
if (got_tag == (void *)etcdv3::WATCH_FINISH) {
|
if (got_tag == (void *)etcdv3::WATCH_FINISH) {
|
||||||
// shutdown
|
// shutdown
|
||||||
cq_.Shutdown();
|
cq_.Shutdown();
|
||||||
// cancel on-the-fly calls
|
|
||||||
context.TryCancel();
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(got_tag == (void*)this) // read tag
|
if(got_tag == (void*)this) // read tag
|
||||||
|
|
@ -159,8 +157,6 @@ void etcdv3::AsyncWatchAction::waitForResponse(std::function<void(etcd::Response
|
||||||
if (got_tag == (void *)etcdv3::WATCH_FINISH) {
|
if (got_tag == (void *)etcdv3::WATCH_FINISH) {
|
||||||
// shutdown
|
// shutdown
|
||||||
cq_.Shutdown();
|
cq_.Shutdown();
|
||||||
// cancel on-the-fly calls
|
|
||||||
context.TryCancel();
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(got_tag == (void*)this) // read tag
|
if(got_tag == (void*)this) // read tag
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,61 @@ void printResponse(etcd::Response const & resp)
|
||||||
++watcher_called;
|
++watcher_called;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE("create watcher")
|
||||||
|
{
|
||||||
|
etcd::SyncClient etcd(etcd_url);
|
||||||
|
etcd.rmdir("/test", true);
|
||||||
|
|
||||||
|
watcher_called = 0;
|
||||||
|
{
|
||||||
|
etcd::Watcher watcher(etcd_url, "/test", printResponse, true);
|
||||||
|
std::this_thread::sleep_for(std::chrono::seconds(5));
|
||||||
|
etcd.set("/test/key", "42");
|
||||||
|
std::this_thread::sleep_for(std::chrono::seconds(5));
|
||||||
|
etcd.set("/test/key", "43");
|
||||||
|
std::this_thread::sleep_for(std::chrono::seconds(5));
|
||||||
|
}
|
||||||
|
CHECK(2 == watcher_called);
|
||||||
|
etcd.rmdir("/test", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("watch with correct prefix")
|
||||||
|
{
|
||||||
|
etcd::SyncClient etcd(etcd_url);
|
||||||
|
etcd.rmdir("/test", true);
|
||||||
|
|
||||||
|
watcher_called = 0;
|
||||||
|
etcd::Watcher watcher(etcd_url, "/test/key_prefix", printResponse, true);
|
||||||
|
|
||||||
|
{
|
||||||
|
etcd.set("/test/key1", "42");
|
||||||
|
std::this_thread::sleep_for(std::chrono::seconds(5));
|
||||||
|
CHECK(0 == watcher_called);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
etcd.set("/test/key_prefix", "42");
|
||||||
|
std::this_thread::sleep_for(std::chrono::seconds(5));
|
||||||
|
CHECK(1 == watcher_called);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
etcd.set("/test/key_prefix1", "42");
|
||||||
|
std::this_thread::sleep_for(std::chrono::seconds(5));
|
||||||
|
CHECK(2 == watcher_called);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
etcd.set("/test/key_prefiy", "42");
|
||||||
|
std::this_thread::sleep_for(std::chrono::seconds(5));
|
||||||
|
CHECK(2 == watcher_called);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
etcd.set("/test/key1", "42");
|
||||||
|
std::this_thread::sleep_for(std::chrono::seconds(5));
|
||||||
|
CHECK(2 == watcher_called);
|
||||||
|
}
|
||||||
|
|
||||||
|
etcd.rmdir("/test", true);
|
||||||
|
}
|
||||||
|
|
||||||
TEST_CASE("create watcher with cancel")
|
TEST_CASE("create watcher with cancel")
|
||||||
{
|
{
|
||||||
etcd::SyncClient etcd(etcd_url);
|
etcd::SyncClient etcd(etcd_url);
|
||||||
|
|
@ -42,17 +97,17 @@ TEST_CASE("create watcher with cancel")
|
||||||
|
|
||||||
watcher_called = 0;
|
watcher_called = 0;
|
||||||
etcd::Watcher watcher(etcd_url, "/test", printResponse, true);
|
etcd::Watcher watcher(etcd_url, "/test", printResponse, true);
|
||||||
std::this_thread::sleep_for(std::chrono::seconds(2));
|
std::this_thread::sleep_for(std::chrono::seconds(5));
|
||||||
etcd.set("/test/key", "42");
|
etcd.set("/test/key", "42");
|
||||||
etcd.set("/test/key", "43");
|
etcd.set("/test/key", "43");
|
||||||
etcd.rm("/test/key");
|
etcd.rm("/test/key");
|
||||||
etcd.set("/test/key", "44");
|
etcd.set("/test/key", "44");
|
||||||
std::this_thread::sleep_for(std::chrono::seconds(2));
|
std::this_thread::sleep_for(std::chrono::seconds(5));
|
||||||
CHECK(4 == watcher_called);
|
CHECK(4 == watcher_called);
|
||||||
watcher.Cancel();
|
watcher.Cancel();
|
||||||
etcd.set("/test/key", "50");
|
etcd.set("/test/key", "50");
|
||||||
etcd.set("/test/key", "51");
|
etcd.set("/test/key", "51");
|
||||||
std::this_thread::sleep_for(std::chrono::seconds(2));
|
std::this_thread::sleep_for(std::chrono::seconds(5));
|
||||||
CHECK(4 == watcher_called);
|
CHECK(4 == watcher_called);
|
||||||
|
|
||||||
etcd.rmdir("/test", true);
|
etcd.rmdir("/test", true);
|
||||||
|
|
@ -65,50 +120,32 @@ TEST_CASE("create watcher on ranges with cancel")
|
||||||
|
|
||||||
watcher_called = 0;
|
watcher_called = 0;
|
||||||
etcd::Watcher watcher(etcd_url, "/test/key1", "/test/key5", printResponse);
|
etcd::Watcher watcher(etcd_url, "/test/key1", "/test/key5", printResponse);
|
||||||
std::this_thread::sleep_for(std::chrono::seconds(2));
|
std::this_thread::sleep_for(std::chrono::seconds(5));
|
||||||
etcd.set("/test/key1", "42");
|
etcd.set("/test/key1", "42");
|
||||||
etcd.set("/test/key2", "43");
|
etcd.set("/test/key2", "43");
|
||||||
etcd.rm("/test/key1");
|
etcd.rm("/test/key1");
|
||||||
etcd.set("/test/key5", "44");
|
etcd.set("/test/key5", "44");
|
||||||
std::this_thread::sleep_for(std::chrono::seconds(2));
|
std::this_thread::sleep_for(std::chrono::seconds(5));
|
||||||
CHECK(3 == watcher_called);
|
CHECK(3 == watcher_called);
|
||||||
watcher.Cancel();
|
watcher.Cancel();
|
||||||
etcd.set("/test/key3", "50");
|
etcd.set("/test/key3", "50");
|
||||||
etcd.set("/test/key4", "51");
|
etcd.set("/test/key4", "51");
|
||||||
std::this_thread::sleep_for(std::chrono::seconds(2));
|
std::this_thread::sleep_for(std::chrono::seconds(5));
|
||||||
CHECK(3 == watcher_called);
|
CHECK(3 == watcher_called);
|
||||||
|
|
||||||
etcd.rmdir("/test", true);
|
etcd.rmdir("/test", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("create watcher")
|
|
||||||
{
|
|
||||||
etcd::SyncClient etcd(etcd_url);
|
|
||||||
etcd.rmdir("/test", true);
|
|
||||||
|
|
||||||
watcher_called = 0;
|
|
||||||
{
|
|
||||||
etcd::Watcher watcher(etcd_url, "/test", printResponse, true);
|
|
||||||
std::this_thread::sleep_for(std::chrono::seconds(2));
|
|
||||||
etcd.set("/test/key", "42");
|
|
||||||
std::this_thread::sleep_for(std::chrono::seconds(2));
|
|
||||||
etcd.set("/test/key", "43");
|
|
||||||
std::this_thread::sleep_for(std::chrono::seconds(2));
|
|
||||||
}
|
|
||||||
CHECK(2 == watcher_called);
|
|
||||||
etcd.rmdir("/test", true).error_code();
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_CASE("watch should exit normally")
|
TEST_CASE("watch should exit normally")
|
||||||
{
|
{
|
||||||
// cancal immediately after start watch.
|
// cancel immediately after start watch.
|
||||||
etcd::Watcher watcher(etcd_url, "/test", printResponse, true);
|
etcd::Watcher watcher(etcd_url, "/test", printResponse, true);
|
||||||
watcher.Cancel();
|
watcher.Cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("watch should can be cancelled repeatedly")
|
TEST_CASE("watch should can be cancelled repeatedly")
|
||||||
{
|
{
|
||||||
// cancal immediately after start watch.
|
// cancel immediately after start watch.
|
||||||
etcd::Watcher watcher(etcd_url, "/test", printResponse, true);
|
etcd::Watcher watcher(etcd_url, "/test", printResponse, true);
|
||||||
std::vector<std::thread> threads(10);
|
std::vector<std::thread> threads(10);
|
||||||
for (size_t i = 0; i < 10; ++i) {
|
for (size_t i = 0; i < 10; ++i) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue