commit 088bc8ecb475bdf222f9a81b837229273bbbc0cd Author: Karsten Loesing karsten.loesing@gmx.net Date: Tue Jan 10 10:19:18 2012 +0100
Fix download logic a bit.
Now we report a failed request instead of silently ignoring it. As a result, we don't wait forever if we cannot download a single consensus.
The download logic is still somewhat broken. We don't wait for all consensus requests to complete or fail, which results in adding (failed) requests to the queue when we think we're done. This is probably harmless, but should be fixed at some point. --- .../impl/RelayDescriptorDownloaderImpl.java | 22 +++++++++++++------ 1 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/src/org/torproject/descriptor/impl/RelayDescriptorDownloaderImpl.java b/src/org/torproject/descriptor/impl/RelayDescriptorDownloaderImpl.java index c2db6a4..6805cc4 100644 --- a/src/org/torproject/descriptor/impl/RelayDescriptorDownloaderImpl.java +++ b/src/org/torproject/descriptor/impl/RelayDescriptorDownloaderImpl.java @@ -430,13 +430,18 @@ public class RelayDescriptorDownloaderImpl this.missingVotes.add(requestedVote); } } - this.descriptorQueue.add(response); + if (response.getRequestEnd() != 0L) { + this.descriptorQueue.add(response); + } if ((!this.missingConsensus || (this.downloadConsensusFromAllAuthorities && this.requestedConsensuses.containsAll( this.directoryAuthorities.keySet()))) && this.missingVotes.isEmpty() && this.requestingVotes.isEmpty()) { + /* TODO This logic may be somewhat broken. We don't wait for all + * consensus requests to complete or fail, which results in adding + * (failed) requests to the queue when we think we're done. */ this.hasFinishedDownloading = true; this.globalTimerThread.interrupt(); this.descriptorQueue.setOutOfDescriptors(); @@ -470,9 +475,10 @@ public class RelayDescriptorDownloaderImpl this.requestTimeout = requestTimeout; } public void run() { - DescriptorRequestImpl request = null; + boolean keepRunning = true; do { - request = this.downloadCoordinator.createRequest(this.nickname); + DescriptorRequestImpl request = + this.downloadCoordinator.createRequest(this.nickname); if (request != null) { String url = "http://" + this.ipPort + request.getRequestedResource(); @@ -503,16 +509,18 @@ public class RelayDescriptorDownloaderImpl request.setRequestEnd(System.currentTimeMillis()); } } catch (IOException e) { - /* TODO Should we print out a warning or something? */ - e.printStackTrace(); - break; + /* Stop downloading from this directory if there are any + * problems, e.g., refused connections. */ + keepRunning = false; } /* TODO How do we find out if we were interrupted, and by who? * Set the request or global timeout flag in the response. */ timeoutThread.interrupt(); this.downloadCoordinator.deliverResponse(request); + } else { + keepRunning = false; } - } while (request != null); + } while (keepRunning); } }
tor-commits@lists.torproject.org