[ARVADOS] updated: 1.1.0-172-g95ec747
Git user
git at public.curoverse.com
Mon Nov 27 13:17:18 EST 2017
Summary of changes:
build/run-tests.sh | 1 +
sdk/go/arvados/error.go | 8 ++++----
services/keep-web/cadaver_test.go | 11 +++++++++++
services/keep-web/handler.go | 16 ++++++++++------
services/keep-web/webdav.go | 23 ++++++++++++++++++++---
5 files changed, 46 insertions(+), 13 deletions(-)
via 95ec747218f048e5bbfb986ff4eaeba2d3d2f80b (commit)
via 31f796ae50a95b7e5799095e4eaebc66968847df (commit)
via b1280706e42852ad3f7cac4dd4c64896837ead38 (commit)
from 2fcbfc106c807aa17d2f73ce40fe2a64ed4c5b13 (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 95ec747218f048e5bbfb986ff4eaeba2d3d2f80b
Author: Tom Clegg <tclegg at veritasgenetics.com>
Date: Mon Nov 27 13:12:53 2017 -0500
12483: Error 405 if writing to PDH, 403 if lacking write permission.
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg at veritasgenetics.com>
diff --git a/services/keep-web/cadaver_test.go b/services/keep-web/cadaver_test.go
index 02bdf7e..52d30b0 100644
--- a/services/keep-web/cadaver_test.go
+++ b/services/keep-web/cadaver_test.go
@@ -11,6 +11,7 @@ import (
"net/url"
"os"
"os/exec"
+ "strings"
"git.curoverse.com/arvados.git/sdk/go/arvados"
"git.curoverse.com/arvados.git/sdk/go/arvadostest"
@@ -156,6 +157,16 @@ func (s *IntegrationSuite) TestWebdavWithCadaver(c *check.C) {
cmd: "get newdir2/testfile2 '" + checkfile.Name() + "'\n",
match: `(?ms).*Downloading .* failed.*`,
},
+ {
+ path: "/c=" + arvadostest.UserAgreementCollection + "/t=" + arv.AuthToken + "/",
+ cmd: "put '" + localfile.Name() + "' foo\n",
+ match: `(?ms).*Uploading .* failed:.*403 Forbidden.*`,
+ },
+ {
+ path: "/c=" + strings.Replace(arvadostest.FooAndBarFilesInDirPDH, "+", "-", -1) + "/t=" + arv.AuthToken + "/",
+ cmd: "put '" + localfile.Name() + "' foo\n",
+ match: `(?ms).*Uploading .* failed:.*405 Method Not Allowed.*`,
+ },
} {
c.Logf("%s %+v", "http://"+s.testServer.Addr, trial)
diff --git a/services/keep-web/handler.go b/services/keep-web/handler.go
index 576ecdb..c9148a5 100644
--- a/services/keep-web/handler.go
+++ b/services/keep-web/handler.go
@@ -10,6 +10,7 @@ import (
"html"
"html/template"
"io"
+ "log"
"net/http"
"net/url"
"os"
@@ -123,7 +124,12 @@ func (uos *updateOnSuccess) WriteHeader(code int) {
uos.sentHeader = true
if code >= 200 && code < 400 {
if uos.err = uos.update(); uos.err != nil {
- http.Error(uos.ResponseWriter, uos.err.Error(), http.StatusInternalServerError)
+ code := http.StatusInternalServerError
+ if err, ok := uos.err.(*arvados.TransactionError); ok {
+ code = err.StatusCode
+ }
+ log.Printf("update() changes response to HTTP %d: %T %q", code, uos.err, uos.err)
+ http.Error(uos.ResponseWriter, uos.err.Error(), code)
return
}
}
@@ -414,7 +420,7 @@ func (h *handler) ServeHTTP(wOrig http.ResponseWriter, r *http.Request) {
if writing {
// Save the collection only if/when all
// webdav->filesystem operations succeed --
- // and send a 500 error the modified
+ // and send a 500 error if the modified
// collection can't be saved.
w = &updateOnSuccess{
ResponseWriter: w,
@@ -430,10 +436,8 @@ func (h *handler) ServeHTTP(wOrig http.ResponseWriter, r *http.Request) {
},
LockSystem: h.webdavLS,
Logger: func(_ *http.Request, err error) {
- if os.IsNotExist(err) {
- statusCode, statusText = http.StatusNotFound, err.Error()
- } else if err != nil {
- statusCode, statusText = http.StatusInternalServerError, err.Error()
+ if err != nil {
+ log.Printf("error from webdav handler: %q", err)
}
},
}
diff --git a/services/keep-web/webdav.go b/services/keep-web/webdav.go
index 3e12f27..3ceb0ed 100644
--- a/services/keep-web/webdav.go
+++ b/services/keep-web/webdav.go
@@ -61,12 +61,16 @@ func (fs *webdavFS) Mkdir(ctx context.Context, name string, perm os.FileMode) er
func (fs *webdavFS) OpenFile(ctx context.Context, name string, flag int, perm os.FileMode) (f webdav.File, err error) {
writing := flag&(os.O_WRONLY|os.O_RDWR) != 0
if writing {
- if !fs.writing {
- return nil, errReadOnly
- }
fs.makeparents(name)
}
f, err = fs.collfs.OpenFile(name, flag, perm)
+ if !fs.writing {
+ // webdav module returns 404 on all OpenFile errors,
+ // but returns 405 Method Not Allowed if OpenFile()
+ // succeeds but Write() or Close() fails. We'd rather
+ // have 405.
+ f = writeFailer{File: f, err: errReadOnly}
+ }
return
}
@@ -89,6 +93,19 @@ func (fs *webdavFS) Stat(ctx context.Context, name string) (os.FileInfo, error)
return fs.collfs.Stat(name)
}
+type writeFailer struct {
+ webdav.File
+ err error
+}
+
+func (wf writeFailer) Write([]byte) (int, error) {
+ return 0, wf.err
+}
+
+func (wf writeFailer) Close() error {
+ return wf.err
+}
+
// noLockSystem implements webdav.LockSystem by returning success for
// every possible locking operation, even though it has no side
// effects such as actually locking anything. This works for a
commit 31f796ae50a95b7e5799095e4eaebc66968847df
Author: Tom Clegg <tclegg at veritasgenetics.com>
Date: Mon Nov 27 13:10:51 2017 -0500
12483: Fix loading error details from API error response.
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg at veritasgenetics.com>
diff --git a/sdk/go/arvados/error.go b/sdk/go/arvados/error.go
index 773a2e6..9a04855 100644
--- a/sdk/go/arvados/error.go
+++ b/sdk/go/arvados/error.go
@@ -17,7 +17,7 @@ type TransactionError struct {
URL url.URL
StatusCode int
Status string
- errors []string
+ Errors []string
}
func (e TransactionError) Error() (s string) {
@@ -25,8 +25,8 @@ func (e TransactionError) Error() (s string) {
if e.Status != "" {
s = s + ": " + e.Status
}
- if len(e.errors) > 0 {
- s = s + ": " + strings.Join(e.errors, "; ")
+ if len(e.Errors) > 0 {
+ s = s + ": " + strings.Join(e.Errors, "; ")
}
return
}
@@ -35,7 +35,7 @@ func newTransactionError(req *http.Request, resp *http.Response, buf []byte) *Tr
var e TransactionError
if json.Unmarshal(buf, &e) != nil {
// No JSON-formatted error response
- e.errors = nil
+ e.Errors = nil
}
e.Method = req.Method
e.URL = *req.URL
commit b1280706e42852ad3f7cac4dd4c64896837ead38
Author: Tom Clegg <tclegg at veritasgenetics.com>
Date: Mon Nov 27 13:08:28 2017 -0500
12483: Recover from errant empty dirs where GOPATH symlink goes.
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg at veritasgenetics.com>
diff --git a/build/run-tests.sh b/build/run-tests.sh
index e1e83ed..43e601e 100755
--- a/build/run-tests.sh
+++ b/build/run-tests.sh
@@ -457,6 +457,7 @@ export PERLLIB="$PERLINSTALLBASE/lib/perl5:${PERLLIB:+$PERLLIB}"
export GOPATH
mkdir -p "$GOPATH/src/git.curoverse.com"
+rmdir --parents "$GOPATH/src/git.curoverse.com/arvados.git/tmp/GOPATH"
ln -sfT "$WORKSPACE" "$GOPATH/src/git.curoverse.com/arvados.git" \
|| fatal "symlink failed"
go get -v github.com/kardianos/govendor \
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list