Commit 0bbd7d42 authored by duanjinfei's avatar duanjinfei

update task api url parse

parent 80538796
......@@ -36,6 +36,8 @@ type TaskHandler struct {
IsExecStandardTask bool
}
var oldTaskImageName string
func NewTaskWorker(op *operate.DockerOp) *TaskHandler {
return &TaskHandler{
Wg: &sync.WaitGroup{},
......@@ -119,6 +121,16 @@ func (t *TaskHandler) ComputeTaskHandler(taskMsg *nodeManagerV1.PushTaskMessage)
} else if taskMsg.TaskKind == baseV1.TaskKind_StandardTask {
t.IsExecStandardTask = true
}
if oldTaskImageName != "" && oldTaskImageName != taskCmd.ImageName {
//todo: 停止标准任务容器
//containers := t.DockerOp.ListContainer()
//for _, container := range containers {
// if container.Image == taskCmd.ImageName && container.State == "running" {
// t.DockerOp.StopContainer(container.ID)
// }
//}
oldTaskImageName = taskCmd.ImageName
}
images, err := t.DockerOp.PsImages()
if err != nil {
log.Error("Ps images failed:", err)
......@@ -143,26 +155,8 @@ func (t *TaskHandler) ComputeTaskHandler(taskMsg *nodeManagerV1.PushTaskMessage)
log.Error("The image is not found:", taskCmd.ImageName)
return
}
containers := t.DockerOp.ListContainer()
isImageRunExist := false
for _, container := range containers {
if container.ImageID == imageId && container.State == "running" {
networks := container.NetworkSettings.Networks
ip := ""
for _, endPoint := range networks {
ip = endPoint.IPAddress
log.Warn("Container network ip:", ip)
}
//taskCmd.ApiUrl = fmt.Sprintf(taskCmd.ApiUrl, container.Ports[0].PublicPort)
log.Info("Container ports:", container.Ports)
taskCmd.ApiUrl = fmt.Sprintf("http://%s:%d/aigic", ip, container.Ports[0].PrivatePort)
//taskCmd.ApiUrl = fmt.Sprintf("http://%s:%d/aigic", "0.0.0.0", container.Ports[0].PublicPort)
log.Info("Setting container api url:", taskCmd.ApiUrl)
isImageRunExist = true
break
}
}
if !isImageRunExist {
running, internalIp, internalPort := t.foundImageIsRunning(imageId)
if !running {
var externalPort int64
for {
// 设置种子以确保每次运行时生成不同的随机数序列
......@@ -177,7 +171,6 @@ func (t *TaskHandler) ComputeTaskHandler(taskMsg *nodeManagerV1.PushTaskMessage)
}
taskCmd.DockerCmd.HostIp = "0.0.0.0"
taskCmd.DockerCmd.HostPort = strconv.FormatInt(externalPort, 10)
taskCmd.ApiUrl = fmt.Sprintf(taskCmd.ApiUrl, externalPort)
//if int64(len(containers)) == conf.GetConfig().ContainerNum {
// //todo: 待定,需要根据权重去停止哪个容器
// t.DockerOp.StopAndDeleteContainer(containers[0].ID)
......@@ -188,8 +181,18 @@ func (t *TaskHandler) ComputeTaskHandler(taskMsg *nodeManagerV1.PushTaskMessage)
return
}
log.Infof("Started container with ID %s", containerId)
time.Sleep(time.Second * 10)
running, internalIp, internalPort = t.foundImageIsRunning(imageId)
if running {
taskCmd.ApiUrl = fmt.Sprintf("http://%s:%d%s", internalIp, internalPort, taskCmd.ApiUrl)
log.Info("Container ports:", internalPort)
log.WithField("ApiUrl", taskCmd.ApiUrl).Info("The image is not running")
}
} else {
taskCmd.ApiUrl = fmt.Sprintf("http://%s:%d%s", internalIp, internalPort, taskCmd.ApiUrl)
log.Info("Container ports:", internalPort)
log.WithField("ApiUrl", taskCmd.ApiUrl).Info("The image is running")
}
startBeforeTaskTime := time.Now()
reqContainerBody := bytes.NewReader(taskMsg.TaskParam)
post, err := t.HttpClient.Post(taskCmd.ApiUrl, "application/json", reqContainerBody)
......@@ -244,3 +247,19 @@ func (t *TaskHandler) GetMinerSign(msg *nodeManagerV1.PushTaskMessage, taskResul
log.Info("Miner sign:", common.Bytes2Hex(sign))
return reqHash.Bytes(), respHash.Bytes(), sign
}
func (t *TaskHandler) foundImageIsRunning(imageId string) (bool, string, uint16) {
containers := t.DockerOp.ListContainer()
for _, container := range containers {
if container.ImageID == imageId && container.State == "running" {
networks := container.NetworkSettings.Networks
ip := ""
for _, endPoint := range networks {
ip = endPoint.IPAddress
log.Warn("Container network ip:", ip)
}
return true, ip, container.Ports[0].PrivatePort
}
}
return false, "", 0
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment