fix: handle error cases in starting a new vector container

This commit is contained in:
Jose Diaz-Gonzalez
2021-01-07 00:12:44 -05:00
parent 441f7ab22a
commit 4bbee232d8
2 changed files with 32 additions and 9 deletions

View File

@@ -7,6 +7,7 @@ import (
"io/ioutil"
"os"
"strings"
"time"
"github.com/codeskyblue/go-sh"
)
@@ -45,6 +46,18 @@ func ContainerExists(containerID string) bool {
return true
}
// ContainerWaitTilReady will wait timeout seconds and then check if a container is running
// returning an error if it is not running at the end of the timeout
func ContainerWaitTilReady(containerID string, timeout time.Duration) error {
time.Sleep(timeout)
if !ContainerIsRunning(containerID) {
return fmt.Errorf("Container %s is not running", containerID)
}
return nil
}
// CopyFromImage copies a file from named image to destination
func CopyFromImage(appName string, image string, source string, destination string) error {
if !VerifyImage(image) {

View File

@@ -5,6 +5,7 @@ import (
"fmt"
"path/filepath"
"strconv"
"time"
"github.com/dokku/dokku/plugins/common"
)
@@ -108,19 +109,28 @@ func CommandVectorStart(vectorImage string) error {
return err
}
if !common.ContainerExists(vectorContainerName) {
return startVectorContainer(vectorImage)
if common.ContainerExists(vectorContainerName) {
if common.ContainerIsRunning(vectorContainerName) {
common.LogVerbose("Vector container is running")
return nil
}
common.LogVerbose("Starting vector container")
if !common.ContainerStart(vectorContainerName) {
return errors.New("Unable to start vector container")
}
} else {
if err := startVectorContainer(vectorImage); err != nil {
return err
}
}
if common.ContainerIsRunning(vectorContainerName) {
common.LogVerbose("Container already running")
return nil
}
if !common.ContainerStart(vectorContainerName) {
return errors.New("Unable to start vector container")
common.LogVerbose("Waiting for 10 seconds")
if err := common.ContainerWaitTilReady(vectorContainerName, 10*time.Second); err != nil {
return errors.New("Vector container did not start properly, run logs:vector-logs for more details")
}
common.LogVerbose("Vector container is running")
return nil
}