2015-05-14 200 views
3

我對lua和aerospike很新。我想開發一個在aerospike上運行的UDF,但是我找不到可以通過選項進行調試的方法。調試aerospike lua UDF

我試圖安裝eclipse LDT,但似乎無法找到aerospike的要求。

我該怎麼做?

我嘗試了一件簡單的事情:加載一張表的所有記錄並打印。

function test(rec) 


     print(rec['bin1']) 
end 

當然我創建了表格並插入了記錄。

感謝

回答

0

如果塞支持luasocket或提供一種方式來加載luasocket庫(我不能在文件中找到,如果它),你可以嘗試通過以下的instructions for remote debugging調試使用ZeroBrane Studio中的腳本。

6

在aerospike.com網站上有一個UDF Developer Guide,專門針對這種情況請看「Developing Record UDFs」這篇文章。要記錄集合中的所有記錄(),您可以將記錄UDF應用於掃描。有關使用Python客戶端執行此操作的示例,請參閱aerospike.Client.scan_apply()方法。

您將需要爲UDF操作設置日誌文件進行調試,並在您的示例中記錄集合中的記錄。在您的/etc/aerospike/aerospike.conf添加logging段,重新啓動服務:

logging { 
    file /var/log/aerospike/udf.log { 
    context any warning 
    context ldt info 
    context udf debug 
    context query debug 
    } 
} 

現在,您可以創建與使用info()方法,如Lua UDF - Best Practices文章中描述的功能的Lua模塊。

我創建了一個名爲sample.lua模塊具有記錄UDF名爲show_set

function show_set(rec, ns, set) 
    out = '' 
    bins = record.bin_names(rec) 
    for i, bin_name in ipairs(bins) do 
    out = out .. "'" .. tostring(bin_name) .. "'" 
    out = out .. '=>' .. tostring(rec[bin_name]) .. "," 
    end 
    info("show_set(%s.%s, %s): %s", ns, set, tostring(record.key(rec)), out) 
end 

我裝成一個簡單的Python腳本,也適用記錄UDF到掃描服務器:

import aerospike 
from aerospike.exception import * 
import time 

config = { 'hosts': [ ('192.168.119.3', 3000)]} 
client = aerospike.client(config).connect() 

try: 
    client.udf_put('sample.lua') 
    time.sleep(2) 
except AerospikeError as e: 
    print("Error: {0} [{1}]".format(e.msg, e.code)) 

client.put(('test','demo','key1'), {'id':1,'a':1}, 
      policy={'key':aerospike.POLICY_KEY_SEND}) 
client.put(('test','demo','key2'), {'id':2,'b':2}, 
      policy={'key':aerospike.POLICY_KEY_SEND}) 
client.put(('test','demo','key3'), {'id':3,'c':3}, 
      policy={'key':aerospike.POLICY_KEY_SEND}) 

try: 
    scan_id = client.scan_apply('test', 'demo', 'sample', 'show_set', ['test', 
    'demo']) 
    while True: 
     response = client.scan_info(scan_id) 
     if (response['status'] == aerospike.SCAN_STATUS_COMPLETED) or \ 
      response['status'] == aerospike.SCAN_STATUS_ABORTED: 
      break 
    if response['status'] == aerospike.SCAN_STATUS_COMPLETED: 
     print("Background scan successful") 
     print("Progess percentage : ", response['progress_pct']) 
     print("Number of scanned records : ", response['records_scanned']) 
     print("Background scan status : ", "SCAN_STATUS_COMPLETED") 
    else: 
     print("Scan_apply failed") 
except AerospikeError as e: 
    print("Error: {0} [{1}]".format(e.msg, e.code)) 
client.close() 

我跑了劇本和tail -f /var/log/aerospike/udf.log | grep show_set

中號ay 14 2015 21:01:47 GMT:INFO(udf):([C] :: - 1)show_set(test.demo, key1):'a'=> 1,'id'=> 1,5月14日2015 21:01:47 GMT:INFO(udf):([C] :: - 1) show_set(test.demo,key3):'c'=> 3,'id'=> 3,2015年5月14日21 :01:47 GMT: INFO(udf):([C] :: - 1)show_set(test.demo,key2):'b'=> 2,'id'=> 2,

+0

爲你工作? –