Merge pull request #72426 from ClickHouse/move-utils-to-programs

Moved utils to programs
This commit is contained in:
Nikita Mikhaylov 2024-12-11 00:18:43 +00:00 committed by GitHub
commit 88f7b53d8c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
50 changed files with 172 additions and 438 deletions

View File

@ -89,7 +89,6 @@ string (TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UC)
list(REVERSE CMAKE_FIND_LIBRARY_SUFFIXES)
option (ENABLE_FUZZING "Fuzzy testing using libfuzzer" OFF)
option (ENABLE_FUZZER_TEST "Build testing fuzzers in order to test libFuzzer functionality" OFF)
if (ENABLE_FUZZING)
# Also set WITH_COVERAGE=1 for better fuzzing process

View File

@ -65,7 +65,6 @@ TRAP(gethostbyaddr)
TRAP(gethostbyname)
TRAP(gethostbyname2)
TRAP(gethostent)
TRAP(getlogin)
TRAP(getnetbyaddr)
TRAP(getnetbyname)
TRAP(getnetent)
@ -291,6 +290,7 @@ TRAP(putenv)
TRAP(setlogmask)
TRAP(rand)
TRAP(getmntent)
TRAP(getlogin)
#endif
#endif

View File

@ -119,20 +119,26 @@ macro(clickhouse_program_add name)
clickhouse_program_add_library(${name})
endmacro()
add_subdirectory (server)
add_subdirectory (client)
add_subdirectory (local)
add_subdirectory (benchmark)
add_subdirectory (extract-from-config)
add_subdirectory (compressor)
add_subdirectory (format)
add_subdirectory (obfuscator)
add_subdirectory (install)
add_subdirectory (git-import)
add_subdirectory (bash-completion)
add_subdirectory (benchmark)
add_subdirectory (check-marks)
add_subdirectory (checksum-for-compressed-block)
add_subdirectory (client)
add_subdirectory (compressor)
add_subdirectory (disks)
add_subdirectory (extract-from-config)
add_subdirectory (format)
add_subdirectory (git-import)
add_subdirectory (install)
add_subdirectory (keeper-bench)
add_subdirectory (keeper-data-dumper)
add_subdirectory (local)
add_subdirectory (obfuscator)
add_subdirectory (server)
add_subdirectory (static-files-disk-uploader)
add_subdirectory (su)
add_subdirectory (disks)
add_subdirectory (zookeeper-dump-tree)
add_subdirectory (zookeeper-remove-by-list)
if (ENABLE_CLICKHOUSE_KEEPER_CONVERTER)
add_subdirectory (keeper-converter)
@ -198,18 +204,30 @@ if (ENABLE_CLICKHOUSE_SELF_EXTRACTING)
list(APPEND CLICKHOUSE_BUNDLE self-extracting)
endif ()
clickhouse_program_install(clickhouse-server server)
clickhouse_program_install(clickhouse-client client chc)
clickhouse_program_install(clickhouse-local local chl ch)
clickhouse_program_install(clickhouse-benchmark benchmark)
clickhouse_program_install(clickhouse-extract-from-config extract-from-config)
clickhouse_program_install(clickhouse-check-marks check-marks)
clickhouse_program_install(clickhouse-checksum-for-compressed-block checksum-for-compressed-block)
clickhouse_program_install(clickhouse-client client chc)
clickhouse_program_install(clickhouse-compressor compressor)
clickhouse_program_install(clickhouse-format format)
clickhouse_program_install(clickhouse-obfuscator obfuscator)
clickhouse_program_install(clickhouse-git-import git-import)
clickhouse_program_install(clickhouse-static-files-disk-uploader static-files-disk-uploader)
clickhouse_program_install(clickhouse-disks disks)
clickhouse_program_install(clickhouse-extract-from-config extract-from-config)
clickhouse_program_install(clickhouse-format format)
clickhouse_program_install(clickhouse-git-import git-import)
clickhouse_program_install(clickhouse-local local chl ch)
clickhouse_program_install(clickhouse-obfuscator obfuscator)
clickhouse_program_install(clickhouse-server server)
clickhouse_program_install(clickhouse-static-files-disk-uploader static-files-disk-uploader)
clickhouse_program_install(clickhouse-su su)
clickhouse_program_install(clickhouse-zookeeper-dump-tree zookeeper-dump-tree)
clickhouse_program_install(clickhouse-zookeeper-remove-by-list zookeeper-remove-by-list)
if (TARGET ch_contrib::nuraft)
clickhouse_program_install(clickhouse-keeper-data-dumper keeper-data-dumper)
endif ()
if (TARGET ch_contrib::rapidjson AND TARGET ch_contrib::nuraft)
clickhouse_program_install(clickhouse-keeper-bench keeper-bench)
endif ()
if (ENABLE_CLICKHOUSE_KEEPER)
if (NOT BUILD_STANDALONE_KEEPER AND CREATE_KEEPER_SYMLINK)

View File

@ -0,0 +1,11 @@
set (CLICKHOUSE_CHECK_MARKS_SOURCES CheckMarks.cpp)
set (CLICKHOUSE_CHECK_MARKS_LINK
PRIVATE
boost::program_options
clickhouse_aggregate_functions
clickhouse_common_config
dbms
)
clickhouse_program_add(check-marks)

View File

@ -54,7 +54,7 @@ static void checkByCompressedReadBuffer(const std::string & mrk_path, const std:
}
int main(int argc, char ** argv)
int mainEntryClickHouseCheckMarks(int argc, char ** argv)
{
boost::program_options::options_description desc("Allowed options");
desc.add_options()

View File

@ -0,0 +1 @@
extern int mainEntryClickHouseCheckMarks(int argc, char ** argv);

View File

@ -0,0 +1,9 @@
set (CLICKHOUSE_CHECKSUM_FOR_COMPRESSED_BLOCK_SOURCES ChecksumForCompressedBlock.cpp)
set (CLICKHOUSE_CHECKSUM_FOR_COMPRESSED_BLOCK_LINK
PRIVATE
clickhouse_functions
dbms
)
clickhouse_program_add(checksum-for-compressed-block)

View File

@ -34,7 +34,7 @@ std::string flipBit(std::string s, size_t pos)
}
int main(int, char **)
int mainEntryClickHouseChecksumForCompressedBlock(int, char **)
{
using namespace DB;
ReadBufferFromFileDescriptor in(STDIN_FILENO);

View File

@ -0,0 +1 @@
extern int mainEntryClickHouseChecksumForCompressedBlock(int, char **);

View File

@ -0,0 +1,20 @@
if (NOT TARGET ch_contrib::rapidjson OR NOT TARGET ch_contrib::nuraft)
message (WARNING "Not building keeper-bench due to rapidjson or nuraft is disabled")
return()
endif ()
set (CLICKHOUSE_KEEPER_BENCH_SOURCES
Generator.cpp
Runner.cpp
Stats.cpp
KeeperBench.cpp
)
set (CLICKHOUSE_KEEPER_BENCH_LINK
PRIVATE
dbms
clickhouse_functions
ch_contrib::rapidjson
)
clickhouse_program_add(keeper-bench)

View File

@ -20,7 +20,7 @@ std::optional<T> valueToOptional(const boost::program_options::variable_value &
}
int main(int argc, char *argv[])
int mainEntryClickHouseKeeperBench(int argc, char ** argv)
{
bool print_stacktrace = true;

View File

@ -0,0 +1 @@
extern int mainEntryClickHouseKeeperBench(int argc, char ** argv);

View File

@ -0,0 +1,14 @@
if (NOT TARGET ch_contrib::nuraft)
message (WARNING "Not building keeper-data-dumper due to nuraft is disabled")
return ()
endif ()
set (CLICKHOUSE_KEEPER_DATA_DUMPER_SOURCES KeeperDataDumper.cpp)
set (CLICKHOUSE_KEEPER_DATA_DUMPER_LINK
PRIVATE
clickhouse_functions
dbms
)
clickhouse_program_add(keeper-data-dumper)

View File

@ -54,7 +54,7 @@ void dumpMachine(std::shared_ptr<KeeperStateMachine<DB::KeeperMemoryStorage>> ma
std::cout << std::flush;
}
int main(int argc, char *argv[])
int mainEntryClickHouseKeeperDataDumper(int argc, char ** argv)
{
if (argc != 3)
{

View File

@ -0,0 +1 @@
extern int mainEntryClickHouseKeeperDataDumper(int argc, char ** argv);

View File

@ -20,18 +20,22 @@
#include <vector>
/// Universal executable for various clickhouse applications
int mainEntryClickHouseServer(int argc, char ** argv);
int mainEntryClickHouseClient(int argc, char ** argv);
int mainEntryClickHouseLocal(int argc, char ** argv);
int mainEntryClickHouseBenchmark(int argc, char ** argv);
int mainEntryClickHouseExtractFromConfig(int argc, char ** argv);
int mainEntryClickHouseCheckMarks(int argc, char ** argv);
int mainEntryClickHouseChecksumForCompressedBlock(int, char **);
int mainEntryClickHouseClient(int argc, char ** argv);
int mainEntryClickHouseCompressor(int argc, char ** argv);
int mainEntryClickHouseFormat(int argc, char ** argv);
int mainEntryClickHouseObfuscator(int argc, char ** argv);
int mainEntryClickHouseGitImport(int argc, char ** argv);
int mainEntryClickHouseStaticFilesDiskUploader(int argc, char ** argv);
int mainEntryClickHouseSU(int argc, char ** argv);
int mainEntryClickHouseDisks(int argc, char ** argv);
int mainEntryClickHouseExtractFromConfig(int argc, char ** argv);
int mainEntryClickHouseFormat(int argc, char ** argv);
int mainEntryClickHouseGitImport(int argc, char ** argv);
int mainEntryClickHouseLocal(int argc, char ** argv);
int mainEntryClickHouseObfuscator(int argc, char ** argv);
int mainEntryClickHouseSU(int argc, char ** argv);
int mainEntryClickHouseServer(int argc, char ** argv);
int mainEntryClickHouseStaticFilesDiskUploader(int argc, char ** argv);
int mainEntryClickHouseZooKeeperDumpTree(int argc, char ** argv);
int mainEntryClickHouseZooKeeperRemoveByList(int argc, char ** argv);
int mainEntryClickHouseHashBinary(int, char **)
{
@ -50,6 +54,12 @@ int mainEntryClickHouseKeeperConverter(int argc, char ** argv);
#if ENABLE_CLICKHOUSE_KEEPER_CLIENT
int mainEntryClickHouseKeeperClient(int argc, char ** argv);
#endif
#if USE_RAPIDJSON && USE_NURAFT
int mainEntryClickHouseKeeperBench(int argc, char ** argv);
#endif
#if USE_NURAFT
int mainEntryClickHouseKeeperDataDumper(int argc, char ** argv);
#endif
// install
int mainEntryClickHouseInstall(int argc, char ** argv);
@ -63,7 +73,10 @@ namespace
using MainFunc = int (*)(int, char**);
/// Add an item here to register new application
/// Add an item here to register new application.
/// This list has a "priority" - e.g. we need to disambiguate clickhouse --format being
/// either clickouse-format or clickhouse-{local, client} --format.
/// Currently we will prefer the latter option.
std::pair<std::string_view, MainFunc> clickhouse_applications[] =
{
{"local", mainEntryClickHouseLocal},
@ -79,6 +92,10 @@ std::pair<std::string_view, MainFunc> clickhouse_applications[] =
{"su", mainEntryClickHouseSU},
{"hash-binary", mainEntryClickHouseHashBinary},
{"disks", mainEntryClickHouseDisks},
{"check-marks", mainEntryClickHouseCheckMarks},
{"checksum-for-compressed-block", mainEntryClickHouseChecksumForCompressedBlock},
{"zookeeper-dump-tree", mainEntryClickHouseZooKeeperDumpTree},
{"zookeeper-remove-by-list", mainEntryClickHouseZooKeeperRemoveByList},
// keeper
#if ENABLE_CLICKHOUSE_KEEPER
@ -90,7 +107,12 @@ std::pair<std::string_view, MainFunc> clickhouse_applications[] =
#if ENABLE_CLICKHOUSE_KEEPER_CLIENT
{"keeper-client", mainEntryClickHouseKeeperClient},
#endif
#if USE_RAPIDJSON && USE_NURAFT
{"keeper-bench", mainEntryClickHouseKeeperBench},
#endif
#if USE_NURAFT
{"keeper-data-dumper", mainEntryClickHouseKeeperDataDumper},
#endif
// install
{"install", mainEntryClickHouseInstall},
{"start", mainEntryClickHouseStart},

View File

@ -0,0 +1,10 @@
set (CLICKHOUSE_ZOOKEEPER_DUMP_TREE_SOURCES ZooKeeperDumpTree.cpp)
set (CLICKHOUSE_ZOOKEEPER_DUMP_TREE_LINK
PRIVATE
dbms
clickhouse_functions
boost::program_options
)
clickhouse_program_add(zookeeper-dump-tree)

View File

@ -6,7 +6,7 @@
#include <Common/ZooKeeper/KeeperException.h>
int main(int argc, char ** argv)
int mainEntryClickHouseZooKeeperDumpTree(int argc, char ** argv)
{
try
{

View File

@ -0,0 +1 @@
extern int mainEntryClickHouseZooKeeperDumpTree(int argc, char ** argv);

View File

@ -0,0 +1,10 @@
set (CLICKHOUSE_ZOOKEEPER_REMOVE_BY_LIST_SOURCES ZooKeeperRemoveByList.cpp)
set (CLICKHOUSE_ZOOKEEPER_REMOVE_BY_LIST_LINK
PRIVATE
dbms
clickhouse_functions
boost::program_options
)
clickhouse_program_add(zookeeper-remove-by-list)

View File

@ -5,7 +5,7 @@
#include <boost/program_options.hpp>
int main(int argc, char ** argv)
int mainEntryClickHouseZooKeeperRemoveByList(int argc, char ** argv)
try
{
boost::program_options::options_description desc("Allowed options");

View File

@ -0,0 +1 @@
extern int mainEntryClickHouseZooKeeperRemoveByList(int argc, char ** argv);

View File

@ -1,2 +1,5 @@
clickhouse_add_executable (compressed_buffer compressed_buffer.cpp)
target_link_libraries (compressed_buffer PRIVATE dbms clickhouse_common_io clickhouse_common_config clickhouse_compression)
clickhouse_add_executable (decompress_perf decompress_perf.cpp)
target_link_libraries(decompress_perf PRIVATE dbms clickhouse_functions ch_contrib::lz4)

View File

@ -164,6 +164,17 @@ public:
}
/* Usage example:
#!/bin/sh
./clickhouse-compressor < clickhouse-compressor > compressed
./clickhouse-compressor -d < compressed > clickhouse-compressor2
cmp clickhouse-compressor clickhouse-compressor2 && echo "Ok." || echo "Fail."
*/
int main(int argc, char ** argv)
try
{

View File

@ -11,19 +11,6 @@ endif ()
# Not used in packages
if (ENABLE_UTILS)
add_subdirectory (compressor)
add_subdirectory (corrector_utf8)
add_subdirectory (zookeeper-cli)
add_subdirectory (zookeeper-dump-tree)
add_subdirectory (zookeeper-remove-by-list)
add_subdirectory (check-marks)
add_subdirectory (checksum-for-compressed-block)
add_subdirectory (check-mysql-binlog)
add_subdirectory (keeper-bench)
add_subdirectory (keeper-data-dumper)
add_subdirectory (memcpy-bench)
endif ()
if (ENABLE_FUZZING AND ENABLE_FUZZER_TEST)
add_subdirectory (libfuzzer-test)
endif ()

View File

@ -1,2 +0,0 @@
clickhouse_add_executable (check-marks main.cpp)
target_link_libraries(check-marks PRIVATE dbms clickhouse_functions boost::program_options)

View File

@ -1,2 +0,0 @@
clickhouse_add_executable(check-mysql-binlog main.cpp)
target_link_libraries(check-mysql-binlog PRIVATE dbms clickhouse_functions boost::program_options)

View File

@ -1,98 +0,0 @@
#include <IO/WriteBufferFromOStream.h>
#include <Databases/MySQL/MySQLBinlog.h>
#include <boost/program_options.hpp>
#include <iostream>
bool quit = false;
void signal_handler(int)
{
quit = true;
}
static void processBinlogFromFile(const std::string & bin_path, bool disable_checksum)
{
DB::MySQLReplication::BinlogFromFile binlog;
binlog.open(bin_path);
binlog.setChecksum(disable_checksum ? DB::MySQLReplication::IBinlog::NONE : DB::MySQLReplication::IBinlog::CRC32);
DB::MySQLReplication::BinlogEventPtr event;
while (binlog.tryReadEvent(event, /*timeout*/ 0) && !quit)
{
DB::WriteBufferFromOStream cout(std::cout);
event->dump(cout);
binlog.getPosition().dump(cout);
cout.finalize();
}
}
static void processBinlogFromSocket(const std::string & host, int port, const std::string & user, const std::string & password, const std::string & executed_gtid_set, bool disable_checksum)
{
DB::MySQLReplication::BinlogFromSocket binlog;
binlog.setChecksum(disable_checksum ? DB::MySQLReplication::IBinlog::NONE : DB::MySQLReplication::IBinlog::CRC32);
binlog.connect(host, port, user, password);
binlog.start(/*unique number*/ 42, executed_gtid_set);
DB::MySQLReplication::BinlogEventPtr event;
while (!quit)
{
if (binlog.tryReadEvent(event, /*timeout*/ 100))
{
if (event->header.type != DB::MySQLReplication::HEARTBEAT_EVENT)
{
DB::WriteBufferFromOStream cout(std::cout);
event->dump(cout);
binlog.getPosition().dump(cout);
cout.finalize();
}
}
}
}
int main(int argc, char ** argv)
{
(void)signal(SIGINT, signal_handler);
boost::program_options::options_description desc("Allowed options");
std::string host = "127.0.0.1";
int port = 3306;
std::string user = "root";
std::string password;
std::string gtid;
desc.add_options()
("help", "Produce help message")
("disable_checksum", "Disable checksums in binlog files.")
("binlog", boost::program_options::value<std::string>(), "Binlog file")
("host", boost::program_options::value<std::string>(&host)->default_value(host), "Host to connect")
("port", boost::program_options::value<int>(&port)->default_value(port), "Port number to connect")
("user", boost::program_options::value<std::string>(&user)->default_value(user), "User")
("password", boost::program_options::value<std::string>(&password), "Password")
("gtid", boost::program_options::value<std::string>(&gtid), "Executed gtid set");
try
{
boost::program_options::variables_map options;
boost::program_options::store(boost::program_options::parse_command_line(argc, argv, desc), options);
boost::program_options::notify(options);
if (options.count("help") || (!options.count("binlog") && !options.count("gtid")))
{
std::cout << "Usage: " << argv[0] << std::endl;
std::cout << desc << std::endl;
return EXIT_FAILURE;
}
if (options.count("binlog"))
processBinlogFromFile(options["binlog"].as<std::string>(), options.count("disable_checksum"));
else
processBinlogFromSocket(host, port, user, password, gtid, options.count("disable_checksum"));
}
catch (std::exception & ex)
{
std::cerr << ex.what() << std::endl;
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}

View File

@ -14,7 +14,7 @@
LC_ALL="en_US.UTF-8"
ROOT_PATH=$(git rev-parse --show-toplevel)
EXCLUDE='build/|integration/|widechar_width/|glibc-compatibility/|poco/|memcpy/|consistent-hashing|benchmark|tests/.*.cpp|utils/keeper-bench/example.yaml'
EXCLUDE='build/|integration/|widechar_width/|glibc-compatibility/|poco/|memcpy/|consistent-hashing|benchmark|tests/.*.cpp|programs/keeper-bench/example.yaml'
EXCLUDE_DOCS='Settings\.cpp|FormatFactorySettings\.h'
# From [1]:

View File

@ -1,2 +0,0 @@
clickhouse_add_executable (checksum-for-compressed-block-find-bit-flips main.cpp)
target_link_libraries(checksum-for-compressed-block-find-bit-flips PRIVATE dbms clickhouse_functions)

View File

@ -1,2 +0,0 @@
clickhouse_add_executable (decompress_perf decompress_perf.cpp)
target_link_libraries(decompress_perf PRIVATE dbms clickhouse_functions ch_contrib::lz4)

View File

@ -1,5 +0,0 @@
#!/bin/sh
./clickhouse-compressor < clickhouse-compressor > compressed
./clickhouse-compressor -d < compressed > clickhouse-compressor2
cmp clickhouse-compressor clickhouse-compressor2 && echo "Ok." || echo "Fail."

View File

@ -1,7 +0,0 @@
if (NOT TARGET ch_contrib::rapidjson)
message (${RECONFIGURE_MESSAGE_LEVEL} "Not building keeper-bench due to rapidjson is disabled")
return()
endif ()
clickhouse_add_executable(keeper-bench Generator.cpp Runner.cpp Stats.cpp main.cpp)
target_link_libraries(keeper-bench PRIVATE dbms clickhouse_functions ch_contrib::rapidjson)

View File

@ -1,7 +0,0 @@
if (NOT TARGET ch_contrib::nuraft)
message (WARNING "Not building keeper-data-dumper due to nuraft is disabled")
return ()
endif ()
clickhouse_add_executable(keeper-data-dumper main.cpp)
target_link_libraries(keeper-data-dumper PRIVATE dbms clickhouse_functions)

View File

@ -1 +0,0 @@
add_subdirectory (test_basic_fuzzer)

View File

@ -1 +0,0 @@
This folder contains various stuff intended to test libfuzzer functionality.

View File

@ -1 +0,0 @@
add_executable (test_basic_fuzzer main.cpp)

View File

@ -1,11 +0,0 @@
#include <stdint.h>
#include <stddef.h>
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
{
if (size > 0 && data[0] == 'H')
if (size > 1 && data[1] == 'I')
if (size > 2 && data[2] == '!')
__builtin_trap();
return 0;
}

View File

@ -1,9 +0,0 @@
clickhouse_add_executable(clickhouse-zookeeper-cli
zookeeper-cli.cpp
${ClickHouse_SOURCE_DIR}/src/Client/LineReader.cpp)
target_link_libraries(clickhouse-zookeeper-cli PRIVATE
clickhouse_common_zookeeper_base
clickhouse_common_zookeeper_no_log
dbms
clickhouse_functions
)

View File

@ -1,223 +0,0 @@
#include <IO/ReadBufferFromString.h>
#include <IO/ReadHelpers.h>
#include <Poco/ConsoleChannel.h>
#include <Common/ZooKeeper/KeeperException.h>
#include <Common/ZooKeeper/ZooKeeper.h>
#include <Client/LineReader.h>
#include <Common/logger_useful.h>
#include <iostream>
#include <sstream>
void printStat(const Coordination::Stat & s)
{
std::cout << "Stat:\n";
std::cout << " czxid: " << s.czxid << '\n';
std::cout << " mzxid: " << s.mzxid << '\n';
std::cout << " ctime: " << s.ctime << '\n';
std::cout << " mtime: " << s.mtime << '\n';
std::cout << " version: " << s.version << '\n';
std::cout << " cversion: " << s.cversion << '\n';
std::cout << " aversion: " << s.aversion << '\n';
std::cout << " ephemeralOwner: " << s.ephemeralOwner << '\n';
std::cout << " dataLength: " << s.dataLength << '\n';
std::cout << " numChildren: " << s.numChildren << '\n';
std::cout << " pzxid: " << s.pzxid << std::endl;
}
void waitForWatch(const zkutil::EventPtr & event)
{
std::cout << "waiting for watch" << std::endl;
event->wait();
std::cout << "watch event was signalled" << std::endl;
}
void readUntilSpace(std::string & s, DB::ReadBuffer & buf)
{
s = "";
while (!buf.eof())
{
if (isspace(*buf.position()))
return;
s.push_back(*buf.position());
++buf.position();
}
}
void readMaybeQuoted(std::string & s, DB::ReadBuffer & buf)
{
if (!buf.eof() && *buf.position() == '\'')
DB::readQuotedString(s, buf);
else
readUntilSpace(s, buf);
}
int main(int argc, char ** argv)
{
try
{
if (argc != 2)
{
std::cerr << "usage: " << argv[0] << " hosts" << std::endl;
return 2;
}
Poco::AutoPtr<Poco::ConsoleChannel> channel = new Poco::ConsoleChannel(std::cerr);
Poco::Logger::root().setChannel(channel);
Poco::Logger::root().setLevel("trace");
auto zk = zkutil::ZooKeeper::createWithoutKillingPreviousSessions(zkutil::ZooKeeperArgs(argv[1]));
DB::LineReader lr({}, false, {"\\"}, {});
do
{
const auto & line = lr.readLine(":3 ", ":3 ");
if (line.empty())
break;
try
{
std::stringstream ss(line); // STYLE_CHECK_ALLOW_STD_STRING_STREAM
std::string cmd;
ss >> cmd;
if (cmd == "q" || cmd == "quit" || cmd == "exit" || cmd == ":q")
break;
std::string path;
ss >> path;
if (cmd == "ls")
{
std::string w;
ss >> w;
bool watch = w == "w";
zkutil::EventPtr event = watch ? std::make_shared<Poco::Event>() : nullptr;
std::vector<std::string> v = zk->getChildren(path, nullptr, event);
for (const auto & child : v)
std::cout << child << std::endl;
if (watch)
waitForWatch(event);
}
else if (cmd == "create")
{
DB::ReadBufferFromString in(line);
std::string path_ignored;
std::string data;
std::string mode;
DB::assertString("create", in);
DB::skipWhitespaceIfAny(in);
readMaybeQuoted(path_ignored, in);
DB::skipWhitespaceIfAny(in);
readMaybeQuoted(data, in);
DB::skipWhitespaceIfAny(in);
readUntilSpace(mode, in);
int32_t m;
if (mode == "p")
m = zkutil::CreateMode::Persistent;
else if (mode == "ps")
m = zkutil::CreateMode::PersistentSequential;
else if (mode == "e")
m = zkutil::CreateMode::Ephemeral;
else if (mode == "es")
m = zkutil::CreateMode::EphemeralSequential;
else
{
std::cout << "Bad create mode" << std::endl;
continue;
}
std::cout << zk->create(path, data, m) << std::endl;
}
else if (cmd == "remove")
{
zk->remove(path);
}
else if (cmd == "rmr")
{
zk->removeRecursive(path);
}
else if (cmd == "exists")
{
std::string w;
ss >> w;
bool watch = w == "w";
zkutil::EventPtr event = watch ? std::make_shared<Poco::Event>() : nullptr;
Coordination::Stat stat;
bool e = zk->exists(path, &stat, event);
if (e)
printStat(stat);
else
std::cout << path << " does not exist" << std::endl;
if (watch)
waitForWatch(event);
}
else if (cmd == "get")
{
std::string w;
ss >> w;
bool watch = w == "w";
zkutil::EventPtr event = watch ? std::make_shared<Poco::Event>() : nullptr;
Coordination::Stat stat;
std::string data = zk->get(path, &stat, event);
std::cout << "Data: " << data << std::endl;
printStat(stat);
if (watch)
waitForWatch(event);
}
else if (cmd == "set")
{
DB::ReadBufferFromString in(line);
std::string data;
int version = -1;
DB::assertString("set", in);
DB::skipWhitespaceIfAny(in);
DB::assertString(path, in);
DB::skipWhitespaceIfAny(in);
readMaybeQuoted(data, in);
DB::skipWhitespaceIfAny(in);
if (!in.eof())
DB::readText(version, in);
Coordination::Stat stat;
zk->set(path, data, version, &stat);
printStat(stat);
}
else if (!cmd.empty())
{
std::cout << "commands:\n";
std::cout << " q\n";
std::cout << " ls path [w]\n";
std::cout << " create path data (p|ps|e|es)\n";
std::cout << " remove path\n";
std::cout << " rmr path\n";
std::cout << " exists path [w]\n";
std::cout << " get path [w]\n";
std::cout << " set path data [version]" << std::endl;
continue;
}
}
catch (const Coordination::Exception & e)
{
std::cerr << "KeeperException: " << e.displayText() << std::endl;
}
}
while (true);
}
catch (const Coordination::Exception & e)
{
std::cerr << "KeeperException: " << e.displayText() << std::endl;
return 1;
}
return 0;
}

View File

@ -1,8 +0,0 @@
clickhouse_add_executable (zookeeper-dump-tree main.cpp ${SRCS})
target_link_libraries(zookeeper-dump-tree PRIVATE
clickhouse_common_zookeeper_base
clickhouse_common_zookeeper_no_log
clickhouse_common_io
dbms
clickhouse_functions
boost::program_options)

View File

@ -1,7 +0,0 @@
clickhouse_add_executable (zookeeper-remove-by-list main.cpp ${SRCS})
target_link_libraries(zookeeper-remove-by-list PRIVATE
clickhouse_common_zookeeper_base
clickhouse_common_zookeeper_no_log
dbms
clickhouse_functions
boost::program_options)