17702: Federated lists supports cluster_id parameter
authorPeter Amstutz <peter.amstutz@curii.com>
Mon, 24 May 2021 14:33:00 +0000 (10:33 -0400)
committerPeter Amstutz <peter.amstutz@curii.com>
Mon, 24 May 2021 14:33:00 +0000 (10:33 -0400)
Use cluster_id parameter to override splitListRequest behavior in controller.

Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <peter.amstutz@curii.com>

apps/workbench/app/models/arvados_resource_list.rb
lib/controller/federation/generated.go
lib/controller/federation/list.go

index 99502bd56ed04951695e8bcb15704b64ea4b46e5..75a9429a43739f7f3c024f496d316b1d4e69cf86 100644 (file)
@@ -223,6 +223,7 @@ class ArvadosResourceList
     api_params[:filters] = @filters if @filters
     api_params[:distinct] = @distinct if @distinct
     api_params[:include_trash] = @include_trash if @include_trash
+    api_params[:cluster_id] = Rails.configuration.ClusterID
     if @fetch_multiple_pages
       # Default limit to (effectively) api server's MAX_LIMIT
       api_params[:limit] = 2**(0.size*8 - 1) - 1
index 49a2e5b7513f537f0f129fac6c8ba81103e72a29..3ede1f1154900256bcda9e589013fafe1e30e52a 100755 (executable)
@@ -18,6 +18,12 @@ import (
 //
 
 func (conn *Conn) generated_ContainerList(ctx context.Context, options arvados.ListOptions) (arvados.ContainerList, error) {
+       if options.ClusterID != "" {
+               // explicitly selected cluster
+               options.ForwardedFor = conn.cluster.ClusterID + "-" + options.ForwardedFor
+               return conn.chooseBackend(options.ClusterID).ContainerList(ctx, options)
+       }
+
        var mtx sync.Mutex
        var merged arvados.ContainerList
        var needSort atomic.Value
@@ -59,6 +65,12 @@ func (conn *Conn) generated_ContainerList(ctx context.Context, options arvados.L
 }
 
 func (conn *Conn) generated_ContainerRequestList(ctx context.Context, options arvados.ListOptions) (arvados.ContainerRequestList, error) {
+       if options.ClusterID != "" {
+               // explicitly selected cluster
+               options.ForwardedFor = conn.cluster.ClusterID + "-" + options.ForwardedFor
+               return conn.chooseBackend(options.ClusterID).ContainerRequestList(ctx, options)
+       }
+
        var mtx sync.Mutex
        var merged arvados.ContainerRequestList
        var needSort atomic.Value
@@ -100,6 +112,12 @@ func (conn *Conn) generated_ContainerRequestList(ctx context.Context, options ar
 }
 
 func (conn *Conn) generated_GroupList(ctx context.Context, options arvados.ListOptions) (arvados.GroupList, error) {
+       if options.ClusterID != "" {
+               // explicitly selected cluster
+               options.ForwardedFor = conn.cluster.ClusterID + "-" + options.ForwardedFor
+               return conn.chooseBackend(options.ClusterID).GroupList(ctx, options)
+       }
+
        var mtx sync.Mutex
        var merged arvados.GroupList
        var needSort atomic.Value
@@ -141,6 +159,12 @@ func (conn *Conn) generated_GroupList(ctx context.Context, options arvados.ListO
 }
 
 func (conn *Conn) generated_SpecimenList(ctx context.Context, options arvados.ListOptions) (arvados.SpecimenList, error) {
+       if options.ClusterID != "" {
+               // explicitly selected cluster
+               options.ForwardedFor = conn.cluster.ClusterID + "-" + options.ForwardedFor
+               return conn.chooseBackend(options.ClusterID).SpecimenList(ctx, options)
+       }
+
        var mtx sync.Mutex
        var merged arvados.SpecimenList
        var needSort atomic.Value
@@ -182,6 +206,12 @@ func (conn *Conn) generated_SpecimenList(ctx context.Context, options arvados.Li
 }
 
 func (conn *Conn) generated_UserList(ctx context.Context, options arvados.ListOptions) (arvados.UserList, error) {
+       if options.ClusterID != "" {
+               // explicitly selected cluster
+               options.ForwardedFor = conn.cluster.ClusterID + "-" + options.ForwardedFor
+               return conn.chooseBackend(options.ClusterID).UserList(ctx, options)
+       }
+
        var mtx sync.Mutex
        var merged arvados.UserList
        var needSort atomic.Value
index 183557eb15a4780bbe3388e3185ae9064dc609e3..a9ac03ee5d2ecadaaccd064e5ee133093aadd6bc 100644 (file)
@@ -22,6 +22,12 @@ import (
 // methods for other types; see generate.go.
 
 func (conn *Conn) generated_CollectionList(ctx context.Context, options arvados.ListOptions) (arvados.CollectionList, error) {
+       if options.ClusterID != "" {
+               // explicitly selected cluster
+               options.ForwardedFor = conn.cluster.ClusterID + "-" + options.ForwardedFor
+               return conn.chooseBackend(options.ClusterID).CollectionList(ctx, options)
+       }
+
        var mtx sync.Mutex
        var merged arvados.CollectionList
        var needSort atomic.Value