#
# 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);