return seastar::make_ready_future<OnodeRef>();
}
- using get_or_create_onode_ertr = base_ertr;
+ using get_or_create_onode_ertr = base_ertr::extend<
+ crimson::ct_error::value_too_large>;
using get_or_create_onode_ret = get_or_create_onode_ertr::future<
OnodeRef>;
virtual get_or_create_onode_ret get_or_create_onode(
return seastar::make_ready_future<OnodeRef>();
}
- using get_or_create_onodes_ertr = base_ertr;
+ using get_or_create_onodes_ertr = base_ertr::extend<
+ crimson::ct_error::value_too_large>;
using get_or_create_onodes_ret = get_or_create_onodes_ertr::future<
std::vector<OnodeRef>>;
virtual get_or_create_onodes_ret get_or_create_onodes(
// vim: ts=8 sw=2 smarttab
#include "crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.h"
+#include "crimson/os/seastore/onode_manager/staged-fltree/stages/key_layout.h"
namespace {
[[maybe_unused]] seastar::logger& logger() {
FLTreeOnodeManager::get_or_create_onode(
Transaction &trans,
const ghobject_t &hoid) {
+ if (hoid.hobj.oid.name.length() + hoid.hobj.nspace.length()
+ > key_view_t::MAX_NS_OID_LENGTH) {
+ return crimson::ct_error::value_too_large::make();
+ }
return tree.insert(
trans, hoid,
OnodeTree::tree_value_config_t{sizeof(onode_layout_t)}
#include <ostream>
#include "common/hobject.h"
+#include "crimson/os/seastore/onode.h"
#include "crimson/os/seastore/onode_manager/staged-fltree/fwd.h"
namespace crimson::os::seastore::onode {
*/
class key_view_t {
public:
+ //FIXME: the length of ns and oid should be defined by osd_max_object_name_len
+ // and object_max_object_namespace_len in the future
+ static constexpr int MAX_NS_OID_LENGTH =
+ (4096 - sizeof(onode_layout_t) * 2) / 4
+ - sizeof(shard_pool_t) - sizeof(crush_t) - sizeof(snap_gen_t)
+ - 8; // size of length field of oid and ns
+
/**
* common interfaces as a full_key_t
*/