mirror of
https://github.com/cirruslabs/orchard.git
synced 2026-10-21 10:45:25 +02:00
orchard worker run: introduce "--synthetic" and "--workers" hidden flags (#390)
* orchard worker run: introduce "--synthetic" and "--workers" hidden flags * Use slices.Clone() instead of directly assigning slices * Use errgroup's context instead of command's context
This commit is contained in:
@@ -11,6 +11,7 @@ import (
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"slices"
|
||||
|
||||
"github.com/cirruslabs/orchard/internal/config"
|
||||
"github.com/cirruslabs/orchard/internal/controller"
|
||||
@@ -142,21 +143,15 @@ func runDev(cmd *cobra.Command, args []string) error {
|
||||
return devController.Run(ctx)
|
||||
})
|
||||
|
||||
workerName, err := worker.DefaultName()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for i := range workers {
|
||||
group.Go(func() error {
|
||||
workerNameLocal := workerName
|
||||
workerOptsLocal := slices.Clone(additionalWorkerOpts)
|
||||
|
||||
if workers > 1 {
|
||||
workerNameLocal = fmt.Sprintf("%s-%d", workerName, i)
|
||||
workerOptsLocal = append(workerOptsLocal, worker.WithNameSuffix(fmt.Sprintf("-%d", i+1)))
|
||||
}
|
||||
|
||||
devWorker, err := CreateDevWorker(devClient, resources,
|
||||
append(additionalWorkerOpts, worker.WithName(workerNameLocal)), logger)
|
||||
devWorker, err := CreateDevWorker(devClient, resources, workerOptsLocal, logger)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -11,12 +11,14 @@ import (
|
||||
"net/http"
|
||||
_ "net/http/pprof"
|
||||
"os"
|
||||
"slices"
|
||||
"strings"
|
||||
|
||||
"github.com/cirruslabs/chacha/pkg/localnetworkhelper"
|
||||
"github.com/cirruslabs/chacha/pkg/privdrop"
|
||||
"github.com/cirruslabs/orchard/internal/bootstraptoken"
|
||||
"github.com/cirruslabs/orchard/internal/dialer"
|
||||
"github.com/cirruslabs/orchard/internal/echoserver"
|
||||
"github.com/cirruslabs/orchard/internal/netconstants"
|
||||
"github.com/cirruslabs/orchard/internal/worker"
|
||||
"github.com/cirruslabs/orchard/pkg/client"
|
||||
@@ -24,6 +26,7 @@ import (
|
||||
"github.com/spf13/cobra"
|
||||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zapcore"
|
||||
"golang.org/x/sync/errgroup"
|
||||
"gopkg.in/natefinch/lumberjack.v2"
|
||||
)
|
||||
|
||||
@@ -46,6 +49,10 @@ var username string
|
||||
var addressPprof string
|
||||
var debug bool
|
||||
|
||||
// Hidden flags
|
||||
var synthetic bool
|
||||
var workers int
|
||||
|
||||
func newRunCommand() *cobra.Command {
|
||||
cmd := &cobra.Command{
|
||||
Use: "run CONTROLLER_URL",
|
||||
@@ -82,6 +89,14 @@ func newRunCommand() *cobra.Command {
|
||||
"start pprof HTTP server on localhost:6060 for diagnostic purposes (e.g. \"localhost:6060\")")
|
||||
cmd.Flags().BoolVar(&debug, "debug", false, "enable debug logging")
|
||||
|
||||
// Hidden flags
|
||||
cmd.Flags().BoolVar(&synthetic, "synthetic", false,
|
||||
"do not instantiate real Tart VM, use synthetic in-memory VMs suitable for load testing")
|
||||
cmd.Flags().MarkHidden("synthetic")
|
||||
|
||||
cmd.Flags().IntVar(&workers, "workers", 1, "number of workers to start")
|
||||
cmd.Flags().MarkHidden("workers")
|
||||
|
||||
return cmd
|
||||
}
|
||||
|
||||
@@ -175,16 +190,49 @@ func runWorker(cmd *cobra.Command, args []string) (err error) {
|
||||
}()
|
||||
}
|
||||
|
||||
workerInstance, err := worker.New(
|
||||
controllerClient,
|
||||
workerOpts...,
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer workerInstance.Close()
|
||||
group, ctx := errgroup.WithContext(cmd.Context())
|
||||
|
||||
return workerInstance.Run(cmd.Context())
|
||||
if synthetic {
|
||||
// Use TCP echo server to partially emulate VM's TCP/IP stack,
|
||||
// this way we get port-forwarding working when running in
|
||||
// synthetic mode
|
||||
echoServer, err := echoserver.New()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
group.Go(func() error {
|
||||
return echoServer.Run(ctx)
|
||||
})
|
||||
|
||||
dialer := dialer.DialFunc(func(ctx context.Context, network, addr string) (net.Conn, error) {
|
||||
dialer := net.Dialer{}
|
||||
|
||||
return dialer.DialContext(ctx, "tcp", echoServer.Addr())
|
||||
})
|
||||
|
||||
workerOpts = append(workerOpts, worker.WithSynthetic(), worker.WithDialer(dialer))
|
||||
}
|
||||
|
||||
for i := range workers {
|
||||
group.Go(func() error {
|
||||
workerOptsLocal := slices.Clone(workerOpts)
|
||||
|
||||
if workers > 1 {
|
||||
workerOptsLocal = append(workerOptsLocal, worker.WithNameSuffix(fmt.Sprintf("-%d", i+1)))
|
||||
}
|
||||
|
||||
workerInstance, err := worker.New(controllerClient, workerOptsLocal...)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer workerInstance.Close()
|
||||
|
||||
return workerInstance.Run(ctx)
|
||||
})
|
||||
}
|
||||
|
||||
return group.Wait()
|
||||
}
|
||||
|
||||
func readBootstrapToken() (string, error) {
|
||||
|
||||
Reference in New Issue
Block a user