From: Curt Bruns Date: Wed, 13 Oct 2021 21:05:28 +0000 (-0400) Subject: rgw/lua: allow read/write of StorageClass field X-Git-Tag: v17.1.0~348^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=32dd91fb7aa5720ab5efd57e6c43c6bde34c74af;p=ceph.git rgw/lua: allow read/write of StorageClass field Admins may setup different pools for RGW objects and having the StorageClass field mutable allows the steering of RGW objects to the proper pools. Signed-off-by: Curt Bruns --- diff --git a/doc/radosgw/lua-scripting.rst b/doc/radosgw/lua-scripting.rst index 728a8514f1c1..8541ed4d9cbc 100644 --- a/doc/radosgw/lua-scripting.rst +++ b/doc/radosgw/lua-scripting.rst @@ -262,6 +262,8 @@ Request Fields +----------------------------------------------------+----------+--------------------------------------------------------------+----------+-----------+----------+ | ``Request.HTTP.Metadata`` | table | string to string metadata map | yes | yes | no | +----------------------------------------------------+----------+--------------------------------------------------------------+----------+-----------+----------+ +| ``Request.HTTP.StorageClass`` | string | storage class | no | yes | yes | ++----------------------------------------------------+----------+--------------------------------------------------------------+----------+-----------+----------+ | ``Request.HTTP.Host`` | string | host name | no | no | no | +----------------------------------------------------+----------+--------------------------------------------------------------+----------+-----------+----------+ | ``Request.HTTP.Method`` | string | HTTP method | no | no | no | diff --git a/src/rgw/rgw_lua_request.cc b/src/rgw/rgw_lua_request.cc index a8ea4ee19b2c..184c9eca54c1 100644 --- a/src/rgw/rgw_lua_request.cc +++ b/src/rgw/rgw_lua_request.cc @@ -640,11 +640,26 @@ struct HTTPMetaTable : public EmptyMetaTable { pushstring(L, info->request_params); } else if (strcasecmp(index, "Domain") == 0) { pushstring(L, info->domain); + } else if (strcasecmp(index, "StorageClass") == 0) { + pushstring(L, info->storage_class); } else { return error_unknown_field(L, index, TableName()); } return ONE_RETURNVAL; } + + static int NewIndexClosure(lua_State* L) { + auto info = reinterpret_cast(lua_touserdata(L, lua_upvalueindex(1))); + + const char* index = luaL_checkstring(L, 2); + + if (strcasecmp(index, "StorageClass") == 0) { + info->storage_class = luaL_checkstring(L, 3); + } else { + return error_unknown_field(L, index, TableName()); + } + return NO_RETURNVAL; + } }; struct CopyFromMetaTable : public EmptyMetaTable {