From b949ea4f32c5d256f40b4e9fa72bd363e87935a2 Mon Sep 17 00:00:00 2001
From: Brian Warner <warner@lothar.com>
Date: Wed, 18 Feb 2009 22:24:31 -0700
Subject: [PATCH] crawler: fix problems on windows and our slow cygwin slave

---
 src/allmydata/storage/crawler.py   |  6 +++++-
 src/allmydata/test/test_crawler.py | 13 ++++++++++---
 2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/src/allmydata/storage/crawler.py b/src/allmydata/storage/crawler.py
index 071f2060..e79ba94d 100644
--- a/src/allmydata/storage/crawler.py
+++ b/src/allmydata/storage/crawler.py
@@ -1,5 +1,5 @@
 
-import os, time, struct, pickle
+import sys, os, time, struct, pickle
 from twisted.internet import reactor
 from twisted.application import service
 from allmydata.storage.server import si_b2a
@@ -89,6 +89,9 @@ class ShareCrawler(service.MultiService):
         f = open(tmpfile, "wb")
         pickle.dump(state, f)
         f.close()
+        if "win32" in sys.platform.lower():
+            # sigh, stupid windows can't use this technique
+            os.unlink(self.statefile)
         os.rename(tmpfile, self.statefile)
 
     def startService(self):
@@ -181,3 +184,4 @@ class ShareCrawler(service.MultiService):
 
     def yielding(self, sleep_time):
         pass
+
diff --git a/src/allmydata/test/test_crawler.py b/src/allmydata/test/test_crawler.py
index dfee79a3..b9e737b1 100644
--- a/src/allmydata/test/test_crawler.py
+++ b/src/allmydata/test/test_crawler.py
@@ -1,5 +1,6 @@
 
 import time
+import sys
 import os.path
 from twisted.trial import unittest
 from twisted.application import service
@@ -285,15 +286,20 @@ class Basic(unittest.TestCase, StallMixin, pollmixin.PollMixin):
         # seconds), the overhead is enough to make a nominal 50% usage more
         # like 30%. Forcing sleep_time to 0 only gets us 67% usage.
 
-        # who knows what will happen on our slower buildslaves. I'll ditch
-        # the cycles>1 test first.
+        # the windows/cygwin buildslaves, which are slow (even by windows
+        # standards) and have low-resolution timers, get more like 7% usage.
+        # On windows I'll extend the allowable range.
+
+        min_ok = 20
+        if "cygwin" in sys.platform.lower() or "win32" in sys.platform.lower():
+            min_ok = 3
 
         start = time.time()
         d = self.stall(delay=4.0)
         def _done(res):
             elapsed = time.time() - start
             percent = 100.0 * c.accumulated / elapsed
-            self.failUnless(20 < percent < 70, "crawler got %d%%" % percent)
+            self.failUnless(min_ok < percent < 70, "crawler got %d%%" % percent)
             self.failUnless(c.cycles >= 1, c.cycles)
         d.addCallback(_done)
         return d
@@ -318,3 +324,4 @@ class Basic(unittest.TestCase, StallMixin, pollmixin.PollMixin):
             return c.first_cycle_finished
         d = self.poll(_check)
         return d
+
-- 
2.45.2