@@ -13,12 +13,10 @@ import (
13
13
"time"
14
14
15
15
"github.com/google/uuid"
16
- "github.com/hashicorp/yamux"
17
16
"github.com/moby/moby/pkg/namesgenerator"
18
17
"github.com/tabbed/pqtype"
19
18
"golang.org/x/xerrors"
20
19
protobuf "google.golang.org/protobuf/proto"
21
- "nhooyr.io/websocket"
22
20
"storj.io/drpc/drpcmux"
23
21
"storj.io/drpc/drpcserver"
24
22
@@ -49,77 +47,6 @@ func (api *api) provisionerDaemonsByOrganization(rw http.ResponseWriter, r *http
49
47
httpapi .Write (rw , http .StatusOK , daemons )
50
48
}
51
49
52
- // Serves the provisioner daemon protobuf API over a WebSocket.
53
- func (api * api ) provisionerDaemonsListen (rw http.ResponseWriter , r * http.Request ) {
54
- api .websocketWaitMutex .Lock ()
55
- api .websocketWaitGroup .Add (1 )
56
- api .websocketWaitMutex .Unlock ()
57
- defer api .websocketWaitGroup .Done ()
58
-
59
- conn , err := websocket .Accept (rw , r , & websocket.AcceptOptions {
60
- // Need to disable compression to avoid a data-race.
61
- CompressionMode : websocket .CompressionDisabled ,
62
- })
63
- if err != nil {
64
- httpapi .Write (rw , http .StatusBadRequest , httpapi.Response {
65
- Message : fmt .Sprintf ("accept websocket: %s" , err ),
66
- })
67
- return
68
- }
69
- // Align with the frame size of yamux.
70
- conn .SetReadLimit (256 * 1024 )
71
-
72
- daemon , err := api .Database .InsertProvisionerDaemon (r .Context (), database.InsertProvisionerDaemonParams {
73
- ID : uuid .New (),
74
- CreatedAt : database .Now (),
75
- Name : namesgenerator .GetRandomName (1 ),
76
- Provisioners : []database.ProvisionerType {database .ProvisionerTypeEcho , database .ProvisionerTypeTerraform },
77
- })
78
- if err != nil {
79
- _ = conn .Close (websocket .StatusInternalError , httpapi .WebsocketCloseSprintf ("insert provisioner daemon: %s" , err ))
80
- return
81
- }
82
-
83
- // Multiplexes the incoming connection using yamux.
84
- // This allows multiple function calls to occur over
85
- // the same connection.
86
- config := yamux .DefaultConfig ()
87
- config .LogOutput = io .Discard
88
- session , err := yamux .Server (websocket .NetConn (r .Context (), conn , websocket .MessageBinary ), config )
89
- if err != nil {
90
- _ = conn .Close (websocket .StatusInternalError , httpapi .WebsocketCloseSprintf ("multiplex server: %s" , err ))
91
- return
92
- }
93
- mux := drpcmux .New ()
94
- err = proto .DRPCRegisterProvisionerDaemon (mux , & provisionerdServer {
95
- AccessURL : api .AccessURL ,
96
- ID : daemon .ID ,
97
- Database : api .Database ,
98
- Pubsub : api .Pubsub ,
99
- Provisioners : daemon .Provisioners ,
100
- Logger : api .Logger .Named (fmt .Sprintf ("provisionerd-%s" , daemon .Name )),
101
- })
102
- if err != nil {
103
- _ = conn .Close (websocket .StatusInternalError , httpapi .WebsocketCloseSprintf ("drpc register provisioner daemon: %s" , err ))
104
- return
105
- }
106
- server := drpcserver .NewWithOptions (mux , drpcserver.Options {
107
- Log : func (err error ) {
108
- if xerrors .Is (err , io .EOF ) {
109
- return
110
- }
111
- api .Logger .Debug (r .Context (), "drpc server error" , slog .Error (err ))
112
- },
113
- })
114
- err = server .Serve (r .Context (), session )
115
- if err != nil && ! xerrors .Is (err , io .EOF ) {
116
- api .Logger .Debug (r .Context (), "provisioner daemon disconnected" , slog .Error (err ))
117
- _ = conn .Close (websocket .StatusInternalError , httpapi .WebsocketCloseSprintf ("serve: %s" , err ))
118
- return
119
- }
120
- _ = conn .Close (websocket .StatusGoingAway , "" )
121
- }
122
-
123
50
// ListenProvisionerDaemon is an in-memory connection to a provisionerd. Useful when starting coderd and provisionerd
124
51
// in the same process.
125
52
func (c * coderD ) ListenProvisionerDaemon (ctx context.Context ) (client proto.DRPCProvisionerDaemonClient , err error ) {
0 commit comments