Skip to content

Commit

Permalink
fix(CSI-213): panic in EnsureNfsClientGroupRuleForIp
Browse files Browse the repository at this point in the history
  • Loading branch information
sergeyberezansky committed Aug 10, 2024
1 parent 2a10bbc commit 4c1f0ff
Showing 1 changed file with 22 additions and 19 deletions.
41 changes: 22 additions & 19 deletions pkg/wekafs/apiclient/nfs.go
Original file line number Diff line number Diff line change
Expand Up @@ -223,10 +223,10 @@ func EnsureNfsPermission(ctx context.Context, fsName string, group string, apiCl
}

type NfsClientGroup struct {
Uid *uuid.UUID `json:"uid,omitempty" url:"-"`
Rules *[]NfsClientGroupRule `json:"rules,omitempty" url:"-"`
Id string `json:"id" url:"-"`
Name string `json:"name,omitempty" url:"name,omitempty"`
Uid uuid.UUID `json:"uid,omitempty" url:"-"`
Rules []NfsClientGroupRule `json:"rules,omitempty" url:"-"`
Id string `json:"id" url:"-"`
Name string `json:"name,omitempty" url:"name,omitempty"`
}

func (g *NfsClientGroup) GetType() string {
Expand All @@ -250,11 +250,11 @@ func (g *NfsClientGroup) EQ(other ApiObject) bool {
}

func (g *NfsClientGroup) getImmutableFields() []string {
return []string{"Name", "Id", "Uid"}
return []string{"Name"}
}

func (g *NfsClientGroup) String() string {
return fmt.Sprintln("NfsClientGroup name:", g.Name, "Uid:", g.Uid.String())
return fmt.Sprintln("NfsClientGroup name:", g.Name)
}

func (a *ApiClient) GetNfsClientGroups(ctx context.Context, clientGroups *[]NfsClientGroup) error {
Expand Down Expand Up @@ -292,8 +292,10 @@ func (a *ApiClient) GetNfsClientGroupByFilter(ctx context.Context, query *NfsCli
ctx, span := otel.Tracer(TracerName).Start(ctx, op)
defer span.End()
ctx = log.With().Str("trace_id", span.SpanContext().TraceID().String()).Str("span_id", span.SpanContext().SpanID().String()).Str("op", op).Logger().WithContext(ctx)
logger := log.Ctx(ctx)
rs := &[]NfsClientGroup{}
err := a.FindNfsClientGroupsByFilter(ctx, query, rs)
logger.Trace().Str("client_group", query.String()).Msg("Getting client group by filter")
if err != nil {
return &NfsClientGroup{}, err
}
Expand All @@ -313,7 +315,7 @@ func (a *ApiClient) GetNfsClientGroupByName(ctx context.Context, name string) (*
}

func (a *ApiClient) GetNfsClientGroupByUid(ctx context.Context, uid uuid.UUID) (*NfsClientGroup, error) {
query := &NfsClientGroup{Uid: &uid}
query := &NfsClientGroup{Uid: uid}
return a.GetNfsClientGroupByFilter(ctx, query)
}

Expand Down Expand Up @@ -347,9 +349,10 @@ func (a *ApiClient) EnsureCsiPluginNfsClientGroup(ctx context.Context) (*NfsClie
if err != ObjectNotFoundError {
logger.Error().Err(err).Msg("Failed to get client group by name")
return ret, err
} else {
logger.Trace().Str("client_group_name", NfsClientGroupName).Msg("Existing client group not found, creating client group")
err = a.CreateNfsClientGroup(ctx, NewNfsClientGroupCreateRequest(NfsClientGroupName), ret)
}
logger.Trace().Str("client_group_name", NfsClientGroupName).Msg("Existing client group not found, creating client group")
err = a.CreateNfsClientGroup(ctx, NewNfsClientGroupCreateRequest(NfsClientGroupName), ret)
}
return ret, nil
}
Expand Down Expand Up @@ -385,18 +388,18 @@ func NewNfsClientGroupCreateRequest(name string) *NfsClientGroupCreateRequest {

type NfsClientGroupRule struct {
NfsClientGroupUid uuid.UUID `json:"-" url:"-"`
Type NfsClientGroupRuleType `json:"type" url:"-"`
Uid uuid.UUID `json:"uid" url:"-"`
Rule string `json:"rule" url:"-"`
Id string `json:"id" url:"-"`
Type NfsClientGroupRuleType `json:"type,omitempty" url:"-"`
Uid uuid.UUID `json:"uid,omitempty" url:"-"`
Rule string `json:"rule,omitempty" url:"-"`
Id string `json:"id,omitempty" url:"-"`
}

func (r *NfsClientGroupRule) GetType() string {
return "rules"
}

func (r *NfsClientGroupRule) GetBasePath(a *ApiClient) string {
ncgUrl := (&NfsClientGroup{Uid: &r.Uid}).GetApiUrl(a)
ncgUrl := (&NfsClientGroup{Uid: r.Uid}).GetApiUrl(a)
url, err := urlutil.URLJoin(ncgUrl, r.GetType())
if err != nil {
return ""
Expand Down Expand Up @@ -461,7 +464,7 @@ func (a *ApiClient) GetNfsClientGroupRules(ctx context.Context, rules *[]NfsClie
if err != nil {
return err
}
rules = cg.Rules
rules = &cg.Rules
return nil
}

Expand All @@ -479,7 +482,7 @@ func (a *ApiClient) FindNfsClientGroupRulesByFilter(ctx context.Context, query *
if cg == nil || err != nil {
return err
}
ret := *cg.Rules
ret := cg.Rules

for _, r := range ret {
if r.EQ(query) {
Expand Down Expand Up @@ -537,7 +540,7 @@ func (r *NfsClientGroupRuleCreateRequest) hasRequiredFields() bool {
}

func (r *NfsClientGroupRuleCreateRequest) getRelatedObject() ApiObject {
return &NfsClientGroup{Uid: &r.NfsClientGroupUid}
return &NfsClientGroup{Uid: r.NfsClientGroupUid}
}

func (r *NfsClientGroupRuleCreateRequest) String() string {
Expand Down Expand Up @@ -579,12 +582,12 @@ func (a *ApiClient) EnsureNfsClientGroupRuleForIp(ctx context.Context, cg *NfsCl
if cg == nil {
return errors.New("NfsClientGroup is nil")
}
q := &NfsClientGroupRule{Type: NfsClientGroupRuleTypeIP, Rule: ip, NfsClientGroupUid: *cg.Uid}
q := &NfsClientGroupRule{Type: NfsClientGroupRuleTypeIP, Rule: ip, NfsClientGroupUid: cg.Uid}

rule, err := a.GetNfsClientGroupRuleByFilter(ctx, q)
if err != nil {
if err == ObjectNotFoundError {
req := NewNfsClientGroupRuleCreateRequest(*cg.Uid, rule.Type, rule.Rule)
req := NewNfsClientGroupRuleCreateRequest(cg.Uid, rule.Type, rule.Rule)
return a.CreateNfsClientGroupRule(ctx, req, rule)
}
}
Expand Down

0 comments on commit 4c1f0ff

Please sign in to comment.