summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoah Watkins <noahwatkins@gmail.com>2013-02-18 15:07:14 -0800
committerNoah Watkins <noahwatkins@gmail.com>2013-08-25 08:58:27 -0700
commit78297797e9f26aab118e2b81630079d6e31e59f7 (patch)
tree0cf00142e5730741932f8e9502260d9b77efd6df
parent8025d626e653f2d39d406ee9b9a89475ec93303c (diff)
downloadceph-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.cc26
-rw-r--r--src/test/cls_lua/test_cls_lua.cc17
-rw-r--r--src/test/cls_lua/test_script.lua19
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)