Skip to content

Commit

Permalink
compiles....
Browse files Browse the repository at this point in the history
  • Loading branch information
hexfusion committed Jun 23, 2023
1 parent 2455465 commit 2895a1c
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 25 deletions.
9 changes: 1 addition & 8 deletions vms/rpcchainvm/runtime/container/runtime.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import (
"github.com/ava-labs/avalanchego/vms/rpcchainvm/grpcutils"
"github.com/ava-labs/avalanchego/vms/rpcchainvm/gruntime"
"github.com/ava-labs/avalanchego/vms/rpcchainvm/runtime"
"github.com/containers/podman/v4/pkg/bindings"
"github.com/containers/podman/v4/pkg/bindings/kube"

pb "github.com/ava-labs/avalanchego/proto/pb/vm/runtime"
Expand Down Expand Up @@ -70,11 +69,6 @@ func Bootstrap(
return nil, nil, fmt.Errorf("failed to find socket path: %w", err)
}

pctx, err := bindings.NewConnection(context.Background(), socket)
if err != nil {
return nil, nil, fmt.Errorf("failed to start new podman connection: %w", err)
}

// all this should go into factory
obj, _, err := scheme.Codecs.UniversalDeserializer().Decode(config.PodBytes, nil, nil)
if err != nil {
Expand Down Expand Up @@ -105,8 +99,7 @@ func Bootstrap(
return nil, nil, fmt.Errorf("failed to start pod: %w", err)
}

// fix stopper
stopper := NewStopper(log, cmd)
stopper := NewStopper(log, socket, podBytes)

// wait for handshake success
timeout := time.NewTimer(config.HandshakeTimeout)
Expand Down
33 changes: 16 additions & 17 deletions vms/rpcchainvm/runtime/container/stopper.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,44 +4,47 @@
package container

import (
"bytes"
"context"
"os/exec"
"sync"
"syscall"

"github.com/ava-labs/avalanchego/utils/logging"
"github.com/ava-labs/avalanchego/utils/wrappers"
"github.com/ava-labs/avalanchego/vms/rpcchainvm/runtime"
"github.com/containers/podman/v4/pkg/bindings"
"github.com/containers/podman/v4/pkg/bindings/kube"
"go.uber.org/zap"
)

func NewStopper(logger logging.Logger, cmd *exec.Cmd) runtime.Stopper {
func NewStopper(logger logging.Logger, socketPath string, podBytes []byte) runtime.Stopper {
return &stopper{
cmd: cmd,
logger: logger,
socketPath: socketPath,
logger: logger,
podBytes: podBytes,
}
}

type stopper struct {
once sync.Once
cmd *exec.Cmd
logger logging.Logger
once sync.Once
socketPath string
podBytes []byte
logger logging.Logger
}

func (s *stopper) Stop(ctx context.Context) {
s.once.Do(func() {
stop(ctx, s.logger, s.cmd)
stop(ctx, s.socketPath, s.logger, s.podBytes)
})
}

func stop(ctx context.Context, log logging.Logger, cmd *exec.Cmd) {
func stop(ctx context.Context, socketPath string, log logging.Logger, podBytes []byte) {
waitChan := make(chan error)
go func() {
// attempt graceful shutdown
errs := wrappers.Errs{}
err := cmd.Process.Signal(syscall.SIGTERM)
ctx, err := bindings.NewConnection(context.Background(), socketPath)
errs.Add(err)
_, err = cmd.Process.Wait()
_, err = kube.DownWithBody(ctx, bytes.NewReader(podBytes), kube.DownOptions{})
errs.Add(err)
waitChan <- errs.Err
close(waitChan)
Expand All @@ -60,10 +63,6 @@ func stop(ctx context.Context, log logging.Logger, cmd *exec.Cmd) {
)
}
case <-ctx.Done():
// force kill
err := cmd.Process.Kill()
log.Error("subprocess was killed",
zap.Error(err),
)
// force kill TODO whats the heavy hammer here?
}
}

0 comments on commit 2895a1c

Please sign in to comment.