Skip to content

Commit f41c14f

Browse files
FxKuJan-M
andauthored
improve additional teams lookup (#2445)
* improve additional teams lookup --------- Co-authored-by: Jan Mussler <[email protected]>
1 parent 8ae769a commit f41c14f

File tree

2 files changed

+35
-9
lines changed

2 files changed

+35
-9
lines changed

pkg/teams/postgres_team.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,20 @@ func (ptm *PostgresTeamMap) fetchAdditionalTeams(team string, superuserTeams boo
6666
teams = (*ptm)[team].AdditionalTeams
6767
}
6868
if transitive {
69-
exclude = append(exclude, team)
7069
for _, additionalTeam := range teams {
7170
if !(util.SliceContains(exclude, additionalTeam)) {
71+
// remember to not check team and additionalTeam again
72+
exclude = append(exclude, additionalTeam)
7273
transitiveTeams := (*ptm).fetchAdditionalTeams(additionalTeam, superuserTeams, transitive, exclude)
7374
for _, transitiveTeam := range transitiveTeams {
74-
if !(util.SliceContains(exclude, transitiveTeam)) && !(util.SliceContains(teams, transitiveTeam)) {
75-
teams = append(teams, transitiveTeam)
75+
if !(util.SliceContains(exclude, transitiveTeam)) {
76+
// remember to not check transitive team again in case
77+
// it is one of the next additional teams of the outer loop
78+
exclude = append(exclude, transitiveTeam)
79+
if !(util.SliceContains(teams, transitiveTeam)) {
80+
// found a new transitive additional team
81+
teams = append(teams, transitiveTeam)
82+
}
7683
}
7784
}
7885
}
@@ -84,12 +91,12 @@ func (ptm *PostgresTeamMap) fetchAdditionalTeams(team string, superuserTeams boo
8491

8592
// GetAdditionalTeams function to retrieve list of additional teams
8693
func (ptm *PostgresTeamMap) GetAdditionalTeams(team string, transitive bool) []string {
87-
return ptm.fetchAdditionalTeams(team, false, transitive, []string{})
94+
return ptm.fetchAdditionalTeams(team, false, transitive, []string{team})
8895
}
8996

9097
// GetAdditionalSuperuserTeams function to retrieve list of additional superuser teams
9198
func (ptm *PostgresTeamMap) GetAdditionalSuperuserTeams(team string, transitive bool) []string {
92-
return ptm.fetchAdditionalTeams(team, true, transitive, []string{})
99+
return ptm.fetchAdditionalTeams(team, true, transitive, []string{team})
93100
}
94101

95102
// Load function to import data from PostgresTeam CRD

pkg/teams/postgres_team_test.go

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,26 @@ var (
4242
AdditionalMembers: map[string][]string{"acid": []string{"batman"}},
4343
},
4444
},
45+
{
46+
TypeMeta: metav1.TypeMeta{
47+
Kind: "PostgresTeam",
48+
APIVersion: "acid.zalan.do/v1",
49+
},
50+
ObjectMeta: metav1.ObjectMeta{
51+
Name: "teamD",
52+
},
53+
Spec: acidv1.PostgresTeamSpec{
54+
AdditionalSuperuserTeams: map[string][]string{},
55+
AdditionalTeams: map[string][]string{"teamA": []string{"teamD"}, "teamC": []string{"teamD"}, "teamD": []string{"teamA", "teamB", "teamC"}},
56+
AdditionalMembers: map[string][]string{"acid": []string{"batman"}},
57+
},
58+
},
4559
},
4660
}
4761
pgTeamMap = PostgresTeamMap{
4862
"teamA": {
4963
AdditionalSuperuserTeams: []string{"teamB", "team24x7"},
50-
AdditionalTeams: []string{"teamC"},
64+
AdditionalTeams: []string{"teamC", "teamD"},
5165
AdditionalMembers: []string{},
5266
},
5367
"teamB": {
@@ -57,7 +71,12 @@ var (
5771
},
5872
"teamC": {
5973
AdditionalSuperuserTeams: []string{"team24x7"},
60-
AdditionalTeams: []string{"teamA", "teamB", "acid"},
74+
AdditionalTeams: []string{"teamA", "teamB", "teamD", "acid"},
75+
AdditionalMembers: []string{},
76+
},
77+
"teamD": {
78+
AdditionalSuperuserTeams: []string{},
79+
AdditionalTeams: []string{"teamA", "teamB", "teamC"},
6180
AdditionalMembers: []string{},
6281
},
6382
"team24x7": {
@@ -119,14 +138,14 @@ func TestGetAdditionalTeams(t *testing.T) {
119138
"Check that additional teams are returned",
120139
"teamA",
121140
false,
122-
[]string{"teamC"},
141+
[]string{"teamC", "teamD"},
123142
"GetAdditionalTeams returns wrong list",
124143
},
125144
{
126145
"Check that additional teams are returned incl. transitive teams",
127146
"teamA",
128147
true,
129-
[]string{"teamC", "teamB", "acid"},
148+
[]string{"teamC", "teamD", "teamB", "acid"},
130149
"GetAdditionalTeams returns wrong list",
131150
},
132151
{

0 commit comments

Comments
 (0)