Skip to content

Commit c3661de

Browse files
authored
Merge branch 'main' into refactor-api-to-use-the-new-add-ons-table-eng-3069
2 parents fabaa68 + cca72b1 commit c3661de

File tree

22 files changed

+190
-176
lines changed

22 files changed

+190
-176
lines changed

packages/api/main.go

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -220,15 +220,9 @@ func run() int {
220220
serviceInstanceID := uuid.New().String()
221221
nodeID := env.GetNodeID()
222222

223-
var tel *telemetry.Client
224-
if telemetry.OtelCollectorGRPCEndpoint == "" {
225-
tel = telemetry.NewNoopClient()
226-
} else {
227-
var err error
228-
tel, err = telemetry.New(ctx, nodeID, serviceName, commitSHA, serviceVersion, serviceInstanceID)
229-
if err != nil {
230-
zap.L().Fatal("failed to create metrics exporter", zap.Error(err))
231-
}
223+
tel, err := telemetry.New(ctx, nodeID, serviceName, commitSHA, serviceVersion, serviceInstanceID)
224+
if err != nil {
225+
zap.L().Fatal("failed to create metrics exporter", zap.Error(err))
232226
}
233227
defer func() {
234228
err := tel.Shutdown(ctx)

packages/client-proxy/main.go

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -64,17 +64,10 @@ func run() int {
6464
nodeID := env.GetNodeID()
6565

6666
// Setup telemetry
67-
var tel *telemetry.Client
68-
if telemetry.OtelCollectorGRPCEndpoint == "" {
69-
tel = telemetry.NewNoopClient()
70-
} else {
71-
var err error
72-
tel, err = telemetry.New(ctx, nodeID, serviceName, commitSHA, version, instanceID)
73-
if err != nil {
74-
zap.L().Fatal("failed to create metrics exporter", zap.Error(err))
75-
}
67+
tel, err := telemetry.New(ctx, nodeID, serviceName, commitSHA, version, instanceID)
68+
if err != nil {
69+
zap.L().Fatal("failed to create metrics exporter", zap.Error(err))
7670
}
77-
7871
defer func() {
7972
err := tel.Shutdown(ctx)
8073
if err != nil {

packages/orchestrator/benchmark_test.go

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import (
2929
"github.com/e2b-dev/infra/packages/orchestrator/internal/sandbox/network"
3030
"github.com/e2b-dev/infra/packages/orchestrator/internal/sandbox/template"
3131
"github.com/e2b-dev/infra/packages/orchestrator/internal/template/build"
32-
"github.com/e2b-dev/infra/packages/orchestrator/internal/template/build/config"
32+
buildconfig "github.com/e2b-dev/infra/packages/orchestrator/internal/template/build/config"
3333
"github.com/e2b-dev/infra/packages/orchestrator/internal/template/build/metrics"
3434
artifactsregistry "github.com/e2b-dev/infra/packages/shared/pkg/artifacts-registry"
3535
"github.com/e2b-dev/infra/packages/shared/pkg/dockerhub"
@@ -110,10 +110,8 @@ func BenchmarkBaseImageLaunch(b *testing.B) {
110110
b.Setenv("SNAPSHOT_CACHE_DIR", abs(filepath.Join(tempDir, "snapshot-cache")))
111111
b.Setenv("LOCAL_TEMPLATE_STORAGE_BASE_PATH", abs(filepath.Join(persistenceDir, "templates")))
112112

113-
networkConfig, err := network.ParseConfig()
114-
if err != nil {
115-
b.Fatalf("error parsing config: %v", err)
116-
}
113+
config, err := cfg.Parse()
114+
require.NoError(b, err)
117115

118116
// prep directories
119117
for _, subdir := range []string{"build", "build-templates" /*"fc-vm",*/, "sandbox", "snapshot-cache", "template"} {
@@ -128,7 +126,7 @@ func BenchmarkBaseImageLaunch(b *testing.B) {
128126
sbxlogger.SetSandboxLoggerInternal(logger)
129127
// sbxlogger.SetSandboxLoggerExternal(logger)
130128

131-
networkPool, err := network.NewPool(noop.MeterProvider{}, 8, 8, clientID, networkConfig)
129+
networkPool, err := network.NewPool(8, 8, clientID, config.NetworkConfig)
132130
require.NoError(b, err)
133131
go func() {
134132
networkPool.Populate(b.Context())
@@ -139,7 +137,7 @@ func BenchmarkBaseImageLaunch(b *testing.B) {
139137
assert.NoError(b, err)
140138
}()
141139

142-
devicePool, err := nbd.NewDevicePool(noop.MeterProvider{})
140+
devicePool, err := nbd.NewDevicePool()
143141
require.NoError(b, err, "do you have the nbd kernel module installed?")
144142
go func() {
145143
devicePool.Populate(b.Context())
@@ -174,7 +172,7 @@ func BenchmarkBaseImageLaunch(b *testing.B) {
174172
templateCache, err := template.NewCache(b.Context(), c, featureFlags, persistence, blockMetrics)
175173
require.NoError(b, err)
176174

177-
sandboxFactory := sandbox.NewFactory(networkPool, devicePool, featureFlags, true)
175+
sandboxFactory := sandbox.NewFactory(config.BuilderConfig, networkPool, devicePool, featureFlags)
178176

179177
dockerhubRepository, err := dockerhub.GetRemoteRepository(b.Context())
180178
require.NoError(b, err)
@@ -249,7 +247,7 @@ func BenchmarkBaseImageLaunch(b *testing.B) {
249247
if _, err := os.Stat(buildPath); os.IsNotExist(err) {
250248
// build template
251249
force := true
252-
templateConfig := config.TemplateConfig{
250+
templateConfig := buildconfig.TemplateConfig{
253251
Version: templateVersion,
254252
TemplateID: templateID,
255253
FromImage: baseImage,

packages/orchestrator/cmd/build-template/main.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ func buildTemplate(
116116
return fmt.Errorf("could not create storage provider: %w", err)
117117
}
118118

119-
devicePool, err := nbd.NewDevicePool(noop.MeterProvider{})
119+
devicePool, err := nbd.NewDevicePool()
120120
if err != nil {
121121
return fmt.Errorf("could not create device pool: %w", err)
122122
}
@@ -130,7 +130,7 @@ func buildTemplate(
130130
}
131131
}()
132132

133-
networkPool, err := network.NewPool(noop.MeterProvider{}, 8, 8, clientID, networkConfig)
133+
networkPool, err := network.NewPool(8, 8, clientID, networkConfig)
134134
if err != nil {
135135
return fmt.Errorf("could not create network pool: %w", err)
136136
}
@@ -186,7 +186,7 @@ func buildTemplate(
186186
zap.L().Fatal("failed to create build metrics", zap.Error(err))
187187
}
188188

189-
sandboxFactory := sandbox.NewFactory(networkPool, devicePool, featureFlags, true)
189+
sandboxFactory := sandbox.NewFactory(c.BuilderConfig, networkPool, devicePool, featureFlags)
190190

191191
builder := build.NewBuilder(
192192
logger,

packages/orchestrator/cmd/mock-nbd/mock.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010

1111
"github.com/google/uuid"
1212
"github.com/pojntfx/go-nbd/pkg/backend"
13-
"go.opentelemetry.io/otel/metric/noop"
1413

1514
"github.com/e2b-dev/infra/packages/orchestrator/internal/sandbox/block"
1615
"github.com/e2b-dev/infra/packages/orchestrator/internal/sandbox/nbd"
@@ -87,7 +86,7 @@ func main() {
8786

8887
done := make(chan os.Signal, 1)
8988
signal.Notify(done, os.Interrupt)
90-
devicePool, err := nbd.NewDevicePool(noop.MeterProvider{})
89+
devicePool, err := nbd.NewDevicePool()
9190
if err != nil {
9291
fmt.Fprintf(os.Stderr, "failed to create device pool: %v\n", err)
9392
return
Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,43 @@
11
package cfg
22

33
import (
4+
"time"
5+
46
"github.com/caarlos0/env/v11"
57

68
"github.com/e2b-dev/infra/packages/orchestrator/internal/sandbox/network"
79
)
810

11+
type BuilderConfig struct {
12+
AllowSandboxInternet bool `env:"ALLOW_SANDBOX_INTERNET" envDefault:"true"`
13+
EnvdTimeout time.Duration `env:"ENVD_TIMEOUT" envDefault:"10s"`
14+
FirecrackerVersionsDir string `env:"FIRECRACKER_VERSIONS_DIR" envDefault:"/fc-versions"`
15+
HostKernelsDir string `env:"HOST_KERNELS_DIR" envDefault:"/fc-kernels"`
16+
OrchestratorBasePath string `env:"ORCHESTRATOR_BASE_PATH" envDefault:"/orchestrator"`
17+
SandboxDir string `env:"SANDBOX_DIR" envDefault:"/fc-vm"`
18+
SharedChunkCachePath string `env:"SHARED_CHUNK_CACHE_PATH"`
19+
20+
NetworkConfig network.Config
21+
}
22+
923
type Config struct {
10-
AllowSandboxInternet bool `env:"ALLOW_SANDBOX_INTERNET" envDefault:"true"`
24+
BuilderConfig
25+
1126
ClickhouseConnectionString string `env:"CLICKHOUSE_CONNECTION_STRING"`
1227
ForceStop bool `env:"FORCE_STOP"`
1328
GRPCPort uint16 `env:"GRPC_PORT" envDefault:"5008"`
1429
LaunchDarklyAPIKey string `env:"LAUNCH_DARKLY_API_KEY"`
15-
OrchestratorBasePath string `env:"ORCHESTRATOR_BASE_PATH" envDefault:"/orchestrator"`
1630
OrchestratorLockPath string `env:"ORCHESTRATOR_LOCK_PATH" envDefault:"/orchestrator.lock"`
1731
ProxyPort uint16 `env:"PROXY_PORT" envDefault:"5007"`
1832
RedisClusterURL string `env:"REDIS_CLUSTER_URL"`
1933
RedisURL string `env:"REDIS_URL"`
2034
Services []string `env:"ORCHESTRATOR_SERVICES" envDefault:"orchestrator"`
21-
22-
NetworkConfig network.Config
2335
}
2436

2537
func Parse() (Config, error) {
26-
var model Config
27-
err := env.Parse(&model)
28-
return model, err
38+
return env.ParseAs[Config]()
39+
}
40+
41+
func ParseBuilder() (BuilderConfig, error) {
42+
return env.ParseAs[BuilderConfig]()
2943
}

packages/orchestrator/internal/cfg/model_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,22 @@ import (
88
)
99

1010
func TestParse(t *testing.T) {
11+
t.Run("embedded structs get defaults", func(t *testing.T) {
12+
config, err := Parse()
13+
require.NoError(t, err)
14+
15+
assert.Equal(t, "/fc-vm", config.SandboxDir)
16+
})
17+
18+
t.Run("embedded structs get overrides", func(t *testing.T) {
19+
t.Setenv("SANDBOX_DIR", "/fc-vm2")
20+
21+
config, err := Parse()
22+
require.NoError(t, err)
23+
24+
assert.Equal(t, "/fc-vm2", config.SandboxDir)
25+
})
26+
1127
t.Run("network config local flag defaults to false", func(t *testing.T) {
1228
config, err := Parse()
1329
require.NoError(t, err)

packages/orchestrator/internal/sandbox/fc/config.go

Lines changed: 6 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package fc
22

33
import (
4-
"os"
54
"path/filepath"
5+
6+
"github.com/e2b-dev/infra/packages/orchestrator/internal/cfg"
67
)
78

89
const (
@@ -16,30 +17,6 @@ const (
1617
SandboxRootfsFile = "rootfs.ext4"
1718
)
1819

19-
func SandboxDir() string {
20-
if value := os.Getenv("SANDBOX_DIR"); value != "" {
21-
return value
22-
}
23-
24-
return "/fc-vm"
25-
}
26-
27-
func HostKernelsDir() string {
28-
if value := os.Getenv("HOST_KERNELS_DIR"); value != "" {
29-
return value
30-
}
31-
32-
return "/fc-kernels"
33-
}
34-
35-
func FirecrackerVersionsDir() string {
36-
if value := os.Getenv("FIRECRACKER_VERSIONS_DIR"); value != "" {
37-
return value
38-
}
39-
40-
return "/fc-versions"
41-
}
42-
4320
type FirecrackerVersions struct {
4421
KernelVersion string
4522
FirecrackerVersion string
@@ -49,12 +26,12 @@ func (t FirecrackerVersions) SandboxKernelDir() string {
4926
return t.KernelVersion
5027
}
5128

52-
func (t FirecrackerVersions) HostKernelPath() string {
53-
return filepath.Join(HostKernelsDir(), t.KernelVersion, SandboxKernelFile)
29+
func (t FirecrackerVersions) HostKernelPath(config cfg.BuilderConfig) string {
30+
return filepath.Join(config.HostKernelsDir, t.KernelVersion, SandboxKernelFile)
5431
}
5532

56-
func (t FirecrackerVersions) FirecrackerPath() string {
57-
return filepath.Join(FirecrackerVersionsDir(), t.FirecrackerVersion, FirecrackerBinaryName)
33+
func (t FirecrackerVersions) FirecrackerPath(config cfg.BuilderConfig) string {
34+
return filepath.Join(config.FirecrackerVersionsDir, t.FirecrackerVersion, FirecrackerBinaryName)
5835
}
5936

6037
type RootfsPaths struct {

packages/orchestrator/internal/sandbox/fc/process.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"go.uber.org/zap"
1818
"go.uber.org/zap/zapio"
1919

20+
"github.com/e2b-dev/infra/packages/orchestrator/internal/cfg"
2021
"github.com/e2b-dev/infra/packages/orchestrator/internal/sandbox/network"
2122
"github.com/e2b-dev/infra/packages/orchestrator/internal/sandbox/socket"
2223
"github.com/e2b-dev/infra/packages/orchestrator/internal/sandbox/template"
@@ -71,6 +72,7 @@ type Process struct {
7172
func NewProcess(
7273
ctx context.Context,
7374
execCtx context.Context,
75+
config cfg.BuilderConfig,
7476
slot *network.Slot,
7577
files *storage.SandboxFiles,
7678
versions FirecrackerVersions,
@@ -83,7 +85,7 @@ func NewProcess(
8385
defer childSpan.End()
8486

8587
// Build the firecracker start script and get computed paths
86-
startBuilder := NewStartScriptBuilder()
88+
startBuilder := NewStartScriptBuilder(config)
8789
startScript, err := startBuilder.Build(versions, files, rootfsPaths, slot.NamespaceID())
8890
if err != nil {
8991
return nil, err
@@ -93,12 +95,12 @@ func NewProcess(
9395
attribute.String("sandbox.cmd", startScript.Value),
9496
)
9597

96-
_, err = os.Stat(versions.FirecrackerPath())
98+
_, err = os.Stat(versions.FirecrackerPath(config))
9799
if err != nil {
98100
return nil, fmt.Errorf("error stating firecracker binary: %w", err)
99101
}
100102

101-
_, err = os.Stat(versions.HostKernelPath())
103+
_, err = os.Stat(versions.HostKernelPath(config))
102104
if err != nil {
103105
return nil, fmt.Errorf("error stating kernel file: %w", err)
104106
}

packages/orchestrator/internal/sandbox/fc/script_builder.go

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"path/filepath"
77
txtTemplate "text/template"
88

9+
"github.com/e2b-dev/infra/packages/orchestrator/internal/cfg"
910
"github.com/e2b-dev/infra/packages/shared/pkg/storage"
1011
)
1112

@@ -60,17 +61,19 @@ ip netns exec {{ .NamespaceID }} {{ .FirecrackerPath }} --api-sock {{ .Firecrack
6061

6162
// StartScriptBuilder handles the creation and execution of firecracker start scripts
6263
type StartScriptBuilder struct {
63-
templateV1 *txtTemplate.Template
64-
templateV2 *txtTemplate.Template
64+
builderConfig cfg.BuilderConfig
65+
templateV1 *txtTemplate.Template
66+
templateV2 *txtTemplate.Template
6567
}
6668

6769
// NewStartScriptBuilder creates a new StartScriptBuilder instance
68-
func NewStartScriptBuilder() *StartScriptBuilder {
70+
func NewStartScriptBuilder(builderConfig cfg.BuilderConfig) *StartScriptBuilder {
6971
templateV1 := txtTemplate.Must(txtTemplate.New("fc-start-v1").Parse(startScriptV1))
7072
templateV2 := txtTemplate.Must(txtTemplate.New("fc-start-v2").Parse(startScriptV2))
7173
return &StartScriptBuilder{
72-
templateV1: templateV1,
73-
templateV2: templateV2,
74+
builderConfig: builderConfig,
75+
templateV1: templateV1,
76+
templateV2: templateV2,
7477
}
7578
}
7679

@@ -83,10 +86,10 @@ func (sb *StartScriptBuilder) buildArgs(
8386
) startScriptArgs {
8487
return startScriptArgs{
8588
// General
86-
SandboxDir: SandboxDir(),
89+
SandboxDir: sb.builderConfig.SandboxDir,
8790

8891
// Kernel
89-
HostKernelPath: versions.HostKernelPath(),
92+
HostKernelPath: versions.HostKernelPath(sb.builderConfig),
9093
SandboxKernelDir: versions.SandboxKernelDir(),
9194
SandboxKernelFile: SandboxKernelFile,
9295

@@ -97,7 +100,7 @@ func (sb *StartScriptBuilder) buildArgs(
97100

98101
// FC
99102
NamespaceID: namespaceID,
100-
FirecrackerPath: versions.FirecrackerPath(),
103+
FirecrackerPath: versions.FirecrackerPath(sb.builderConfig),
101104
FirecrackerSocket: files.SandboxFirecrackerSocketPath(),
102105
}
103106
}

0 commit comments

Comments
 (0)