[ARVADOS] created: d9166dfa6e46321e654f13fac59e8d10362ad169

git at public.curoverse.com git at public.curoverse.com
Mon Oct 6 16:07:14 EDT 2014


        at  d9166dfa6e46321e654f13fac59e8d10362ad169 (commit)


commit d9166dfa6e46321e654f13fac59e8d10362ad169
Author: Tom Clegg <tom at curoverse.com>
Date:   Mon Oct 6 16:05:54 2014 -0400

    3828: Wait for listener to start before connecting to it. Fix test
    panic in listener.Close() when listener does not exist.

diff --git a/services/keepproxy/keepproxy.go b/services/keepproxy/keepproxy.go
index cd0a872..de4ccaf 100644
--- a/services/keepproxy/keepproxy.go
+++ b/services/keepproxy/keepproxy.go
@@ -104,6 +104,7 @@ func main() {
 		s := <-sig
 		log.Println("caught signal:", s)
 		listener.Close()
+		listener = nil
 	}(term)
 	signal.Notify(term, syscall.SIGTERM)
 	signal.Notify(term, syscall.SIGINT)
diff --git a/services/keepproxy/keepproxy_test.go b/services/keepproxy/keepproxy_test.go
index 5944b2c..f6d163c 100644
--- a/services/keepproxy/keepproxy_test.go
+++ b/services/keepproxy/keepproxy_test.go
@@ -34,6 +34,25 @@ func pythonDir() string {
 	return fmt.Sprintf("%s/../../sdk/python/tests", cwd)
 }
 
+// Wait (up to 1 second) for keepproxy to listen on a port. This
+// avoids a race condition where we hit a "connection refused" error
+// because we start testing the proxy too soon.
+func waitForListener() {
+	const (ms = 5)
+	for i := 0; listener == nil && i < 1000; i += ms {
+		time.Sleep(ms * time.Millisecond)
+	}
+	if listener == nil {
+		log.Fatalf("Timed out waiting for listener to start")
+	}
+}
+
+func closeListener() {
+	if listener != nil {
+		listener.Close()
+	}
+}
+
 func (s *ServerRequiredSuite) SetUpSuite(c *C) {
 	cwd, _ := os.Getwd()
 	defer os.Chdir(cwd)
@@ -155,7 +174,8 @@ func (s *ServerRequiredSuite) TestPutAskGet(c *C) {
 	os.Setenv("ARVADOS_EXTERNAL_CLIENT", "")
 	log.Print("keepclient created")
 
-	defer listener.Close()
+	waitForListener()
+	defer closeListener()
 
 	hash := fmt.Sprintf("%x", md5.Sum([]byte("foo")))
 	var hash2 string
@@ -199,7 +219,8 @@ func (s *ServerRequiredSuite) TestPutAskGetForbidden(c *C) {
 	log.Print("TestPutAndGet start")
 
 	kc := runProxy(c, []string{"keepproxy"}, "123abc", 29951)
-	defer listener.Close()
+	waitForListener()
+	defer closeListener()
 
 	log.Print("keepclient created")
 
@@ -240,7 +261,8 @@ func (s *ServerRequiredSuite) TestGetDisabled(c *C) {
 	log.Print("TestGetDisabled start")
 
 	kc := runProxy(c, []string{"keepproxy", "-no-get"}, "4axaw8zxe0qm22wa6urpp5nskcne8z88cvbupv653y1njyi05h", 29952)
-	defer listener.Close()
+	waitForListener()
+	defer closeListener()
 
 	hash := fmt.Sprintf("%x", md5.Sum([]byte("baz")))
 
@@ -279,7 +301,8 @@ func (s *ServerRequiredSuite) TestPutDisabled(c *C) {
 	log.Print("TestPutDisabled start")
 
 	kc := runProxy(c, []string{"keepproxy", "-no-put"}, "4axaw8zxe0qm22wa6urpp5nskcne8z88cvbupv653y1njyi05h", 29953)
-	defer listener.Close()
+	waitForListener()
+	defer closeListener()
 
 	{
 		hash2, rep, err := kc.PutB([]byte("quux"))

commit aa07ac47cff1ae6428b1a7b7a993f2530afab5a3
Author: Tom Clegg <tom at curoverse.com>
Date:   Mon Oct 6 16:04:33 2014 -0400

    3828: Use defer to close pidfile. Avoids leftover pidfile if Listen fails.

diff --git a/services/keepproxy/keepproxy.go b/services/keepproxy/keepproxy.go
index 2f36fd2..cd0a872 100644
--- a/services/keepproxy/keepproxy.go
+++ b/services/keepproxy/keepproxy.go
@@ -80,12 +80,12 @@ func main() {
 
 	if pidfile != "" {
 		f, err := os.Create(pidfile)
-		if err == nil {
-			fmt.Fprint(f, os.Getpid())
-			f.Close()
-		} else {
-			log.Printf("Error writing pid file (%s): %s", pidfile, err.Error())
+		if err != nil {
+			log.Fatalf("Error writing pid file (%s): %s", pidfile, err.Error())
 		}
+		fmt.Fprint(f, os.Getpid())
+		f.Close()
+		defer os.Remove(pidfile)
 	}
 
 	kc.Want_replicas = default_replicas
@@ -114,10 +114,6 @@ func main() {
 	http.Serve(listener, MakeRESTRouter(!no_get, !no_put, &kc))
 
 	log.Println("shutting down")
-
-	if pidfile != "" {
-		os.Remove(pidfile)
-	}
 }
 
 type ApiTokenCache struct {

commit 5c1dafae8f4bb4aefac935337537c5e104e61278
Author: Tom Clegg <tom at curoverse.com>
Date:   Mon Oct 6 15:56:17 2014 -0400

    3828: Remove duplicate "write pidfile" block.

diff --git a/services/keepproxy/keepproxy.go b/services/keepproxy/keepproxy.go
index a927b87..2f36fd2 100644
--- a/services/keepproxy/keepproxy.go
+++ b/services/keepproxy/keepproxy.go
@@ -108,16 +108,6 @@ func main() {
 	signal.Notify(term, syscall.SIGTERM)
 	signal.Notify(term, syscall.SIGINT)
 
-	if pidfile != "" {
-		f, err := os.Create(pidfile)
-		if err == nil {
-			fmt.Fprint(f, os.Getpid())
-			f.Close()
-		} else {
-			log.Printf("Error writing pid file (%s): %s", pidfile, err.Error())
-		}
-	}
-
 	log.Printf("Arvados Keep proxy started listening on %v with server list %v", listener.Addr(), kc.ServiceRoots())
 
 	// Start listening for requests.

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list