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)
committerPeter Amstutz <peter.amstutz@curii.com>
Fri, 20 Nov 2020 21:01:25 +0000 (16:01 -0500)
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <peter.amstutz@curii.com>

lib/controller/federation/conn.go

index 986faa7b05e33e325a6bc1c15b4283ec6d79d9ed..0d155c6732c45e4ae38de1b541c7440b8e1f114c 100644 (file)
@@ -462,7 +462,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) {