Skip to content

Commit 642da4b

Browse files
committed
1
1 parent ec51a5d commit 642da4b

File tree

2 files changed

+16
-10
lines changed

2 files changed

+16
-10
lines changed

components/ws-manager-api/typescript/src/promisified-client.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -117,16 +117,15 @@ export class PromisifiedWorkspaceManagerClient implements Disposable {
117117
this.client.startWorkspace(
118118
request,
119119
withTracing({ span }),
120-
this.getDefaultUnaryOptions(),
120+
{
121+
deadline: new Date(new Date().getTime() + 60000*11), // client timeout must be higher than server
122+
interceptors: this.interceptor,
123+
},
121124
(err, resp) => {
122125
span.finish();
123126
if (err) {
124-
if (attempt < 3 && err.message.indexOf("already exists") !== -1) {
125-
// lets wait a bit more
126-
} else {
127-
TraceContext.setError(ctx, err);
128-
reject(err);
129-
}
127+
TraceContext.setError(ctx, err);
128+
reject(err);
130129
} else {
131130
resolve(resp);
132131
}

components/ws-manager/pkg/manager/manager.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -165,9 +165,12 @@ func (m *Manager) Close() {
165165

166166
// StartWorkspace creates a new running workspace within the manager's cluster
167167
func (m *Manager) StartWorkspace(_ context.Context, req *api.StartWorkspaceRequest) (res *api.StartWorkspaceResponse, err error) {
168+
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Minute)
169+
defer cancel()
170+
168171
owi := log.LogContext(req.Metadata.Owner, req.Metadata.MetaId, req.Id, req.Metadata.GetProject(), req.Metadata.GetTeam())
169172
clog := log.WithFields(owi)
170-
span, ctx := tracing.FromContext(context.Background(), "StartWorkspace")
173+
span, ctx := tracing.FromContext(ctx, "StartWorkspace")
171174
tracing.LogRequestSafe(span, req)
172175
tracing.ApplyOWI(span, owi)
173176
defer tracing.FinishSpan(span, &err)
@@ -314,8 +317,12 @@ func (m *Manager) StartWorkspace(_ context.Context, req *api.StartWorkspaceReque
314317
return nil, err
315318
}
316319

317-
err = wait.PollWithContext(ctx, 100*time.Millisecond, 10*time.Minute, podRunning(m.Clientset, pod.Name, pod.Namespace))
320+
// if we reach this point the pod is created
321+
// in case the context is canceled or a timeout happens we should delete the pod?
322+
323+
err = wait.PollImmediateWithContext(ctx, 100*time.Millisecond, 7*time.Minute, podRunning(m.Clientset, pod.Name, pod.Namespace))
318324
if err != nil {
325+
clog.WithError(err).WithField("req", req).WithField("pod", pod.Name).Warn("was unable to start workspace")
319326
return nil, xerrors.Errorf("workspace pod never reached Running state: %w", err)
320327
}
321328

@@ -326,7 +333,7 @@ func (m *Manager) StartWorkspace(_ context.Context, req *api.StartWorkspaceReque
326333
return nil, xerrors.Errorf("unable to get workspace pod %s: %w", pod.Name, err)
327334
}
328335

329-
err = wait.PollWithContext(ctx, 100*time.Millisecond, 5*time.Minute, pvcRunning(m.Clientset, pvc.Name, pvc.Namespace))
336+
err = wait.PollImmediateWithContext(ctx, 100*time.Millisecond, 5*time.Minute, pvcRunning(m.Clientset, pvc.Name, pvc.Namespace))
330337
if err != nil {
331338
if startContext.VolumeSnapshot != nil && startContext.VolumeSnapshot.VolumeSnapshotName != "" {
332339
m.eventRecorder.Eventf(pod, corev1.EventTypeWarning, "PersistentVolumeClaim", "PVC %q restore from volume snapshot %q failed %v", pvc.Name, startContext.VolumeSnapshot.VolumeSnapshotName, err)

0 commit comments

Comments
 (0)