cluster trace

This commit is contained in:
Cloud Wu
2018-05-28 16:39:04 +08:00
parent a41a5fadd2
commit 9035fbe96b
5 changed files with 94 additions and 8 deletions

View File

@@ -22,16 +22,25 @@ setmetatable(register_name, { __index =
end
})
local tracetag
local function dispatch_request(_,_,addr, session, msg, sz, padding, is_push)
ignoreret() -- session is fd, don't call skynet.ret
if session == nil then
-- trace
tracetag = addr
return
end
if padding then
local req = large_request[session] or { addr = addr , is_push = is_push }
local req = large_request[session] or { addr = addr , is_push = is_push, tracetag = tracetag }
tracetag = nil
large_request[session] = req
cluster.append(req, msg, sz)
return
else
local req = large_request[session]
if req then
tracetag = req.tracetag
large_request[session] = nil
cluster.append(req, msg, sz)
msg,sz = cluster.concat(req)
@@ -39,6 +48,7 @@ local function dispatch_request(_,_,addr, session, msg, sz, padding, is_push)
is_push = req.is_push
end
if not msg then
tracetag = nil
local response = cluster.packresponse(session, false, "Invalid large req")
socket.write(fd, response)
return
@@ -65,7 +75,12 @@ local function dispatch_request(_,_,addr, session, msg, sz, padding, is_push)
skynet.rawsend(addr, "lua", msg, sz)
return -- no response
else
ok , msg, sz = pcall(skynet.rawcall, addr, "lua", msg, sz)
if tracetag then
ok , msg, sz = pcall(skynet.tracecall, tracetag, addr, "lua", msg, sz)
tracetag = nil
else
ok , msg, sz = pcall(skynet.rawcall, addr, "lua", msg, sz)
end
end
else
ok = false

View File

@@ -8,6 +8,7 @@ local node_address = {}
local node_session = {}
local command = {}
local config = {}
local nodename = cluster.nodename()
local function read_response(sock)
local sz = socket.header(sock:read(2))
@@ -128,6 +129,11 @@ local function send_request(source, node, addr, msg, sz)
-- node_channel[node] may yield or throw error
local c = node_channel[node]
local tracetag = skynet.tracetag()
if tracetag then
skynet.tracelog(tracetag, string.format("cluster %s-%s(%d)", nodename, node, session))
c:request(cluster.packtrace(string.format("%s-%s(%d)%s", nodename, node, session, tracetag)))
end
return c:request(request, session, padding)
end