A couple more fixes similar to adebd3c115a6.
diff --git a/infocalypse/devnotes.txt b/infocalypse/devnotes.txt
--- a/infocalypse/devnotes.txt
+++ b/infocalypse/devnotes.txt
@@ -106,7 +106,8 @@ o reinsert sometimes fails because it ca
! Bugs where I treat graph requests as edge requests,
AUDIT FOR BUGS ANALOGOUS: adebd3c115a6
- Saw an assertion trip.
+ Saw an assertion trip.
+ [djk20091004 think I've got this sorted.]
x Won't handle repositories with multiple heads correctly.
I am reworking the graph rep to fix this.
diff --git a/infocalypse/requestingbundles.py b/infocalypse/requestingbundles.py
--- a/infocalypse/requestingbundles.py
+++ b/infocalypse/requestingbundles.py
@@ -91,6 +91,7 @@ class RequestingBundles(RetryingRequestL
""" Implementation of RetryingRequestList virtual. """
# Hmmmm... special case hack code to handle graph.
if not self._graph_request_done(client, msg, candidate):
+ assert not candidate[6]
if msg[0] == 'AllData':
self._handle_success(client, msg, candidate)
else:
@@ -422,6 +423,7 @@ class RequestingBundles(RetryingRequestL
def _handle_graph_failure(self, candidate):
""" INTERNAL: Handle failed FCP requests for the graph. """
+ assert candidate[6]
max_retries = self.parent.params.get('MAX_RETRIES', 1)
if candidate[1] < max_retries + 1:
#print "_should_retry -- returned False"
@@ -518,6 +520,7 @@ class RequestingBundles(RetryingRequestL
def _force_single_block(self, edge):
""" INTERNAL: Make sure there is only one non-single-block request
running for a redundant edge. """
+ assert not edge is None
for candidate in self.current_candidates:
if candidate[3] == edge and not candidate[2]:
candidate[2] = True
@@ -532,6 +535,7 @@ class RequestingBundles(RetryingRequestL
def _handled_multiblock_case(self, candidate):
""" INTERNAL: Handle requeueing full fetches when we don't have
the graph yet. """
+ assert not candidate[6]
if (candidate[2] and self._multiple_block(candidate) and
self.parent.ctx.graph is None):
assert not candidate[4] is None
@@ -551,6 +555,7 @@ class RequestingBundles(RetryingRequestL
def _handle_success(self, client, msg, candidate):
""" INTERNAL: Handle successful FCP requests. """
+ assert not candidate[6]
#print "_handle_success -- ", candidate
if not self._needs_bundle(candidate):
#print "_handle_success -- doesn't need bundle."
@@ -667,6 +672,7 @@ class RequestingBundles(RetryingRequestL
def _handle_failure(self, dummy, msg, candidate):
""" INTERNAL: Handle FCP request failure for a candidate. """
+ assert not candidate[6]
if not self._needs_bundle(candidate):
#print "_handle_failure -- doesn't need bundle."
candidate[5] = msg
@@ -693,6 +699,7 @@ class RequestingBundles(RetryingRequestL
def _multiple_block(self, candidate):
""" INTERNAL: Return True if the candidate's FCP request is
more than one block. """
+ assert not candidate[6]
graph = self.parent.ctx.graph
if not graph is None:
step = candidate[3]
@@ -709,6 +716,8 @@ class RequestingBundles(RetryingRequestL
def _needs_bundle(self, candidate):
""" INTERNAL: Returns True if the hg bundle for the candidate's edge
could be pulled and contains changes that we don't already have. """
+ if candidate[6]:
+ return False # Gracefully handle graph requests.
versions = self._get_versions(candidate)
#print "_needs_bundle -- ", versions
if not self.parent.ctx.has_versions(versions[0]):
@@ -721,6 +730,7 @@ class RequestingBundles(RetryingRequestL
def _pull_bundle(self, client, dummy_msg, candidate):
""" INTERNAL: Pull the candidates bundle from the file in
the client param. """
+ assert not candidate[6]
length = os.path.getsize(client.in_params.file_name)
if not candidate[3] is None:
expected_length = self.parent.ctx.graph.get_length(candidate[3])
@@ -877,6 +887,8 @@ class RequestingBundles(RetryingRequestL
# "finish" requests which are no longer required.
victims = []
for candidate in self.current_candidates:
+ if candidate[6]:
+ continue # skip graph requests
versions = self._get_versions(candidate)
if self.parent.ctx.has_versions(versions[1]):
victims.append(candidate)
@@ -887,6 +899,8 @@ class RequestingBundles(RetryingRequestL
# REDFLAG: C&P
victims = []
for candidate in self.next_candidates:
+ if candidate[6]:
+ continue # skip graph requests
versions = self._get_versions(candidate)
if self.parent.ctx.has_versions(versions[1]):
victims.append(candidate)
@@ -938,7 +952,7 @@ class RequestingBundles(RetryingRequestL
ret = set([])
for candidate in queue:
if candidate[3] is None:
- continue
+ continue # weeds out graph requests
ret.add(candidate[3])
if not never_run is None and candidate[1] <= 0:
never_run.add(candidate[3])
@@ -978,7 +992,7 @@ class RequestingBundles(RetryingRequestL
""" INTERNAL: Helper function to count edges. """
for candidate in candidate_list:
if candidate[3] is None:
- continue
+ continue # skips graph requests
count = table.get(candidate[3], 0)
edge_counts[candidate[3]] = count + 1
if edge_counts[candidate[3]] > 1: