MCPcopy Index your code
hub / github.com/coder/coder / Run

Method Run

scaletest/workspaceupdates/run.go:56–167  ·  view source on GitHub ↗
(ctx context.Context, id string, logs io.Writer)

Source from the content-addressed store, hash-verified

54}
55
56func (r *Runner) Run(ctx context.Context, id string, logs io.Writer) error {
57 ctx, span := tracing.StartSpan(ctx)
58 defer span.End()
59
60 reachedBarrier := false
61 defer func() {
62 if !reachedBarrier {
63 r.cfg.DialBarrier.Done()
64 }
65 }()
66
67 logs = loadtestutil.NewSyncWriter(logs)
68 logger := slog.Make(sloghuman.Sink(logs)).Leveled(slog.LevelDebug)
69 r.client.SetLogger(logger)
70 r.client.SetLogBodies(true)
71
72 r.createUserRunner = createusers.NewRunner(r.client, r.cfg.User)
73 newUserAndToken, err := r.createUserRunner.RunReturningUser(ctx, id, logs)
74 if err != nil {
75 return xerrors.Errorf("create user: %w", err)
76 }
77 newUser := newUserAndToken.User
78 // Create a user client with an independent HTTP transport cloned from the
79 // runner's client. Using codersdk.New directly would inherit
80 // http.DefaultTransport, which is shared across all runners. That causes
81 // all user WebSocket connections to reuse the same TCP connection pool and
82 // land on the same coderd replica, concentrating load.
83 newUserClient, err := loadtestutil.DupClientCopyingHeaders(r.client, nil)
84 if err != nil {
85 return xerrors.Errorf("create user client: %w", err)
86 }
87 newUserClient.SetSessionToken(newUserAndToken.SessionToken)
88 newUserClient.SetLogger(logger)
89 newUserClient.SetLogBodies(true)
90
91 logger.Info(ctx, fmt.Sprintf("user %q created", newUser.Username), slog.F("id", newUser.ID.String()))
92
93 dialCtx, cancel := context.WithTimeout(ctx, r.cfg.DialTimeout)
94 defer cancel()
95
96 logger.Info(ctx, "connecting to workspace updates stream")
97 clients, err := r.dialTailnet(dialCtx, newUserClient, newUser, logger)
98 if err != nil {
99 return xerrors.Errorf("tailnet dial failed: %w", err)
100 }
101 defer clients.Closer.Close()
102 logger.Info(ctx, "connected to workspace updates stream")
103
104 watchCtx, cancelWatch := context.WithCancel(ctx)
105 defer cancelWatch()
106
107 completionCh := make(chan error, 1)
108 go func() {
109 completionCh <- r.watchWorkspaceUpdates(watchCtx, clients, newUser, logger)
110 }()
111
112 reachedBarrier = true
113 r.cfg.DialBarrier.Done()

Callers 1

TestRunFunction · 0.95

Calls 15

dialTailnetMethod · 0.95
watchWorkspaceUpdatesMethod · 0.95
RunReturningWorkspaceMethod · 0.95
StartSpanFunction · 0.92
NewSyncWriterFunction · 0.92
NewRunnerFunction · 0.92
DupClientCopyingHeadersFunction · 0.92
GenerateWorkspaceNameFunction · 0.92
NewRunnerFunction · 0.92
RunReturningUserMethod · 0.80
SetSessionTokenMethod · 0.80
ErrMethod · 0.80

Tested by 1

TestRunFunction · 0.76