diff options
author | Noah Watkins <noahwatkins@gmail.com> | 2013-02-18 15:07:14 -0800 |
---|---|---|
committer | Noah Watkins <noahwatkins@gmail.com> | 2013-08-25 08:58:27 -0700 |
commit | 78297797e9f26aab118e2b81630079d6e31e59f7 (patch) | |
tree | 0cf00142e5730741932f8e9502260d9b77efd6df | |
parent | 8025d626e653f2d39d406ee9b9a89475ec93303c (diff) | |
download | ceph-78297797e9f26aab118e2b81630079d6e31e59f7.tar.gz |
lua: support cls_cxx_[gs]etxattr
Signed-off-by: Noah Watkins <noahwatkins@gmail.com>
-rw-r--r-- | src/cls/lua/cls_lua.cc | 26 | ||||
-rw-r--r-- | src/test/cls_lua/test_cls_lua.cc | 17 | ||||
-rw-r--r-- | src/test/cls_lua/test_script.lua | 19 |
3 files changed, 62 insertions, 0 deletions
diff --git a/src/cls/lua/cls_lua.cc b/src/cls/lua/cls_lua.cc index 26dbbac0966..0d0028e3469 100644 --- a/src/cls/lua/cls_lua.cc +++ b/src/cls/lua/cls_lua.cc @@ -314,6 +314,30 @@ static int clslua_write(lua_State *L) } /* + * cls_cxx_getxattr + */ +static int clslua_getxattr(lua_State *L) +{ + cls_method_context_t hctx = clslua_get_hctx(L); + const char *name = luaL_checkstring(L, 1); + bufferlist *bl = clslua_pushbufferlist(L, NULL); + int ret = cls_cxx_getxattr(hctx, name, bl); + return clslua_opresult(L, (ret >= 0), ret, 1); +} + +/* + * cls_cxx_setxattr + */ +static int clslua_setxattr(lua_State *L) +{ + cls_method_context_t hctx = clslua_get_hctx(L); + const char *name = luaL_checkstring(L, 1); + bufferlist *bl = clslua_checkbufferlist(L, 2); + int ret = cls_cxx_setxattr(hctx, name, bl); + return clslua_opresult(L, (ret == 0), ret, 1); +} + +/* * cls_cxx_map_get_val */ static int clslua_map_get_val(lua_State *L) @@ -350,6 +374,8 @@ static const luaL_Reg clslua_lib[] = { {"write", clslua_write}, {"map_get_val", clslua_map_get_val}, {"map_set_val", clslua_map_set_val}, + {"getxattr", clslua_getxattr}, + {"setxattr", clslua_setxattr}, {NULL, NULL} }; diff --git a/src/test/cls_lua/test_cls_lua.cc b/src/test/cls_lua/test_cls_lua.cc index f802cd85645..e470a82b867 100644 --- a/src/test/cls_lua/test_cls_lua.cc +++ b/src/test/cls_lua/test_cls_lua.cc @@ -389,3 +389,20 @@ TEST_F(ClsLua, BufferlistConcat) { ASSERT_EQ(0, clslua_exec(test_script, NULL, "bl_concat_ne")); ASSERT_EQ(0, clslua_exec(test_script, NULL, "bl_concat_immut")); } + +TEST_F(ClsLua, GetXattr) { + bufferlist bl; + bl.append("blahblahblahblahblah"); + ASSERT_EQ(0, ioctx.setxattr(oid, "fooz", bl)); + ASSERT_EQ(0, clslua_exec(test_script, NULL, "getxattr")); + ASSERT_TRUE(reply.output == bl); +} + +TEST_F(ClsLua, SetXattr) { + bufferlist inbl; + inbl.append("blahblahblahblahblah"); + ASSERT_EQ(0, clslua_exec(test_script, &inbl, "setxattr")); + bufferlist outbl; + ASSERT_EQ((int)inbl.length(), ioctx.getxattr(oid, "fooz2", outbl)); + ASSERT_TRUE(outbl == inbl); +} diff --git a/src/test/cls_lua/test_script.lua b/src/test/cls_lua/test_script.lua index e3663acc46a..d04728b3723 100644 --- a/src/test/cls_lua/test_script.lua +++ b/src/test/cls_lua/test_script.lua @@ -289,3 +289,22 @@ end -- only runerr_c is called cls.register(runerr_c) + +-- +-- GetXattr +-- +function getxattr(input, output) + bl = cls.getxattr("fooz") + output:append(bl:str()) +end + +cls.register(getxattr) + +-- +-- SetXattr +-- +function setxattr(input, output) + cls.setxattr("fooz2", input) +end + +cls.register(setxattr) |