14325: Merge branch 'master'
[arvados.git] / lib / controller / fed_generic.go
index 7d5b63d3107a66384059403d6016dc5653e03dee..9c8b1614bcdcceaa4be70bcba15fa694e26940dc 100644 (file)
@@ -6,7 +6,6 @@ package controller
 
 import (
        "bytes"
-       "context"
        "encoding/json"
        "fmt"
        "io/ioutil"
@@ -66,16 +65,12 @@ func (h *genericFederatedRequestHandler) remoteQueryUUIDs(w http.ResponseWriter,
                rc := multiClusterQueryResponseCollector{clusterID: clusterID}
 
                var resp *http.Response
-               var cancel context.CancelFunc
                if clusterID == h.handler.Cluster.ClusterID {
-                       resp, cancel, err = h.handler.localClusterRequest(&remoteReq)
+                       resp, err = h.handler.localClusterRequest(&remoteReq)
                } else {
-                       resp, cancel, err = h.handler.remoteClusterRequest(clusterID, &remoteReq)
+                       resp, err = h.handler.remoteClusterRequest(clusterID, &remoteReq)
                }
                rc.collectResponse(resp, err)
-               if cancel != nil {
-                       cancel()
-               }
 
                if rc.error != nil {
                        return nil, "", rc.error
@@ -145,7 +140,7 @@ func (h *genericFederatedRequestHandler) handleMultiClusterQuery(w http.Response
                if op == "in" {
                        if rhs, ok := filter[2].([]interface{}); ok {
                                for _, i := range rhs {
-                                       if u, ok := i.(string); ok {
+                                       if u, ok := i.(string); ok && len(u) == 27 {
                                                *clusterId = u[0:5]
                                                queryClusters[u[0:5]] = append(queryClusters[u[0:5]], u)
                                                expectCount += 1
@@ -153,7 +148,7 @@ func (h *genericFederatedRequestHandler) handleMultiClusterQuery(w http.Response
                                }
                        }
                } else if op == "=" {
-                       if u, ok := filter[2].(string); ok {
+                       if u, ok := filter[2].(string); ok && len(u) == 27 {
                                *clusterId = u[0:5]
                                queryClusters[u[0:5]] = append(queryClusters[u[0:5]], u)
                                expectCount += 1
@@ -300,8 +295,13 @@ func (h *genericFederatedRequestHandler) ServeHTTP(w http.ResponseWriter, req *h
                return
        }
 
+       var uuid string
+       if len(m[1]) > 0 {
+               // trim leading slash
+               uuid = m[1][1:]
+       }
        for _, d := range h.delegates {
-               if d(h, effectiveMethod, &clusterId, m[1], m[3], w, req) {
+               if d(h, effectiveMethod, &clusterId, uuid, m[3], w, req) {
                        return
                }
        }
@@ -309,10 +309,7 @@ func (h *genericFederatedRequestHandler) ServeHTTP(w http.ResponseWriter, req *h
        if clusterId == "" || clusterId == h.handler.Cluster.ClusterID {
                h.next.ServeHTTP(w, req)
        } else {
-               resp, cancel, err := h.handler.remoteClusterRequest(clusterId, req)
-               if cancel != nil {
-                       defer cancel()
-               }
+               resp, err := h.handler.remoteClusterRequest(clusterId, req)
                h.handler.proxy.ForwardResponse(w, resp, err)
        }
 }