【发布时间】:2014-02-13 22:06:55
【问题描述】:
我一直在尝试通过 Thrift 代理从 NodeJS 连接到 Accumulo,但没有成功。
var thrift = require("thrift");
var AccumuloClient = require("./AccumuloProxy");
var transport = thrift.TFramedTransport;
var protocol = thrift.TBinaryProtocol;
var connection = thrift.createConnection("localhost", 42424, {
transport: transport,
protocol: protocol
});
var client = thrift.createClient(AccumuloClient, connection);
client.login("root", {'password': "password"});
当我尝试登录时,我得到了
org.apache.thrift.protocol.TProtocolException: Expected protocol id ffffff82 but got ffffff80
有没有人可以帮助我,让我知道我在这里做错了什么?
更新:
我修改了位于 Accumulo 中的 proxy.properties 文件中的 protocolFactory 行并重新启动了代理。
protocolFactory=org.apache.thrift.protocol.TBinaryProtocol$Factory
我执行了与上述相同的步骤,但在createClient 调用中添加了回调。
var login;
var client = thrift.createClient(AccumuloClient, connection,
function(err, success) { login = success });
这会填充登录变量。然后我尝试使用该登录变量来执行其他功能
client.listTables(login, function(a) { console.log(a) })
结果
{name: 'TApplicationException',
type: 6,
message: 'Internal error processing listTables'}
尝试创建表
client.createTable(login, "testTable", 1, "", function(a) { console.log(a)})
结果
{name: 'AccumuloSecurityException',
msg: 'org.apache.accumulo.core.client.AccumuloSecurityException: Error SERIALIZATION_ERROR for user unknown - Unknown security exception'}
请参阅下面的答案。
【问题讨论】:
-
这基本上是两个问题,加上一个答案,都变成了一个问题。我建议把它清理干净。这样一来,它几乎没有帮助,也不一定适合 SO 的问答模型。
标签: node.js thrift thrift-protocol accumulo