From 6622a74cb4048d59398dfa66e863f8beac043e55 Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Mon, 20 Apr 2026 18:56:17 +0800 Subject: [PATCH] fix deployer --- src/docker/docker_deployer.erl | 12 +++---- src/docker/docker_deployer_sup.erl | 57 ++++++++++++++++++++++++++++++ src/docker/docker_manager.erl | 3 +- src/efka_sup.erl | 9 +++++ 4 files changed, 74 insertions(+), 7 deletions(-) create mode 100644 src/docker/docker_deployer_sup.erl diff --git a/src/docker/docker_deployer.erl b/src/docker/docker_deployer.erl index b25fae7..58c27e6 100644 --- a/src/docker/docker_deployer.erl +++ b/src/docker/docker_deployer.erl @@ -12,7 +12,7 @@ -dialyzer([{nowarn_function, normalize_image/1}]). %% API --export([start_monitor/3]). +-export([start_link/3]). -export([deploy/3]). -define(TASK_SUCCESS, <<"success">>). @@ -22,12 +22,12 @@ %%% API %%%=================================================================== -%% @doc Spawns the server and registers the local name (unique) --spec(start_monitor(TaskId :: integer(), ContainerDir :: string(), Params :: message_pb:'ContainerDeployParams'()) -> - {ok, {Pid :: pid(), MRef :: reference()}}). -start_monitor(TaskId, ContainerDir, Params) +-spec(start_link(TaskId :: integer(), ContainerDir :: string(), Params :: message_pb:'ContainerDeployParams'()) -> + {ok, pid()}). +start_link(TaskId, ContainerDir, Params) when is_integer(TaskId), is_list(ContainerDir), is_record(Params, 'ContainerDeployParams') -> - {ok, spawn_monitor(?MODULE, deploy, [TaskId, ContainerDir, Params])}. + Pid = spawn_link(?MODULE, deploy, [TaskId, ContainerDir, Params]), + {ok, Pid}. %%%=================================================================== %%% Internal functions diff --git a/src/docker/docker_deployer_sup.erl b/src/docker/docker_deployer_sup.erl new file mode 100644 index 0000000..433a720 --- /dev/null +++ b/src/docker/docker_deployer_sup.erl @@ -0,0 +1,57 @@ +%%%------------------------------------------------------------------- +%%% @author anlicheng +%%% @copyright (C) 2026, +%%% @doc +%%% +%%% @end +%%% Created : 20. 4月 2026 +%%%------------------------------------------------------------------- +-module(docker_deployer_sup). +-author("anlicheng"). +-include("message_pb.hrl"). + +-behaviour(supervisor). + +%% API +-export([start_link/0, start_deployer/3]). + +%% Supervisor callbacks +-export([init/1]). + +-define(SERVER, ?MODULE). + +%%%=================================================================== +%%% API +%%%=================================================================== + +-spec start_link() -> {ok, pid()} | ignore | {error, term()}. +start_link() -> + supervisor:start_link({local, ?SERVER}, ?MODULE, []). + +-spec start_deployer(integer(), string(), message_pb:'ContainerDeployParams'()) -> + {ok, pid()} | {error, term()}. +start_deployer(TaskId, ContainerDir, Params) + when is_integer(TaskId), is_list(ContainerDir), is_record(Params, 'ContainerDeployParams') -> + supervisor:start_child(?SERVER, child_spec(TaskId, ContainerDir, Params)). + +%%%=================================================================== +%%% Supervisor callbacks +%%%=================================================================== + +init([]) -> + SupFlags = #{strategy => one_for_one, intensity => 1000, period => 3600}, + {ok, {SupFlags, []}}. + +%%%=================================================================== +%%% Internal functions +%%%=================================================================== + +child_spec(TaskId, ContainerDir, Params) -> + #{ + id => make_ref(), + start => {docker_deployer, start_link, [TaskId, ContainerDir, Params]}, + restart => temporary, + shutdown => 5000, + type => worker, + modules => [docker_deployer] + }. diff --git a/src/docker/docker_manager.erl b/src/docker/docker_manager.erl index 0f0f357..5454ea0 100644 --- a/src/docker/docker_manager.erl +++ b/src/docker/docker_manager.erl @@ -73,7 +73,8 @@ handle_call({deploy, TaskId, Params = #'ContainerDeployParams'{ }}, _From, State = #state{root_dir = RootDir, task_map = TaskMap}) -> %% 创建目录 {ok, ContainerDir} = docker_helper:ensure_container_dir(RootDir, ContainerName, ContainerDir0), - {ok, {TaskPid, _Ref}} = docker_deployer:start_monitor(TaskId, ContainerDir, Params), + {ok, TaskPid} = docker_deployer_sup:start_deployer(TaskId, ContainerDir, Params), + _Ref = erlang:monitor(process, TaskPid), logger:debug("[docker_manager] start deploy task_id: ~p, params: ~p", [TaskId, Params]), {reply, ok, State#state{task_map = maps:put(TaskPid, TaskId, TaskMap)}}; diff --git a/src/efka_sup.erl b/src/efka_sup.erl index 0d1a6c6..69d5362 100644 --- a/src/efka_sup.erl +++ b/src/efka_sup.erl @@ -100,6 +100,15 @@ init([]) -> modules => ['efka_task_reporter'] }, + #{ + id => 'docker_deployer_sup', + start => {'docker_deployer_sup', start_link, []}, + restart => permanent, + shutdown => 2000, + type => supervisor, + modules => ['docker_deployer_sup'] + }, + #{ id => 'docker_manager', start => {'docker_manager', start_link, []},