projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
14325: Merge branch 'master'
[arvados.git]
/
lib
/
controller
/
fed_generic.go
diff --git
a/lib/controller/fed_generic.go
b/lib/controller/fed_generic.go
index 0630217b6e6ac0aae1f6b26893ef4e6bd855832a..9c8b1614bcdcceaa4be70bcba15fa694e26940dc 100644
(file)
--- a/
lib/controller/fed_generic.go
+++ b/
lib/controller/fed_generic.go
@@
-17,10
+17,20
@@
import (
"git.curoverse.com/arvados.git/sdk/go/httpserver"
)
"git.curoverse.com/arvados.git/sdk/go/httpserver"
)
+type federatedRequestDelegate func(
+ h *genericFederatedRequestHandler,
+ effectiveMethod string,
+ clusterId *string,
+ uuid string,
+ remainder string,
+ w http.ResponseWriter,
+ req *http.Request) bool
+
type genericFederatedRequestHandler struct {
type genericFederatedRequestHandler struct {
- next http.Handler
- handler *Handler
- matcher *regexp.Regexp
+ next http.Handler
+ handler *Handler
+ matcher *regexp.Regexp
+ delegates []federatedRequestDelegate
}
func (h *genericFederatedRequestHandler) remoteQueryUUIDs(w http.ResponseWriter,
}
func (h *genericFederatedRequestHandler) remoteQueryUUIDs(w http.ResponseWriter,
@@
-130,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 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
*clusterId = u[0:5]
queryClusters[u[0:5]] = append(queryClusters[u[0:5]], u)
expectCount += 1
@@
-138,7
+148,7
@@
func (h *genericFederatedRequestHandler) handleMultiClusterQuery(w http.Response
}
}
} else if op == "=" {
}
}
} 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
*clusterId = u[0:5]
queryClusters[u[0:5]] = append(queryClusters[u[0:5]], u)
expectCount += 1
@@
-285,6
+295,17
@@
func (h *genericFederatedRequestHandler) ServeHTTP(w http.ResponseWriter, req *h
return
}
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, uuid, m[3], w, req) {
+ return
+ }
+ }
+
if clusterId == "" || clusterId == h.handler.Cluster.ClusterID {
h.next.ServeHTTP(w, req)
} else {
if clusterId == "" || clusterId == h.handler.Cluster.ClusterID {
h.next.ServeHTTP(w, req)
} else {