Skip to content

Commit

Permalink
adding auth metadata to vector clock conflict tracker, and fixing com…
Browse files Browse the repository at this point in the history
…mand in admin cli
  • Loading branch information
Marc Hesse committed Jun 18, 2013
1 parent 0bf546a commit 3fc7a37
Show file tree
Hide file tree
Showing 8 changed files with 49 additions and 31 deletions.
17 changes: 9 additions & 8 deletions src/clustering/administration/admin_tracker.cc
Expand Up @@ -7,7 +7,8 @@
#include "rpc/semilattice/view/field.hpp"

admin_tracker_t::admin_tracker_t(
boost::shared_ptr<semilattice_read_view_t<cluster_semilattice_metadata_t> > semilattice_view,
boost::shared_ptr<semilattice_read_view_t<cluster_semilattice_metadata_t> > cluster_view,
boost::shared_ptr<semilattice_read_view_t<auth_semilattice_metadata_t> > auth_view,
const clone_ptr_t<watchable_t<std::map<peer_id_t, cluster_directory_metadata_t> > > &directory_view) :
issue_aggregator(),

Expand All @@ -19,28 +20,28 @@ admin_tracker_t::admin_tracker_t(
remote_issue_tracker_feed(&issue_aggregator, &remote_issue_tracker),

machine_down_issue_tracker(
semilattice_view,
cluster_view,
directory_view->subview(
field_getter_t<machine_id_t, cluster_directory_metadata_t>(&cluster_directory_metadata_t::machine_id))),
machine_down_issue_tracker_feed(&issue_aggregator, &machine_down_issue_tracker),

name_conflict_issue_tracker(semilattice_view),
name_conflict_issue_tracker(cluster_view),
name_conflict_issue_tracker_feed(&issue_aggregator, &name_conflict_issue_tracker),

vector_clock_conflict_issue_tracker(semilattice_view),
vector_clock_conflict_issue_tracker(cluster_view, auth_view),
vector_clock_issue_tracker_feed(&issue_aggregator, &vector_clock_conflict_issue_tracker),

mc_pinnings_shards_mismatch_issue_tracker(metadata_field(&cluster_semilattice_metadata_t::memcached_namespaces, semilattice_view)),
mc_pinnings_shards_mismatch_issue_tracker(metadata_field(&cluster_semilattice_metadata_t::memcached_namespaces, cluster_view)),
mc_pinnings_shards_mismatch_issue_tracker_feed(&issue_aggregator, &mc_pinnings_shards_mismatch_issue_tracker),

dummy_pinnings_shards_mismatch_issue_tracker(metadata_field(&cluster_semilattice_metadata_t::dummy_namespaces, semilattice_view)),
dummy_pinnings_shards_mismatch_issue_tracker(metadata_field(&cluster_semilattice_metadata_t::dummy_namespaces, cluster_view)),
dummy_pinnings_shards_mismatch_issue_tracker_feed(&issue_aggregator, &dummy_pinnings_shards_mismatch_issue_tracker),

unsatisfiable_goals_issue_tracker(semilattice_view),
unsatisfiable_goals_issue_tracker(cluster_view),
unsatisfiable_goals_issue_tracker_feed(&issue_aggregator, &unsatisfiable_goals_issue_tracker),

last_seen_tracker(
metadata_field(&cluster_semilattice_metadata_t::machines, semilattice_view),
metadata_field(&cluster_semilattice_metadata_t::machines, cluster_view),
directory_view->subview(
field_getter_t<machine_id_t, cluster_directory_metadata_t>(&cluster_directory_metadata_t::machine_id)))
{
Expand Down
3 changes: 2 additions & 1 deletion src/clustering/administration/admin_tracker.hpp
Expand Up @@ -25,7 +25,8 @@ template <class> class watchable_t;

struct admin_tracker_t {
admin_tracker_t(
boost::shared_ptr<semilattice_read_view_t<cluster_semilattice_metadata_t> > semilattice_view,
boost::shared_ptr<semilattice_read_view_t<cluster_semilattice_metadata_t> > cluster_view,
boost::shared_ptr<semilattice_read_view_t<auth_semilattice_metadata_t> > auth_view,
const clone_ptr_t<watchable_t<std::map<peer_id_t, cluster_directory_metadata_t> > > &directory_view);

~admin_tracker_t();
Expand Down
10 changes: 5 additions & 5 deletions src/clustering/administration/cli/admin_cluster_link.cc
Expand Up @@ -287,7 +287,7 @@ admin_cluster_link_t::admin_cluster_link_t(const peer_address_set_t &joins, int
directory_manager_client_run(&directory_manager_client, directory_read_manager.get()),
message_multiplexer_run(&message_multiplexer),
connectivity_cluster_run(&connectivity_cluster, ip_address_t::get_local_addresses(std::set<ip_address_t>(), false), 0, &message_multiplexer_run, client_port, &heartbeat_manager),
admin_tracker(cluster_metadata_view, directory_read_manager->get_root_view()),
admin_tracker(cluster_metadata_view, auth_metadata_view, directory_read_manager->get_root_view()),
initial_joiner(&connectivity_cluster, &connectivity_cluster_run, joins, 5000)
{
wait_interruptible(initial_joiner.get_ready_signal(), interruptor);
Expand Down Expand Up @@ -2332,11 +2332,12 @@ void admin_cluster_link_t::do_admin_set_auth(const admin_command_parser_t::comma
auth_semilattice_metadata_t auth_metadata = change_request.get();

std::string key = guarantee_param_0(data.params, "key");
if (!auth_metadata.auth_key.get_mutable().assign_value(key)) {
auth_key_t new_auth_key;
if (!new_auth_key.assign_value(key)) {
throw admin_cluster_exc_t(strprintf("the provided authorization key is too long, max length: %i",
auth_key_t::max_length));
}
auth_metadata.auth_key.upgrade_version(change_request_id);
auth_metadata.auth_key = auth_metadata.auth_key.make_resolving_version(new_auth_key, change_request_id);

if (!change_request.update(auth_metadata)) {
throw admin_retry_exc_t();
Expand All @@ -2348,8 +2349,7 @@ void admin_cluster_link_t::do_admin_unset_auth(const admin_command_parser_t::com
change_request(&mailbox_manager, choose_auth_sync_peer());
auth_semilattice_metadata_t auth_metadata = change_request.get();

auth_metadata.auth_key.get_mutable() = auth_key_t();
auth_metadata.auth_key.upgrade_version(change_request_id);
auth_metadata.auth_key = auth_metadata.auth_key.make_resolving_version(auth_key_t(), change_request_id);

if (!change_request.update(auth_metadata)) {
throw admin_retry_exc_t();
Expand Down
4 changes: 2 additions & 2 deletions src/clustering/administration/cli/admin_command_parser.cc
Expand Up @@ -557,8 +557,8 @@ void admin_command_parser_t::build_command_descriptions() {
info->add_positional("split-points", -1, true); // TODO: list possible shards

info = add_command(resolve_command, resolve_command, resolve_usage, &admin_cluster_link_t::do_admin_resolve, &commands);
info->add_positional("id", 1, false)->add_option("!conflict");
info->add_positional("field", 1, true); // TODO: list the conflicted fields in the previous id
info->add_positional("field", 1, true);
info->add_positional("id", 1, false)->add_option("!conflict"); // TODO: list the conflicted fields in the previous id

info = add_command(set_name_command, set_name_command, set_name_usage, &admin_cluster_link_t::do_admin_set_name, &commands);
info->add_positional("id", 1, true)->add_option("!id");
Expand Down
30 changes: 21 additions & 9 deletions src/clustering/administration/issues/vector_clock_conflict.cc
Expand Up @@ -39,41 +39,53 @@ void check_namespaces_for_protocol(

} /* anonymous namespace */

vector_clock_conflict_issue_tracker_t::vector_clock_conflict_issue_tracker_t(boost::shared_ptr<semilattice_read_view_t<cluster_semilattice_metadata_t> > _semilattice_view)
: semilattice_view(_semilattice_view) { }
vector_clock_conflict_issue_tracker_t::vector_clock_conflict_issue_tracker_t(
boost::shared_ptr<semilattice_read_view_t<cluster_semilattice_metadata_t> > _cluster_view,
boost::shared_ptr<semilattice_read_view_t<auth_semilattice_metadata_t> > _auth_view) :
cluster_view(_cluster_view),
auth_view(_auth_view) { }

vector_clock_conflict_issue_tracker_t::~vector_clock_conflict_issue_tracker_t() { }

std::list<clone_ptr_t<vector_clock_conflict_issue_t> > vector_clock_conflict_issue_tracker_t::get_vector_clock_issues() {
cluster_semilattice_metadata_t metadata = semilattice_view->get();
cluster_semilattice_metadata_t cluster_metadata = cluster_view->get();
auth_semilattice_metadata_t auth_metadata = auth_view->get();

std::list<clone_ptr_t<vector_clock_conflict_issue_t> > issues;

check_namespaces_for_protocol(metadata.memcached_namespaces, &issues);
check_namespaces_for_protocol(metadata.dummy_namespaces, &issues);
check_namespaces_for_protocol(metadata.rdb_namespaces, &issues);
// Check cluster metadata
check_namespaces_for_protocol(cluster_metadata.memcached_namespaces, &issues);
check_namespaces_for_protocol(cluster_metadata.dummy_namespaces, &issues);
check_namespaces_for_protocol(cluster_metadata.rdb_namespaces, &issues);

for (datacenters_semilattice_metadata_t::datacenter_map_t::const_iterator it =
metadata.datacenters.datacenters.begin(); it != metadata.datacenters.datacenters.end(); it++) {
cluster_metadata.datacenters.datacenters.begin();
it != cluster_metadata.datacenters.datacenters.end(); it++) {
if (!it->second.is_deleted()) {
check("datacenter", it->first, "name", it->second.get().name, &issues);
}
}

for (databases_semilattice_metadata_t::database_map_t::const_iterator it =
metadata.databases.databases.begin(); it != metadata.databases.databases.end(); it++) {
cluster_metadata.databases.databases.begin();
it != cluster_metadata.databases.databases.end(); it++) {
if (!it->second.is_deleted()) {
check("database", it->first, "name", it->second.get().name, &issues);
}
}

for (machines_semilattice_metadata_t::machine_map_t::const_iterator it =
metadata.machines.machines.begin(); it != metadata.machines.machines.end(); it++) {
cluster_metadata.machines.machines.begin();
it != cluster_metadata.machines.machines.end(); it++) {
if (!it->second.is_deleted()) {
check("machine", it->first, "datacenter_uuid", it->second.get().datacenter, &issues);
check("machine", it->first, "name", it->second.get().name, &issues);
}
}

// Check auth metadata
check("auth_key", nil_uuid(), "auth_key", auth_metadata.auth_key, &issues);

return issues;
}

Expand Down
Expand Up @@ -55,14 +55,16 @@ class vector_clock_conflict_issue_t : public global_issue_t {

class vector_clock_conflict_issue_tracker_t : public global_issue_tracker_t {
public:
explicit vector_clock_conflict_issue_tracker_t(boost::shared_ptr<semilattice_read_view_t<cluster_semilattice_metadata_t> > _semilattice_view);
explicit vector_clock_conflict_issue_tracker_t(boost::shared_ptr<semilattice_read_view_t<cluster_semilattice_metadata_t> > _cluster_view,
boost::shared_ptr<semilattice_read_view_t<auth_semilattice_metadata_t> > _auth_view);
~vector_clock_conflict_issue_tracker_t();

std::list<clone_ptr_t<global_issue_t> > get_issues();
std::list<clone_ptr_t<vector_clock_conflict_issue_t> > get_vector_clock_issues();

private:
boost::shared_ptr<semilattice_read_view_t<cluster_semilattice_metadata_t> > semilattice_view;
boost::shared_ptr<semilattice_read_view_t<cluster_semilattice_metadata_t> > cluster_view;
boost::shared_ptr<semilattice_read_view_t<auth_semilattice_metadata_t> > auth_view;

DISABLE_COPYING(vector_clock_conflict_issue_tracker_t);
};
Expand Down
5 changes: 3 additions & 2 deletions src/clustering/administration/main/import.cc
Expand Up @@ -144,8 +144,9 @@ bool run_json_import(extproc::spawner_info_t *spawner_info,

// Skipped field_copier_t, for fun.

admin_tracker_t admin_tracker(
semilattice_manager_cluster.get_root_view(), directory_read_manager.get_root_view());
admin_tracker_t admin_tracker(semilattice_manager_cluster.get_root_view(),
auth_manager_cluster.get_root_view(),
directory_read_manager.get_root_view());

perfmon_collection_t proc_stats_collection;
perfmon_membership_t proc_stats_membership(&get_global_perfmon_collection(), &proc_stats_collection, "proc");
Expand Down
5 changes: 3 additions & 2 deletions src/clustering/administration/main/serve.cc
Expand Up @@ -173,8 +173,9 @@ bool do_serve(
local_issue_tracker.get_issues_watchable(),
&our_root_directory_variable);

admin_tracker_t admin_tracker(
semilattice_manager_cluster.get_root_view(), directory_read_manager.get_root_view());
admin_tracker_t admin_tracker(semilattice_manager_cluster.get_root_view(),
auth_manager_cluster.get_root_view(),
directory_read_manager.get_root_view());

perfmon_collection_t proc_stats_collection;
perfmon_membership_t proc_stats_membership(&get_global_perfmon_collection(), &proc_stats_collection, "proc");
Expand Down

0 comments on commit 3fc7a37

Please sign in to comment.