Bug #71365
openlogging: bucket logging does not work in EC pools
0%
Description
when log bucket is on EC pool, bucket logging will fail with: -EOPNOTSUPP
several options to address the issue:
(1) documentation: we do not support EC pools for log bucket
(2) in case of EC pool. use omap attributes for the log records, and flush them into an object when running out of attributes
* add load on omap
* we can keep them in the conf object of the bucket and reuse the entries so we dont need to delete the attributes
(3) keep temp object in a replica pool even if the log bucket pool is EC, and copy when flushing
Updated by Yuval Lifshitz 12 months ago
another documentation based solution is to allow appending on the pool:
ceph osd pool set ec_pool allow_ec_overwrites true
Updated by Yuval Lifshitz 11 months ago ยท Edited
- Assignee deleted (
Yuval Lifshitz)
- documentation: suggest using a replica pool for loggign buckets
(we should not suggest the above osd pool command, as it will have significant perf impact)
- if the bucke't pool is an EC pool, we should use a namespace (e.g. "bucket-logging") inside "data_extra_pool" instead of ther bucket's pool.
we should also add an optional pg conf for a separate "bucket logging pool" in case that the "data_extra_pool" has charectaristics which are not suiteable for long term data
Updated by Casey Bodley 11 months ago
the data_extra_pool is defined in struct RGWZonePlacementInfo here: https://github.com/ceph/ceph/blob/ef153371/src/rgw/rgw_zone_types.h#L218-L220
its default value is set by init_zone_pool_names() here: https://github.com/ceph/ceph/blob/ef153371/src/rgw/rgw_zone.cc#L685
if the bucke't pool is an EC pool, we should use a namespace (e.g. "bucket-logging") inside "data_extra_pool" instead of ther bucket's pool.
we should also add an optional pg conf for a separate "bucket logging pool" in case that the "data_extra_pool" has charectaristics which are not suiteable for long term data
this could be a new bucket_logging_pool variable in struct RGWZonePlacementInfo that defaults to the same value of data_extra_pool but with :logging appended. RGWZonePlacementInfo::decode() would need to handle the case where we're decoding an earlier version without bucket_logging_pool, and should initialize it to that same default
Updated by Yuval Lifshitz 10 months ago
- create a dedicated bucket logging pool (replicated) that the "tail" objects of the log bucket will use. note that because of the way we are flushing the log object to the bucket, we create an empty "head" object (that could be in whatever pool the bucket was set on).
- similar to (1), but do that only if the log bucket is on EC pool
- use the dedicated pool only temporarily, and copy the log object into the log bucket when flushed
- same as (3), but do that only if the log bucket is on EC pool
the cons in (1) and (2) is that we don't honor the users request as for which pool should hold the logs - they might want (for efficiency) to actually use an EC pool in this case
the cons in (3) and (4) is that we pay an extra cost of copy when flushing. this is not too bad from overall perf perspective, since this is infrequent. the main issue here would be if flushing happens explicitly due to time limit, and this add extra latency to the op triggering it. there are some ways around it, by making the flushing async, but this would complicate the implementation
Updated by Nithya Balachandran 9 months ago
- Status changed from New to In Progress
Updated by Yuval Lifshitz 5 months ago
- Status changed from In Progress to Pending Backport
- Pull request ID set to 65900
Updated by Upkeep Bot 5 months ago
- Copied to Backport #74055: tentacle: logging: bucket logging does not work in EC pools added
Updated by Upkeep Bot 5 months ago
- Merge Commit set to 822f175f606c694e72519d9b6182e01be9b1d238
- Fixed In set to v20.3.0-4418-g822f175f60
- Upkeep Timestamp set to 2025-12-03T00:45:57+00:00