diff --git a/doc/radosgw/lua-scripting.rst b/doc/radosgw/lua-scripting.rst index 728a8514f1c..8541ed4d9cb 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 7d6d72e0368..2e971c329c8 100644 --- a/src/rgw/rgw_lua_request.cc +++ b/src/rgw/rgw_lua_request.cc @@ -639,11 +639,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 {