@@ -264,8 +264,12 @@ func (s *Provider) GetContentLayerPVC(ctx context.Context, owner, workspaceID st
264
264
if err != nil {
265
265
return nil , nil , err
266
266
}
267
+ layerReady , err := workspaceReadyLayerPVC (csapi .WorkspaceInitFromBackup )
268
+ if err != nil {
269
+ return nil , nil , err
270
+ }
267
271
268
- l = []Layer {* layer }
272
+ l = []Layer {* layer , * layerReady }
269
273
return l , manifest , nil
270
274
}
271
275
@@ -274,8 +278,12 @@ func (s *Provider) GetContentLayerPVC(ctx context.Context, owner, workspaceID st
274
278
if err != nil {
275
279
return nil , nil , err
276
280
}
281
+ layerReady , err := workspaceReadyLayerPVC (csapi .WorkspaceInitFromBackup )
282
+ if err != nil {
283
+ return nil , nil , err
284
+ }
277
285
278
- l = []Layer {* layer }
286
+ l = []Layer {* layer , * layerReady }
279
287
return l , manifest , nil
280
288
}
281
289
@@ -287,8 +295,12 @@ func (s *Provider) GetContentLayerPVC(ctx context.Context, owner, workspaceID st
287
295
if err != nil {
288
296
return nil , nil , err
289
297
}
298
+ layerReady , err := workspaceReadyLayerPVC (csapi .WorkspaceInitFromBackup )
299
+ if err != nil {
300
+ return nil , nil , err
301
+ }
290
302
291
- l = []Layer {* layer }
303
+ l = []Layer {* layer , * layerReady }
292
304
return l , manifest , nil
293
305
}
294
306
return s .getSnapshotContentLayer (ctx , gis )
@@ -299,8 +311,13 @@ func (s *Provider) GetContentLayerPVC(ctx context.Context, owner, workspaceID st
299
311
if err != nil {
300
312
return nil , nil , err
301
313
}
314
+ layerReady , err := workspaceReadyLayerPVC (csapi .WorkspaceInitFromPrebuild )
315
+ if err != nil {
316
+ return nil , nil , err
317
+ }
318
+
319
+ l = []Layer {* layer , * layerReady }
302
320
303
- l = []Layer {* layer }
304
321
return l , manifest , nil
305
322
}
306
323
l , manifest , err = s .getPrebuildContentLayer (ctx , pis , true )
@@ -341,7 +358,11 @@ func (s *Provider) GetContentLayerPVC(ctx context.Context, owner, workspaceID st
341
358
if err != nil {
342
359
return nil , nil , err
343
360
}
344
- return []Layer {* layer }, nil , nil
361
+ layerReady , err := workspaceReadyLayerPVC (csapi .WorkspaceInitFromOther )
362
+ if err != nil {
363
+ return nil , nil , err
364
+ }
365
+ return []Layer {* layer , * layerReady }, nil , nil
345
366
}
346
367
if initializer .GetBackup () != nil {
347
368
// We were asked to restore a backup and have tried above. We've failed to restore the backup,
@@ -508,13 +529,16 @@ git log --pretty=%H -n 1 > /.workspace/prestophookdata/git_log_2.txt
508
529
cp /workspace/.gitpod/prebuild-log* /.workspace/prestophookdata/
509
530
`
510
531
532
+ var pvcEnabledFile = `PVC`
533
+
511
534
// version of this function for persistent volume claim feature
512
535
// we cannot use /workspace folder as when mounting /workspace folder through PVC
513
536
// it will mask anything that was in container layer, hence we are using /.workspace instead here
514
537
func contentDescriptorToLayerPVC (cdesc []byte ) (* Layer , error ) {
515
538
layers := []fileInLayer {
516
539
{& tar.Header {Typeflag : tar .TypeDir , Name : "/.workspace" , Uid : initializer .GitpodUID , Gid : initializer .GitpodGID , Mode : 0755 }, nil },
517
540
{& tar.Header {Typeflag : tar .TypeDir , Name : "/.workspace/.gitpod" , Uid : initializer .GitpodUID , Gid : initializer .GitpodGID , Mode : 0755 }, nil },
541
+ {& tar.Header {Typeflag : tar .TypeReg , Name : "/.workspace/.gitpod/pvc" , Uid : 0 , Gid : 0 , Mode : 0775 , Size : int64 (len (pvcEnabledFile ))}, []byte (pvcEnabledFile )},
518
542
{& tar.Header {Typeflag : tar .TypeReg , Name : "/.supervisor/prestophook.sh" , Uid : 0 , Gid : 0 , Mode : 0775 , Size : int64 (len (prestophookScript ))}, []byte (prestophookScript )},
519
543
}
520
544
if len (cdesc ) > 0 {
@@ -523,6 +547,22 @@ func contentDescriptorToLayerPVC(cdesc []byte) (*Layer, error) {
523
547
return layerFromContent (layers ... )
524
548
}
525
549
550
+ func workspaceReadyLayerPVC (src csapi.WorkspaceInitSource ) (* Layer , error ) {
551
+ msg := csapi.WorkspaceReadyMessage {
552
+ Source : src ,
553
+ }
554
+ ctnt , err := json .Marshal (msg )
555
+ if err != nil {
556
+ return nil , err
557
+ }
558
+
559
+ return layerFromContent (
560
+ fileInLayer {& tar.Header {Typeflag : tar .TypeDir , Name : "/.workspace" , Uid : initializer .GitpodUID , Gid : initializer .GitpodGID , Mode : 0755 }, nil },
561
+ fileInLayer {& tar.Header {Typeflag : tar .TypeDir , Name : "/.workspace/.gitpod" , Uid : initializer .GitpodUID , Gid : initializer .GitpodGID , Mode : 0755 }, nil },
562
+ fileInLayer {& tar.Header {Typeflag : tar .TypeReg , Name : "/.workspace/.gitpod/ready" , Uid : initializer .GitpodUID , Gid : initializer .GitpodGID , Mode : 0755 , Size : int64 (len (ctnt ))}, []byte (ctnt )},
563
+ )
564
+ }
565
+
526
566
func workspaceReadyLayer (src csapi.WorkspaceInitSource ) (* Layer , error ) {
527
567
msg := csapi.WorkspaceReadyMessage {
528
568
Source : src ,
0 commit comments