]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: req_state takes const ref to RGWProcessEnv
authorCasey Bodley <cbodley@redhat.com>
Wed, 2 Nov 2022 18:15:51 +0000 (14:15 -0400)
committerCasey Bodley <cbodley@redhat.com>
Fri, 9 Dec 2022 21:58:41 +0000 (16:58 -0500)
make the RGWProcessEnv accessible to any call paths that have a
req_state

Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/rgw/rgw_common.cc
src/rgw/rgw_common.h
src/rgw/rgw_file.cc
src/rgw/rgw_file.h
src/rgw/rgw_lib.cc
src/rgw/rgw_lib.h
src/rgw/rgw_process.cc
src/rgw/rgw_process.h
src/test/rgw/test_rgw_iam_policy.cc

index 422874b4f4d9c7df696279fdbf9305c16ff62912..31aa6f92a188d27cbcded4488cdedb21bf4e666c 100644 (file)
@@ -269,8 +269,9 @@ void req_info::rebuild_from(req_info& src)
 }
 
 
-req_state::req_state(CephContext* _cct, RGWEnv* e, uint64_t id)
-  : cct(_cct), info(_cct, e), id(id)
+req_state::req_state(CephContext* _cct, const RGWProcessEnv& penv,
+                     RGWEnv* e, uint64_t id)
+  : cct(_cct), penv(penv), info(_cct, e), id(id)
 {
   enable_ops_log = e->get_enable_ops_log();
   enable_usage_log = e->get_enable_usage_log();
index 6784f6248280ac0d4a6390e085630c19dfa5a26a..ac380d7ed4f473c9798f0069013f0356663f3b01 100644 (file)
@@ -56,6 +56,8 @@ namespace rgw::lua {
   class Background;
 }
 
+struct RGWProcessEnv;
+
 using ceph::crypto::MD5;
 
 #define RGW_ATTR_PREFIX  "user.rgw."
@@ -1068,6 +1070,7 @@ class RGWObjectCtx;
 /** Store all the state necessary to complete and respond to an HTTP request*/
 struct req_state : DoutPrefixProvider {
   CephContext *cct;
+  const RGWProcessEnv& penv;
   rgw::io::BasicClient *cio{nullptr};
   http_op op{OP_UNKNOWN};
   RGWOpType op_type{};
@@ -1218,7 +1221,7 @@ struct req_state : DoutPrefixProvider {
   rgw::lua::Background* lua_background = nullptr;
   rgw::sal::LuaManager* lua_manager = nullptr;
 
-  req_state(CephContext* _cct, RGWEnv* e, uint64_t id);
+  req_state(CephContext* _cct, const RGWProcessEnv& penv, RGWEnv* e, uint64_t id);
   ~req_state();
 
 
index eaaedd4da8b617e13f146449db70198985e57ce8..54e913f5a54e5e148d08479bb13030d262d72725 100644 (file)
@@ -1659,10 +1659,12 @@ namespace rgw {
        return -EIO;
       }
 
+      const RGWProcessEnv& penv = g_rgwlib->get_fe()->get_process()->get_env();
+
       /* start */
       std::string object_name = relative_object_name();
       f->write_req =
-       new RGWWriteRequest(g_rgwlib->get_driver(),
+       new RGWWriteRequest(g_rgwlib->get_driver(), penv,
                            g_rgwlib->get_driver()->get_user(fs->get_user()->user_id),
                            this, bucket_name(), object_name);
       rc = g_rgwlib->get_fe()->start_req(f->write_req);
index ef8e7b5ce07d30a90dbf53ea46c1457ec029950e..fbda86ba4cb39d1bf5e2256e67d38f7f34f4b461 100644 (file)
@@ -2489,11 +2489,11 @@ public:
   size_t bytes_written;
   bool eio;
 
-  RGWWriteRequest(rgw::sal::Driver* driver,
+  RGWWriteRequest(rgw::sal::Driver* driver, const RGWProcessEnv& penv,
                  std::unique_ptr<rgw::sal::User> _user,
                  RGWFileHandle* _fh, const std::string& _bname,
                  const std::string& _oname)
-    : RGWLibContinuedReq(driver->ctx(), std::move(_user)),
+    : RGWLibContinuedReq(driver->ctx(), penv, std::move(_user)),
       bucket_name(_bname), obj_name(_oname),
       rgw_fh(_fh), filter(nullptr), timer_id(0), real_ofs(0),
       bytes_written(0), eio(false) {
index ccf3da47ee8c273507fa730d7a3885b8caa343d9..f449cce21c026f9a60895068e9f74850891c9c74 100644 (file)
@@ -204,7 +204,7 @@ namespace rgw {
     rgw_env.set("HTTP_HOST", "");
 
     /* XXX and -then- bloat up req_state with string copies from it */
-    req_state rstate(req->cct, &rgw_env, req->id);
+    req_state rstate(req->cct, env, &rgw_env, req->id);
     req_state *s = &rstate;
 
     // XXX fix this
index e863aadab3c3f7ffc91f0444bdaa36b61198d6bc..02317ea8e0846481bde61cf5612537e7b4b8eb62 100644 (file)
@@ -180,10 +180,10 @@ namespace rgw {
     req_state rstate;
   public:
 
-    RGWLibContinuedReq(CephContext* _cct,
+    RGWLibContinuedReq(CephContext* _cct, const RGWProcessEnv& penv,
                       std::unique_ptr<rgw::sal::User> _user)
       :  RGWLibRequest(_cct, std::move(_user)), io_ctx(),
-        rstate(_cct, &io_ctx.get_env(), id)
+        rstate(_cct, penv, &io_ctx.get_env(), id)
       {
        io_ctx.init(_cct);
 
index e7164243c83d7bcd7949947c267be585a0e52017..d926a41d5a3f79b4b06892748e6e1398d5ef52f2 100644 (file)
@@ -278,7 +278,7 @@ int process_request(const RGWProcessEnv& penv,
 
   RGWEnv& rgw_env = client_io->get_env();
 
-  req_state rstate(g_ceph_context, &rgw_env, req->id);
+  req_state rstate(g_ceph_context, penv, &rgw_env, req->id);
   req_state *s = &rstate;
 
   s->ratelimit_data = penv.ratelimiting->get_active();
index fad155c0fa0f1e7944dcb88e385d1a37e1d8cc81..470d8f4246f698a21f96af1cac37f66ea6e7c3f8 100644 (file)
@@ -110,6 +110,8 @@ public:
   
   virtual ~RGWProcess() = default;
 
+  const RGWProcessEnv& get_env() const { return env; }
+
   virtual void run() = 0;
   virtual void handle_request(const DoutPrefixProvider *dpp, RGWRequest *req) = 0;
 
index 3afe6e1447a1cf4104d793410294bc8efdfb43d2..5d631ebf917627bc876ab42384d025735e1c1454 100644 (file)
@@ -904,13 +904,14 @@ TEST_F(IPPolicyTest, asNetworkInvalid) {
 }
 
 TEST_F(IPPolicyTest, IPEnvironment) {
+  RGWProcessEnv penv;
   // Unfortunately RGWCivetWeb is too tightly tied to civetweb to test RGWCivetWeb::init_env.
   RGWEnv rgw_env;
   rgw::sal::RadosStore store;
   std::unique_ptr<rgw::sal::User> user = store.get_user(rgw_user());
   rgw_env.set("REMOTE_ADDR", "192.168.1.1");
   rgw_env.set("HTTP_HOST", "1.2.3.4");
-  req_state rgw_req_state(cct.get(), &rgw_env, 0);
+  req_state rgw_req_state(cct.get(), penv, &rgw_env, 0);
   rgw_req_state.set_user(user);
   rgw_build_iam_environment(&store, &rgw_req_state);
   auto ip = rgw_req_state.env.find("aws:SourceIp");