bucketname = sys.argv[1]
notification_name = ""
else:
- print 'Usage: ' + sys.argv[0] + ' <bucket> [notification]'
+ print('Usage: ' + sys.argv[0] + ' <bucket> [notification]')
sys.exit(1)
# endpoint and keys from vstart
# deleting all notification configurations on a bucket (without deleting the bucket itself) are extension to AWS S3 API
if notification_name == "":
- print client.delete_bucket_notification_configuration(Bucket=bucketname)
+ print(client.delete_bucket_notification_configuration(Bucket=bucketname))
else:
- print client.delete_bucket_notification_configuration(Bucket=bucketname,
- Notification=notification_name)
+ print(client.delete_bucket_notification_configuration(Bucket=bucketname,
+ Notification=notification_name))
import sys
if len(sys.argv) != 3:
- print 'Usage: ' + sys.argv[0] + ' <bucket> <notification>'
+ print('Usage: ' + sys.argv[0] + ' <bucket> <notification>')
sys.exit(1)
# bucket name as first argument
# getting a specific notification configuration is an extension to AWS S3 API
-print client.get_bucket_notification_configuration(Bucket=bucketname,
- Notification=notification_name)
+print(client.get_bucket_notification_configuration(Bucket=bucketname,
+ Notification=notification_name))
import sys
if len(sys.argv) != 2:
- print 'Usage: ' + sys.argv[0] + ' <bucket>'
+ print('Usage: ' + sys.argv[0] + ' <bucket>')
sys.exit(1)
# bucket name as first argument
# geting an unordered list of objets is an extension to AWS S3 API
-print client.list_objects(Bucket=bucketname, AllowUnordered=True)
+print(client.list_objects(Bucket=bucketname, AllowUnordered=True))
import sys
if len(sys.argv) != 4:
- print 'Usage: ' + sys.argv[0] + ' <bucket> <topic ARN> <notification Id>'
+ print('Usage: ' + sys.argv[0] + ' <bucket> <topic ARN> <notification Id>')
sys.exit(1)
# bucket name as first argument
}
}}]
-print client.put_bucket_notification_configuration(Bucket=bucketname,
- NotificationConfiguration={'TopicConfigurations': topic_conf_list})
+print(client.put_bucket_notification_configuration(Bucket=bucketname,
+ NotificationConfiguration={'TopicConfigurations': topic_conf_list}))
"UsageStatsSummary": {
"type": "structure",
"members": {
- "TotalBytes":{"shape":"TotalBytes"},
+ "QuotaMaxBytes":{"shape":"QuotaMaxBytes"},
+ "QuotaMaxBuckets":{"shape": "QuotaMaxBuckets"},
+ "QuotaMaxObjCount":{"shape":"QuotaMaxObjCount"},
+ "QuotaMaxBytesPerBucket":{"shape":"QuotaMaxBytesPerBucket"},
+ "QuotaMaxObjCountPerBucket":{"shape":"QuotaMaxObjCountPerBucket"},
+ "TotalBytes":{"shape":"TotalBytes"},
"TotalBytesRounded":{"shape":"TotalBytesRounded"},
"TotalEntries":{"shape":"TotalEntries"}
}
},
- "TotalBytesRounded":{"type":"integer"},
+ "QuotaMaxBytes":{"type":"integer"},
+ "QuotaMaxBuckets":{"type": "integer"},
+ "QuotaMaxObjCount":{"type":"integer"},
+ "QuotaMaxBytesPerBucket":{"type":"integer"},
+ "QuotaMaxObjCountPerBucket":{"type":"integer"},
+ "TotalBytesRounded":{"type":"integer"},
"TotalBytes":{"type":"integer"},
"TotalEntries":{"type":"integer"}
},
topic_name = sys.argv[1]
region_name = ""
else:
- print 'Usage: ' + sys.argv[0] + ' <topic name> [region name]'
+ print('Usage: ' + sys.argv[0] + ' <topic name> [region name]')
sys.exit(1)
# endpoint and keys from vstart
endpoint_args = 'push-endpoint=amqp://127.0.0.1:5672&amqp-exchange=ex1&amqp-ack-level=broker'
attributes = {nvp[0] : nvp[1] for nvp in urlparse.parse_qsl(endpoint_args, keep_blank_values=True)}
-print client.create_topic(Name=topic_name, Attributes=attributes)
+print(client.create_topic(Name=topic_name, Attributes=attributes))
bool is_truncated = true;
RGWUsageIter usage_iter;
-
+
while (is_truncated) {
op_ret = store->getRados()->read_usage(s->user->get_id(), s->bucket_name, start_epoch, end_epoch, max_entries,
&is_truncated, usage_iter, usage);
-
if (op_ret == -ENOENT) {
op_ret = 0;
is_truncated = false;
formatter->open_object_section("Stats");
}
+ // send info about quota config
+ auto user_info = s->user->get_info();
+ encode_json("QuotaMaxBytes", user_info.user_quota.max_size, formatter);
+ encode_json("QuotaMaxBuckets", user_info.max_buckets, formatter);
+ encode_json("QuotaMaxObjCount", user_info.user_quota.max_objects, formatter);
+ encode_json("QuotaMaxBytesPerBucket", user_info.bucket_quota.max_objects, formatter);
+ encode_json("QuotaMaxObjCountPerBucket", user_info.bucket_quota.max_size, formatter);
+ // send info about user's capacity utilization
encode_json("TotalBytes", stats.size, formatter);
encode_json("TotalBytesRounded", stats.size_rounded, formatter);
encode_json("TotalEntries", stats.num_objects, formatter);
{
dump_header(s, "X-RGW-Object-Count", static_cast<long long>(bucket->get_count()));
dump_header(s, "X-RGW-Bytes-Used", static_cast<long long>(bucket->get_size()));
+ // only bucket's owner is allowed to get the quota settings of the account
+ if (bucket->is_owner(s->user)) {
+ auto user_info = s->user->get_info();
+ dump_header(s, "X-RGW-Quota-User-Size", static_cast<long long>(user_info.user_quota.max_size));
+ dump_header(s, "X-RGW-Quota-User-Objects", static_cast<long long>(user_info.user_quota.max_objects));
+ dump_header(s, "X-RGW-Quota-Max-Buckets", static_cast<long long>(user_info.max_buckets));
+ dump_header(s, "X-RGW-Quota-Bucket-Size", static_cast<long long>(user_info.bucket_quota.max_size));
+ dump_header(s, "X-RGW-Quota-Bucket-Objects", static_cast<long long>(user_info.bucket_quota.max_objects));
+ }
}
void RGWStatBucket_ObjStore_S3::send_response()
global_stats,
policies_stats,
attrs,
- user_quota,
+ s->user->get_info().user_quota,
static_cast<RGWAccessControlPolicy_SWIFTAcct&>(*s->user_acl));
dump_errno(s);
dump_header(s, "Accept-Ranges", "bytes");
global_stats,
policies_stats,
attrs,
- user_quota,
+ s->user->get_info().user_quota,
static_cast<RGWAccessControlPolicy_SWIFTAcct&>(*s->user_acl));
dump_errno(s);
end_header(s, nullptr, nullptr, s->formatter->get_len(), true);
global_stats,
policies_stats,
attrs,
- user_quota,
+ s->user->get_info().user_quota,
static_cast<RGWAccessControlPolicy_SWIFTAcct&>(*s->user_acl));
}