return ret;
}
+static void remove_old_indexes(RGWUserInfo& old_info, RGWUserInfo new_info)
+{
+ int ret;
+ bool success = true;
+
+ if (!old_info.user_id.empty() && old_info.user_id.compare(new_info.user_id) != 0) {
+ ret = rgw_remove_uid_index(old_info.user_id);
+ if (ret < 0 && ret != -ENOENT) {
+ cerr << "ERROR: could not remove index for uid " << old_info.user_id << " return code: " << ret << std::endl;
+ success = false;
+ }
+ }
+
+ if (!old_info.user_email.empty() &&
+ old_info.user_email.compare(new_info.user_email) != 0) {
+ ret = rgw_remove_email_index(new_info.user_id, old_info.user_email);
+ if (ret < 0 && ret != -ENOENT) {
+ cerr << "ERROR: could not remove index for email " << old_info.user_email << " return code: " << ret << std::endl;
+ success = false;
+ }
+ }
+
+ if (!old_info.openstack_name.empty() &&
+ old_info.openstack_name.compare(new_info.openstack_name) != 0) {
+ ret = rgw_remove_openstack_name_index(new_info.user_id, old_info.openstack_name);
+ if (ret < 0 && ret != -ENOENT) {
+ cerr << "ERROR: could not remove index for openstack_name " << old_info.openstack_name << " return code: " << ret << std::endl;
+ success = false;
+ }
+ }
+
+ /* we're not removing access keys here.. keys are removed explicitly using the key rm command and removing the old key
+ index is handled there */
+
+ if (!success)
+ cerr << "ERROR: this should be fixed manually!" << std::endl;
+}
+
int main(int argc, char **argv)
{
DEFINE_CONF_VARS(usage);
map<string, RGWAccessKey>::iterator kiter;
map<string, RGWSubUser>::iterator uiter;
+ RGWUserInfo old_info = info;
+
int err;
switch (opt_cmd) {
case OPT_USER_CREATE:
break;
}
+ remove_old_indexes(old_info, info);
+
show_user_info(info);
break;
if (kiter == info.access_keys.end()) {
cerr << "key not found" << std::endl;
} else {
- rgw_remove_key_storage(kiter->second);
+ rgw_remove_key_index(kiter->second);
info.access_keys.erase(kiter);
if ((err = rgw_store_user_info(info)) < 0) {
cerr << "error storing user info: " << cpp_strerror(-err) << std::endl;
return ret;
}
-int rgw_remove_key_storage(RGWAccessKey& access_key)
+int rgw_remove_key_index(RGWAccessKey& access_key)
{
- rgwstore->delete_obj(access_key.id, ui_key_bucket, access_key.id);
- return 0;
+ return rgwstore->delete_obj(access_key.id, ui_key_bucket, access_key.id);
+}
+
+int rgw_remove_uid_index(string& uid)
+{
+ return rgwstore->delete_obj(uid, ui_uid_bucket, uid);
+}
+
+int rgw_remove_email_index(string& uid, string& email)
+{
+ return rgwstore->delete_obj(uid, ui_email_bucket, email);
+}
+
+int rgw_remove_openstack_name_index(string& uid, string& openstack_name)
+{
+ return rgwstore->delete_obj(uid, ui_openstack_bucket, openstack_name);
}
/**
}
map<string, RGWAccessKey>::iterator kiter = info.access_keys.begin();
for (; kiter != info.access_keys.end(); ++kiter)
- rgw_remove_key_storage(kiter->second);
+ rgw_remove_key_index(kiter->second);
rgwstore->delete_obj(info.user_id, ui_uid_bucket, info.user_id);
rgwstore->delete_obj(info.user_id, ui_email_bucket, info.user_email);
extern int rgw_add_bucket(string user_id, string bucket_name);
extern int rgw_remove_bucket(string user_id, string bucket_name);
-extern int rgw_remove_key_storage(RGWAccessKey& access_key);
+
+/*
+ * remove the different indexes
+ */
+extern int rgw_remove_key_index(RGWAccessKey& access_key);
+extern int rgw_remove_uid_index(string& uid);
+extern int rgw_remove_email_index(string& uid, string& email);
+extern int rgw_remove_openstack_name_index(string& uid, string& openstack_name);
#endif