- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的 Ubuntu
机器上安装了 Zookeeper
。我在具有三个 z1
、z2
和 z3
实例的集群模式下运行它。当我使用 bin/zkCli.sh -server 127.0.0.1:2181,127.0.0.1:2182,...
连接到它并执行 ls/
我看到一个列表一些,比如说,节点或数据(我不确定术语)。现在我想要的是使用标准 C++
client
以编程方式上传一些数据。为了实现这一点,我有一堆函数,包括 init
,我猜它会启动一个 session ,create
函数,它在内部调用 zoo_acreate
和一个空的(此时为简单起见)回调函数 create_complete
。
最后提到的两个函数如下所示:
void create(const char * path,
const char * value) {
zoo_acreate(zh,
path,
value,
0,
&ZOO_OPEN_ACL_UNSAFE,
0,
create_completion,
NULL);
}
void create_completion (int rc, const char *value, const void *data) {
// empty at this moment
}
但是,当我尝试使用这些函数将一些数据上传到 zookeeper 时,我没有得到任何结果——实际上,没有错误,但同时没有数据。我使用这些函数的方式是这样的:
int main(){
hostPort = (char *)("127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183");
init(hostPort); // as a result of invoking this function
// I see in the console some logs, including this message:
// Initiating client connection, host=127.0.0.1:2181,....
create("/testworker", "");
return 0;
}
我想,这段代码应该在 Zookeeper 中创建一个 /testworker
“文件夹”,然而,它并没有——ls/
命令显示没有任何变化。我应该指出的一件有趣的事情是,我的程序似乎从未调用过 create_completion
回调(我使用 cout
对其进行了检查)。所以,我的程序可能需要一些特殊的标志和一些特殊的编译字符串。我现在编译的方式是:
$ g++ -o test test.cpp -I /...path_to_include_folder/ -L /..path_to_lib_folder/ -lzookeeper_mt
编辑
我稍微调查了一下这个问题,发现根本没有调用回调函数。例如,启动 session 的 init
函数不会调用 main_watcher
回调。这是为什么?
编辑
我仔细研究了一下。结果是,zookeeper_init
(在我的 init
函数中调用)返回 0
作为 errno
的值此外,它将 zh
(它是 static zhandle_t *
类型的动物园管理员处理程序)设置为某个值,因此 zh
不是 null
等等,根据 documentation , init
函数应该没问题(即使它不会触发回调例程)。所以我在控制台中没有错误消息并且使用标准 zookeeper 方法没有错误标志,但回调和数据上传仍然不起作用,这真的很奇怪。这有什么问题,我该如何调试它?
编辑
这是我的小例子的完整源代码:
#include <iostream>
#include "proto.h"
#include "zookeeper.h"
#include "zookeeper_log.h"
#include "recordio.h"
#include "zookeeper.jute.h"
#include "zookeeper_version.h"
#include "errno.h"
using namespace std;
static char *hostPort;
static zhandle_t * zh;
static int connected = 0;
static int expired = 0;
static int server_id;
static struct String_vector * workers = NULL;
static struct String_vector * tasks = NULL;
void create(const char *, const char *);
void create_completion(int, const char *, const void *);
void main_watcher(zhandle_t *zkh,
int type,
int state,
const char *path,
void* context)
{
// cout << "HELLO FROM WATCHER " << endl; // Not printed when I remove comment. Why???
if(type == ZOO_SESSION_EVENT){
if(state == ZOO_CONNECTED_STATE){
connected = 1;
}
else if(state == ZOO_AUTH_FAILED_STATE){
connected = 0;
}
else if(state == ZOO_EXPIRED_SESSION_STATE){
expired = 1;
connected = 0;
zookeeper_close(zkh);
}
}
}
int init(char* hostPort){
srand(time(NULL));
server_id = rand();
zoo_set_debug_level(ZOO_LOG_LEVEL_INFO);
zh = zookeeper_init(hostPort, main_watcher, 15000, 0, 0, 0);
return errno;
}
void create_completion(int rc, const char *value, const void * data){
// empty at this moment for simplicity
}
void create(const char * path, const char * value){
zoo_acreate(zh, path, value, 0, &ZOO_OPEN_ACL_UNSAFE, 0,
create_completion, NULL);
}
int main(){
hostPort = (char *)("127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183");
init(hostPort);
create("/testworkers", ""); // Do not see this "folder" /testworkers in Zookeeper. Why???
return 0;
}
编辑
这真的让我发疯。我花了几天时间阅读了一本关于 C++
连接器到 Zookeeper
的书,但没有得到任何结果,我刚刚使用了第一个 Python
连接器,花了不超过 1.5 分钟就完成了。但这不是我想要的。我想看看如何在 C++
中完成这个微不足道的事情 - 编译、连接和创建。而已。
编辑
我用 -DTHREADED
选项编译我的程序,但没有用。不过,zoo_acreate
不会创建任何东西。它不产生错误消息,不产生警告,不返回错误标志,也不提供任何结果。真是奇怪的图书馆。
最佳答案
代码中有两个错误。
1.在这个字符串中 static int server_id;
。必须是static clientid_t server_id;
2.你的初始化函数必须是
int init(char* hostPort)
{
//srand(time(NULL));
//server_id = rand();
zoo_set_debug_level(ZOO_LOG_LEVEL_INFO);
zh = zookeeper_init(hostPort, main_watcher, 15000, &server_id, 0, 0);
return errno;
}
请注意 zookeeper_init
和函数 srand(time(NULL));
和 server_id = rand();
必须是注释掉了。
还有其他的。查看 main 的新版本。我添加了无限循环。
int main()
{
hostPort = (char *)("127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183");
init(hostPort);
create("/testworkers", ""); // Do not see this "folder" /testworkers in Zookeeper. Why???
while(1)
{
sleep(1);
}
return 0;
}
关于c++ - 无法以编程方式将数据上传到 Zookeeper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32562042/
我正在尝试打印 timeval 类型的值。实际上我可以打印它,但我收到以下警告: 该行有多个标记 格式“%ld”需要“long int”类型,但参数 2 的类型为“struct timeval” 程序
我正在编写自己的 unix 终端,但在执行命令时遇到问题: 首先,我获取用户输入并将其存储到缓冲区中,然后我将单词分开并将它们存储到我的 argv[] 数组中。IE命令是“firefox”以启动存储在
我是 CUDA 的新手。我有一个关于一个简单程序的问题,希望有人能注意到我的错误。 __global__ void ADD(float* A, float* B, float* C) { con
我有一个关于 C 语言 CGI 编程的一般性问题。 我使用嵌入式 Web 服务器来处理 Web 界面。为此,我在服务器中存储了一个 HTML 文件。在此 HTML 文件中包含 JavaScript 和
**摘要:**在代码的世界中,是存在很多艺术般的写法,这可能也是部分程序员追求编程这项事业的内在动力。 本文分享自华为云社区《【云驻共创】用4种代码中的艺术试图唤回你对编程的兴趣》,作者: break
我有一个函数,它的任务是在父对象中创建一个变量。我想要的是让函数在调用它的级别创建变量。 createVariable testFunc() [1] "test" > testFunc2() [1]
以下代码用于将多个连续的空格替换为1个空格。虽然我设法做到了,但我对花括号的使用感到困惑。 这个实际上运行良好: #include #include int main() { int ch, la
我正在尝试将文件写入磁盘,然后自动重新编译。不幸的是,某事似乎不起作用,我收到一条我还不明白的错误消息(我是 C 初学者 :-)。如果我手动编译生成的 hello.c,一切正常吗?! #include
如何将指针值传递给结构数组; 例如,在 txt 上我有这个: John Doe;xxxx@hotmail.com;214425532; 我的代码: typedef struct Person{
我尝试编写一些代码来检索 objectID,结果是 2B-06-01-04-01-82-31-01-03-01-01 . 这个值不正确吗? // Send a SysObjectId SNMP req
您好,提前感谢您的帮助, (请注意评论部分以获得更多见解:即,以下示例中的成本列已添加到此问题中;西蒙提供了一个很好的答案,但成本列本身并未出现在他的数据响应中,尽管他提供的功能与成本列一起使用) 我
我想知道是否有人能够提出一些解决非线性优化问题的软件包的方法,而非线性优化问题可以为优化解决方案提供整数变量?问题是使具有相等约束的函数最小化,该函数受某些上下边界约束的约束。 我已经在R中使用了'n
我是 R 编程的初学者,正在尝试向具有 50 列的矩阵添加一个额外的列。这个新列将是该行中前 10 个值的平均值。 randomMatrix <- generateMatrix(1,5000,100,
我在《K&R II C 编程 ANSI C》一书中读到,“>>”和“0; nwords--) sum += *buf++; sum = (sum >>
当下拉列表的选择发生变化时,我想: 1) 通过 div 在整个网站上显示一些 GUI 阻止覆盖 2)然后处理一些代码 3) 然后隐藏叠加层。 问题是,当我在事件监听器函数中编写此逻辑时,将执行 onC
我正在使用 Clojure 和 RESTEasy 设计 JAX-RS REST 服务器. 据我了解,用 Lisp 系列语言编写的应用程序比用“传统”命令式语言编写的应用程序更多地构建为“特定于领域的语
我目前正在研究一种替代出勤监控系统作为一项举措。目前,我设计的用户表单如下所示: Time Stamp Userform 它的工作原理如下: 员工将选择他/她将使用的时间戳类型:开始时间、超时、第一次
我是一名学生,试图自学编程,从在线资源和像您这样的人那里获得帮助。我在网上找到了一个练习来创建一个小程序来执行此操作: 编写一个程序,读取数字 a 和 b(长整型)并列出 a 和 b 之间有多少个数字
我正在尝试编写一个 shell 程序,给定一个参数,打印程序的名称和参数中的每个奇数词(即,不是偶数词)。但是,我没有得到预期的结果。在跟踪我的程序时,我注意到,尽管奇数词(例如,第 5 个词,5 %
只是想知道是否有任何 Java API 可以让您控制台式机/笔记本电脑外壳上的 LED? 或者,如果不可能,是否有可能? 最佳答案 如果你说的是前面的 LED 指示电源状态和 HDD 繁忙状态,恐怕没
我是一名优秀的程序员,十分优秀!