mirror of
https://github.com/ceph/ceph
synced 2025-02-23 11:07:35 +00:00
Merge PR #28944 into master
* refs/pull/28944/head: qa/workunits/rados/test_cache_pool.sh: s/forward/proxy/ qa/workunits/cephtool/test.sh: cache forward mode is no longer allowed mon/OSDMonitor: forward -> proxy, readforward -> readproxy on octopus mon/OSDMonitor: disallow FORWARD and READFORWARD cache modes osd: do proxy when in forward/readforward cache modes Reviewed-by: Neha Ojha <nojha@redhat.com>
This commit is contained in:
commit
ec62f78630
@ -360,12 +360,15 @@ function test_tiering_1()
|
||||
expect_false ceph osd tier add slow2 cache
|
||||
# test some state transitions
|
||||
ceph osd tier cache-mode cache writeback
|
||||
# forward is removed/deprecated
|
||||
expect_false ceph osd tier cache-mode cache forward
|
||||
ceph osd tier cache-mode cache forward --yes-i-really-mean-it
|
||||
expect_false ceph osd tier cache-mode cache forward --yes-i-really-mean-it
|
||||
expect_false ceph osd tier cache-mode cache readonly
|
||||
ceph osd tier cache-mode cache proxy
|
||||
ceph osd tier cache-mode cache none
|
||||
ceph osd tier cache-mode cache readonly --yes-i-really-mean-it
|
||||
expect_false ceph osd tier cache-mode cache forward
|
||||
ceph osd tier cache-mode cache forward --yes-i-really-mean-it
|
||||
expect_false ceph osd tier cache-mode cache forward --yes-i-really-mean-it
|
||||
ceph osd tier cache-mode cache none
|
||||
ceph osd tier cache-mode cache writeback
|
||||
ceph osd tier cache-mode cache proxy
|
||||
|
@ -137,7 +137,7 @@ rados -p base put testclone /etc/hosts
|
||||
rados -p cache cache-flush-evict-all
|
||||
rados -p cache ls - | wc -l | grep 0
|
||||
|
||||
ceph osd tier cache-mode cache forward --yes-i-really-mean-it
|
||||
ceph osd tier cache-mode cache proxy --yes-i-really-mean-it
|
||||
rados -p base -s snap get testclone testclone.txt
|
||||
diff -q testclone.txt /etc/passwd
|
||||
rados -p base get testclone testclone.txt
|
||||
|
@ -1486,6 +1486,27 @@ void OSDMonitor::encode_pending(MonitorDBStore::TransactionRef t)
|
||||
tmp.require_osd_release >= ceph_release_t::octopus) {
|
||||
dout(10) << __func__ << " first octopus+ epoch" << dendl;
|
||||
|
||||
// adjust obsoleted cache modes
|
||||
for (auto& [poolid, pi] : tmp.pools) {
|
||||
if (pi.cache_mode == pg_pool_t::CACHEMODE_FORWARD) {
|
||||
if (pending_inc.new_pools.count(poolid) == 0) {
|
||||
pending_inc.new_pools[poolid] = pi;
|
||||
}
|
||||
dout(10) << __func__ << " switching pool " << poolid
|
||||
<< " cachemode from forward -> proxy" << dendl;
|
||||
pending_inc.new_pools[poolid].cache_mode = pg_pool_t::CACHEMODE_PROXY;
|
||||
}
|
||||
if (pi.cache_mode == pg_pool_t::CACHEMODE_READFORWARD) {
|
||||
if (pending_inc.new_pools.count(poolid) == 0) {
|
||||
pending_inc.new_pools[poolid] = pi;
|
||||
}
|
||||
dout(10) << __func__ << " switching pool " << poolid
|
||||
<< " cachemode from readforward -> readproxy" << dendl;
|
||||
pending_inc.new_pools[poolid].cache_mode =
|
||||
pg_pool_t::CACHEMODE_READPROXY;
|
||||
}
|
||||
}
|
||||
|
||||
// clear removed_snaps for every pool
|
||||
for (auto& [poolid, pi] : tmp.pools) {
|
||||
if (pi.removed_snaps.empty()) {
|
||||
@ -12386,6 +12407,12 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
|
||||
bool sure = false;
|
||||
cmd_getval(cct, cmdmap, "yes_i_really_mean_it", sure);
|
||||
|
||||
if (mode == pg_pool_t::CACHEMODE_FORWARD ||
|
||||
mode == pg_pool_t::CACHEMODE_READFORWARD) {
|
||||
ss << "'" << modestr << "' is no longer a supported cache mode";
|
||||
err = -EPERM;
|
||||
goto reply;
|
||||
}
|
||||
if ((mode != pg_pool_t::CACHEMODE_WRITEBACK &&
|
||||
mode != pg_pool_t::CACHEMODE_NONE &&
|
||||
mode != pg_pool_t::CACHEMODE_PROXY &&
|
||||
@ -12410,10 +12437,10 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
|
||||
/* Mode description:
|
||||
*
|
||||
* none: No cache-mode defined
|
||||
* forward: Forward all reads and writes to base pool
|
||||
* forward: Forward all reads and writes to base pool [removed]
|
||||
* writeback: Cache writes, promote reads from base pool
|
||||
* readonly: Forward writes to base pool
|
||||
* readforward: Writes are in writeback mode, Reads are in forward mode
|
||||
* readforward: Writes are in writeback mode, Reads are in forward mode [removed]
|
||||
* proxy: Proxy all reads and writes to base pool
|
||||
* readproxy: Writes are in writeback mode, Reads are in proxy mode
|
||||
*
|
||||
@ -12421,10 +12448,10 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
|
||||
*
|
||||
* none -> any
|
||||
* forward -> proxy || readforward || readproxy || writeback || any IF num_objects_dirty == 0
|
||||
* proxy -> forward || readforward || readproxy || writeback || any IF num_objects_dirty == 0
|
||||
* proxy -> readproxy || writeback || any IF num_objects_dirty == 0
|
||||
* readforward -> forward || proxy || readproxy || writeback || any IF num_objects_dirty == 0
|
||||
* readproxy -> forward || proxy || readforward || writeback || any IF num_objects_dirty == 0
|
||||
* writeback -> readforward || readproxy || forward || proxy
|
||||
* readproxy -> proxy || writeback || any IF num_objects_dirty == 0
|
||||
* writeback -> readproxy || proxy
|
||||
* readonly -> any
|
||||
*/
|
||||
|
||||
@ -12433,19 +12460,13 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
|
||||
// whatever mode is on the pending state.
|
||||
|
||||
if (p->cache_mode == pg_pool_t::CACHEMODE_WRITEBACK &&
|
||||
(mode != pg_pool_t::CACHEMODE_FORWARD &&
|
||||
mode != pg_pool_t::CACHEMODE_PROXY &&
|
||||
mode != pg_pool_t::CACHEMODE_READFORWARD &&
|
||||
(mode != pg_pool_t::CACHEMODE_PROXY &&
|
||||
mode != pg_pool_t::CACHEMODE_READPROXY)) {
|
||||
ss << "unable to set cache-mode '" << pg_pool_t::get_cache_mode_name(mode)
|
||||
<< "' on a '" << pg_pool_t::get_cache_mode_name(p->cache_mode)
|
||||
<< "' pool; only '"
|
||||
<< pg_pool_t::get_cache_mode_name(pg_pool_t::CACHEMODE_FORWARD)
|
||||
<< "','"
|
||||
<< pg_pool_t::get_cache_mode_name(pg_pool_t::CACHEMODE_PROXY)
|
||||
<< "','"
|
||||
<< pg_pool_t::get_cache_mode_name(pg_pool_t::CACHEMODE_READFORWARD)
|
||||
<< "','"
|
||||
<< pg_pool_t::get_cache_mode_name(pg_pool_t::CACHEMODE_READPROXY)
|
||||
<< "' allowed.";
|
||||
err = -EINVAL;
|
||||
@ -12453,25 +12474,19 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
|
||||
}
|
||||
if ((p->cache_mode == pg_pool_t::CACHEMODE_READFORWARD &&
|
||||
(mode != pg_pool_t::CACHEMODE_WRITEBACK &&
|
||||
mode != pg_pool_t::CACHEMODE_FORWARD &&
|
||||
mode != pg_pool_t::CACHEMODE_PROXY &&
|
||||
mode != pg_pool_t::CACHEMODE_READPROXY)) ||
|
||||
|
||||
(p->cache_mode == pg_pool_t::CACHEMODE_READPROXY &&
|
||||
(mode != pg_pool_t::CACHEMODE_WRITEBACK &&
|
||||
mode != pg_pool_t::CACHEMODE_FORWARD &&
|
||||
mode != pg_pool_t::CACHEMODE_READFORWARD &&
|
||||
mode != pg_pool_t::CACHEMODE_PROXY)) ||
|
||||
|
||||
(p->cache_mode == pg_pool_t::CACHEMODE_PROXY &&
|
||||
(mode != pg_pool_t::CACHEMODE_WRITEBACK &&
|
||||
mode != pg_pool_t::CACHEMODE_FORWARD &&
|
||||
mode != pg_pool_t::CACHEMODE_READFORWARD &&
|
||||
mode != pg_pool_t::CACHEMODE_READPROXY)) ||
|
||||
|
||||
(p->cache_mode == pg_pool_t::CACHEMODE_FORWARD &&
|
||||
(mode != pg_pool_t::CACHEMODE_WRITEBACK &&
|
||||
mode != pg_pool_t::CACHEMODE_READFORWARD &&
|
||||
mode != pg_pool_t::CACHEMODE_PROXY &&
|
||||
mode != pg_pool_t::CACHEMODE_READPROXY))) {
|
||||
|
||||
|
@ -2730,11 +2730,6 @@ PrimaryLogPG::cache_result_t PrimaryLogPG::maybe_handle_cache_detail(
|
||||
ceph_abort_msg("unreachable");
|
||||
return cache_result_t::NOOP;
|
||||
|
||||
case pg_pool_t::CACHEMODE_FORWARD:
|
||||
// FIXME: this mode allows requests to be reordered.
|
||||
do_cache_redirect(op);
|
||||
return cache_result_t::HANDLED_REDIRECT;
|
||||
|
||||
case pg_pool_t::CACHEMODE_READONLY:
|
||||
// TODO: clean this case up
|
||||
if (!obc.get() && r == -ENOENT) {
|
||||
@ -2749,23 +2744,8 @@ PrimaryLogPG::cache_result_t PrimaryLogPG::maybe_handle_cache_detail(
|
||||
// crap, there was a failure of some kind
|
||||
return cache_result_t::NOOP;
|
||||
|
||||
case pg_pool_t::CACHEMODE_READFORWARD:
|
||||
// Do writeback to the cache tier for writes
|
||||
if (op->may_write() || write_ordered || must_promote) {
|
||||
if (agent_state &&
|
||||
agent_state->evict_mode == TierAgentState::EVICT_MODE_FULL) {
|
||||
dout(20) << __func__ << " cache pool full, waiting" << dendl;
|
||||
block_write_on_full_cache(missing_oid, op);
|
||||
return cache_result_t::BLOCKED_FULL;
|
||||
}
|
||||
promote_object(obc, missing_oid, oloc, op, promote_obc);
|
||||
return cache_result_t::BLOCKED_PROMOTE;
|
||||
}
|
||||
|
||||
// If it is a read, we can read, we need to forward it
|
||||
do_cache_redirect(op);
|
||||
return cache_result_t::HANDLED_REDIRECT;
|
||||
|
||||
case pg_pool_t::CACHEMODE_FORWARD:
|
||||
// this mode is deprecated; proxy instead
|
||||
case pg_pool_t::CACHEMODE_PROXY:
|
||||
if (!must_promote) {
|
||||
if (op->may_write() || op->may_cache() || write_ordered) {
|
||||
@ -2786,6 +2766,8 @@ PrimaryLogPG::cache_result_t PrimaryLogPG::maybe_handle_cache_detail(
|
||||
promote_object(obc, missing_oid, oloc, op, promote_obc);
|
||||
return cache_result_t::BLOCKED_PROMOTE;
|
||||
|
||||
case pg_pool_t::CACHEMODE_READFORWARD:
|
||||
// this mode is deprecated; proxy instead
|
||||
case pg_pool_t::CACHEMODE_READPROXY:
|
||||
// Do writeback to the cache tier for writes
|
||||
if (op->may_write() || write_ordered || must_promote) {
|
||||
|
Loading…
Reference in New Issue
Block a user