我一直在尝试通过 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
有没有人能帮助我,让我知道我在这里做错了什么?
更新:
我修改protocolFactory
了位于 Accumulo 中的 proxy.properties 文件中的行并重新启动了代理。
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'}
请参阅下面的答案。