# # patch "ChangeLog" # from [7c06a8840b6b348f9302168d9a823593460acdf4] # to [03f4b505b6bd387fed1e300b3060c91905f1763c] # # patch "netsync.cc" # from [a051a19a0dc623638494221324ed04b20d35b711] # to [ff29f04bb5cbf77926b9bfe05ba0780add131b26] # =============================================== --- ChangeLog 7c06a8840b6b348f9302168d9a823593460acdf4 +++ ChangeLog 03f4b505b6bd387fed1e300b3060c91905f1763c @@ -1,3 +1,17 @@ +2005-07-18 Nathaniel Smith + + * netsync.cc (received_items): New instance variable. + (session::session): Initialize it. + (note_item_arrived): Maintain it. + (item_request_outstanding): Rename it to... + (item_already_received): ...this, and have it check both + outstanding and fulfilled requests. + (queue_send_data_cmd, queue_send_delta_cmd): Call it via new + name. + + Hopefully this will eliminate cases where "revs in" is larger than + "revs written". + 2005-07-17 Nathaniel Smith * constants.cc (legal_key_name_bytes): Allow + and _ to appear in =============================================== --- netsync.cc a051a19a0dc623638494221324ed04b20d35b711 +++ netsync.cc ff29f04bb5cbf77926b9bfe05ba0780add131b26 @@ -273,6 +273,7 @@ map done_refinements; map > > requested_items; + map > > received_items; map > > ancestry; map > > received_certs; set< pair > reverse_delta_requests; @@ -313,7 +314,7 @@ bool all_requested_revisions_received(); void note_item_requested(netcmd_item_type ty, id const & i); - bool item_request_outstanding(netcmd_item_type ty, id const & i); + bool item_already_requested(netcmd_item_type ty, id const & i); void note_item_arrived(netcmd_item_type ty, id const & i); void maybe_note_epochs_finished(); @@ -522,6 +523,13 @@ requested_items.insert(make_pair(manifest_item, boost::shared_ptr< set >(new set()))); requested_items.insert(make_pair(file_item, boost::shared_ptr< set >(new set()))); requested_items.insert(make_pair(epoch_item, boost::shared_ptr< set >(new set()))); + + received_items.insert(make_pair(cert_item, boost::shared_ptr< set >(new set()))); + received_items.insert(make_pair(key_item, boost::shared_ptr< set >(new set()))); + received_items.insert(make_pair(revision_item, boost::shared_ptr< set >(new set()))); + received_items.insert(make_pair(manifest_item, boost::shared_ptr< set >(new set()))); + received_items.insert(make_pair(file_item, boost::shared_ptr< set >(new set()))); + received_items.insert(make_pair(epoch_item, boost::shared_ptr< set >(new set()))); } session::~session() @@ -726,6 +734,11 @@ i = requested_items.find(ty); I(i != requested_items.end()); i->second->erase(ident); + map > >::const_iterator + j = received_items.find(ty); + I(j != received_items.end()); + j->second->insert(ident); + switch (ty) { @@ -744,12 +757,18 @@ } bool -session::item_request_outstanding(netcmd_item_type ty, id const & ident) +session::item_already_requested(netcmd_item_type ty, id const & ident) { - map > >::const_iterator - i = requested_items.find(ty); + map > >::const_iterator i; + i = requested_items.find(ty); I(i != requested_items.end()); - return i->second->find(ident) != i->second->end(); + if (i->second->find(ident) != i->second->end()) + return true; + i = received_items.find(ty); + I(i != received_items.end()); + if (i->second->find(ident) != i->second->end()) + return true; + return false; } @@ -1490,7 +1509,7 @@ return; } - if (item_request_outstanding(type, item)) + if (item_already_requested(type, item)) { L(F("not queueing request for %s '%s' as we already requested it\n") % typestr % hid); @@ -1526,7 +1545,7 @@ return; } - if (item_request_outstanding(type, ident)) + if (item_already_requested(type, ident)) { L(F("not queueing request for %s delta '%s' -> '%s' as we already requested the target\n") % typestr % base_hid % ident_hid);