Skip to content

Commit 3394d1b

Browse files
authored
Merge pull request ceph#56275 from smanjara/wip-set-attr-mtime
rgw/multisite: allow PutACL replication.
2 parents 2536d43 + d18b722 commit 3394d1b

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

src/rgw/driver/rados/rgw_sal_rados.cc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2289,12 +2289,15 @@ int RadosObject::read_attrs(const DoutPrefixProvider* dpp, RGWRados::Object::Rea
22892289
int RadosObject::set_obj_attrs(const DoutPrefixProvider* dpp, Attrs* setattrs, Attrs* delattrs, optional_yield y)
22902290
{
22912291
Attrs empty;
2292+
// make a tiny adjustment to the existing mtime so that fetch_remote_obj()
2293+
// won't return ERR_NOT_MODIFIED when syncing the modified object
2294+
const auto mtime = state.mtime + std::chrono::nanoseconds(1);
22922295
return store->getRados()->set_attrs(dpp, rados_ctx,
22932296
bucket->get_info(),
22942297
get_obj(),
22952298
setattrs ? *setattrs : empty,
22962299
delattrs ? delattrs : nullptr,
2297-
y);
2300+
y, mtime);
22982301
}
22992302

23002303
int RadosObject::get_obj_attrs(optional_yield y, const DoutPrefixProvider* dpp, rgw_obj* target_obj)

src/test/rgw/rgw_multi/tests.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1921,6 +1921,36 @@ def test_role_delete_sync():
19211921
zone.iam_conn.get_role, RoleName=role_name)
19221922
log.info(f'success, zone: {zone.name} does not have role: {role_name}')
19231923

1924+
def test_object_acl():
1925+
zonegroup = realm.master_zonegroup()
1926+
zonegroup_conns = ZonegroupConns(zonegroup)
1927+
primary = zonegroup_conns.rw_zones[0]
1928+
secondary = zonegroup_conns.rw_zones[1]
1929+
1930+
bucket = primary.create_bucket(gen_bucket_name())
1931+
log.debug('created bucket=%s', bucket.name)
1932+
1933+
# upload a dummy object and wait for sync.
1934+
k = new_key(primary, bucket, 'dummy')
1935+
k.set_contents_from_string('foo')
1936+
zonegroup_meta_checkpoint(zonegroup)
1937+
zonegroup_data_checkpoint(zonegroup_conns)
1938+
1939+
#check object on secondary before setacl
1940+
bucket2 = get_bucket(secondary, bucket.name)
1941+
before_set_acl = bucket2.get_acl(k)
1942+
assert(len(before_set_acl.acl.grants) == 1)
1943+
1944+
#set object acl on primary and wait for sync.
1945+
bucket.set_canned_acl('public-read', key_name=k)
1946+
log.debug('set acl=%s', bucket.name)
1947+
zonegroup_data_checkpoint(zonegroup_conns)
1948+
zonegroup_bucket_checkpoint(zonegroup_conns, bucket.name)
1949+
1950+
#check object secondary after setacl
1951+
bucket2 = get_bucket(secondary, bucket.name)
1952+
after_set_acl = bucket2.get_acl(k)
1953+
assert(len(after_set_acl.acl.grants) == 2) # read grant added on AllUsers
19241954

19251955
@attr('data_sync_init')
19261956
def test_bucket_full_sync_after_data_sync_init():

0 commit comments

Comments
 (0)