[arvados] updated: 2.5.0-305-g6d03fdac5

git repository hosting git at public.arvados.org
Mon Apr 3 16:30:10 UTC 2023


Summary of changes:
 lib/controller/handler.go                   | 19 +++++++++++++++++++
 lib/controller/localdb/container_gateway.go |  3 ++-
 lib/controller/router/router.go             | 14 ++++++++++++++
 lib/controller/rpc/conn.go                  |  4 ++--
 lib/crunchrun/container_gateway.go          |  6 ++++--
 sdk/go/arvados/api.go                       |  6 ++++--
 6 files changed, 45 insertions(+), 7 deletions(-)

       via  6d03fdac5674dc88eff821f5e8ac70642f39a895 (commit)
       via  10a0c66ad8e90a297bc5c05e1ce0ea735491f5e9 (commit)
      from  d7f388108615d981636e464785129ce4a958a7f5 (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 6d03fdac5674dc88eff821f5e8ac70642f39a895
Author: Tom Clegg <tom at curii.com>
Date:   Mon Apr 3 11:23:32 2023 -0400

    18790: Fix logging noise from ENOENT.
    
    Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom at curii.com>

diff --git a/lib/controller/localdb/container_gateway.go b/lib/controller/localdb/container_gateway.go
index 77507901a..384f471db 100644
--- a/lib/controller/localdb/container_gateway.go
+++ b/lib/controller/localdb/container_gateway.go
@@ -21,6 +21,7 @@ import (
 	"net/http"
 	"net/http/httputil"
 	"net/url"
+	"os"
 	"strings"
 
 	"git.arvados.org/arvados.git/lib/controller/rpc"
@@ -231,7 +232,7 @@ func (conn *Conn) serveEmptyDir(path string, w http.ResponseWriter, r *http.Requ
 		FileSystem: webdav.NewMemFS(),
 		LockSystem: webdavfs.NoLockSystem,
 		Logger: func(r *http.Request, err error) {
-			if err != nil {
+			if err != nil && !os.IsNotExist(err) {
 				ctxlog.FromContext(r.Context()).WithError(err).Info("webdav error on empty collection fs")
 			}
 		},
diff --git a/lib/crunchrun/container_gateway.go b/lib/crunchrun/container_gateway.go
index 12bdc6b7d..7fd82a8bf 100644
--- a/lib/crunchrun/container_gateway.go
+++ b/lib/crunchrun/container_gateway.go
@@ -326,8 +326,10 @@ func (gw *Gateway) handleLogsWebDAV(w http.ResponseWriter, r *http.Request) {
 }
 
 func (gw *Gateway) webdavLogger(r *http.Request, err error) {
-	if err != nil {
-		ctxlog.FromContext(r.Context()).WithError(err).Error("error reported by webdav handler")
+	if err != nil && !os.IsNotExist(err) {
+		ctxlog.FromContext(r.Context()).WithError(err).Info("error reported by webdav handler")
+	} else {
+		ctxlog.FromContext(r.Context()).WithError(err).Debug("webdav request log")
 	}
 }
 

commit 10a0c66ad8e90a297bc5c05e1ce0ea735491f5e9
Author: Tom Clegg <tom at curii.com>
Date:   Mon Apr 3 11:23:03 2023 -0400

    18790: Fix .../containers/.../log routing.
    
    Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom at curii.com>

diff --git a/lib/controller/handler.go b/lib/controller/handler.go
index 4810ec3c2..2feae7635 100644
--- a/lib/controller/handler.go
+++ b/lib/controller/handler.go
@@ -139,6 +139,7 @@ func (h *Handler) setup() {
 
 	hs := http.NotFoundHandler()
 	hs = prepend(hs, h.proxyRailsAPI)
+	hs = prepend(hs, h.routeContainerEndpoints(rtr))
 	hs = prepend(hs, h.limitLogCreateRequests)
 	hs = h.setupProxyRemoteCluster(hs)
 	hs = prepend(hs, oidcAuthorizer.Middleware)
@@ -194,6 +195,24 @@ func (h *Handler) localClusterRequest(req *http.Request) (*http.Response, error)
 	return h.proxy.Do(req, urlOut, client)
 }
 
+// Route /arvados/v1/containers/{uuid}/log*, .../ssh, and
+// .../gateway_tunnel to rtr, pass everything else to next.
+//
+// (http.ServeMux doesn't let us route these without also routing
+// everything under /containers/, which we don't want yet.)
+func (h *Handler) routeContainerEndpoints(rtr http.Handler) middlewareFunc {
+	return func(w http.ResponseWriter, req *http.Request, next http.Handler) {
+		trim := strings.TrimPrefix(req.URL.Path, "/arvados/v1/containers/")
+		if trim != req.URL.Path && (strings.Index(trim, "/log") == 27 ||
+			strings.Index(trim, "/ssh") == 27 ||
+			strings.Index(trim, "/gateway_tunnel") == 27) {
+			rtr.ServeHTTP(w, req)
+		} else {
+			next.ServeHTTP(w, req)
+		}
+	}
+}
+
 func (h *Handler) limitLogCreateRequests(w http.ResponseWriter, req *http.Request, next http.Handler) {
 	if cap(h.limitLogCreate) > 0 && req.Method == http.MethodPost && strings.HasPrefix(req.URL.Path, "/arvados/v1/logs") {
 		select {
diff --git a/lib/controller/router/router.go b/lib/controller/router/router.go
index 703c45701..2cbd9b88d 100644
--- a/lib/controller/router/router.go
+++ b/lib/controller/router/router.go
@@ -223,6 +223,13 @@ func (rtr *router) addRoutes() {
 				return rtr.backend.ContainerSSH(ctx, *opts.(*arvados.ContainerSSHOptions))
 			},
 		},
+		{
+			arvados.EndpointContainerSSHCompat,
+			func() interface{} { return &arvados.ContainerSSHOptions{} },
+			func(ctx context.Context, opts interface{}) (interface{}, error) {
+				return rtr.backend.ContainerSSH(ctx, *opts.(*arvados.ContainerSSHOptions))
+			},
+		},
 		{
 			// arvados-client built before commit
 			// bdc29d3129f6d75aa9ce0a24ffb849a272b06f08
@@ -241,6 +248,13 @@ func (rtr *router) addRoutes() {
 				return rtr.backend.ContainerGatewayTunnel(ctx, *opts.(*arvados.ContainerGatewayTunnelOptions))
 			},
 		},
+		{
+			arvados.EndpointContainerGatewayTunnelCompat,
+			func() interface{} { return &arvados.ContainerGatewayTunnelOptions{} },
+			func(ctx context.Context, opts interface{}) (interface{}, error) {
+				return rtr.backend.ContainerGatewayTunnel(ctx, *opts.(*arvados.ContainerGatewayTunnelOptions))
+			},
+		},
 		{
 			arvados.EndpointContainerRequestCreate,
 			func() interface{} { return &arvados.CreateOptions{} },
diff --git a/lib/controller/rpc/conn.go b/lib/controller/rpc/conn.go
index 5176df59f..70a936a6f 100644
--- a/lib/controller/rpc/conn.go
+++ b/lib/controller/rpc/conn.go
@@ -356,7 +356,7 @@ func (conn *Conn) ContainerLog(ctx context.Context, options arvados.ContainerLog
 // a running container. If the returned error is nil, the caller is
 // responsible for closing sshconn.Conn.
 func (conn *Conn) ContainerSSH(ctx context.Context, options arvados.ContainerSSHOptions) (sshconn arvados.ConnectionResponse, err error) {
-	u, err := conn.baseURL.Parse("/" + strings.Replace(arvados.EndpointContainerSSH.Path, "{uuid}", options.UUID, -1))
+	u, err := conn.baseURL.Parse("/" + strings.Replace(arvados.EndpointContainerSSHCompat.Path, "{uuid}", options.UUID, -1))
 	if err != nil {
 		err = fmt.Errorf("url.Parse: %w", err)
 		return
@@ -372,7 +372,7 @@ func (conn *Conn) ContainerSSH(ctx context.Context, options arvados.ContainerSSH
 // the controller. The caller should connect the returned resp.Conn to
 // a client-side yamux session.
 func (conn *Conn) ContainerGatewayTunnel(ctx context.Context, options arvados.ContainerGatewayTunnelOptions) (tunnelconn arvados.ConnectionResponse, err error) {
-	u, err := conn.baseURL.Parse("/" + strings.Replace(arvados.EndpointContainerGatewayTunnel.Path, "{uuid}", options.UUID, -1))
+	u, err := conn.baseURL.Parse("/" + strings.Replace(arvados.EndpointContainerGatewayTunnelCompat.Path, "{uuid}", options.UUID, -1))
 	if err != nil {
 		err = fmt.Errorf("url.Parse: %w", err)
 		return
diff --git a/sdk/go/arvados/api.go b/sdk/go/arvados/api.go
index 4d67b5ad4..861b8e6ce 100644
--- a/sdk/go/arvados/api.go
+++ b/sdk/go/arvados/api.go
@@ -50,8 +50,10 @@ var (
 	EndpointContainerLock                 = APIEndpoint{"POST", "arvados/v1/containers/{uuid}/lock", ""}
 	EndpointContainerUnlock               = APIEndpoint{"POST", "arvados/v1/containers/{uuid}/unlock", ""}
 	EndpointContainerLog                  = APIEndpoint{"GET", "arvados/v1/containers/{uuid}/log{path:|/.*}", ""}
-	EndpointContainerSSH                  = APIEndpoint{"POST", "arvados/v1/connect/{uuid}/ssh", ""}            // move to /containers after #17014 fixes routing
-	EndpointContainerGatewayTunnel        = APIEndpoint{"POST", "arvados/v1/connect/{uuid}/gateway_tunnel", ""} // move to /containers after #17014 fixes routing
+	EndpointContainerSSH                  = APIEndpoint{"POST", "arvados/v1/containers/{uuid}/ssh", ""}
+	EndpointContainerSSHCompat            = APIEndpoint{"POST", "arvados/v1/connect/{uuid}/ssh", ""} // for compatibility with arvados <2.7
+	EndpointContainerGatewayTunnel        = APIEndpoint{"POST", "arvados/v1/containers/{uuid}/gateway_tunnel", ""}
+	EndpointContainerGatewayTunnelCompat  = APIEndpoint{"POST", "arvados/v1/connect/{uuid}/gateway_tunnel", ""} // for compatibility with arvados <2.7
 	EndpointContainerRequestCreate        = APIEndpoint{"POST", "arvados/v1/container_requests", "container_request"}
 	EndpointContainerRequestUpdate        = APIEndpoint{"PATCH", "arvados/v1/container_requests/{uuid}", "container_request"}
 	EndpointContainerRequestGet           = APIEndpoint{"GET", "arvados/v1/container_requests/{uuid}", ""}

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


hooks/post-receive
-- 




More information about the arvados-commits mailing list