未找到Aerospike UDF模块

时间:2016-01-29 21:48:57

标签: aerospike

我正在为Aerospike 3.6.2编写流UDF,我想将一些代码放在一个单独的Lua模块中。我完全按照example创建了一个文件mymodule.lua,其中包含以下内容:

local exports = {}

function exports.one()
  return 1
end

function exports.two()
  return 2
end

return exports

并将我的UDF放在文件testUdf.lua中:

local MM = require('mymodule')

local function three()
    return MM.one() + MM.two()
end

function testUdf(stream)
    local type = three()
    local testFilter = function(record)
        return record.campaignType == type
    end
    return stream : filter(testFilter)
end

我注册了两个模块并从Java客户端执行查询:

LuaConfig.SourceDirectory = this.udfPath;

List<RegisterTask> tasks = new ArrayList<>();
for (String udfName : new String[] { "mymodule.lua", "testUdf.lua" }) {
    File udf = new File (this.udfPath, udfName);
    tasks.add (this.aerospike.register (null, udf.getPath(), udfName, Language.LUA));
}
tasks.stream().forEach (RegisterTask::waitTillComplete);

Statement stmt = new Statement();
stmt.setNamespace (getRawFactNamespace());
stmt.setSetName (SET_FACT);
stmt.setFilters (Filter.equal (BIN_PRODUCT_CODE, "UX"));
stmt.setBinNames (FACT_BINS);

int count = 0;
try (ResultSet rs = this.aerospike.queryAggregate (null, stmt, "testUdf", "testUdf")) {
    while (rs.next()) {
        count++;
    }
}

我在aerospike/var/udf/lua的{​​{1}}测试Aerospike服务器上看到了具有正确内容的lua文件,mod-lua.user-path指向aerospike.conf。我记录了package.path,它还包含aerospike/var/udf/lua目录。

但是当我调用我的UDF时,我收到以下错误:

Exception in thread "main" com.aerospike.client.AerospikeException: org.luaj.vm2.LuaError: testUdf:1 module 'mymodule' not found: mymodule
  no field package.preload['mymodule']
  mymodule.lua
  no class 'mymodule'
stack traceback:
  testUdf:1: in main chunk
  [Java]: in ?
  at com.aerospike.client.query.QueryExecutor.checkForException(QueryExecutor.java:122)
  at com.aerospike.client.query.ResultSet.next(ResultSet.java:78)
  ...
Caused by: org.luaj.vm2.LuaError: testUdf:1 module 'mymodule' not found: mymodule
  no field package.preload['mymodule']
  mymodule.lua
  no class 'mymodule'
stack traceback:
  testUdf:1: in main chunk
  [Java]: in ?
  at org.luaj.vm2.LuaValue.error(Unknown Source)
  at org.luaj.vm2.lib.PackageLib$require.call(Unknown Source)
  at org.luaj.vm2.LuaClosure.execute(Unknown Source)
  at org.luaj.vm2.LuaClosure.onInvoke(Unknown Source)
  at org.luaj.vm2.LuaClosure.invoke(Unknown Source)
  at org.luaj.vm2.LuaValue.invoke(Unknown Source)
  at com.aerospike.client.lua.LuaInstance.loadPackage(LuaInstance.java:113)
  at com.aerospike.client.query.QueryAggregateExecutor.runThreads(QueryAggregateExecutor.java:92)
  at com.aerospike.client.query.QueryAggregateExecutor.run(QueryAggregateExecutor.java:77)

我做错了什么?

0 个答案:

没有答案