friend class ECReadPred;
ECLegacy::ECBackendL legacy;
- ECLegacy::ECBackendL optimized;
+ ECBackend optimized;
bool is_optimized_actual;
public:
PGBackend(cct, pg, store, coll, ch),
legacy(pg, cct, ec_impl, stripe_width, this),
optimized(pg, cct, ec_impl, stripe_width, this),
- is_optimized_actual(false) {}
+ is_optimized_actual(get_parent()->get_pool().allows_ecoptimizations()) {}
bool is_optimized() const
{
- // FIXME: Interface not yet implemented.
- //ceph_assert(is_optimized_actual == get_parent()->get_pool().allows_ecoptimizations());
+ // FIXME: Once we trust this, we can remove this assert, as it adds
+ // function call overhead.
+ ceph_assert(is_optimized_actual == get_parent()->get_pool().allows_ecoptimizations());
return is_optimized_actual;
}
private:
const ECSwitch *switcher;
std::unique_ptr<ECLegacy::ECBackendL::ECRecPred> legacy;
- std::unique_ptr<ECLegacy::ECBackendL::ECRecPred> optimized;
+ std::unique_ptr<ECBackend::ECRecPred> optimized;
};
class ECReadPred : public IsPGReadablePredicate
private:
const ECSwitch *switcher;
std::unique_ptr<ECLegacy::ECBackendL::ECReadPred> legacy;
- std::unique_ptr<ECLegacy::ECBackendL::ECReadPred> optimized;
+ std::unique_ptr<ECBackend::ECReadPred> optimized;
};
RecoveryHandle *open_recovery_op() override
else {
legacy.on_change();
}
- //FIXME: Switch to new EC here.
+
+ if (!is_optimized_actual)
+ is_optimized_actual = get_parent()->get_pool().allows_ecoptimizations();
+ else
+ ceph_assert(get_parent()->get_pool().allows_ecoptimizations());
}
void clear_recovery_state() override
object_size_to_shard_size(const uint64_t size, int shard) const override
{
if (is_optimized()) {
- return optimized.object_size_to_shard_size(size);
+ return optimized.object_size_to_shard_size(size, shard);
}
return legacy.object_size_to_shard_size(size);
// All shards are the same size.