# # patch "ChangeLog" # from [60f1576e8c659ae5ff8184217e5ea04d4de163d5] # to [5dc32a632e92858ace8ff280b83f2327cdcb0ab3] # # patch "netsync.cc" # from [60652355c67df5803337e5deb857a8dbb279ffa1] # to [e1f885ae4739699f950e7d311e5d4bd8815ade54] # # patch "packet.cc" # from [478a95c883062f409c2d9558dd3177e9d5e6ac2c] # to [90a102794d4dc3b6943b502026bfb74c4ab69fab] # # patch "packet.hh" # from [f5f36ee1eb04d53b1d407fe6f5ea1b24d9c4a847] # to [3ecd9f0de0e37c56a105cfc6bfd8a5fdb84032c7] # --- ChangeLog +++ ChangeLog @@ -1,5 +1,12 @@ 2005-05-10 Timothy Brownawell + * packet.{cc,hh}: Give packet_consumer and children a callback to call + after writing out a revision. + * netsync.cc: Use this callback to add a "revisions written" ticker, + to provide user feedback while sanity checking. + +2005-05-10 Timothy Brownawell + * ui.cc: Make tick_write_count take less horizontal space 2005-05-09 Matthew Gregan --- netsync.cc +++ netsync.cc @@ -12,6 +12,7 @@ #include #include #include +#include #include "app_state.hh" #include "cert.hh" @@ -233,6 +234,7 @@ auto_ptr cert_out_ticker; auto_ptr revision_in_ticker; auto_ptr revision_out_ticker; + auto_ptr revision_checked_ticker; map< std::pair, boost::shared_ptr > merkle_tables; @@ -260,6 +262,8 @@ Netxx::Timeout const & to); virtual ~session() {} + + void rev_written_callback(); id mk_nonce(); void mark_recent_io(); @@ -433,6 +437,7 @@ cert_out_ticker(NULL), revision_in_ticker(NULL), revision_out_ticker(NULL), + revision_checked_ticker(NULL), analyzed_ancestry(false), saved_nonce(""), received_goodbye(false), @@ -447,6 +452,9 @@ this->collection = idx(collections, 0); } + dbw.set_on_revision_written(boost::bind(&session::rev_written_callback, + this)); + // we will panic here if the user doesn't like urandom and we can't give // them a real entropy-driven random. bool request_blocking_rng = false; @@ -478,6 +486,11 @@ } } +void session::rev_written_callback() +{ + if(revision_checked_ticker.get()) ++(*revision_checked_ticker); +} + id session::mk_nonce() { @@ -2887,6 +2900,7 @@ sess.byte_out_ticker.reset(new ticker("bytes out", "<", 1024, true)); if (role == sink_role) { + sess.revision_checked_ticker.reset(new ticker("revs written", "w", 1)); sess.cert_in_ticker.reset(new ticker("certs in", "c", 3)); sess.revision_in_ticker.reset(new ticker("revs in", "r", 1)); } @@ -2898,6 +2912,7 @@ else { I(role == source_and_sink_role); + sess.revision_checked_ticker.reset(new ticker("revs written", "w", 1)); sess.revision_in_ticker.reset(new ticker("revs in", "r", 1)); sess.revision_out_ticker.reset(new ticker("revs out", "R", 1)); } --- packet.cc +++ packet.cc @@ -428,6 +428,13 @@ I(all_prerequisites_satisfied()); } + +void packet_consumer::set_on_revision_written(boost::function0 const & x) +{ + on_revision_written=x; +} + + struct packet_db_writer::impl { app_state & app; @@ -859,6 +866,7 @@ if (dp->all_prerequisites_satisfied()) { pimpl->app.db.put_revision(ident, dat); + if(on_revision_written) on_revision_written(); pimpl->accepted_revision(ident, *this); } } @@ -990,6 +998,11 @@ #define DOIT(x) pimpl->do_packet(boost::shared_ptr(new x)); +void packet_db_valve::set_on_revision_written(boost::function0 const & x) +{ + on_revision_written=x; + pimpl->writer.set_on_revision_written(x); +} void packet_db_valve::consume_file_data(file_id const & ident, file_data const & dat) --- packet.hh +++ packet.hh @@ -9,6 +9,8 @@ #include #include +#include + #include "app_state.hh" #include "ui.hh" #include "vocab.hh" @@ -34,6 +36,12 @@ struct packet_consumer { +protected: + boost::function0 on_revision_written; +public: + + virtual void set_on_revision_written(boost::function0 const & x); + virtual ~packet_consumer() {} virtual void consume_file_data(file_id const & ident, file_data const & dat) = 0; @@ -154,6 +162,7 @@ packet_db_valve(app_state & app, bool take_keys = false); virtual ~packet_db_valve(); + virtual void set_on_revision_written(boost::function0 const & x); virtual void consume_file_data(file_id const & ident, file_data const & dat); virtual void consume_file_delta(file_id const & id_old,