Merge branch 'gc-advens-fix-496' into launch

This commit is contained in:
frikky
2021-09-02 01:46:30 +02:00
5 changed files with 20 additions and 59 deletions
+2 -1
View File
@@ -41,7 +41,8 @@ HTTP_PROXY=
HTTPS_PROXY= HTTPS_PROXY=
SHUFFLE_PASS_WORKER_PROXY=TRUE SHUFFLE_PASS_WORKER_PROXY=TRUE
SHUFFLE_PASS_APP_PROXY=FALSE SHUFFLE_PASS_APP_PROXY=FALSE
TZ=Europe/Amsterdam #Timezone-handler in Orborus, Worker and Apps TZ=Europe/Amsterdam # Timezone-handler in Orborus, Worker and Apps
ORBORUS_CONTAINER_NAME= # Used to FIND the containername. cgroup v2: issue 501
SHUFFLE_BASE_IMAGE_REGISTRY=ghcr.io SHUFFLE_BASE_IMAGE_REGISTRY=ghcr.io
SHUFFLE_BASE_IMAGE_NAME=frikky SHUFFLE_BASE_IMAGE_NAME=frikky
+1 -1
View File
@@ -1,5 +1,5 @@
NAME=shuffle-orborus NAME=shuffle-orborus
VERSION=0.9.10 VERSION=0.9.14
echo "Running docker build with $NAME:$VERSION" echo "Running docker build with $NAME:$VERSION"
#docker rmi frikky/shuffle:$NAME --force #docker rmi frikky/shuffle:$NAME --force
+13 -12
View File
@@ -56,6 +56,7 @@ var dockerApiVersion = os.Getenv("DOCKER_API_VERSION")
var runningMode = strings.ToLower(os.Getenv("RUNNING_MODE")) var runningMode = strings.ToLower(os.Getenv("RUNNING_MODE"))
var cleanupEnv = strings.ToLower(os.Getenv("CLEANUP")) var cleanupEnv = strings.ToLower(os.Getenv("CLEANUP"))
var timezone = os.Getenv("TZ") var timezone = os.Getenv("TZ")
var containerName = os.Getenv("ORBORUS_CONTAINER_NAME")
var executionIds = []string{} var executionIds = []string{}
var dockercli *dockerclient.Client var dockercli *dockerclient.Client
@@ -101,19 +102,26 @@ func getThisContainerId() {
if err == nil { if err == nil {
containerId = strings.TrimSpace(string(out)) containerId = strings.TrimSpace(string(out))
// cgroup error. Hardcoding this. // cgroup error. Use fallback strategy below.
// https://github.com/moby/moby/issues/7015 // https://github.com/moby/moby/issues/7015
//log.Printf("Checking if %s is in %s", ".scope", string(out)) //log.Printf("Checking if %s is in %s", ".scope", string(out))
if strings.Contains(string(out), ".scope") { if strings.Contains(string(out), ".scope") {
containerId = "shuffle-orborus" containerId = ""
//docker-76c537e9a4b7c7233011f5d70e6b7f2d600b6413ac58a96519b8dca7a3f7117a.scope //docker-76c537e9a4b7c7233011f5d70e6b7f2d600b6413ac58a96519b8dca7a3f7117a.scope
} }
} else { } else {
if fCol == "0" {
containerId = "shuffle-orborus"
log.Printf("[WARNING] Failed getting container ID: %s", err) log.Printf("[WARNING] Failed getting container ID: %s", err)
} }
} }
if containerId == "" {
if containerName != "" {
containerId = containerName
log.Printf("[INFO] Falling back to CONTAINER_NAME as container ID")
} else {
containerId = "shuffle-orborus"
log.Printf(`[WARNING] CONTAINER_NAME is not set. Falling back to default name "%s" as container ID`, containerId)
}
} }
log.Printf(`[INFO] Started with containerId "%s"`, containerId) log.Printf(`[INFO] Started with containerId "%s"`, containerId)
@@ -137,14 +145,7 @@ func deployWorker(image string, identifier string, env []string) {
Binds: []string{ Binds: []string{
"/var/run/docker.sock:/var/run/docker.sock:rw", "/var/run/docker.sock:/var/run/docker.sock:rw",
}, },
} NetworkMode: container.NetworkMode(fmt.Sprintf("container:%s", containerId)),
// form container id and use it as network source if it's not empty
if containerId != "" {
//log.Printf("[INFO] Found container ID %s", containerId)
hostConfig.NetworkMode = container.NetworkMode(fmt.Sprintf("container:%s", containerId))
} else {
//log.Printf("[INFO] Empty self container id, continue without NetworkMode")
} }
if cleanupEnv == "true" { if cleanupEnv == "true" {
+1 -1
View File
@@ -1,5 +1,5 @@
NAME=shuffle-worker NAME=shuffle-worker
VERSION=0.9.13 VERSION=0.9.14
echo "Running docker build with $NAME:$VERSION" echo "Running docker build with $NAME:$VERSION"
#CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o worker.bin . #CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o worker.bin .
+1 -42
View File
@@ -16,7 +16,6 @@ import (
"net/http" "net/http"
"net/url" "net/url"
"os" "os"
"os/exec"
"strings" "strings"
"time" "time"
@@ -42,7 +41,6 @@ var cleanupEnv = strings.ToLower(os.Getenv("CLEANUP"))
var timezone = os.Getenv("TZ") var timezone = os.Getenv("TZ")
var baseimagename = "frikky/shuffle" var baseimagename = "frikky/shuffle"
var registryName = "registry.hub.docker.com" var registryName = "registry.hub.docker.com"
var fallbackName = "shuffle-orborus"
var sleepTime = 2 var sleepTime = 2
var requestCache *cache.Cache var requestCache *cache.Cache
var topClient *http.Client var topClient *http.Client
@@ -61,38 +59,6 @@ var startAction string
var results []shuffle.ActionResult var results []shuffle.ActionResult
var allLogs map[string]string var allLogs map[string]string
var containerId string
// form container id of current running container
func getThisContainerId() string {
if len(containerId) > 0 {
return containerId
}
id := ""
cmd := fmt.Sprintf("cat /proc/self/cgroup | grep memory | tail -1 | cut -d/ -f3 | grep -o -E '[0-9A-z]{64}'")
out, err := exec.Command("bash", "-c", cmd).Output()
if err == nil {
id = strings.TrimSpace(string(out))
//log.Printf("Checking if %s is in %s", ".scope", string(out))
if strings.Contains(string(out), ".scope") {
id = fallbackName
}
}
return id
}
func init() {
containerId = getThisContainerId()
if len(containerId) == 0 {
log.Printf("[WARNING] No container ID found. Not running containerized? This should only show during testing")
} else {
log.Printf("[INFO] Found container ID for this worker: %s", containerId)
}
}
// removes every container except itself (worker) // removes every container except itself (worker)
func shutdown(workflowExecution shuffle.WorkflowExecution, nodeId string, reason string, handleResultSend bool) { func shutdown(workflowExecution shuffle.WorkflowExecution, nodeId string, reason string, handleResultSend bool) {
log.Printf("[INFO] Shutdown (%s) started with reason %#v. Result amount: %d. ResultsSent: %d, Send result: %#v", workflowExecution.Status, reason, len(workflowExecution.Results), requestsSent, handleResultSend) log.Printf("[INFO] Shutdown (%s) started with reason %#v. Result amount: %d. ResultsSent: %d, Send result: %#v", workflowExecution.Status, reason, len(workflowExecution.Results), requestsSent, handleResultSend)
@@ -221,14 +187,7 @@ func deployApp(cli *dockerclient.Client, image string, identifier string, env []
Config: map[string]string{}, Config: map[string]string{},
}, },
Resources: container.Resources{}, Resources: container.Resources{},
} NetworkMode: container.NetworkMode(fmt.Sprintf("container:worker-%s", workflowExecution.ExecutionId)),
// form container id and use it as network source if it's not empty
containerId = getThisContainerId()
if containerId != "" {
hostConfig.NetworkMode = container.NetworkMode(fmt.Sprintf("container:%s", containerId))
} else {
log.Printf("[WARNING] Empty self container id, continue without NetworkMode")
} }
// Removing because log extraction should happen first // Removing because log extraction should happen first