Skip to content

Commit ad933e4

Browse files
MB-64910 MB-61292: Make sure old DEKs are removed...
... when a new bucket is created Scenario: 1. Create 2 node cluster with a bucket 2. Remove node#2 3. Readd node#2 to the cluster. At step #3 node#2 will still have the bucket directory with old DEKs (from the time when it was part of the cluster). It will cause errors with update of integrrity keys (because that old DEK will not be readable). Since this DEKs is useless anyway, it seems like it makes sense to just garbage collect it. Change-Id: I89eb5f21783a54f4ef6cd625ad520d740cd4e44e Reviewed-on: https://review.couchbase.org/c/ns_server/+/223327 Tested-by: Timofey Barmin <[email protected]> Reviewed-by: Navdeep S Boparai <[email protected]> Well-Formed: Build Bot <[email protected]>
1 parent af631fc commit ad933e4

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

apps/ns_server/src/cb_cluster_secrets.erl

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1360,8 +1360,7 @@ maybe_update_deks(Kind, #state{deks = CurDeks} = OldState) ->
13601360
case maps:find(Kind, CurDeks) of
13611361
{ok, _} -> OldState;
13621362
error ->
1363-
create_kind_stats(Kind),
1364-
EmptyDeks = new_dek_info(undefined, [], false),
1363+
EmptyDeks = new_dek_info(Kind, undefined, [], false),
13651364
OldState#state{deks = CurDeks#{Kind => EmptyDeks}}
13661365
end,
13671366

@@ -1808,8 +1807,8 @@ read_all_deks(#state{} = State) ->
18081807
[Kind, Errors]),
18091808
exit({failed_to_read_keys, Errors});
18101809
false ->
1811-
create_kind_stats(Kind),
1812-
{true, new_dek_info(ActiveId, Keys, IsEnabled)}
1810+
{true, new_dek_info(Kind, ActiveId, Keys,
1811+
IsEnabled)}
18131812
end;
18141813
{succ, {error, not_found}} ->
18151814
false
@@ -1828,9 +1827,12 @@ reread_deks(Kind, #state{deks = DeksInfo} = State) ->
18281827
end, CurDeks),
18291828
State#state{deks = DeksInfo#{Kind => KindDeks#{deks => NewDeks}}}.
18301829

1831-
-spec new_dek_info(undefined | cb_deks:dek_id(), [cb_deks:dek()],
1832-
boolean()) -> deks_info().
1833-
new_dek_info(ActiveId, Keys, IsEnabled) ->
1830+
-spec new_dek_info(cb_deks:dek_kind(), undefined | cb_deks:dek_id(),
1831+
[cb_deks:dek()], boolean()) -> deks_info().
1832+
new_dek_info(Kind, ActiveId, Keys, IsEnabled) ->
1833+
create_kind_stats(Kind),
1834+
InUse = lists:map(fun (#{id := Id}) -> Id end, Keys),
1835+
encryption_service:garbage_collect_keys(Kind, InUse),
18341836
#{active_id => ActiveId,
18351837
deks => Keys,
18361838
is_enabled => IsEnabled,

0 commit comments

Comments
 (0)