Skip to content

Commit 9dd7eb3

Browse files
committed
CRT op inactivity timeout refactoring and extending imagebuild to support the simple build engine
Signed-off-by: Kyle Quest <kcq.public@gmail.com>
1 parent 90f6024 commit 9dd7eb3

File tree

18 files changed

+393
-182
lines changed

18 files changed

+393
-182
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,9 @@ Global options:
327327
- `--host` - Docker host address or socket (prefix with `tcp://` or `unix://`)
328328
- `--crt-connection` - Container runtime connection (for non-Docker runtimes / for Docker user --host)
329329
- `--crt-context` - Container runtime context name if supported (for Docker similar to setting '--context' or DOCKER_CONTEXT)
330+
- `--crt-io-inactivity-timeout` - CRT I/O general inactivity timeout.
331+
- `--crt-save-inactivity-timeout` - CRT save image operation inactivity timeout (overrides the general I/O timeout). If not set, defaults to 30 seconds.
332+
- `--crt-copy-inactivity-timeout` - CRT copy from container operation inactivity timeout (overrides the general I/O timeout). If not set, defaults to 30 seconds.
330333
- `--tls` - use TLS connecting to Docker
331334
- `--tls-verify` - do TLS verification
332335
- `--tls-cert-path` - path to TLS cert files

pkg/app/master/command/build/handler.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -670,7 +670,14 @@ func OnCommand(
670670
}
671671

672672
xc.Out.Info("image.data.inspection.save.image.start")
673-
err = dockerutil.SaveImage(client, imageID, iaPath, false, false)
673+
var saveInactivityTimeout int
674+
if gparams.CRTSaveInactivityTimeout > 0 {
675+
saveInactivityTimeout = gparams.CRTSaveInactivityTimeout
676+
} else if gparams.CRTIOInactivityTimeout > 0 {
677+
saveInactivityTimeout = gparams.CRTIOInactivityTimeout
678+
}
679+
680+
err = dockerutil.SaveImage(client, imageID, iaPath, false, false, saveInactivityTimeout)
674681
errutil.FailOn(err)
675682

676683
err = fsutil.Touch(iaPathReady)
@@ -1113,6 +1120,8 @@ func OnCommand(
11131120
gparams.LogLevel,
11141121
gparams.LogFormat,
11151122
gparams.InContainer,
1123+
gparams.CRTIOInactivityTimeout,
1124+
gparams.CRTCopyInactivityTimeout,
11161125
rtaSourcePT,
11171126
doObfuscateMetadata,
11181127
obfuscateAppPackageNames,

pkg/app/master/command/build/image.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,7 @@ func buildOutputImage(
368368
xc.FailOn(err)
369369

370370
opts := imagebuilder.SimpleBuildOptions{
371-
ImageConfig: imagebuilder.ImageConfig{
371+
ImageConfig: &imagebuilder.ImageConfig{
372372
Architecture: imageBuildArch,
373373
Config: imagebuilder.RunConfig{
374374
ExposedPorts: map[string]struct{}{},

pkg/app/master/command/cliflags.go

Lines changed: 45 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,26 +15,29 @@ import (
1515

1616
// Global flag names
1717
const (
18-
FlagCommandReport = "report"
19-
FlagCheckVersion = "check-version"
20-
FlagDebug = "debug"
21-
FlagVerbose = "verbose"
22-
FlagQuietCLIMode = "quiet"
23-
FlagLogLevel = "log-level"
24-
FlagLog = "log"
25-
FlagLogFormat = "log-format"
26-
FlagAPIVersion = "crt-api-version"
27-
FlagUseTLS = "tls"
28-
FlagVerifyTLS = "tls-verify"
29-
FlagTLSCertPath = "tls-cert-path"
30-
FlagHost = "host"
31-
FlagCRTConnection = "crt-connection"
32-
FlagCRTContext = "crt-context"
33-
FlagStatePath = "state-path"
34-
FlagInContainer = "in-container"
35-
FlagArchiveState = "archive-state"
36-
FlagNoColor = "no-color"
37-
FlagOutputFormat = "output-format"
18+
FlagCommandReport = "report"
19+
FlagCheckVersion = "check-version"
20+
FlagDebug = "debug"
21+
FlagVerbose = "verbose"
22+
FlagQuietCLIMode = "quiet"
23+
FlagLogLevel = "log-level"
24+
FlagLog = "log"
25+
FlagLogFormat = "log-format"
26+
FlagAPIVersion = "crt-api-version"
27+
FlagUseTLS = "tls"
28+
FlagVerifyTLS = "tls-verify"
29+
FlagTLSCertPath = "tls-cert-path"
30+
FlagHost = "host"
31+
FlagCRTConnection = "crt-connection"
32+
FlagCRTContext = "crt-context"
33+
FlagStatePath = "state-path"
34+
FlagInContainer = "in-container"
35+
FlagArchiveState = "archive-state"
36+
FlagNoColor = "no-color"
37+
FlagOutputFormat = "output-format"
38+
FlagCRTIOInactivityTimeout = "crt-io-inactivity-timeout"
39+
FlagCRTSaveInactivityTimeout = "crt-save-inactivity-timeout"
40+
FlagCRTCopyInactivityTimeout = "crt-copy-inactivity-timeout"
3841
)
3942

4043
const (
@@ -64,6 +67,10 @@ const (
6467
FlagInContainerUsage = "app is running in a container"
6568
FlagArchiveStateUsage = "archive app state to the selected Docker volume (default volume - mint-state). By default, enabled when app is running in a container (disabled otherwise). Set it to 'off' to disable explicitly."
6669
FlagNoColorUsage = "disable color output"
70+
71+
FlagCRTIOInactivityTimeoutUsage = "CRT I/O general inactivity timeout"
72+
FlagCRTSaveInactivityTimeoutUsage = "CRT save image operation inactivity timeout (overrides the general I/O timeout)"
73+
FlagCRTCopyInactivityTimeoutUsage = "CRT copy from container operation inactivity timeout (overrides the general I/O timeout)"
6774
)
6875

6976
// Shared command flag names
@@ -402,6 +409,24 @@ func GlobalFlags() []cli.Flag {
402409
Usage: FlagCRTContextUsage,
403410
EnvVars: []string{"DSLIM_CRT_CTX"},
404411
},
412+
&cli.IntFlag{
413+
Name: FlagCRTIOInactivityTimeout,
414+
Value: 0,
415+
Usage: FlagCRTIOInactivityTimeoutUsage,
416+
EnvVars: []string{"DSLIM_CRT_IO_INACTIVITY_TIMEOUT"},
417+
},
418+
&cli.IntFlag{
419+
Name: FlagCRTSaveInactivityTimeout,
420+
Value: 0,
421+
Usage: FlagCRTSaveInactivityTimeoutUsage,
422+
EnvVars: []string{"DSLIM_CRT_SAVE_INACTIVITY_TIMEOUT"},
423+
},
424+
&cli.IntFlag{
425+
Name: FlagCRTCopyInactivityTimeout,
426+
Value: 0,
427+
Usage: FlagCRTCopyInactivityTimeoutUsage,
428+
EnvVars: []string{"DSLIM_CRT_COPY_INACTIVITY_TIMEOUT"},
429+
},
405430
&cli.StringFlag{
406431
Name: FlagStatePath,
407432
Value: "",

pkg/app/master/command/clifvgetter.go

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,18 @@ func UpdateGlobalFlagValues(appOpts *config.AppOptions, values *GenericParams) *
396396
values.CRTContext = *appOpts.Global.CRTContext
397397
}
398398

399+
if appOpts.Global.CRTIOInactivityTimeout != nil {
400+
values.CRTIOInactivityTimeout = *appOpts.Global.CRTIOInactivityTimeout
401+
}
402+
403+
if appOpts.Global.CRTSaveInactivityTimeout != nil {
404+
values.CRTSaveInactivityTimeout = *appOpts.Global.CRTSaveInactivityTimeout
405+
}
406+
407+
if appOpts.Global.CRTCopyInactivityTimeout != nil {
408+
values.CRTCopyInactivityTimeout = *appOpts.Global.CRTCopyInactivityTimeout
409+
}
410+
399411
if appOpts.Global.UseTLS != nil {
400412
values.ClientConfig.UseTLS = *appOpts.Global.UseTLS
401413
}
@@ -421,19 +433,22 @@ func UpdateGlobalFlagValues(appOpts *config.AppOptions, values *GenericParams) *
421433

422434
func GlobalFlagValues(ctx *cli.Context) *GenericParams {
423435
values := GenericParams{
424-
NoColor: ctx.Bool(FlagNoColor),
425-
CheckVersion: ctx.Bool(FlagCheckVersion),
426-
Debug: ctx.Bool(FlagDebug),
427-
Verbose: ctx.Bool(FlagVerbose),
428-
QuietCLIMode: ctx.Bool(FlagQuietCLIMode),
429-
LogLevel: ctx.String(FlagLogLevel),
430-
LogFormat: ctx.String(FlagLogFormat),
431-
OutputFormat: ctx.String(FlagOutputFormat),
432-
Log: ctx.String(FlagLog),
433-
StatePath: ctx.String(FlagStatePath),
434-
ReportLocation: ctx.String(FlagCommandReport),
435-
CRTConnection: ctx.String(FlagCRTConnection),
436-
CRTContext: ctx.String(FlagCRTContext),
436+
NoColor: ctx.Bool(FlagNoColor),
437+
CheckVersion: ctx.Bool(FlagCheckVersion),
438+
Debug: ctx.Bool(FlagDebug),
439+
Verbose: ctx.Bool(FlagVerbose),
440+
QuietCLIMode: ctx.Bool(FlagQuietCLIMode),
441+
LogLevel: ctx.String(FlagLogLevel),
442+
LogFormat: ctx.String(FlagLogFormat),
443+
OutputFormat: ctx.String(FlagOutputFormat),
444+
Log: ctx.String(FlagLog),
445+
StatePath: ctx.String(FlagStatePath),
446+
ReportLocation: ctx.String(FlagCommandReport),
447+
CRTConnection: ctx.String(FlagCRTConnection),
448+
CRTContext: ctx.String(FlagCRTContext),
449+
CRTIOInactivityTimeout: ctx.Int(FlagCRTIOInactivityTimeout),
450+
CRTSaveInactivityTimeout: ctx.Int(FlagCRTSaveInactivityTimeout),
451+
CRTCopyInactivityTimeout: ctx.Int(FlagCRTCopyInactivityTimeout),
437452
}
438453

439454
if values.ReportLocation == "off" {

pkg/app/master/command/common.go

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -57,23 +57,26 @@ func CLIContextGet(ctx context.Context, key CLIContextKey) interface{} {
5757
/////////////////////////////////////////////////////////
5858

5959
type GenericParams struct {
60-
NoColor bool
61-
CheckVersion bool
62-
Debug bool
63-
Verbose bool
64-
QuietCLIMode bool
65-
LogLevel string
66-
LogFormat string
67-
OutputFormat string
68-
Log string
69-
StatePath string
70-
ReportLocation string
71-
InContainer bool
72-
IsDSImage bool
73-
ArchiveState string
74-
CRTConnection string
75-
CRTContext string
76-
ClientConfig *config.DockerClient
60+
NoColor bool
61+
CheckVersion bool
62+
Debug bool
63+
Verbose bool
64+
QuietCLIMode bool
65+
LogLevel string
66+
LogFormat string
67+
OutputFormat string
68+
Log string
69+
StatePath string
70+
ReportLocation string
71+
InContainer bool
72+
IsDSImage bool
73+
ArchiveState string
74+
CRTConnection string
75+
CRTContext string
76+
ClientConfig *config.DockerClient
77+
CRTIOInactivityTimeout int
78+
CRTSaveInactivityTimeout int
79+
CRTCopyInactivityTimeout int
7780
}
7881

7982
// TODO: spread these code types across all command definition, so it's not all defined here

pkg/app/master/command/merge/handler.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,6 @@ func OnCommand(
314314

315315
ensureImage("output", outputTags[0], cmdReport)
316316
xc.Out.State("output.image.generate.done")
317-
//////////////////////////////////////////////////
318317

319318
xc.Out.State(cmd.StateCompleted)
320319
cmdReport.State = cmd.StateCompleted

pkg/app/master/command/profile/handler.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,8 @@ func OnCommand(
276276
logLevel,
277277
logFormat,
278278
gparams.InContainer,
279+
gparams.CRTIOInactivityTimeout,
280+
gparams.CRTCopyInactivityTimeout,
279281
true, //rtaSourcePT
280282
false, //doObfuscateMetadata
281283
"", //doObfuscateAPN

pkg/app/master/command/xray/handler.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,13 @@ func OnCommand(
454454
}
455455

456456
xc.Out.Info("image.data.inspection.save.image.start")
457-
err = crtClient.SaveImage(imageID, iaPath, false, false)
457+
var saveInactivityTimeout int
458+
if gparams.CRTSaveInactivityTimeout > 0 {
459+
saveInactivityTimeout = gparams.CRTSaveInactivityTimeout
460+
} else if gparams.CRTIOInactivityTimeout > 0 {
461+
saveInactivityTimeout = gparams.CRTIOInactivityTimeout
462+
}
463+
err = crtClient.SaveImage(imageID, iaPath, false, false, saveInactivityTimeout)
458464
errutil.FailOn(err)
459465

460466
err = fsutil.Touch(iaPathReady)

pkg/app/master/config/config.go

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -24,25 +24,28 @@ type AppOptions struct {
2424

2525
// GlobalAppOptions provides a set of global application parameters
2626
type GlobalAppOptions struct {
27-
NoColor *bool `json:"no_color,omitempty"`
28-
CheckVersion *bool `json:"check_version,omitempty"`
29-
Debug *bool `json:"debug,omitempty"`
30-
Verbose *bool `json:"verbose,omitempty"`
31-
Quiet *bool `json:"quiet,omitempty"`
32-
OutputFormat *string `json:"output_format,omitempty"`
33-
LogLevel *string `json:"log_level,omitempty"`
34-
Log *string `json:"log,omitempty"`
35-
LogFormat *string `json:"log_format,omitempty"`
36-
UseTLS *bool `json:"tls,omitempty"`
37-
VerifyTLS *bool `json:"tls_verify,omitempty"`
38-
TLSCertPath *string `json:"tls_cert_path,omitempty"`
39-
APIVersion *string `json:"api_version,omitempty"`
40-
Host *string `json:"host,omitempty"`
41-
StatePath *string `json:"state_path,omitempty"`
42-
ReportLocation *string `json:"report_location,omitempty"`
43-
CRTConnection *string `json:"crt_connection,omitempty"`
44-
CRTContext *string `json:"crt_context,omitempty"`
45-
ArchiveState *string `json:"archive_state,omitempty"`
27+
NoColor *bool `json:"no_color,omitempty"`
28+
CheckVersion *bool `json:"check_version,omitempty"`
29+
Debug *bool `json:"debug,omitempty"`
30+
Verbose *bool `json:"verbose,omitempty"`
31+
Quiet *bool `json:"quiet,omitempty"`
32+
OutputFormat *string `json:"output_format,omitempty"`
33+
LogLevel *string `json:"log_level,omitempty"`
34+
Log *string `json:"log,omitempty"`
35+
LogFormat *string `json:"log_format,omitempty"`
36+
UseTLS *bool `json:"tls,omitempty"`
37+
VerifyTLS *bool `json:"tls_verify,omitempty"`
38+
TLSCertPath *string `json:"tls_cert_path,omitempty"`
39+
APIVersion *string `json:"api_version,omitempty"`
40+
Host *string `json:"host,omitempty"`
41+
StatePath *string `json:"state_path,omitempty"`
42+
ReportLocation *string `json:"report_location,omitempty"`
43+
CRTConnection *string `json:"crt_connection,omitempty"`
44+
CRTContext *string `json:"crt_context,omitempty"`
45+
ArchiveState *string `json:"archive_state,omitempty"`
46+
CRTIOInactivityTimeout *int `json:"crt_io_inactivity_timeout,omitempty"`
47+
CRTSaveInactivityTimeout *int `json:"crt_save_inactivity_timeout,omitempty"`
48+
CRTCopyInactivityTimeout *int `json:"crt_copy_inactivity_timeout,omitempty"`
4649
}
4750

4851
func NewAppOptionsFromFile(dir string) (*AppOptions, error) {

0 commit comments

Comments
 (0)