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:
Sage Weil 2019-07-11 16:28:34 -05:00
commit ec62f78630
4 changed files with 43 additions and 43 deletions

View File

@ -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

View File

@ -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

View File

@ -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))) {

View File

@ -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) {