Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add minimal support for feature flags in APIC #775

Merged
merged 4 commits into from Jun 27, 2023
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1,217 changes: 647 additions & 570 deletions api/golang/core/kurtosis_core_rpc_api_bindings/api_container_service.pb.go

Large diffs are not rendered by default.

16 changes: 11 additions & 5 deletions api/golang/core/lib/binding_constructors/binding_constructors.go
Expand Up @@ -44,15 +44,17 @@ func NewRunStarlarkScriptArgs(
serializedParams string,
dryRun bool,
parallelism int32,
experimentalFeatures []kurtosis_core_rpc_api_bindings.KurtosisFeatureFlag,
) *kurtosis_core_rpc_api_bindings.RunStarlarkScriptArgs {
parallelismCopy := new(int32)
*parallelismCopy = parallelism
return &kurtosis_core_rpc_api_bindings.RunStarlarkScriptArgs{
SerializedScript: serializedString,
SerializedParams: serializedParams,
DryRun: &dryRun,
Parallelism: parallelismCopy,
MainFunctionName: mainFunctionName,
SerializedScript: serializedString,
SerializedParams: serializedParams,
DryRun: &dryRun,
Parallelism: parallelismCopy,
MainFunctionName: mainFunctionName,
ExperimentalFeatures: experimentalFeatures,
}
}

Expand All @@ -63,6 +65,7 @@ func NewRunStarlarkPackageArgs(
serializedParams string,
dryRun bool,
parallelism int32,
experimentalFeatures []kurtosis_core_rpc_api_bindings.KurtosisFeatureFlag,
) *kurtosis_core_rpc_api_bindings.RunStarlarkPackageArgs {
parallelismCopy := new(int32)
*parallelismCopy = parallelism
Expand All @@ -76,6 +79,7 @@ func NewRunStarlarkPackageArgs(
Parallelism: parallelismCopy,
RelativePathToMainFile: relativePathToMainFile,
MainFunctionName: mainFunctionName,
ExperimentalFeatures: experimentalFeatures,
}
}

Expand All @@ -86,6 +90,7 @@ func NewRunStarlarkRemotePackageArgs(
serializedParams string,
dryRun bool,
parallelism int32,
experimentalFeatures []kurtosis_core_rpc_api_bindings.KurtosisFeatureFlag,
) *kurtosis_core_rpc_api_bindings.RunStarlarkPackageArgs {
parallelismCopy := new(int32)
*parallelismCopy = parallelism
Expand All @@ -99,6 +104,7 @@ func NewRunStarlarkRemotePackageArgs(
Parallelism: parallelismCopy,
RelativePathToMainFile: relativePathToMainFile,
MainFunctionName: mainFunctionName,
ExperimentalFeatures: experimentalFeatures,
}
}

Expand Down
22 changes: 14 additions & 8 deletions api/golang/core/lib/enclaves/enclave_context.go
Expand Up @@ -85,9 +85,10 @@ func (enclaveCtx *EnclaveContext) RunStarlarkScript(
serializedParams string,
dryRun bool,
parallelism int32,
experimentalFeatures []kurtosis_core_rpc_api_bindings.KurtosisFeatureFlag,
) (chan *kurtosis_core_rpc_api_bindings.StarlarkRunResponseLine, context.CancelFunc, error) {
ctxWithCancel, cancelCtxFunc := context.WithCancel(ctx)
executeStartosisScriptArgs := binding_constructors.NewRunStarlarkScriptArgs(mainFunctionName, serializedScript, serializedParams, dryRun, parallelism)
executeStartosisScriptArgs := binding_constructors.NewRunStarlarkScriptArgs(mainFunctionName, serializedScript, serializedParams, dryRun, parallelism, experimentalFeatures)
starlarkResponseLineChan := make(chan *kurtosis_core_rpc_api_bindings.StarlarkRunResponseLine)

stream, err := enclaveCtx.client.RunStarlarkScript(ctxWithCancel, executeStartosisScriptArgs)
Expand All @@ -101,8 +102,8 @@ func (enclaveCtx *EnclaveContext) RunStarlarkScript(
}

// Docs available at https://docs.kurtosis.com/sdk/#runstarlarkscriptblockingstring-serializedstarlarkscript-boolean-dryrun---starlarkrunresult-runresult-error-error
func (enclaveCtx *EnclaveContext) RunStarlarkScriptBlocking(ctx context.Context, mainFunctionName string, serializedScript string, serializedParams string, dryRun bool, parallelism int32) (*StarlarkRunResult, error) {
starlarkRunResponseLineChan, _, err := enclaveCtx.RunStarlarkScript(ctx, mainFunctionName, serializedScript, serializedParams, dryRun, parallelism)
func (enclaveCtx *EnclaveContext) RunStarlarkScriptBlocking(ctx context.Context, mainFunctionName string, serializedScript string, serializedParams string, dryRun bool, parallelism int32, experimentalFeatures []kurtosis_core_rpc_api_bindings.KurtosisFeatureFlag) (*StarlarkRunResult, error) {
starlarkRunResponseLineChan, _, err := enclaveCtx.RunStarlarkScript(ctx, mainFunctionName, serializedScript, serializedParams, dryRun, parallelism, experimentalFeatures)
if err != nil {
return nil, stacktrace.Propagate(err, "Error requesting Starlark Script run")
}
Expand All @@ -119,6 +120,7 @@ func (enclaveCtx *EnclaveContext) RunStarlarkPackage(
serializedParams string,
dryRun bool,
parallelism int32,
experimentalFeatures []kurtosis_core_rpc_api_bindings.KurtosisFeatureFlag,
) (chan *kurtosis_core_rpc_api_bindings.StarlarkRunResponseLine, context.CancelFunc, error) {
executionStartedSuccessfully := false
ctxWithCancel, cancelCtxFunc := context.WithCancel(ctx)
Expand All @@ -129,7 +131,7 @@ func (enclaveCtx *EnclaveContext) RunStarlarkPackage(
}()

starlarkResponseLineChan := make(chan *kurtosis_core_rpc_api_bindings.StarlarkRunResponseLine)
executeStartosisPackageArgs, err := enclaveCtx.assembleRunStartosisPackageArg(packageRootPath, relativePathToMainFile, mainFunctionName, serializedParams, dryRun, parallelism)
executeStartosisPackageArgs, err := enclaveCtx.assembleRunStartosisPackageArg(packageRootPath, relativePathToMainFile, mainFunctionName, serializedParams, dryRun, parallelism, experimentalFeatures)
if err != nil {
return nil, nil, stacktrace.Propagate(err, "Error preparing package '%s' for execution", packageRootPath)
}
Expand Down Expand Up @@ -158,8 +160,9 @@ func (enclaveCtx *EnclaveContext) RunStarlarkPackageBlocking(
serializedParams string,
dryRun bool,
parallelism int32,
experimentalFeatures []kurtosis_core_rpc_api_bindings.KurtosisFeatureFlag,
) (*StarlarkRunResult, error) {
starlarkRunResponseLineChan, _, err := enclaveCtx.RunStarlarkPackage(ctx, packageRootPath, relativePathToMainFile, mainFunctionName, serializedParams, dryRun, parallelism)
starlarkRunResponseLineChan, _, err := enclaveCtx.RunStarlarkPackage(ctx, packageRootPath, relativePathToMainFile, mainFunctionName, serializedParams, dryRun, parallelism, experimentalFeatures)
if err != nil {
return nil, stacktrace.Propagate(err, "Error running Starlark package")
}
Expand All @@ -176,6 +179,7 @@ func (enclaveCtx *EnclaveContext) RunStarlarkRemotePackage(
serializedParams string,
dryRun bool,
parallelism int32,
experimentalFeatures []kurtosis_core_rpc_api_bindings.KurtosisFeatureFlag,
) (chan *kurtosis_core_rpc_api_bindings.StarlarkRunResponseLine, context.CancelFunc, error) {
executionStartedSuccessfully := false
ctxWithCancel, cancelCtxFunc := context.WithCancel(ctx)
Expand All @@ -186,7 +190,7 @@ func (enclaveCtx *EnclaveContext) RunStarlarkRemotePackage(
}()

starlarkResponseLineChan := make(chan *kurtosis_core_rpc_api_bindings.StarlarkRunResponseLine)
executeStartosisScriptArgs := binding_constructors.NewRunStarlarkRemotePackageArgs(packageId, relativePathToMainFile, mainFunctionName, serializedParams, dryRun, parallelism)
executeStartosisScriptArgs := binding_constructors.NewRunStarlarkRemotePackageArgs(packageId, relativePathToMainFile, mainFunctionName, serializedParams, dryRun, parallelism, experimentalFeatures)

stream, err := enclaveCtx.client.RunStarlarkPackage(ctxWithCancel, executeStartosisScriptArgs)
if err != nil {
Expand All @@ -207,8 +211,9 @@ func (enclaveCtx *EnclaveContext) RunStarlarkRemotePackageBlocking(
serializedParams string,
dryRun bool,
parallelism int32,
experimentalFeatures []kurtosis_core_rpc_api_bindings.KurtosisFeatureFlag,
) (*StarlarkRunResult, error) {
starlarkRunResponseLineChan, _, err := enclaveCtx.RunStarlarkRemotePackage(ctx, packageId, relativePathToMainFile, mainFunctionName, serializedParams, dryRun, parallelism)
starlarkRunResponseLineChan, _, err := enclaveCtx.RunStarlarkRemotePackage(ctx, packageId, relativePathToMainFile, mainFunctionName, serializedParams, dryRun, parallelism, experimentalFeatures)
if err != nil {
return nil, stacktrace.Propagate(err, "Error running remote Starlark package")
}
Expand Down Expand Up @@ -440,14 +445,15 @@ func (enclaveCtx *EnclaveContext) assembleRunStartosisPackageArg(
serializedParams string,
dryRun bool,
parallelism int32,
experimentalFeatures []kurtosis_core_rpc_api_bindings.KurtosisFeatureFlag,
) (*kurtosis_core_rpc_api_bindings.RunStarlarkPackageArgs, error) {
kurtosisYamlFilepath := path.Join(packageRootPath, kurtosisYamlFilename)

kurtosisYaml, err := parseKurtosisYaml(kurtosisYamlFilepath)
if err != nil {
return nil, stacktrace.Propagate(err, "There was an error parsing the '%v' at '%v'", kurtosisYamlFilename, packageRootPath)
}
return binding_constructors.NewRunStarlarkPackageArgs(kurtosisYaml.PackageName, relativePathToMainFile, mainFunctionName, serializedParams, dryRun, parallelism), nil
return binding_constructors.NewRunStarlarkPackageArgs(kurtosisYaml.PackageName, relativePathToMainFile, mainFunctionName, serializedParams, dryRun, parallelism, experimentalFeatures), nil
}

func (enclaveCtx *EnclaveContext) uploadStarlarkPackage(packageId string, packageRootPath string) error {
Expand Down
8 changes: 8 additions & 0 deletions api/protobuf/core/api_container_service.proto
Expand Up @@ -130,6 +130,8 @@ message RunStarlarkScriptArgs {

// The name of the main function, the default value is "run"
string main_function_name = 5;

repeated KurtosisFeatureFlag experimental_features = 6;
}

message RunStarlarkPackageArgs {
Expand Down Expand Up @@ -164,6 +166,12 @@ message RunStarlarkPackageArgs {

// The name of the main function, the default value is "run"
string main_function_name = 10;

repeated KurtosisFeatureFlag experimental_features = 11;
}

enum KurtosisFeatureFlag {
USE_INSTRUCTIONS_CACHING = 0;
}

// ==============================================================================================
Expand Down
27 changes: 27 additions & 0 deletions api/rust/src/api_container_api.rs
Expand Up @@ -118,6 +118,8 @@ pub struct RunStarlarkScriptArgs {
/// The name of the main function, the default value is "run"
#[prost(string, tag = "5")]
pub main_function_name: ::prost::alloc::string::String,
#[prost(enumeration = "KurtosisFeatureFlag", repeated, tag = "6")]
pub experimental_features: ::prost::alloc::vec::Vec<i32>,
}
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(Clone, PartialEq, ::prost::Message)]
Expand Down Expand Up @@ -146,6 +148,8 @@ pub struct RunStarlarkPackageArgs {
/// The name of the main function, the default value is "run"
#[prost(string, tag = "10")]
pub main_function_name: ::prost::alloc::string::String,
#[prost(enumeration = "KurtosisFeatureFlag", repeated, tag = "11")]
pub experimental_features: ::prost::alloc::vec::Vec<i32>,
/// Deprecated: If the package is local, it should have been uploaded with UploadStarlarkPackage prior to calling
/// RunStarlarkPackage. If the package is remote and must be cloned within the APIC, use the standalone boolean flag
/// clone_package below
Expand Down Expand Up @@ -580,6 +584,29 @@ pub struct ListFilesArtifactNamesAndUuidsResponse {
#[prost(message, repeated, tag = "1")]
pub file_names_and_uuids: ::prost::alloc::vec::Vec<FilesArtifactNameAndUuid>,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
#[repr(i32)]
pub enum KurtosisFeatureFlag {
UseInstructionsCaching = 0,
}
impl KurtosisFeatureFlag {
/// String value of the enum field names used in the ProtoBuf definition.
///
/// The values are not transformed in any way and thus are considered stable
/// (if the ProtoBuf definition does not change) and safe for programmatic use.
pub fn as_str_name(&self) -> &'static str {
match self {
KurtosisFeatureFlag::UseInstructionsCaching => "USE_INSTRUCTIONS_CACHING",
}
}
/// Creates an enum from field names used in the ProtoBuf definition.
pub fn from_str_name(value: &str) -> ::core::option::Option<Self> {
match value {
"USE_INSTRUCTIONS_CACHING" => Some(Self::UseInstructionsCaching),
_ => None,
}
}
}
/// Generated client implementations.
pub mod api_container_service_client {
#![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)]
Expand Down
Expand Up @@ -126,6 +126,11 @@ export class RunStarlarkScriptArgs extends jspb.Message {
getMainFunctionName(): string;
setMainFunctionName(value: string): RunStarlarkScriptArgs;

getExperimentalFeaturesList(): Array<KurtosisFeatureFlag>;
setExperimentalFeaturesList(value: Array<KurtosisFeatureFlag>): RunStarlarkScriptArgs;
clearExperimentalFeaturesList(): RunStarlarkScriptArgs;
addExperimentalFeatures(value: KurtosisFeatureFlag, index?: number): RunStarlarkScriptArgs;

serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): RunStarlarkScriptArgs.AsObject;
static toObject(includeInstance: boolean, msg: RunStarlarkScriptArgs): RunStarlarkScriptArgs.AsObject;
Expand All @@ -141,6 +146,7 @@ export namespace RunStarlarkScriptArgs {
dryRun?: boolean,
parallelism?: number,
mainFunctionName: string,
experimentalFeaturesList: Array<KurtosisFeatureFlag>,
}

export enum DryRunCase {
Expand Down Expand Up @@ -190,6 +196,11 @@ export class RunStarlarkPackageArgs extends jspb.Message {
getMainFunctionName(): string;
setMainFunctionName(value: string): RunStarlarkPackageArgs;

getExperimentalFeaturesList(): Array<KurtosisFeatureFlag>;
setExperimentalFeaturesList(value: Array<KurtosisFeatureFlag>): RunStarlarkPackageArgs;
clearExperimentalFeaturesList(): RunStarlarkPackageArgs;
addExperimentalFeatures(value: KurtosisFeatureFlag, index?: number): RunStarlarkPackageArgs;

getStarlarkPackageContentCase(): RunStarlarkPackageArgs.StarlarkPackageContentCase;

serializeBinary(): Uint8Array;
Expand All @@ -211,6 +222,7 @@ export namespace RunStarlarkPackageArgs {
clonePackage?: boolean,
relativePathToMainFile: string,
mainFunctionName: string,
experimentalFeaturesList: Array<KurtosisFeatureFlag>,
}

export enum StarlarkPackageContentCase {
Expand Down Expand Up @@ -1115,3 +1127,6 @@ export namespace ListFilesArtifactNamesAndUuidsResponse {
}
}

export enum KurtosisFeatureFlag {
USE_INSTRUCTIONS_CACHING = 0,
}