# # # patch "cmd_netsync.cc" # from [08012b1b75787b9ee18f0f60f10140d6e74aa06f] # to [5144c2eccea81d786251eb0a6f2469731b5fff95] # # patch "network/connection_info.cc" # from [d03280d9dd87adce8b7b0bebf244878661d5ae6e] # to [ca442d99d973be6e4b5d6cecdd986b419896c389] # # patch "network/connection_info.hh" # from [181811d9adbba91506779f28461d29a46a40f2a1] # to [81c9d8dd8e2463a2eb181df6121356e3f0bbf6ff] # # patch "network/netsync_session.cc" # from [e3b98a67f8eba6168d692d6a29ffa66d4db2f796] # to [69644079e086b89e8318bb9dc9a1e830fde9b180] # ============================================================ --- cmd_netsync.cc 08012b1b75787b9ee18f0f60f10140d6e74aa06f +++ cmd_netsync.cc 5144c2eccea81d786251eb0a6f2469731b5fff95 @@ -278,31 +278,31 @@ void print_dryrun_info(protocol_role rol { if (role != source_role) { - if (info->client.dryrun_incoming_keys_is_estimate) + if (info->client.keys_in.can_have_more_than_min) { P(F("would receive %d revisions, %d certs, and at least %d keys") - % info->client.dryrun_incoming_revs - % info->client.dryrun_incoming_certs - % info->client.dryrun_incoming_keys); + % info->client.revs_in.min_count + % info->client.certs_in.min_count + % info->client.keys_in.min_count); } else { P(F("would receive %d revisions, %d certs, and %d keys") - % info->client.dryrun_incoming_revs - % info->client.dryrun_incoming_certs - % info->client.dryrun_incoming_keys); + % info->client.revs_in.min_count + % info->client.certs_in.min_count + % info->client.keys_in.min_count); } } if (role != sink_role) { P(F("would send %d certs and %d keys") - % info->client.dryrun_outgoing_certs - % info->client.dryrun_outgoing_keys); + % info->client.certs_out.min_count + % info->client.keys_out.min_count); P(F("would send %d revisions:") - % info->client.dryrun_outgoing_revs.size()); + % info->client.revs_out.min_count); map branch_counts; - for (set::const_iterator i = info->client.dryrun_outgoing_revs.begin(); - i != info->client.dryrun_outgoing_revs.end(); ++i) + for (set::const_iterator i = info->client.revs_out.items.begin(); + i != info->client.revs_out.items.end(); ++i) { set my_branches; project.get_revision_branches(*i, my_branches); ============================================================ --- network/netsync_session.cc e3b98a67f8eba6168d692d6a29ffa66d4db2f796 +++ network/netsync_session.cc 69644079e086b89e8318bb9dc9a1e830fde9b180 @@ -447,19 +447,14 @@ netsync_session::dry_run_finished() cons if (all && conn_info) { - conn_info->client.dryrun_incoming_revs = rev_refiner.items_to_receive; - conn_info->client.dryrun_incoming_certs = cert_refiner.items_to_receive; - conn_info->client.dryrun_incoming_keys = key_refiner.min_items_to_receive; - conn_info->client.dryrun_incoming_keys_is_estimate - = key_refiner.may_receive_more_than_min; + conn_info->client.revs_in.set_count(rev_refiner.items_to_receive, false); + conn_info->client.certs_in.set_count(cert_refiner.items_to_receive, false); + conn_info->client.keys_in.set_count(key_refiner.min_items_to_receive, + key_refiner.may_receive_more_than_min); - for (set::const_iterator i = rev_refiner.items_to_send.begin(); - i != rev_refiner.items_to_send.end(); ++i) - { - conn_info->client.dryrun_outgoing_revs.insert(revision_id(*i)); - } - conn_info->client.dryrun_outgoing_certs = cert_refiner.items_to_send.size(); - conn_info->client.dryrun_outgoing_keys = key_refiner.items_to_send.size(); + conn_info->client.revs_out.set_items(rev_refiner.items_to_send); + conn_info->client.certs_out.set_count(cert_refiner.items_to_send.size(), false); + conn_info->client.keys_out.set_items(key_refiner.items_to_send); } return all; ============================================================ --- network/connection_info.cc d03280d9dd87adce8b7b0bebf244878661d5ae6e +++ network/connection_info.cc ca442d99d973be6e4b5d6cecdd986b419896c389 @@ -38,13 +38,7 @@ netsync_connection_info::Client::Client( conn_type(netsync_connection), input_stream(0), output_stream(0), - db(d), opts(o), - dryrun_incoming_revs(0), - dryrun_incoming_certs(0), - dryrun_incoming_keys(0), - dryrun_incoming_keys_is_estimate(false), - dryrun_outgoing_certs(0), - dryrun_outgoing_keys(0) + db(d), opts(o) { var_key default_server_key(var_domain("database"), var_name("default-server")); ============================================================ --- network/connection_info.hh 181811d9adbba91506779f28461d29a46a40f2a1 +++ network/connection_info.hh 81c9d8dd8e2463a2eb181df6121356e3f0bbf6ff @@ -25,6 +25,47 @@ typedef boost::shared_ptr shared_conn_info; +template +class future_set +{ +public: + bool have_count; + bool have_items; + std::set items; + size_t min_count; + bool can_have_more_than_min; + + future_set() : have_count(false), have_items(false) {} + void set_count(size_t min, bool is_estimate) + { + have_count = true; + min_count = min; + can_have_more_than_min = is_estimate; + } + template + void set_items(std::set const & in) + { + have_items = true; + for (typename std::set::const_iterator i = in.begin(); + i != in.end(); ++i) + { + items.insert(items.end(), item_type(*i)); + } + min_count = items.size(); + can_have_more_than_min = false; + have_count = true; + } + void add_item(item_type const & i) + { + have_items = true; + items.insert(i); + + min_count = items.size(); + can_have_more_than_min = false; + have_count = true; + } +}; + struct netsync_connection_info { class Server @@ -77,13 +118,12 @@ struct netsync_connection_info void set_connection_successful(); - size_t dryrun_incoming_revs; - size_t dryrun_incoming_certs; - size_t dryrun_incoming_keys; - bool dryrun_incoming_keys_is_estimate; - std::set dryrun_outgoing_revs; - size_t dryrun_outgoing_certs; - size_t dryrun_outgoing_keys; + future_set keys_in; + future_set certs_in; + future_set revs_in; + future_set keys_out; + future_set certs_out; + future_set revs_out; } client; static void