Skip to content

Commit

Permalink
feat: kurtosis run --non-blocking-tasks (#2153)
Browse files Browse the repository at this point in the history
## Description:
Adds a flag `--non-blocking-tasks`. If set, task services from `run_sh`
and `run_python` are not removed before continuing with execution. The
effects is small over Docker, but this significantly reduces run times
over k8s because of the overhead of removing a pod (up to 30s).

For the `ethereum-package` over k8s with images cached, running with the
flag goes from 4min to 1min. However, task services will have to be
removed manually after execution or via a `kurtosis clean`.

## Is this change user facing?
YES

## References:
#2140
  • Loading branch information
tedim52 committed Feb 15, 2024
1 parent 390ead6 commit 6c70247
Show file tree
Hide file tree
Showing 41 changed files with 1,888 additions and 718 deletions.
1,129 changes: 578 additions & 551 deletions api/golang/core/kurtosis_core_rpc_api_bindings/api_container_service.pb.go

Large diffs are not rendered by default.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Expand Up @@ -42,6 +42,7 @@ func NewRunStarlarkScriptArgs(
cloudInstanceId string,
cloudUserId string,
imageDownloadMode kurtosis_core_rpc_api_bindings.ImageDownloadMode,
nonBlockingMode bool,
) *kurtosis_core_rpc_api_bindings.RunStarlarkScriptArgs {
cloudInstanceIdCopy := new(string)
*cloudInstanceIdCopy = cloudInstanceId
Expand All @@ -61,6 +62,7 @@ func NewRunStarlarkScriptArgs(
CloudInstanceId: cloudInstanceIdCopy,
CloudUserId: cloudUserIdCopy,
ImageDownloadMode: imageDownloadModeCopy,
NonBlockingMode: &nonBlockingMode,
}
}

Expand All @@ -75,6 +77,7 @@ func NewRunStarlarkPackageArgs(
cloudInstanceId string,
cloudUserId string,
imageDownloadMode kurtosis_core_rpc_api_bindings.ImageDownloadMode,
nonBlockingMode bool,
) *kurtosis_core_rpc_api_bindings.RunStarlarkPackageArgs {
parallelismCopy := new(int32)
*parallelismCopy = parallelism
Expand All @@ -98,6 +101,7 @@ func NewRunStarlarkPackageArgs(
CloudInstanceId: cloudInstanceIdCopy,
CloudUserId: cloudUserIdCopy,
ImageDownloadMode: imageDownloadModeCopy,
NonBlockingMode: &nonBlockingMode,
}
}

Expand All @@ -112,6 +116,7 @@ func NewRunStarlarkRemotePackageArgs(
cloudInstanceId string,
cloudUserId string,
imageDownloadMode kurtosis_core_rpc_api_bindings.ImageDownloadMode,
nonBlockingMode bool,
) *kurtosis_core_rpc_api_bindings.RunStarlarkPackageArgs {
parallelismCopy := new(int32)
*parallelismCopy = parallelism
Expand All @@ -135,6 +140,7 @@ func NewRunStarlarkRemotePackageArgs(
CloudInstanceId: cloudInstanceIdCopy,
CloudUserId: cloudUserIdCopy,
ImageDownloadMode: imageDownloadModeCopy,
NonBlockingMode: &nonBlockingMode,
}
}

Expand Down
31 changes: 27 additions & 4 deletions api/golang/core/lib/enclaves/enclave_context.go
Expand Up @@ -110,7 +110,17 @@ func (enclaveCtx *EnclaveContext) RunStarlarkScript(
return nil, nil, stacktrace.Propagate(err, "An error occurred when parsing YAML args for script '%v'", oldSerializedParams)
}
ctxWithCancel, cancelCtxFunc := context.WithCancel(ctx)
executeStartosisScriptArgs := binding_constructors.NewRunStarlarkScriptArgs(runConfig.MainFunctionName, serializedScript, serializedParams, runConfig.DryRun, runConfig.Parallelism, runConfig.ExperimentalFeatureFlags, runConfig.CloudInstanceId, runConfig.CloudUserId, runConfig.ImageDownload)
executeStartosisScriptArgs := binding_constructors.NewRunStarlarkScriptArgs(
runConfig.MainFunctionName,
serializedScript,
serializedParams,
runConfig.DryRun,
runConfig.Parallelism,
runConfig.ExperimentalFeatureFlags,
runConfig.CloudInstanceId,
runConfig.CloudUserId,
runConfig.ImageDownload,
runConfig.NonBlockingMode)
starlarkResponseLineChan := make(chan *kurtosis_core_rpc_api_bindings.StarlarkRunResponseLine)

stream, err := enclaveCtx.client.RunStarlarkScript(ctxWithCancel, executeStartosisScriptArgs)
Expand Down Expand Up @@ -172,7 +182,8 @@ func (enclaveCtx *EnclaveContext) RunStarlarkPackage(
runConfig.ExperimentalFeatureFlags,
runConfig.CloudInstanceId,
runConfig.CloudUserId,
runConfig.ImageDownload)
runConfig.ImageDownload,
runConfig.NonBlockingMode)
if err != nil {
return nil, nil, stacktrace.Propagate(err, "Error preparing package '%s' for execution", packageRootPath)
}
Expand Down Expand Up @@ -297,7 +308,7 @@ func (enclaveCtx *EnclaveContext) RunStarlarkRemotePackage(
}()

starlarkResponseLineChan := make(chan *kurtosis_core_rpc_api_bindings.StarlarkRunResponseLine)
executeStartosisScriptArgs := binding_constructors.NewRunStarlarkRemotePackageArgs(packageId, runConfig.RelativePathToMainFile, runConfig.MainFunctionName, serializedParams, runConfig.DryRun, runConfig.Parallelism, runConfig.ExperimentalFeatureFlags, runConfig.CloudInstanceId, runConfig.CloudUserId, runConfig.ImageDownload)
executeStartosisScriptArgs := binding_constructors.NewRunStarlarkRemotePackageArgs(packageId, runConfig.RelativePathToMainFile, runConfig.MainFunctionName, serializedParams, runConfig.DryRun, runConfig.Parallelism, runConfig.ExperimentalFeatureFlags, runConfig.CloudInstanceId, runConfig.CloudUserId, runConfig.ImageDownload, runConfig.NonBlockingMode)

stream, err := enclaveCtx.client.RunStarlarkPackage(ctxWithCancel, executeStartosisScriptArgs)
if err != nil {
Expand Down Expand Up @@ -605,9 +616,21 @@ func (enclaveCtx *EnclaveContext) assembleRunStartosisPackageArg(
cloudInstanceId string,
cloudUserId string,
imageDownloadMode kurtosis_core_rpc_api_bindings.ImageDownloadMode,
nonBlockingMode bool,
) (*kurtosis_core_rpc_api_bindings.RunStarlarkPackageArgs, error) {

return binding_constructors.NewRunStarlarkPackageArgs(packageName, relativePathToMainFile, mainFunctionName, serializedParams, dryRun, parallelism, experimentalFeatures, cloudInstanceId, cloudUserId, imageDownloadMode), nil
return binding_constructors.NewRunStarlarkPackageArgs(
packageName,
relativePathToMainFile,
mainFunctionName,
serializedParams,
dryRun,
parallelism,
experimentalFeatures,
cloudInstanceId,
cloudUserId,
imageDownloadMode,
nonBlockingMode), nil
}

func (enclaveCtx *EnclaveContext) uploadStarlarkPackage(packageId string, packageRootPath string) error {
Expand Down
Expand Up @@ -11,6 +11,7 @@ const (
defaultCloudInstanceId = ""
defaultCloudUserId = ""
defaultImageDownload = kurtosis_core_rpc_api_bindings.ImageDownloadMode_missing
defaultNonBlockingMode = false
)

var defaultExperimentalFeatureFlags = []kurtosis_core_rpc_api_bindings.KurtosisFeatureFlag(nil)
Expand All @@ -25,6 +26,7 @@ type StarlarkRunConfig struct {
CloudInstanceId string
CloudUserId string
ImageDownload kurtosis_core_rpc_api_bindings.ImageDownloadMode
NonBlockingMode bool
}

type starlarkRunConfigOption func(*StarlarkRunConfig)
Expand All @@ -40,6 +42,7 @@ func NewRunStarlarkConfig(opts ...starlarkRunConfigOption) *StarlarkRunConfig {
CloudInstanceId: defaultCloudInstanceId,
CloudUserId: defaultCloudUserId,
ImageDownload: defaultImageDownload,
NonBlockingMode: defaultNonBlockingMode,
}

for _, opt := range opts {
Expand Down Expand Up @@ -104,3 +107,9 @@ func WithImageDownloadMode(imageDownloadMode kurtosis_core_rpc_api_bindings.Imag
config.ImageDownload = imageDownloadMode
}
}

func WithNonBlockingMode(nonBlockingMode bool) starlarkRunConfigOption {
return func(config *StarlarkRunConfig) {
config.NonBlockingMode = nonBlockingMode
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions api/golang/http_rest/api_types/api_types.gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 6c70247

Please sign in to comment.