Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 8d7eb17

Browse files
authored
fix: stop inserting provisioner daemons into the database (#9108)
Signed-off-by: Spike Curtis <[email protected]>
1 parent fb3616c commit 8d7eb17

File tree

4 files changed

+24
-75
lines changed

4 files changed

+24
-75
lines changed

coderd/coderd.go

+13-24
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ import (
4646
"github.com/coder/coder/v2/coderd/batchstats"
4747
"github.com/coder/coder/v2/coderd/database"
4848
"github.com/coder/coder/v2/coderd/database/dbauthz"
49-
"github.com/coder/coder/v2/coderd/database/dbtime"
5049
"github.com/coder/coder/v2/coderd/database/pubsub"
5150
"github.com/coder/coder/v2/coderd/gitauth"
5251
"github.com/coder/coder/v2/coderd/gitsshkey"
@@ -1078,32 +1077,24 @@ func (api *API) CreateInMemoryProvisionerDaemon(ctx context.Context, debounce ti
10781077
}
10791078
}()
10801079

1081-
name := namesgenerator.GetRandomName(1)
1082-
// nolint:gocritic // Inserting a provisioner daemon is a system function.
1083-
daemon, err := api.Database.InsertProvisionerDaemon(dbauthz.AsSystemRestricted(ctx), database.InsertProvisionerDaemonParams{
1084-
ID: uuid.New(),
1085-
CreatedAt: dbtime.Now(),
1086-
Name: name,
1087-
Provisioners: []database.ProvisionerType{database.ProvisionerTypeEcho, database.ProvisionerTypeTerraform},
1088-
Tags: database.StringMap{
1089-
provisionerdserver.TagScope: provisionerdserver.ScopeOrganization,
1090-
},
1080+
tags, err := json.Marshal(database.StringMap{
1081+
provisionerdserver.TagScope: provisionerdserver.ScopeOrganization,
10911082
})
1092-
if err != nil {
1093-
return nil, xerrors.Errorf("insert provisioner daemon %q: %w", name, err)
1094-
}
1095-
1096-
tags, err := json.Marshal(daemon.Tags)
10971083
if err != nil {
10981084
return nil, xerrors.Errorf("marshal tags: %w", err)
10991085
}
11001086

11011087
mux := drpcmux.New()
1088+
name := namesgenerator.GetRandomName(1)
1089+
logger := api.Logger.Named(fmt.Sprintf("inmem-provisionerd-%s", name))
1090+
logger.Info(ctx, "starting in-memory provisioner daemon")
11021091
srv, err := provisionerdserver.NewServer(
11031092
api.AccessURL,
1104-
daemon.ID,
1105-
api.Logger.Named(fmt.Sprintf("provisionerd-%s", daemon.Name)),
1106-
daemon.Provisioners,
1093+
uuid.New(),
1094+
logger,
1095+
[]database.ProvisionerType{
1096+
database.ProvisionerTypeEcho, database.ProvisionerTypeTerraform,
1097+
},
11071098
tags,
11081099
api.Database,
11091100
api.Pubsub,
@@ -1133,16 +1124,14 @@ func (api *API) CreateInMemoryProvisionerDaemon(ctx context.Context, debounce ti
11331124
if xerrors.Is(err, io.EOF) {
11341125
return
11351126
}
1136-
api.Logger.Debug(ctx, "drpc server error", slog.Error(err))
1127+
logger.Debug(ctx, "drpc server error", slog.Error(err))
11371128
},
11381129
},
11391130
)
11401131
go func() {
11411132
err := server.Serve(ctx, serverSession)
1142-
if err != nil && !xerrors.Is(err, io.EOF) {
1143-
api.Logger.Debug(ctx, "provisioner daemon disconnected", slog.Error(err))
1144-
}
1145-
// close the sessions so we don't leak goroutines serving them.
1133+
logger.Info(ctx, "provisioner daemon disconnected", slog.Error(err))
1134+
// close the sessions, so we don't leak goroutines serving them.
11461135
_ = clientSession.Close()
11471136
_ = serverSession.Close()
11481137
}()

codersdk/organizations.go

+3
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,9 @@ func (c *Client) Organization(ctx context.Context, id uuid.UUID) (Organization,
154154
}
155155

156156
// ProvisionerDaemons returns provisioner daemons available.
157+
//
158+
// Deprecated: We no longer track provisioner daemons as they connect. This function may return historical data
159+
// but new provisioner daemons will not appear.
157160
func (c *Client) ProvisionerDaemons(ctx context.Context) ([]ProvisionerDaemon, error) {
158161
res, err := c.Request(ctx, http.MethodGet,
159162
// TODO: the organization path parameter is currently ignored.

enterprise/coderd/provisionerdaemons.go

+8-25
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import (
2525
"cdr.dev/slog"
2626
"github.com/coder/coder/v2/coderd"
2727
"github.com/coder/coder/v2/coderd/database"
28-
"github.com/coder/coder/v2/coderd/database/dbtime"
2928
"github.com/coder/coder/v2/coderd/httpapi"
3029
"github.com/coder/coder/v2/coderd/httpmw"
3130
"github.com/coder/coder/v2/coderd/provisionerdserver"
@@ -198,25 +197,7 @@ func (api *API) provisionerDaemonServe(rw http.ResponseWriter, r *http.Request)
198197
slog.F("provisioners", provisioners),
199198
slog.F("tags", tags),
200199
)
201-
daemon, err := api.Database.InsertProvisionerDaemon(ctx, database.InsertProvisionerDaemonParams{
202-
ID: uuid.New(),
203-
CreatedAt: dbtime.Now(),
204-
Name: name,
205-
Provisioners: provisioners,
206-
Tags: tags,
207-
})
208-
if err != nil {
209-
if !xerrors.Is(err, context.Canceled) {
210-
log.Error(ctx, "write provisioner daemon", slog.Error(err))
211-
}
212-
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
213-
Message: "Internal error writing provisioner daemon.",
214-
Detail: err.Error(),
215-
})
216-
return
217-
}
218-
219-
rawTags, err := json.Marshal(daemon.Tags)
200+
rawTags, err := json.Marshal(tags)
220201
if err != nil {
221202
if !xerrors.Is(err, context.Canceled) {
222203
log.Error(ctx, "marshal provisioner tags", slog.Error(err))
@@ -263,11 +244,13 @@ func (api *API) provisionerDaemonServe(rw http.ResponseWriter, r *http.Request)
263244
return
264245
}
265246
mux := drpcmux.New()
247+
logger := api.Logger.Named(fmt.Sprintf("ext-provisionerd-%s", name))
248+
logger.Info(ctx, "starting external provisioner daemon")
266249
srv, err := provisionerdserver.NewServer(
267250
api.AccessURL,
268-
daemon.ID,
269-
api.Logger.Named(fmt.Sprintf("provisionerd-%s", daemon.Name)),
270-
daemon.Provisioners,
251+
uuid.New(),
252+
logger,
253+
provisioners,
271254
rawTags,
272255
api.Database,
273256
api.Pubsub,
@@ -302,12 +285,12 @@ func (api *API) provisionerDaemonServe(rw http.ResponseWriter, r *http.Request)
302285
if xerrors.Is(err, io.EOF) {
303286
return
304287
}
305-
api.Logger.Debug(ctx, "drpc server error", slog.Error(err))
288+
logger.Debug(ctx, "drpc server error", slog.Error(err))
306289
},
307290
})
308291
err = server.Serve(ctx, session)
292+
logger.Info(ctx, "provisioner daemon disconnected", slog.Error(err))
309293
if err != nil && !xerrors.Is(err, io.EOF) {
310-
api.Logger.Debug(ctx, "provisioner daemon disconnected", slog.Error(err))
311294
_ = conn.Close(websocket.StatusInternalError, httpapi.WebsocketCloseSprintf("serve: %s", err))
312295
return
313296
}

enterprise/coderd/provisionerdaemons_test.go

-26
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,6 @@ func TestProvisionerDaemonServe(t *testing.T) {
4747
})
4848
require.NoError(t, err)
4949
srv.DRPCConn().Close()
50-
daemons, err := client.ProvisionerDaemons(ctx)
51-
require.NoError(t, err)
52-
require.Len(t, daemons, 1)
5350
})
5451

5552
t.Run("NoLicense", func(t *testing.T) {
@@ -68,11 +65,6 @@ func TestProvisionerDaemonServe(t *testing.T) {
6865
var apiError *codersdk.Error
6966
require.ErrorAs(t, err, &apiError)
7067
require.Equal(t, http.StatusForbidden, apiError.StatusCode())
71-
72-
// querying provisioner daemons is forbidden without license
73-
_, err = client.ProvisionerDaemons(ctx)
74-
require.ErrorAs(t, err, &apiError)
75-
require.Equal(t, http.StatusForbidden, apiError.StatusCode())
7668
})
7769

7870
t.Run("Organization", func(t *testing.T) {
@@ -98,9 +90,6 @@ func TestProvisionerDaemonServe(t *testing.T) {
9890
var apiError *codersdk.Error
9991
require.ErrorAs(t, err, &apiError)
10092
require.Equal(t, http.StatusForbidden, apiError.StatusCode())
101-
daemons, err := client.ProvisionerDaemons(ctx)
102-
require.NoError(t, err)
103-
require.Len(t, daemons, 0)
10493
})
10594

10695
t.Run("OrganizationNoPerms", func(t *testing.T) {
@@ -126,9 +115,6 @@ func TestProvisionerDaemonServe(t *testing.T) {
126115
var apiError *codersdk.Error
127116
require.ErrorAs(t, err, &apiError)
128117
require.Equal(t, http.StatusForbidden, apiError.StatusCode())
129-
daemons, err := client.ProvisionerDaemons(ctx)
130-
require.NoError(t, err)
131-
require.Len(t, daemons, 0)
132118
})
133119

134120
t.Run("UserLocal", func(t *testing.T) {
@@ -214,9 +200,6 @@ func TestProvisionerDaemonServe(t *testing.T) {
214200
require.NoError(t, err)
215201
err = srv.DRPCConn().Close()
216202
require.NoError(t, err)
217-
daemons, err := client.ProvisionerDaemons(ctx)
218-
require.NoError(t, err)
219-
require.Len(t, daemons, 1)
220203
})
221204

222205
t.Run("PSK_daily_cost", func(t *testing.T) {
@@ -347,9 +330,6 @@ func TestProvisionerDaemonServe(t *testing.T) {
347330
var apiError *codersdk.Error
348331
require.ErrorAs(t, err, &apiError)
349332
require.Equal(t, http.StatusForbidden, apiError.StatusCode())
350-
daemons, err := client.ProvisionerDaemons(ctx)
351-
require.NoError(t, err)
352-
require.Len(t, daemons, 0)
353333
})
354334

355335
t.Run("NoAuth", func(t *testing.T) {
@@ -378,9 +358,6 @@ func TestProvisionerDaemonServe(t *testing.T) {
378358
var apiError *codersdk.Error
379359
require.ErrorAs(t, err, &apiError)
380360
require.Equal(t, http.StatusForbidden, apiError.StatusCode())
381-
daemons, err := client.ProvisionerDaemons(ctx)
382-
require.NoError(t, err)
383-
require.Len(t, daemons, 0)
384361
})
385362

386363
t.Run("NoPSK", func(t *testing.T) {
@@ -409,8 +386,5 @@ func TestProvisionerDaemonServe(t *testing.T) {
409386
var apiError *codersdk.Error
410387
require.ErrorAs(t, err, &apiError)
411388
require.Equal(t, http.StatusForbidden, apiError.StatusCode())
412-
daemons, err := client.ProvisionerDaemons(ctx)
413-
require.NoError(t, err)
414-
require.Len(t, daemons, 0)
415389
})
416390
}

0 commit comments

Comments
 (0)