From 305e02db7c45d9120df1713dc69f02d8eedeaf12 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Sat, 11 May 2019 14:15:14 -0700 Subject: [PATCH] ircd::m::dbs: Split into headers by column. --- include/ircd/m/dbs/dbs.h | 39 ++++--- include/ircd/m/dbs/desc.h | 160 ----------------------------- include/ircd/m/dbs/event_column.h | 77 ++++++++++++++ include/ircd/m/dbs/event_horizon.h | 37 +++++++ include/ircd/m/dbs/event_idx.h | 27 +++++ include/ircd/m/dbs/event_json.h | 28 +++++ include/ircd/m/dbs/event_sender.h | 37 +++++++ include/ircd/m/dbs/event_type.h | 37 +++++++ include/ircd/m/dbs/room_events.h | 39 +++++++ include/ircd/m/dbs/room_head.h | 35 +++++++ include/ircd/m/dbs/room_joined.h | 38 +++++++ include/ircd/m/dbs/room_state.h | 38 +++++++ include/ircd/m/dbs/state_node.h | 37 +++++++ include/ircd/m/dbs/util.h | 57 ---------- 14 files changed, 449 insertions(+), 237 deletions(-) delete mode 100644 include/ircd/m/dbs/desc.h create mode 100644 include/ircd/m/dbs/event_column.h create mode 100644 include/ircd/m/dbs/event_horizon.h create mode 100644 include/ircd/m/dbs/event_idx.h create mode 100644 include/ircd/m/dbs/event_json.h create mode 100644 include/ircd/m/dbs/event_sender.h create mode 100644 include/ircd/m/dbs/event_type.h create mode 100644 include/ircd/m/dbs/room_events.h create mode 100644 include/ircd/m/dbs/room_head.h create mode 100644 include/ircd/m/dbs/room_joined.h create mode 100644 include/ircd/m/dbs/room_state.h create mode 100644 include/ircd/m/dbs/state_node.h delete mode 100644 include/ircd/m/dbs/util.h diff --git a/include/ircd/m/dbs/dbs.h b/include/ircd/m/dbs/dbs.h index 4e21a8661..357f9574c 100644 --- a/include/ircd/m/dbs/dbs.h +++ b/include/ircd/m/dbs/dbs.h @@ -28,33 +28,32 @@ namespace ircd::m::dbs // Database instance extern std::shared_ptr events; - // Event property columns - constexpr const auto event_columns{event::size()}; - extern std::array event_column; - - // Event metadata columns - extern db::column event_idx; // event_id => event_idx - extern db::column event_json; // event_idx => full json - extern db::index event_refs; // event_idx | ref_type, event_idx - extern db::index event_horizon; // event_id | event_idx - extern db::index event_type; // type | event_idx - extern db::index event_sender; // host | local, event_idx - extern db::index room_head; // room_id | event_id => event_idx - extern db::index room_events; // room_id | depth, event_idx => node_id - extern db::index room_joined; // room_id | origin, member => event_idx - extern db::index room_state; // room_id | type, state_key => event_idx - extern db::column state_node; // node_id => state::node - // [SET (txn)] Basic write suite string_view write(db::txn &, const event &, const write_opts &); void blacklist(db::txn &, const event::id &, const write_opts &); } -#include "event_refs.h" +/// Database description +/// +namespace ircd::m::dbs::desc +{ + extern const db::description events; +} + #include "appendix.h" #include "write_opts.h" -#include "util.h" -#include "desc.h" +#include "event_column.h" +#include "event_idx.h" +#include "event_json.h" +#include "event_refs.h" +#include "event_horizon.h" +#include "event_type.h" +#include "event_sender.h" +#include "room_head.h" +#include "room_events.h" +#include "room_joined.h" +#include "room_state.h" +#include "state_node.h" struct ircd::m::dbs::init { diff --git a/include/ircd/m/dbs/desc.h b/include/ircd/m/dbs/desc.h deleted file mode 100644 index c5c7caea6..000000000 --- a/include/ircd/m/dbs/desc.h +++ /dev/null @@ -1,160 +0,0 @@ -// Matrix Construct -// -// Copyright (C) Matrix Construct Developers, Authors & Contributors -// Copyright (C) 2016-2019 Jason Volk -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice is present in all copies. The -// full license for this software is available in the LICENSE file. - -#pragma once -#define HAVE_IRCD_M_DBS_DESC_H - -/// Database Schema Descriptors -/// -namespace ircd::m::dbs::desc -{ - // Full description - extern const db::description events; - - // - // Direct columns - // - - extern conf::item events___event__bloom__bits; - - extern conf::item events__content__block__size; - extern conf::item events__content__meta_block__size; - extern conf::item events__content__cache__size; - extern conf::item events__content__cache_comp__size; - extern const db::descriptor events_content; - - extern conf::item events__depth__block__size; - extern conf::item events__depth__meta_block__size; - extern conf::item events__depth__cache__size; - extern conf::item events__depth__cache_comp__size; - extern const db::descriptor events_depth; - - extern conf::item events__event_id__block__size; - extern conf::item events__event_id__meta_block__size; - extern conf::item events__event_id__cache__size; - extern conf::item events__event_id__cache_comp__size; - extern const db::descriptor events_event_id; - - extern conf::item events__origin_server_ts__block__size; - extern conf::item events__origin_server_ts__meta_block__size; - extern conf::item events__origin_server_ts__cache__size; - extern conf::item events__origin_server_ts__cache_comp__size; - extern const db::descriptor events_origin_server_ts; - - extern conf::item events__room_id__block__size; - extern conf::item events__room_id__meta_block__size; - extern conf::item events__room_id__cache__size; - extern conf::item events__room_id__cache_comp__size; - extern const db::descriptor events_room_id; - - extern conf::item events__sender__block__size; - extern conf::item events__sender__meta_block__size; - extern conf::item events__sender__cache__size; - extern conf::item events__sender__cache_comp__size; - extern const db::descriptor events_sender; - - extern conf::item events__state_key__block__size; - extern conf::item events__state_key__meta_block__size; - extern conf::item events__state_key__cache__size; - extern conf::item events__state_key__cache_comp__size; - extern const db::descriptor events_state_key; - - extern conf::item events__type__block__size; - extern conf::item events__type__meta_block__size; - extern conf::item events__type__cache__size; - extern conf::item events__type__cache_comp__size; - extern const db::descriptor events_type; - - // - // Metadata columns - // - - // events index - extern conf::item events__event_idx__block__size; - extern conf::item events__event_idx__meta_block__size; - extern conf::item events__event_idx__cache__size; - extern conf::item events__event_idx__cache_comp__size; - extern conf::item events__event_idx__bloom__bits; - extern const db::descriptor events__event_idx; - - // events cache - extern conf::item events__event_json__block__size; - extern conf::item events__event_json__meta_block__size; - extern conf::item events__event_json__cache__size; - extern conf::item events__event_json__cache_comp__size; - extern conf::item events__event_json__bloom__bits; - extern const db::descriptor events__event_json; - - // event horizon - extern conf::item events__event_horizon__block__size; - extern conf::item events__event_horizon__meta_block__size; - extern conf::item events__event_horizon__cache__size; - extern conf::item events__event_horizon__cache_comp__size; - extern const db::prefix_transform events__event_horizon__pfx; - extern const db::descriptor events__event_horizon; - - // events sender - extern conf::item events__event_sender__block__size; - extern conf::item events__event_sender__meta_block__size; - extern conf::item events__event_sender__cache__size; - extern conf::item events__event_sender__cache_comp__size; - extern const db::prefix_transform events__event_sender__pfx; - extern const db::descriptor events__event_sender; - - // events type - extern conf::item events__event_type__block__size; - extern conf::item events__event_type__meta_block__size; - extern conf::item events__event_type__cache__size; - extern conf::item events__event_type__cache_comp__size; - extern const db::prefix_transform events__event_type__pfx; - extern const db::descriptor events__event_type; - - // room head mapping sequence - extern conf::item events__room_head__block__size; - extern conf::item events__room_head__meta_block__size; - extern conf::item events__room_head__cache__size; - extern const db::prefix_transform events__room_head__pfx; - extern const db::descriptor events__room_head; - - // room events sequence - extern conf::item events__room_events__block__size; - extern conf::item events__room_events__meta_block__size; - extern conf::item events__room_events__cache__size; - extern conf::item events__room_events__cache_comp__size; - extern const db::prefix_transform events__room_events__pfx; - extern const db::comparator events__room_events__cmp; - extern const db::descriptor events__room_events; - - // room present joined members sequence - extern conf::item events__room_joined__block__size; - extern conf::item events__room_joined__meta_block__size; - extern conf::item events__room_joined__cache__size; - extern conf::item events__room_joined__cache_comp__size; - extern conf::item events__room_joined__bloom__bits; - extern const db::prefix_transform events__room_joined__pfx; - extern const db::descriptor events__room_joined; - - // room present state mapping sequence - extern conf::item events__room_state__block__size; - extern conf::item events__room_state__meta_block__size; - extern conf::item events__room_state__cache__size; - extern conf::item events__room_state__cache_comp__size; - extern conf::item events__room_state__bloom__bits; - extern const db::prefix_transform events__room_state__pfx; - extern const db::descriptor events__room_state; - - // state btree node key-value store - extern conf::item events__state_node__block__size; - extern conf::item events__state_node__meta_block__size; - extern conf::item events__state_node__cache__size; - extern conf::item events__state_node__cache_comp__size; - extern conf::item events__state_node__bloom__bits; - extern const db::descriptor events__state_node; -} diff --git a/include/ircd/m/dbs/event_column.h b/include/ircd/m/dbs/event_column.h new file mode 100644 index 000000000..d00ffef2e --- /dev/null +++ b/include/ircd/m/dbs/event_column.h @@ -0,0 +1,77 @@ +// Matrix Construct +// +// Copyright (C) Matrix Construct Developers, Authors & Contributors +// Copyright (C) 2016-2019 Jason Volk +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice is present in all copies. The +// full license for this software is available in the LICENSE file. + +#pragma once +#define HAVE_IRCD_M_DBS_EVENT_COLUMN_H + +namespace ircd::m::dbs +{ + // Event property column max-count. The number of event columns may be + // less by not initializing positions in the event_column array. + constexpr const auto event_columns + { + event::size() + }; + + extern std::array event_column; +} + +namespace ircd::m::dbs::desc +{ + extern conf::item events___event__bloom__bits; + + extern conf::item events__content__block__size; + extern conf::item events__content__meta_block__size; + extern conf::item events__content__cache__size; + extern conf::item events__content__cache_comp__size; + extern const db::descriptor events_content; + + extern conf::item events__depth__block__size; + extern conf::item events__depth__meta_block__size; + extern conf::item events__depth__cache__size; + extern conf::item events__depth__cache_comp__size; + extern const db::descriptor events_depth; + + extern conf::item events__event_id__block__size; + extern conf::item events__event_id__meta_block__size; + extern conf::item events__event_id__cache__size; + extern conf::item events__event_id__cache_comp__size; + extern const db::descriptor events_event_id; + + extern conf::item events__origin_server_ts__block__size; + extern conf::item events__origin_server_ts__meta_block__size; + extern conf::item events__origin_server_ts__cache__size; + extern conf::item events__origin_server_ts__cache_comp__size; + extern const db::descriptor events_origin_server_ts; + + extern conf::item events__room_id__block__size; + extern conf::item events__room_id__meta_block__size; + extern conf::item events__room_id__cache__size; + extern conf::item events__room_id__cache_comp__size; + extern const db::descriptor events_room_id; + + extern conf::item events__sender__block__size; + extern conf::item events__sender__meta_block__size; + extern conf::item events__sender__cache__size; + extern conf::item events__sender__cache_comp__size; + extern const db::descriptor events_sender; + + extern conf::item events__state_key__block__size; + extern conf::item events__state_key__meta_block__size; + extern conf::item events__state_key__cache__size; + extern conf::item events__state_key__cache_comp__size; + extern const db::descriptor events_state_key; + + extern conf::item events__type__block__size; + extern conf::item events__type__meta_block__size; + extern conf::item events__type__cache__size; + extern conf::item events__type__cache_comp__size; + extern const db::descriptor events_type; +} diff --git a/include/ircd/m/dbs/event_horizon.h b/include/ircd/m/dbs/event_horizon.h new file mode 100644 index 000000000..d9eb37864 --- /dev/null +++ b/include/ircd/m/dbs/event_horizon.h @@ -0,0 +1,37 @@ +// Matrix Construct +// +// Copyright (C) Matrix Construct Developers, Authors & Contributors +// Copyright (C) 2016-2019 Jason Volk +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice is present in all copies. The +// full license for this software is available in the LICENSE file. + +#pragma once +#define HAVE_IRCD_M_DBS_EVENT_HORIZON_H + +namespace ircd::m::dbs +{ + constexpr size_t EVENT_HORIZON_KEY_MAX_SIZE + { + id::MAX_SIZE + 1 + 8 + }; + + string_view event_horizon_key(const mutable_buffer &out, const id::event &, const event::idx &); + string_view event_horizon_key(const mutable_buffer &out, const id::event &); + std::tuple event_horizon_key(const string_view &amalgam); + + // event_id | event_idx + extern db::index event_horizon; +} + +namespace ircd::m::dbs::desc +{ + extern conf::item events__event_horizon__block__size; + extern conf::item events__event_horizon__meta_block__size; + extern conf::item events__event_horizon__cache__size; + extern conf::item events__event_horizon__cache_comp__size; + extern const db::prefix_transform events__event_horizon__pfx; + extern const db::descriptor events__event_horizon; +} diff --git a/include/ircd/m/dbs/event_idx.h b/include/ircd/m/dbs/event_idx.h new file mode 100644 index 000000000..3f2e71879 --- /dev/null +++ b/include/ircd/m/dbs/event_idx.h @@ -0,0 +1,27 @@ +// Matrix Construct +// +// Copyright (C) Matrix Construct Developers, Authors & Contributors +// Copyright (C) 2016-2019 Jason Volk +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice is present in all copies. The +// full license for this software is available in the LICENSE file. + +#pragma once +#define HAVE_IRCD_M_DBS_EVENT_IDX_H + +namespace ircd::m::dbs +{ + extern db::column event_idx; // event_id => event_idx +} + +namespace ircd::m::dbs::desc +{ + extern conf::item events__event_idx__block__size; + extern conf::item events__event_idx__meta_block__size; + extern conf::item events__event_idx__cache__size; + extern conf::item events__event_idx__cache_comp__size; + extern conf::item events__event_idx__bloom__bits; + extern const db::descriptor events__event_idx; +} diff --git a/include/ircd/m/dbs/event_json.h b/include/ircd/m/dbs/event_json.h new file mode 100644 index 000000000..41aa9b5f6 --- /dev/null +++ b/include/ircd/m/dbs/event_json.h @@ -0,0 +1,28 @@ +// Matrix Construct +// +// Copyright (C) Matrix Construct Developers, Authors & Contributors +// Copyright (C) 2016-2019 Jason Volk +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice is present in all copies. The +// full license for this software is available in the LICENSE file. + +#pragma once +#define HAVE_IRCD_M_DBS_EVENT_JSON_H + +namespace ircd::m::dbs +{ + // event_idx => full json + extern db::column event_json; +} + +namespace ircd::m::dbs::desc +{ + extern conf::item events__event_json__block__size; + extern conf::item events__event_json__meta_block__size; + extern conf::item events__event_json__cache__size; + extern conf::item events__event_json__cache_comp__size; + extern conf::item events__event_json__bloom__bits; + extern const db::descriptor events__event_json; +} diff --git a/include/ircd/m/dbs/event_sender.h b/include/ircd/m/dbs/event_sender.h new file mode 100644 index 000000000..de24264d9 --- /dev/null +++ b/include/ircd/m/dbs/event_sender.h @@ -0,0 +1,37 @@ +// Matrix Construct +// +// Copyright (C) Matrix Construct Developers, Authors & Contributors +// Copyright (C) 2016-2019 Jason Volk +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice is present in all copies. The +// full license for this software is available in the LICENSE file. + +#pragma once +#define HAVE_IRCD_M_DBS_EVENT_SENDER_H + +namespace ircd::m::dbs +{ + constexpr size_t EVENT_SENDER_KEY_MAX_SIZE + { + id::MAX_SIZE + 1 + 8 + }; + + string_view event_sender_key(const mutable_buffer &out, const string_view &origin, const string_view &localpart = {}, const event::idx & = 0); + string_view event_sender_key(const mutable_buffer &out, const id::user &, const event::idx &); + std::tuple event_sender_key(const string_view &amalgam); + + // host | local, event_idx + extern db::index event_sender; +} + +namespace ircd::m::dbs::desc +{ + extern conf::item events__event_sender__block__size; + extern conf::item events__event_sender__meta_block__size; + extern conf::item events__event_sender__cache__size; + extern conf::item events__event_sender__cache_comp__size; + extern const db::prefix_transform events__event_sender__pfx; + extern const db::descriptor events__event_sender; +} diff --git a/include/ircd/m/dbs/event_type.h b/include/ircd/m/dbs/event_type.h new file mode 100644 index 000000000..901ff1b5c --- /dev/null +++ b/include/ircd/m/dbs/event_type.h @@ -0,0 +1,37 @@ +// Matrix Construct +// +// Copyright (C) Matrix Construct Developers, Authors & Contributors +// Copyright (C) 2016-2019 Jason Volk +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice is present in all copies. The +// full license for this software is available in the LICENSE file. + +#pragma once +#define HAVE_IRCD_M_DBS_EVENT_TYPE_H + +namespace ircd::m::dbs +{ + constexpr size_t EVENT_TYPE_KEY_MAX_SIZE + { + event::TYPE_MAX_SIZE + 1 + 8 + }; + + string_view event_type_key(const mutable_buffer &out, const string_view &, const event::idx & = 0); + std::tuple event_type_key(const string_view &amalgam); + + // type | event_idx => - + extern db::index event_type; +} + +namespace ircd::m::dbs::desc +{ + // events type + extern conf::item events__event_type__block__size; + extern conf::item events__event_type__meta_block__size; + extern conf::item events__event_type__cache__size; + extern conf::item events__event_type__cache_comp__size; + extern const db::prefix_transform events__event_type__pfx; + extern const db::descriptor events__event_type; +} diff --git a/include/ircd/m/dbs/room_events.h b/include/ircd/m/dbs/room_events.h new file mode 100644 index 000000000..e36fea282 --- /dev/null +++ b/include/ircd/m/dbs/room_events.h @@ -0,0 +1,39 @@ +// Matrix Construct +// +// Copyright (C) Matrix Construct Developers, Authors & Contributors +// Copyright (C) 2016-2019 Jason Volk +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice is present in all copies. The +// full license for this software is available in the LICENSE file. + +#pragma once +#define HAVE_IRCD_M_DBS_ROOM_EVENTS_H + +namespace ircd::m::dbs +{ + constexpr size_t ROOM_EVENTS_KEY_MAX_SIZE + { + id::MAX_SIZE + 1 + 8 + 8 + }; + + string_view room_events_key(const mutable_buffer &out, const id::room &, const uint64_t &depth, const event::idx &); + string_view room_events_key(const mutable_buffer &out, const id::room &, const uint64_t &depth); + std::pair room_events_key(const string_view &amalgam); + + // room_id | depth, event_idx => node_id + extern db::index room_events; +} + +namespace ircd::m::dbs::desc +{ + // room events sequence + extern conf::item events__room_events__block__size; + extern conf::item events__room_events__meta_block__size; + extern conf::item events__room_events__cache__size; + extern conf::item events__room_events__cache_comp__size; + extern const db::prefix_transform events__room_events__pfx; + extern const db::comparator events__room_events__cmp; + extern const db::descriptor events__room_events; +} diff --git a/include/ircd/m/dbs/room_head.h b/include/ircd/m/dbs/room_head.h new file mode 100644 index 000000000..b2ecab547 --- /dev/null +++ b/include/ircd/m/dbs/room_head.h @@ -0,0 +1,35 @@ +// Matrix Construct +// +// Copyright (C) Matrix Construct Developers, Authors & Contributors +// Copyright (C) 2016-2019 Jason Volk +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice is present in all copies. The +// full license for this software is available in the LICENSE file. + +#pragma once +#define HAVE_IRCD_M_DBS_ROOM_HEAD_H + +namespace ircd::m::dbs +{ + constexpr size_t ROOM_HEAD_KEY_MAX_SIZE + { + id::MAX_SIZE + 1 + id::MAX_SIZE + }; + + string_view room_head_key(const mutable_buffer &out, const id::room &, const id::event &); + string_view room_head_key(const string_view &amalgam); + + // room_id | event_id => event_idx + extern db::index room_head; +} + +namespace ircd::m::dbs::desc +{ + extern conf::item events__room_head__block__size; + extern conf::item events__room_head__meta_block__size; + extern conf::item events__room_head__cache__size; + extern const db::prefix_transform events__room_head__pfx; + extern const db::descriptor events__room_head; +} diff --git a/include/ircd/m/dbs/room_joined.h b/include/ircd/m/dbs/room_joined.h new file mode 100644 index 000000000..41e591d5a --- /dev/null +++ b/include/ircd/m/dbs/room_joined.h @@ -0,0 +1,38 @@ +// Matrix Construct +// +// Copyright (C) Matrix Construct Developers, Authors & Contributors +// Copyright (C) 2016-2019 Jason Volk +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice is present in all copies. The +// full license for this software is available in the LICENSE file. + +#pragma once +#define HAVE_IRCD_M_DBS_ROOM_JOINED_H + +namespace ircd::m::dbs +{ + constexpr size_t ROOM_JOINED_KEY_MAX_SIZE + { + id::MAX_SIZE + event::ORIGIN_MAX_SIZE + id::MAX_SIZE + }; + + string_view room_joined_key(const mutable_buffer &out, const id::room &, const string_view &origin, const id::user &member); + string_view room_joined_key(const mutable_buffer &out, const id::room &, const string_view &origin); + std::pair room_joined_key(const string_view &amalgam); + + // room_id | origin, member => event_idx + extern db::index room_joined; +} + +namespace ircd::m::dbs::desc +{ + extern conf::item events__room_joined__block__size; + extern conf::item events__room_joined__meta_block__size; + extern conf::item events__room_joined__cache__size; + extern conf::item events__room_joined__cache_comp__size; + extern conf::item events__room_joined__bloom__bits; + extern const db::prefix_transform events__room_joined__pfx; + extern const db::descriptor events__room_joined; +} diff --git a/include/ircd/m/dbs/room_state.h b/include/ircd/m/dbs/room_state.h new file mode 100644 index 000000000..c0550996c --- /dev/null +++ b/include/ircd/m/dbs/room_state.h @@ -0,0 +1,38 @@ +// Matrix Construct +// +// Copyright (C) Matrix Construct Developers, Authors & Contributors +// Copyright (C) 2016-2019 Jason Volk +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice is present in all copies. The +// full license for this software is available in the LICENSE file. + +#pragma once +#define HAVE_IRCD_M_DBS_ROOM_STATE_H + +namespace ircd::m::dbs +{ + constexpr size_t ROOM_STATE_KEY_MAX_SIZE + { + id::MAX_SIZE + event::TYPE_MAX_SIZE + event::STATE_KEY_MAX_SIZE + }; + + string_view room_state_key(const mutable_buffer &out, const id::room &, const string_view &type, const string_view &state_key); + string_view room_state_key(const mutable_buffer &out, const id::room &, const string_view &type); + std::pair room_state_key(const string_view &amalgam); + + // room_id | type, state_key => event_idx + extern db::index room_state; +} + +namespace ircd::m::dbs::desc +{ + extern conf::item events__room_state__block__size; + extern conf::item events__room_state__meta_block__size; + extern conf::item events__room_state__cache__size; + extern conf::item events__room_state__cache_comp__size; + extern conf::item events__room_state__bloom__bits; + extern const db::prefix_transform events__room_state__pfx; + extern const db::descriptor events__room_state; +} diff --git a/include/ircd/m/dbs/state_node.h b/include/ircd/m/dbs/state_node.h new file mode 100644 index 000000000..61b1e47ed --- /dev/null +++ b/include/ircd/m/dbs/state_node.h @@ -0,0 +1,37 @@ +// Matrix Construct +// +// Copyright (C) Matrix Construct Developers, Authors & Contributors +// Copyright (C) 2016-2019 Jason Volk +// +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice is present in all copies. The +// full license for this software is available in the LICENSE file. + +#pragma once +#define HAVE_IRCD_M_DBS_STATE_NODE_H + +namespace ircd::m::dbs +{ + // [GET] the state root for an event (with as much information as you have) + string_view state_root(const mutable_buffer &out, const id::room &, const event::idx &, const uint64_t &depth); + string_view state_root(const mutable_buffer &out, const id::room &, const event::id &, const uint64_t &depth); + string_view state_root(const mutable_buffer &out, const id::room &, const event::idx &); + string_view state_root(const mutable_buffer &out, const id::room &, const event::id &); + string_view state_root(const mutable_buffer &out, const event::idx &); + string_view state_root(const mutable_buffer &out, const event::id &); + string_view state_root(const mutable_buffer &out, const event &); + + // node_id => state::node + extern db::column state_node; +} + +namespace ircd::m::dbs::desc +{ + extern conf::item events__state_node__block__size; + extern conf::item events__state_node__meta_block__size; + extern conf::item events__state_node__cache__size; + extern conf::item events__state_node__cache_comp__size; + extern conf::item events__state_node__bloom__bits; + extern const db::descriptor events__state_node; +} diff --git a/include/ircd/m/dbs/util.h b/include/ircd/m/dbs/util.h deleted file mode 100644 index 6920e15f0..000000000 --- a/include/ircd/m/dbs/util.h +++ /dev/null @@ -1,57 +0,0 @@ -// Matrix Construct -// -// Copyright (C) Matrix Construct Developers, Authors & Contributors -// Copyright (C) 2016-2019 Jason Volk -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice is present in all copies. The -// full license for this software is available in the LICENSE file. - -#pragma once -#define HAVE_IRCD_M_DBS_UTIL_H - -namespace ircd::m::dbs -{ - constexpr size_t EVENT_HORIZON_KEY_MAX_SIZE {id::MAX_SIZE + 1 + 8}; - string_view event_horizon_key(const mutable_buffer &out, const id::event &, const event::idx &); - string_view event_horizon_key(const mutable_buffer &out, const id::event &); - std::tuple event_horizon_key(const string_view &amalgam); - - constexpr size_t EVENT_SENDER_KEY_MAX_SIZE {id::MAX_SIZE + 1 + 8}; - string_view event_sender_key(const mutable_buffer &out, const string_view &origin, const string_view &localpart = {}, const event::idx & = 0); - string_view event_sender_key(const mutable_buffer &out, const id::user &, const event::idx &); - std::tuple event_sender_key(const string_view &amalgam); - - constexpr size_t EVENT_TYPE_KEY_MAX_SIZE {event::TYPE_MAX_SIZE + 1 + 8}; - string_view event_type_key(const mutable_buffer &out, const string_view &, const event::idx & = 0); - std::tuple event_type_key(const string_view &amalgam); - - constexpr size_t ROOM_HEAD_KEY_MAX_SIZE {id::MAX_SIZE + 1 + id::MAX_SIZE}; - string_view room_head_key(const mutable_buffer &out, const id::room &, const id::event &); - string_view room_head_key(const string_view &amalgam); - - constexpr size_t ROOM_STATE_KEY_MAX_SIZE {id::MAX_SIZE + event::TYPE_MAX_SIZE + event::STATE_KEY_MAX_SIZE}; - string_view room_state_key(const mutable_buffer &out, const id::room &, const string_view &type, const string_view &state_key); - string_view room_state_key(const mutable_buffer &out, const id::room &, const string_view &type); - std::pair room_state_key(const string_view &amalgam); - - constexpr size_t ROOM_JOINED_KEY_MAX_SIZE {id::MAX_SIZE + event::ORIGIN_MAX_SIZE + id::MAX_SIZE}; - string_view room_joined_key(const mutable_buffer &out, const id::room &, const string_view &origin, const id::user &member); - string_view room_joined_key(const mutable_buffer &out, const id::room &, const string_view &origin); - std::pair room_joined_key(const string_view &amalgam); - - constexpr size_t ROOM_EVENTS_KEY_MAX_SIZE {id::MAX_SIZE + 1 + 8 + 8}; - string_view room_events_key(const mutable_buffer &out, const id::room &, const uint64_t &depth, const event::idx &); - string_view room_events_key(const mutable_buffer &out, const id::room &, const uint64_t &depth); - std::pair room_events_key(const string_view &amalgam); - - // [GET] the state root for an event (with as much information as you have) - string_view state_root(const mutable_buffer &out, const id::room &, const event::idx &, const uint64_t &depth); - string_view state_root(const mutable_buffer &out, const id::room &, const event::id &, const uint64_t &depth); - string_view state_root(const mutable_buffer &out, const id::room &, const event::idx &); - string_view state_root(const mutable_buffer &out, const id::room &, const event::id &); - string_view state_root(const mutable_buffer &out, const event::idx &); - string_view state_root(const mutable_buffer &out, const event::id &); - string_view state_root(const mutable_buffer &out, const event &); -}