Thank you for your response! I have now a lua script to sort records based on ‘unxDateOfImp
’. The script is working fine at my local machine with nodeJS app. My lua file and nodeJS app call is as below:
orderByUDF.lua:
function orderby(touples,bin1,bin2)
local function mapper(rec)
local element = map()
element[bin1] = rec[bin1];
return element
end
local function accumulate(currentList, nextElement)
local bin1 = nextElement[bin1]
if currentList[bin1] == nil then
currentList[bin1] = list()
end
return currentList
end
local function reducer(this, that)
return map.merge(this,that)
end
return touples:map(mapper):aggregate(map{}, accumulate):reduce(reducer)
end
request.js
router.get('/udfTest', function(req,res,next){
var aerospikeClient = aerospike.client({
hosts: [ { addr: '127.0.0.1', port: 3000 } ],
modlua: {systemPath: '/opt/aerospike/sys/udf/lua/', userPath: '/opt/aerospike/sys/udf/lua/'}
}).connect(function(response) {
if ( response.code === aerospike.status.AEROSPIKE_OK ) {
console.log("Connection to Aerospike cluster succeeded!");
}
else {
console.log("Connection to Aerospike cluster failed. Please check your cluster IP and Port settings and try again.");
}
});
var statement = {};
statement.aggregationUDF = {module: 'orderByUDF', funcname: 'orderby' , args: ["unxDateOfImp"]};
var query = aerospikeClient.query('mgProduct', 'impression', statement);
var stream = query.execute();
stream.on('data', function(result) {
console.log('Printing results')
console.log(result)
});
stream.on('error', function(error) {
console.log('error happend')
console.log(error);
});
stream.on('end', function(end) {
console.log('end streaming')
});
});
I register the UDF through the following aql command:
aql> register module '/opt/aerospike/sys/udf/lua/orderByUDF.lua'
It was successfully registered. I checked it by using the aql command show modules
Its runs perfectly fine at my local machine where both NodeJS app and aerospike is running. When I tried to shift on my distributed system where NodeJS app and aerospike are both on separate servers,it gives error. NodeJS app is remotely calling aerospike.
Error
{ code: 100, message:
'UDF: Execution Error 1',
func: 'as_query_aggregate',
file: 'src/main/aerospike/aerospike_query.c', line: 704 }
I did everything to solve this issue but could not get rid of it. My modlua paths are same as on my local machine. I also tried to find its solution in your community through this link : Help debugging Error: code: 100, message: 'UDF: Execution Error 1
but could not find any help.