17154: Add comment. Use strings.HasPrefix
authorPeter Amstutz <peter.amstutz@curii.com>
Mon, 23 Nov 2020 15:59:06 +0000 (10:59 -0500)
committerPeter Amstutz <peter.amstutz@curii.com>
Mon, 23 Nov 2020 15:59:06 +0000 (10:59 -0500)
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <peter.amstutz@curii.com>

apps/workbench/app/controllers/users_controller.rb
lib/controller/federation/conn.go

index d782bcb40033b658a5cbfee34aba526662999ab1..21ea7a8e693e00ccd5c4599275b44fc33b1e9cdb 100644 (file)
@@ -39,6 +39,17 @@ class UsersController < ApplicationController
 
   def profile
     params[:offer_return_to] ||= params[:return_to]
+
+    # In a federation situation, when you get a user record using
+    # "current user of token" it can fetch a stale user record from
+    # the local cluster. So even if profile settings were just written
+    # to the user record on the login cluster (because the user just
+    # filled out the profile), those profile settings may not appear
+    # in the "current user" response because it is returning a cached
+    # record from the local cluster.
+    #
+    # In this case, explicitly fetching user record forces it to get a
+    # fresh record from the login cluster.
     Thread.current[:user] = User.find(current_user.uuid)
   end
 
index 0d155c6732c45e4ae38de1b541c7440b8e1f114c..130368124cdd904a40ceb3938122181594c26804 100644 (file)
@@ -466,7 +466,7 @@ func (conn *Conn) UserUpdate(ctx context.Context, options arvados.UpdateOptions)
        if err != nil {
                return resp, err
        }
-       if options.UUID[:5] != conn.cluster.ClusterID {
+       if !strings.HasPrefix(options.UUID, conn.cluster.ClusterID) {
                // Copy the updated user record to the local cluster
                err = conn.batchUpdateUsers(ctx, arvados.ListOptions{}, []arvados.User{resp})
                if err != nil {