diff --git a/src/lua/swim.lua b/src/lua/swim.lua index 4893d57678e493e60803fded9f157a5fa01bd4eb..adb102d06c7a084b175dfdd0321a66718631dea7 100644 --- a/src/lua/swim.lua +++ b/src/lua/swim.lua @@ -391,7 +391,15 @@ end -- metatable, serialization, string conversions etc. -- local function swim_member_uuid(m) - return capi.swim_member_uuid(swim_check_member(m, 'member:uuid()')) + local ptr = swim_check_member(m, 'member:uuid()') + local u = m.u + if not u then + ptr = capi.swim_member_uuid(ptr) + u = ffi.new('struct tt_uuid') + ffi.copy(u, ptr, ffi.sizeof('struct tt_uuid')) + rawset(m, 'u', u) + end + return u end local function swim_member_serialize(m) diff --git a/test/swim/swim.result b/test/swim/swim.result index 436d4e57929a0dfe1be2d705fe48ca1d7dcdf243..5696d984bb1ed5abf641431d661548bfea5bfece 100644 --- a/test/swim/swim.result +++ b/test/swim/swim.result @@ -403,6 +403,10 @@ s:uuid() --- - 00000000-0000-1000-8000-000000000001 ... +s:uuid() == s:uuid() +--- +- true +... s:uri() --- - 127.0.0.1:<port> diff --git a/test/swim/swim.test.lua b/test/swim/swim.test.lua index a3eac9b460d1fcf14cc5ba6e49688e7353885c3c..44376e3dba4dfe0dd6768edcc9ff60e5ae7944ec 100644 --- a/test/swim/swim.test.lua +++ b/test/swim/swim.test.lua @@ -137,6 +137,7 @@ s = s1:self() s s:status() s:uuid() +s:uuid() == s:uuid() s:uri() s:incarnation() s:payload_cdata()