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>
Tue, 24 Nov 2020 15:02:57 +0000 (10:02 -0500)
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <peter.amstutz@curii.com>

lib/controller/federation/conn.go

index f07c3b63167d577f722b085ff56de252a73f251f..7cfb2b579843007a85c241059c0b9abba248bca3 100644 (file)
@@ -454,7 +454,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) {