return nullptr;
}
- /* XXX: temporary - create testid user */
- rgw_user testid_user("", "testid", "");
- std::unique_ptr<rgw::sal::User> user = store->get_user(testid_user);
- user->get_info().display_name = "M. Tester";
- user->get_info().user_email = "tester@ceph.com";
- RGWAccessKey k1("0555b35654ad1656d804", "h7GhxuBLTrlhVUyxSPUKUV8r/2EI4ngqJxD7iBdBYLhwluN30JaT3Q==");
- user->get_info().access_keys["0555b35654ad1656d804"] = k1;
- user->get_info().max_buckets = RGW_DEFAULT_MAX_BUCKETS;
-
- int r = user->store_user(dpp, null_yield, true);
- if (r < 0) {
- ldpp_dout(dpp, 0) << "ERROR: failed inserting testid user in dbstore error r=" << r << dendl;
- }
return store;
}
#endif
if (svc.compare("dbstore") == 0) {
#ifdef WITH_RADOSGW_DBSTORE
store = newDBStore(cct);
+
+ if ((*(rgw::sal::DBStore*)store).initialize(cct, dpp) < 0) {
+ delete store;
+ return nullptr;
+ }
+
#else
store = nullptr;
#endif
int DBUser::read_attrs(const DoutPrefixProvider* dpp, optional_yield y)
{
int ret;
- ret = store->getDB()->get_user(dpp, string("user_id"), "", info, &attrs,
+ ret = store->getDB()->get_user(dpp, string("user_id"), get_id().id, info, &attrs,
&objv_tracker);
return ret;
}
{
int ret = 0;
- ret = store->getDB()->get_user(dpp, string("user_id"), "", info, &attrs,
+ ret = store->getDB()->get_user(dpp, string("user_id"), get_id().id, info, &attrs,
&objv_tracker);
return ret;
int DBStore::get_user_by_swift(const DoutPrefixProvider *dpp, const std::string& user_str, optional_yield y, std::unique_ptr<User>* user)
{
/* Swift keys and subusers are not supported for now */
- return 0;
+ return -ENOTSUP;
}
std::string DBStore::get_cluster_id(const DoutPrefixProvider* dpp, optional_yield y)
user->get_info() = user_info;
}
+void RGWUserAdminOpState::set_user_version_tracker(RGWObjVersionTracker& objv_tracker)
+{
+ user->get_version_tracker() = objv_tracker;
+}
+
const rgw_user& RGWUserAdminOpState::get_user_id()
{
return user->get_id();
op_state.set_user_info(user->get_info());
op_state.set_populated();
op_state.objv = user->get_version_tracker();
+ op_state.set_user_version_tracker(user->get_version_tracker());
old_info = user->get_info();
set_populated();
ret = user->store_user(dpp, y, false, pold_info);
op_state.objv = user->get_version_tracker();
+ op_state.set_user_version_tracker(user->get_version_tracker());
+
if (ret < 0) {
set_err_msg(err_msg, "unable to store user info");
return ret;
RGWUserInfo& user_info = op_state.get_user_info();
user_info.user_id = new_user->get_id();
op_state.objv = user->get_version_tracker();
+ op_state.set_user_version_tracker(user->get_version_tracker());
rename_swift_keys(new_user->get_id(), user_info.swift_keys);
void set_user_info(RGWUserInfo& user_info);
+ void set_user_version_tracker(RGWObjVersionTracker& objv_tracker);
+
void set_max_buckets(int32_t mb) {
max_buckets = mb;
max_buckets_specified = true;
[client]
rgw backend store = dbstore
-Restart vstart cluster or just RGW server
+Start vstart cluster
- [..] RGW=1 ../src/vstart.sh -d
+ [..] RGW=1 ../src/vstart.sh -o rgw_backend_store=dbstore -n -d
-The above configuration brings up RGW server on dbstore and creates testid user to be used for s3 operations.
+The above vstart command brings up RGW server on dbstore and creates few default users (eg., testid) to be used for s3 operations.
+
+`radosgw-admin` can be used to create and remove other users.
By default, dbstore creates .db file *'/var/run/ceph/dbstore-default_ns.db'* to store the data. This can be configured using below options in ceph.conf
RGWObjVersionTracker *pobjv_tracker) {
int ret = 0;
- if (query_str.empty()) {
- // not checking for query_str_val as the query can be to fetch
- // entries with null values
+ if (query_str.empty() || query_str_val.empty()) {
+ ldpp_dout(dpp, 0)<<"In GetUser - Invalid query(" << query_str <<"), query_str_val(" << query_str_val <<")" << dendl;
return -1;
}
goto out;
/* Verify if its a valid user */
- if (params.op.user.uinfo.access_keys.empty()) {
+ if (params.op.user.uinfo.access_keys.empty() ||
+ params.op.user.uinfo.user_id.id.empty()) {
ldpp_dout(dpp, 0)<<"In GetUser - No user with query(" <<query_str.c_str()<<"), user_id(" << uinfo.user_id <<") found" << dendl;
return -ENOENT;
}
obj_version& obj_ver = objv_tracker.read_version;
orig_info.user_id = uinfo.user_id;
- ret = get_user(dpp, string("user_id"), "", orig_info, nullptr, &objv_tracker);
+ ret = get_user(dpp, string("user_id"), uinfo.user_id.id, orig_info, nullptr, &objv_tracker);
if (!ret && obj_ver.ver) {
/* already exists. */
ldpp_dout(dpp, 0)<<"store_user failed with err:(" <<ret<<") " << dendl;
goto out;
}
+ ldpp_dout(dpp, 20)<<"User creation successful - userid:(" <<uinfo.user_id<<") " << dendl;
if (pobjv) {
pobjv->read_version = obj_ver;
RGWObjVersionTracker objv_tracker = {};
orig_info.user_id = uinfo.user_id;
- ret = get_user(dpp, string("user_id"), "", orig_info, nullptr, &objv_tracker);
+ ret = get_user(dpp, string("user_id"), uinfo.user_id.id, orig_info, nullptr, &objv_tracker);
+
+ if (ret) {
+ return ret;
+ }
if (!ret && objv_tracker.read_version.ver) {
/* already exists. */
op.user.uinfo.display_name = (const char*)sqlite3_column_text(stmt, DisplayName); // user_name
op.user.uinfo.user_email = (const char*)sqlite3_column_text(stmt, UserEmail);
- SQL_DECODE_BLOB_PARAM(dpp, stmt, AccessKeys, op.user.uinfo.access_keys, sdb);
SQL_DECODE_BLOB_PARAM(dpp, stmt, SwiftKeys, op.user.uinfo.swift_keys, sdb);
SQL_DECODE_BLOB_PARAM(dpp, stmt, SubUsers, op.user.uinfo.subusers, sdb);
+ SQL_DECODE_BLOB_PARAM(dpp, stmt, AccessKeys, op.user.uinfo.access_keys, sdb);
op.user.uinfo.suspended = sqlite3_column_int(stmt, Suspended);
op.user.uinfo.max_buckets = sqlite3_column_int(stmt, MaxBuckets);
SQL_BIND_INDEX(dpp, stmt, index, p_params.op.user.access_keys_secret, sdb);
SQL_BIND_TEXT(dpp, stmt, index, key.c_str(), sdb);
- SQL_BIND_INDEX(dpp, stmt, index, p_params.op.user.access_keys, sdb);
- SQL_ENCODE_BLOB_PARAM(dpp, stmt, index, params->op.user.uinfo.access_keys, sdb);
}
+ SQL_BIND_INDEX(dpp, stmt, index, p_params.op.user.access_keys, sdb);
+ SQL_ENCODE_BLOB_PARAM(dpp, stmt, index, params->op.user.uinfo.access_keys, sdb);
SQL_BIND_INDEX(dpp, stmt, index, p_params.op.user.swift_keys, sdb);
SQL_ENCODE_BLOB_PARAM(dpp, stmt, index, params->op.user.uinfo.swift_keys, sdb);
uinfo.access_keys["id2"] = k2;
/* non exclusive create..should create new one */
- ret = db->store_user(dpp, uinfo, true, &attrs, &objv_tracker, &old_uinfo);
+ ret = db->store_user(dpp, uinfo, false, &attrs, &objv_tracker, &old_uinfo);
ASSERT_EQ(ret, 0);
ASSERT_EQ(old_uinfo.user_email, "");
ASSERT_EQ(objv_tracker.read_version.ver, 1);
uinfo.user_id.tenant = "tenant";
uinfo.user_id.id = "user_id2";
- ret = db->get_user(dpp, "user_id", "", uinfo, &attrs, &objv);
+ ret = db->get_user(dpp, "user_id", "user_id2", uinfo, &attrs, &objv);
ASSERT_EQ(ret, 0);
ASSERT_EQ(uinfo.user_id.tenant, "tenant");
ASSERT_EQ(uinfo.user_email, "user2_new@dbstore.com");
ret = db->remove_user(dpp, uinfo, &objv);
ASSERT_EQ(ret, -125);
- /* invalid version number...should fail */
objv.read_version.ver = 2;
ret = db->remove_user(dpp, uinfo, &objv);
ASSERT_EQ(ret, 0);