Skip to content

Commit e41cc9b

Browse files
committed
try to open repo server connections when building manifests, not before
if we avoid sharing, this should let k8s build new connections to new pods
1 parent 8a3c4de commit e41cc9b

File tree

2 files changed

+28
-24
lines changed

2 files changed

+28
-24
lines changed

pkg/argo_client/client.go

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,10 @@ import (
2323
)
2424

2525
type ArgoClient struct {
26-
client apiclient.Client
27-
28-
repoClient repoapiclient.RepoServerServiceClient
29-
namespace string
30-
k8s kubernetes.Interface
31-
k8sConfig *rest.Config
32-
sendFullRepository bool
26+
client apiclient.Client
27+
k8s kubernetes.Interface
28+
k8sConfig *rest.Config
29+
cfg config.ServerConfig
3330
}
3431

3532
func NewArgoClient(
@@ -56,27 +53,27 @@ func NewArgoClient(
5653
return nil, err
5754
}
5855

56+
return &ArgoClient{
57+
cfg: cfg,
58+
client: argo,
59+
k8s: k8s.ClientSet(),
60+
k8sConfig: k8s.Config(),
61+
}, nil
62+
}
63+
64+
func (a *ArgoClient) createRepoServerClient() (repoapiclient.RepoServerServiceClient, *grpc.ClientConn, error) {
5965
log.Info().Msg("creating client")
60-
tlsConfig := tls.Config{InsecureSkipVerify: cfg.ArgoCDRepositoryInsecure}
61-
conn, err := grpc.NewClient(cfg.ArgoCDRepositoryEndpoint,
62-
// without this, kubechecks picks a single pod and sends all requests to it
63-
grpc.WithDefaultServiceConfig(`{"loadBalancingConfig": [{"round_robin":{}}]}`),
66+
tlsConfig := tls.Config{InsecureSkipVerify: a.cfg.ArgoCDRepositoryInsecure}
67+
conn, err := grpc.NewClient(a.cfg.ArgoCDRepositoryEndpoint,
6468
grpc.WithTransportCredentials(
6569
credentials.NewTLS(&tlsConfig),
6670
),
6771
)
6872
if err != nil {
69-
return nil, errors.Wrap(err, "failed to create client")
73+
return nil, nil, errors.Wrap(err, "failed to create client")
7074
}
7175

72-
return &ArgoClient{
73-
repoClient: repoapiclient.NewRepoServerServiceClient(conn),
74-
client: argo,
75-
namespace: cfg.ArgoCDNamespace,
76-
k8s: k8s.ClientSet(),
77-
k8sConfig: k8s.Config(),
78-
sendFullRepository: cfg.ArgoCDSendFullRepository,
79-
}, nil
76+
return repoapiclient.NewRepoServerServiceClient(conn), conn, nil
8077
}
8178

8279
// GetApplicationClient has related argocd diff code https://github.com/argoproj/argo-cd/blob/d3ff9757c460ae1a6a11e1231251b5d27aadcdd1/cmd/argocd/commands/app.go#L899

pkg/argo_client/manifests.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,8 @@ func (a *ArgoClient) generateManifests(ctx context.Context, app v1alpha1.Applica
126126
return nil, errors.Wrap(err, "failed to get settings")
127127
}
128128

129-
settingsMgr := argosettings.NewSettingsManager(ctx, a.k8s, a.namespace)
130-
argoDB := db.NewDB(a.namespace, settingsMgr, a.k8s)
129+
settingsMgr := argosettings.NewSettingsManager(ctx, a.k8s, a.cfg.ArgoCDNamespace)
130+
argoDB := db.NewDB(a.cfg.ArgoCDNamespace, settingsMgr, a.k8s)
131131

132132
repoTarget := source.TargetRevision
133133
if pkg.AreSameRepos(source.RepoURL, pullRequest.CloneURL) && areSameTargetRef(source.TargetRevision, pullRequest.BaseRef) {
@@ -141,7 +141,7 @@ func (a *ArgoClient) generateManifests(ctx context.Context, app v1alpha1.Applica
141141
}
142142

143143
var packageDir string
144-
if a.sendFullRepository {
144+
if a.cfg.ArgoCDSendFullRepository {
145145
log.Info().Msg("sending full repository")
146146
packageDir = repo.Directory
147147
} else {
@@ -226,11 +226,18 @@ func (a *ArgoClient) generateManifests(ctx context.Context, app v1alpha1.Applica
226226
RefSources: refSources,
227227
}
228228

229+
repoClient, conn, err := a.createRepoServerClient()
230+
if err != nil {
231+
return nil, errors.Wrap(err, "error creating repo client")
232+
}
233+
defer conn.Close()
234+
229235
log.Info().Msg("generating manifest with files")
230-
stream, err := a.repoClient.GenerateManifestWithFiles(ctx)
236+
stream, err := repoClient.GenerateManifestWithFiles(ctx)
231237
if err != nil {
232238
return nil, errors.Wrap(err, "failed to get manifests with files")
233239
}
240+
defer stream.CloseSend()
234241

235242
log.Info().Msg("sending request")
236243
if err := stream.Send(&repoapiclient.ManifestRequestWithFiles{

0 commit comments

Comments
 (0)