[ARVADOS] updated: 1.1.0-185-g49707c4

Git user git at public.curoverse.com
Sat Nov 25 02:18:11 EST 2017


Summary of changes:
 build/run-tests.sh                   |   4 +-
 sdk/go/asyncbuf/buf.go               | 108 ++++++++++
 sdk/go/asyncbuf/buf_test.go          | 245 ++++++++++++++++++++++
 sdk/go/keepclient/hashcheck.go       |  15 +-
 sdk/go/keepclient/keepclient.go      |  17 +-
 sdk/go/keepclient/keepclient_test.go |  16 +-
 sdk/go/keepclient/support.go         |  20 +-
 sdk/go/streamer/streamer.go          | 158 ---------------
 sdk/go/streamer/streamer_test.go     | 381 -----------------------------------
 sdk/go/streamer/transfer.go          | 310 ----------------------------
 services/keepproxy/keepproxy_test.go |  29 +++
 11 files changed, 409 insertions(+), 894 deletions(-)
 create mode 100644 sdk/go/asyncbuf/buf.go
 create mode 100644 sdk/go/asyncbuf/buf_test.go
 delete mode 100644 sdk/go/streamer/streamer.go
 delete mode 100644 sdk/go/streamer/streamer_test.go
 delete mode 100644 sdk/go/streamer/transfer.go

       via  49707c44d918ffd1c8f7d90012f9e4fba30c9542 (commit)
       via  d15a62ff5e6f0c1133f670bbd7c4efd2930044f5 (commit)
       via  a815150a573560278936f9534f14e2650345ef88 (commit)
       via  08fe6b0770ad8b4aa5115052126f1e0d51dca1fa (commit)
       via  4f1a135e93df78bb833dff32562efe713c6f690e (commit)
       via  abc241fb83523ae5ae5905ae47210f15d7e0671c (commit)
      from  7ad3a743e6dfa9f6084affc34346f42f9db8c3fb (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


commit 49707c44d918ffd1c8f7d90012f9e4fba30c9542
Merge: 7ad3a74 d15a62f
Author: Tom Clegg <tclegg at veritasgenetics.com>
Date:   Sat Nov 25 02:17:18 2017 -0500

    Merge branch '12475-asyncbuf'
    
    refs #12475
    
    Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg at veritasgenetics.com>


commit d15a62ff5e6f0c1133f670bbd7c4efd2930044f5
Merge: a815150 7ad3a74
Author: Tom Clegg <tclegg at veritasgenetics.com>
Date:   Sat Nov 25 02:16:05 2017 -0500

    12475: Merge branch 'master' into 12475-asyncbuf
    
    Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg at veritasgenetics.com>


commit a815150a573560278936f9534f14e2650345ef88
Author: Tom Clegg <tclegg at veritasgenetics.com>
Date:   Sat Nov 25 02:05:36 2017 -0500

    12475: Return non-nil error at EOF even if len(p)==0.
    
    Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg at veritasgenetics.com>

diff --git a/sdk/go/asyncbuf/buf.go b/sdk/go/asyncbuf/buf.go
index ebe0301..05af02f 100644
--- a/sdk/go/asyncbuf/buf.go
+++ b/sdk/go/asyncbuf/buf.go
@@ -87,17 +87,22 @@ type reader struct {
 func (r *reader) Read(p []byte) (int, error) {
 	r.b.cond.L.Lock()
 	for {
-		if r.b.data.Len() > r.read || len(p) == 0 {
+		switch {
+		case r.read < r.b.data.Len():
 			buf := r.b.data.Bytes()
 			r.b.cond.L.Unlock()
 			n := copy(p, buf[r.read:])
 			r.read += n
 			return n, nil
-		}
-		if r.b.err != nil {
+		case r.b.err != nil || len(p) == 0:
+			// r.b.err != nil means we reached EOF.  And
+			// even if we're not at EOF, there's no need
+			// to block if len(p)==0.
+			err := r.b.err
 			r.b.cond.L.Unlock()
-			return 0, r.b.err
+			return 0, err
+		default:
+			r.b.cond.Wait()
 		}
-		r.b.cond.Wait()
 	}
 }
diff --git a/sdk/go/asyncbuf/buf_test.go b/sdk/go/asyncbuf/buf_test.go
index 198ebaf..cc742a8 100644
--- a/sdk/go/asyncbuf/buf_test.go
+++ b/sdk/go/asyncbuf/buf_test.go
@@ -90,6 +90,53 @@ func (s *Suite) TestWriteReadCloseRead(c *check.C) {
 	<-done
 }
 
+func (s *Suite) TestReadAtEOF(c *check.C) {
+	buf := make([]byte, 8)
+
+	b := NewBuffer([]byte{1, 2, 3})
+
+	r := b.NewReader()
+	n, err := r.Read(buf)
+	c.Check(n, check.Equals, 3)
+	c.Check(err, check.IsNil)
+
+	// Reading zero bytes at EOF, but before Close(), doesn't
+	// block or error
+	done := make(chan bool)
+	go func() {
+		defer close(done)
+		n, err = r.Read(buf[:0])
+		c.Check(n, check.Equals, 0)
+		c.Check(err, check.IsNil)
+	}()
+	select {
+	case <-done:
+	case <-time.After(time.Second):
+		c.Error("timeout")
+	}
+
+	b.Close()
+
+	// Reading zero bytes after Close() returns EOF
+	n, err = r.Read(buf[:0])
+	c.Check(n, check.Equals, 0)
+	c.Check(err, check.Equals, io.EOF)
+
+	// Reading from start after Close() returns 3 bytes, then EOF
+	r = b.NewReader()
+	n, err = r.Read(buf)
+	c.Check(n, check.Equals, 3)
+	if err != nil {
+		c.Check(err, check.Equals, io.EOF)
+	}
+	n, err = r.Read(buf[:0])
+	c.Check(n, check.Equals, 0)
+	c.Check(err, check.Equals, io.EOF)
+	n, err = r.Read(buf)
+	c.Check(n, check.Equals, 0)
+	c.Check(err, check.Equals, io.EOF)
+}
+
 func (s *Suite) TestCloseWithError(c *check.C) {
 	errFake := errors.New("it's not even a real error")
 

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


hooks/post-receive
-- 




More information about the arvados-commits mailing list