Skip to content

Commit a9c172e

Browse files
committed
MB-65461: Aggregate user activity when fetching user details
Rather than having to wait for the activity aggregation interval, before activity is included in the user details, the activity should be aggregated whenever the user details are returned. This also ensures that we don't need to sync_activity before each check in the associated UsersTestSet tests. Change-Id: I63f66ccccab332c2df55fddc80722bb21bf8fb40 Reviewed-on: https://review.couchbase.org/c/ns_server/+/223893 Well-Formed: Build Bot <[email protected]> Reviewed-by: Steve Watanabe <[email protected]> Tested-by: Peter Searby <[email protected]>
1 parent f8b02e5 commit a9c172e

File tree

3 files changed

+9
-43
lines changed

3 files changed

+9
-43
lines changed

apps/ns_server/src/activity_aggregator.erl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020

2121
-behaviour(gen_server).
2222

23+
-export([sync_refresh/0]).
24+
2325
-export([start_link/0]).
2426
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2,
2527
code_change/3]).
@@ -35,6 +37,11 @@
3537

3638
-record(state, {refresh_timer_ref = undefined :: undefined | reference()}).
3739

40+
%% Synchronously refresh activity times
41+
sync_refresh() ->
42+
?SERVER ! refresh,
43+
gen_server:call(?SERVER, sync).
44+
3845
%%%===================================================================
3946
%%% Spawning and gen_server implementation
4047
%%%===================================================================

apps/ns_server/src/menelaus_users.erl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,8 @@ make_props_state(ItemList) ->
455455
ns_bucket:get_snapshot(all, [collections, uuid])};
456456
false -> {undefined, undefined}
457457
end,
458+
lists:member(last_activity_time, ItemList) andalso
459+
activity_aggregator:sync_refresh(),
458460
{Passwordless, TemporaryPassword, Definitions, Snapshot}.
459461

460462
select_auth_infos(KeySpec) ->

cluster_tests/testsets/users_tests.py

Lines changed: 0 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -253,8 +253,6 @@ def activity_tracking_test(self):
253253
testlib.get_succ(self.cluster, '/pools/default',
254254
auth=(user, password1))
255255

256-
sync_activity(self.cluster)
257-
258256
# No activity
259257
testlib.assert_eq(is_activity_in_ets(self.cluster), False)
260258
testlib.assert_eq(get_activity_for_user(self.cluster, user), None)
@@ -268,8 +266,6 @@ def activity_tracking_test(self):
268266
testlib.get_succ(self.cluster, '/pools/default',
269267
auth=(user, password1))
270268

271-
sync_activity(self.cluster)
272-
273269
# New activity
274270
testlib.assert_eq(is_activity_in_ets(self.cluster), True)
275271
testlib.assert_eq(get_activity_for_user(self.cluster, user) is not None,
@@ -281,8 +277,6 @@ def activity_tracking_test(self):
281277
'trackedRoles': [],
282278
'trackedGroups': []})
283279

284-
sync_activity(self.cluster)
285-
286280
# No activity
287281
testlib.assert_eq(is_activity_in_ets(self.cluster), False)
288282
testlib.assert_eq(get_activity_for_user(self.cluster, user), None)
@@ -293,8 +287,6 @@ def activity_tracking_test(self):
293287
'trackedRoles': ['admin'],
294288
'trackedGroups': []})
295289

296-
sync_activity(self.cluster)
297-
298290
# No activity
299291
testlib.assert_eq(is_activity_in_ets(self.cluster), False)
300292
testlib.assert_eq(get_activity_for_user(self.cluster, user), None)
@@ -304,8 +296,6 @@ def activity_tracking_test(self):
304296
roles=None, full_name=name1, groups='',
305297
validate_user_props=True)
306298

307-
sync_activity(self.cluster)
308-
309299
# No activity
310300
testlib.assert_eq(is_activity_in_ets(self.cluster), False)
311301
testlib.assert_eq(get_activity_for_user(self.cluster, user), None)
@@ -316,8 +306,6 @@ def activity_tracking_test(self):
316306
roles=roles, full_name=name1, groups='',
317307
validate_user_props=True)
318308

319-
sync_activity(self.cluster)
320-
321309
# No activity
322310
testlib.assert_eq(is_activity_in_ets(self.cluster), False)
323311
testlib.assert_eq(get_activity_for_user(self.cluster, user), None)
@@ -346,8 +334,6 @@ def activity_tracking_with_group_role_test(self):
346334
testlib.get_succ(self.cluster, '/pools/default',
347335
auth=(user, password1))
348336

349-
sync_activity(self.cluster)
350-
351337
# No activity
352338
testlib.assert_eq(is_activity_in_ets(self.cluster), False)
353339
testlib.assert_eq(get_activity_for_user(self.cluster, user), None)
@@ -359,8 +345,6 @@ def activity_tracking_with_group_role_test(self):
359345
testlib.get_succ(self.cluster, '/pools/default',
360346
auth=(user, password1))
361347

362-
sync_activity(self.cluster)
363-
364348
# New activity
365349
testlib.assert_eq(is_activity_in_ets(self.cluster), True)
366350
testlib.assert_eq(get_activity_for_user(self.cluster, user)
@@ -372,8 +356,6 @@ def activity_tracking_with_group_role_test(self):
372356
'trackedRoles': [],
373357
'trackedGroups': []})
374358

375-
sync_activity(self.cluster)
376-
377359
# No activity
378360
testlib.assert_eq(is_activity_in_ets(self.cluster), False)
379361
testlib.assert_eq(get_activity_for_user(self.cluster, user), None)
@@ -384,8 +366,6 @@ def activity_tracking_with_group_role_test(self):
384366
'trackedRoles': ['admin'],
385367
'trackedGroups': []})
386368

387-
sync_activity(self.cluster)
388-
389369
# No activity
390370
testlib.assert_eq(is_activity_in_ets(self.cluster), False)
391371
testlib.assert_eq(get_activity_for_user(self.cluster, user), None)
@@ -394,8 +374,6 @@ def activity_tracking_with_group_role_test(self):
394374
testlib.put_succ(self.cluster, f'/settings/rbac/groups/{group}',
395375
data={'roles': ''})
396376

397-
sync_activity(self.cluster)
398-
399377
# No activity
400378
testlib.assert_eq(is_activity_in_ets(self.cluster), False)
401379
testlib.assert_eq(get_activity_for_user(self.cluster, user), None)
@@ -405,8 +383,6 @@ def activity_tracking_with_group_role_test(self):
405383
testlib.put_succ(self.cluster, f'/settings/rbac/groups/{group}',
406384
data={'roles': 'admin'})
407385

408-
sync_activity(self.cluster)
409-
410386
# No activity
411387
testlib.assert_eq(is_activity_in_ets(self.cluster), False)
412388
testlib.assert_eq(get_activity_for_user(self.cluster, user), None)
@@ -438,8 +414,6 @@ def activity_tracking_with_group_test(self):
438414
testlib.get_succ(self.cluster, '/pools/default',
439415
auth=(user, password1))
440416

441-
sync_activity(self.cluster)
442-
443417
# No activity
444418
testlib.assert_eq(is_activity_in_ets(self.cluster), False)
445419
testlib.assert_eq(get_activity_for_user(self.cluster, user), None)
@@ -452,8 +426,6 @@ def activity_tracking_with_group_test(self):
452426
testlib.get_succ(self.cluster, '/pools/default',
453427
auth=(user, password1))
454428

455-
sync_activity(self.cluster)
456-
457429
# New activity
458430
testlib.assert_eq(is_activity_in_ets(self.cluster), True)
459431
testlib.assert_eq(get_activity_for_user(self.cluster, user)
@@ -465,8 +437,6 @@ def activity_tracking_with_group_test(self):
465437
'trackedRoles': [],
466438
'trackedGroups': []})
467439

468-
sync_activity(self.cluster)
469-
470440
# No activity
471441
testlib.assert_eq(is_activity_in_ets(self.cluster), False)
472442
testlib.assert_eq(get_activity_for_user(self.cluster, user), None)
@@ -477,8 +447,6 @@ def activity_tracking_with_group_test(self):
477447
'trackedRoles': [],
478448
'trackedGroups': [group]})
479449

480-
sync_activity(self.cluster)
481-
482450
# No activity
483451
testlib.assert_eq(is_activity_in_ets(self.cluster), False)
484452
testlib.assert_eq(get_activity_for_user(self.cluster, user), None)
@@ -488,8 +456,6 @@ def activity_tracking_with_group_test(self):
488456
roles=roles, full_name=name1, groups='',
489457
validate_user_props=True)
490458

491-
sync_activity(self.cluster)
492-
493459
# No activity
494460
testlib.assert_eq(is_activity_in_ets(self.cluster), False)
495461
testlib.assert_eq(get_activity_for_user(self.cluster, user), None)
@@ -500,8 +466,6 @@ def activity_tracking_with_group_test(self):
500466
roles=roles, full_name=name1, groups=group,
501467
validate_user_props=True)
502468

503-
sync_activity(self.cluster)
504-
505469
# No activity
506470
testlib.assert_eq(is_activity_in_ets(self.cluster), False)
507471
testlib.assert_eq(get_activity_for_user(self.cluster, user), None)
@@ -1051,13 +1015,6 @@ def unlock_admin(cluster):
10511015
auth=("@localtoken", token))
10521016

10531017

1054-
def sync_activity(cluster):
1055-
testlib.diag_eval(
1056-
cluster.get_node_from_hostname(cluster.get_orchestrator_node()[0]),
1057-
"activity_aggregator ! refresh,"
1058-
"gen_server:call(activity_aggregator, sync)")
1059-
1060-
10611018
def post_activity(cluster, json):
10621019
r = testlib.post_succ(cluster, '/settings/security/userActivity',
10631020
json=json)

0 commit comments

Comments
 (0)