using namespace std;
+int fetch_access_keys_from_master(const DoutPrefixProvider *dpp, rgw::sal::Driver* driver, RGWUserAdminOpState &op_state, req_state *s, optional_yield y) {
+ bufferlist data;
+ JSONParser jp;
+ RGWUserInfo ui;
+ int op_ret = driver->forward_request_to_master(s, s->user.get(), nullptr, data, &jp, s->info, y);
+ if (op_ret < 0) {
+ ldpp_dout(dpp, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
+ return op_ret;
+ }
+ ui.decode_json(&jp);
+ op_state.op_access_keys = std::move(ui.access_keys);
+
+ return 0;
+}
+
class RGWOp_User_List : public RGWRESTOp {
public:
op_state.set_placement_tags(placement_tags_list);
}
- if(!(store->is_meta_master())) {
- bufferlist data;
- JSONParser jp;
- RGWUserInfo ui;
- op_ret = store->forward_request_to_master(s, s->user.get(), nullptr, data, &jp, s->info, y);
- if (op_ret < 0) {
- ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
+ if(!(driver->is_meta_master())) {
+ op_ret = fetch_access_keys_from_master(this, driver, op_state, s, y);
+
+ if(op_ret < 0) {
return;
+ } else {
+ // set_generate_key() is not set if keys have already been fetched from master zone
+ gen_key = false;
}
- ui.decode_json(&jp);
- std::map<std::string, RGWAccessKey> keys = ui.access_keys;
- auto keys_itr = keys.begin();
- RGWAccessKey first_key = keys_itr->second;
- op_state.id = first_key.id;
- op_state.key = first_key.key;
}
if (gen_key) {
op_state.set_generate_key();
}
- op_ret = RGWUserAdminOp_User::create(s, store, op_state, flusher, y);
+ op_ret = RGWUserAdminOp_User::create(s, driver, op_state, flusher, y);
}
class RGWOp_User_Modify : public RGWRESTOp {
}
op_state.set_max_buckets(max_buckets);
}
- if (gen_key)
- op_state.set_generate_key();
if (!key_type_str.empty()) {
int32_t key_type = KEY_TYPE_UNDEFINED;
op_state.set_placement_tags(placement_tags_list);
}
- bufferlist data;
- op_ret = driver->forward_request_to_master(s, s->user.get(), nullptr, data, nullptr, s->info, y);
- if (op_ret < 0) {
- ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
- return;
+ if(!(driver->is_meta_master())) {
+ op_ret = fetch_access_keys_from_master(this, driver, op_state, s, y);
+
+ if(op_ret < 0) {
+ return;
+ } else {
+ // set_generate_key() is not set if keys have already been fetched from master zone
+ gen_key = false;
+ }
+ }
+
+ if (gen_key) {
+ op_state.set_generate_key();
}
+
op_ret = RGWUserAdminOp_User::modify(s, driver, op_state, flusher, y);
}