17154: Copy updates on federated users to local cluster
authorPeter Amstutz <peter.amstutz@curii.com>
Fri, 20 Nov 2020 21:01:25 +0000 (16:01 -0500)
committerNico Cesar <nico@nicocesar.com>
Thu, 10 Dec 2020 20:27:10 +0000 (15:27 -0500)
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <peter.amstutz@curii.com>

lib/controller/federation/conn.go

index 3ec17c17ed9e3ced78954fb9985026130bd34cb1..5571e89e9e3d7746689e1fb37b7fc2ac7d05d39c 100644 (file)
@@ -526,7 +526,18 @@ func (conn *Conn) UserUpdate(ctx context.Context, options arvados.UpdateOptions)
        if options.BypassFederation {
                return conn.local.UserUpdate(ctx, options)
        }
-       return conn.chooseBackend(options.UUID).UserUpdate(ctx, options)
+       resp, err := conn.chooseBackend(options.UUID).UserUpdate(ctx, options)
+       if err != nil {
+               return resp, err
+       }
+       if options.UUID[:5] != conn.cluster.ClusterID {
+               // Copy the updated user record to the local cluster
+               err = conn.batchUpdateUsers(ctx, arvados.ListOptions{}, []arvados.User{resp})
+               if err != nil {
+                       return arvados.User{}, err
+               }
+       }
+       return resp, err
 }
 
 func (conn *Conn) UserUpdateUUID(ctx context.Context, options arvados.UpdateUUIDOptions) (arvados.User, error) {