Skip to content

Commit 571d358

Browse files
authored
feat: add queries to clean lost connections in PGCoordinator (#10938)
Adds cleanup queries to clean out "lost" peer and tunnel state after 24 hours. We leave this state in the database so that anything trying to connect to the peer can see that it was lost, but clean it up after 24 hours to ensure our table doesn't grow without bounds.
1 parent 0cab6e7 commit 571d358

File tree

7 files changed

+104
-0
lines changed

7 files changed

+104
-0
lines changed

coderd/database/dbauthz/dbauthz.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -695,6 +695,20 @@ func (q *querier) CleanTailnetCoordinators(ctx context.Context) error {
695695
return q.db.CleanTailnetCoordinators(ctx)
696696
}
697697

698+
func (q *querier) CleanTailnetLostPeers(ctx context.Context) error {
699+
if err := q.authorizeContext(ctx, rbac.ActionDelete, rbac.ResourceTailnetCoordinator); err != nil {
700+
return err
701+
}
702+
return q.db.CleanTailnetLostPeers(ctx)
703+
}
704+
705+
func (q *querier) CleanTailnetTunnels(ctx context.Context) error {
706+
if err := q.authorizeContext(ctx, rbac.ActionDelete, rbac.ResourceTailnetCoordinator); err != nil {
707+
return err
708+
}
709+
return q.db.CleanTailnetTunnels(ctx)
710+
}
711+
698712
func (q *querier) DeleteAPIKeyByID(ctx context.Context, id string) error {
699713
return deleteQ(q.log, q.auth, q.db.GetAPIKeyByID, q.db.DeleteAPIKeyByID)(ctx, id)
700714
}

coderd/database/dbmem/dbmem.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -956,6 +956,14 @@ func (*FakeQuerier) CleanTailnetCoordinators(_ context.Context) error {
956956
return ErrUnimplemented
957957
}
958958

959+
func (*FakeQuerier) CleanTailnetLostPeers(context.Context) error {
960+
return ErrUnimplemented
961+
}
962+
963+
func (*FakeQuerier) CleanTailnetTunnels(context.Context) error {
964+
return ErrUnimplemented
965+
}
966+
959967
func (q *FakeQuerier) DeleteAPIKeyByID(_ context.Context, id string) error {
960968
q.mutex.Lock()
961969
defer q.mutex.Unlock()

coderd/database/dbmetrics/dbmetrics.go

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/dbmock/dbmock.go

Lines changed: 28 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/querier.go

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries.sql.go

Lines changed: 25 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries/tailnet.sql

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,19 @@ DELETE
122122
FROM tailnet_coordinators
123123
WHERE heartbeat_at < now() - INTERVAL '24 HOURS';
124124

125+
-- name: CleanTailnetLostPeers :exec
126+
DELETE
127+
FROM tailnet_peers
128+
WHERE updated_at < now() - INTERVAL '24 HOURS' AND status = 'lost'::tailnet_status;
129+
130+
-- name: CleanTailnetTunnels :exec
131+
DELETE FROM tailnet_tunnels
132+
WHERE updated_at < now() - INTERVAL '24 HOURS' AND
133+
NOT EXISTS (
134+
SELECT 1 FROM tailnet_peers
135+
WHERE id = tailnet_tunnels.src_id AND coordinator_id = tailnet_tunnels.coordinator_id
136+
);
137+
125138
-- name: UpsertTailnetPeer :one
126139
INSERT INTO
127140
tailnet_peers (

0 commit comments

Comments
 (0)