问题描述
我有一个包含数百万个对象的 ceph/radosgw 存储桶,我需要将存储桶的所有权更改为另一个用户。
通常,这是通过将存储桶link
传输给新用户,然后chown
传输其中的所有文件来完成的,如下所示:
radosgw-admin bucket unlink --uid=user1 --bucket=bigbucket
radosgw-admin bucket link --uid=user2 --bucket=bigbucket
radosgw-admin bucket chown --uid=user2 --bucket=bigbucket
不幸的是,chown
operation has to loop over every single object in the bucket 是为了更新元数据。这会导致停机时间延长(有时显然是每百万个对象 1 小时),旧用户和新用户都无法访问存储桶的全部内容。
有什么方法可以在不需要停机的情况下更改存储桶所有权?一些想法:
- 两个用户是否可以同时拥有一个存储桶或特定对象?
- 我们能否创建新用户,然后更改他们的
uid
或其他一些元数据,授予他们访问旧用户的存储桶的权限? - 问题可以在客户端解决,还是可以通过代理解决?
解决方法
您可以向存储桶添加存储桶策略以访问两个用户,直到通过 function squareDigits(num){
let digits = (""+num).split("");
let intDigits = [];
for (x of digits) {
intDigits.push(parseInt(x));
}
for (let i = 0; i < intDigits.length; i++) {
const x = intDigits[i];
console.log('intDigits: ' + intDigits);
console.log(` index of ${x} = ${i}`);
intDigits.splice(i,1,x * x);
}
return parseInt(intDigits.join(""));
}
console.log('RESULT: ' + squareDigits(24));
命令完成迁移:
chown