From 0fe238d1f4240d22b2c58838b03a7607656652d3 Mon Sep 17 00:00:00 2001 From: Peter Amstutz Date: Mon, 23 Nov 2020 10:59:06 -0500 Subject: [PATCH] 17154: Add comment. Use strings.HasPrefix Arvados-DCO-1.1-Signed-off-by: Peter Amstutz --- apps/workbench/app/controllers/users_controller.rb | 11 +++++++++++ lib/controller/federation/conn.go | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/apps/workbench/app/controllers/users_controller.rb b/apps/workbench/app/controllers/users_controller.rb index d782bcb400..21ea7a8e69 100644 --- a/apps/workbench/app/controllers/users_controller.rb +++ b/apps/workbench/app/controllers/users_controller.rb @@ -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 diff --git a/lib/controller/federation/conn.go b/lib/controller/federation/conn.go index 0d155c6732..130368124c 100644 --- a/lib/controller/federation/conn.go +++ b/lib/controller/federation/conn.go @@ -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 { -- 2.30.2