Переглянути джерело

Merge remote-tracking branch 'origin/master'

master
SisMaker 3 роки тому
джерело
коміт
e692548d51
5 змінених файлів з 36 додано та 21 видалено
  1. +11
    -1
      README.md
  2. +3
    -0
      src/Faw/fwFMgr.erl
  3. +1
    -1
      src/Faw/fwKvsToBeam.erl
  4. +2
    -1
      src/Faw/fwQueue.erl
  5. +19
    -18
      src/eFaw.erl

+ 11
- 1
README.md Переглянути файл

@ -1,7 +1,7 @@
eFaw
=====
An OTP application
Eralng's Factories and workers.
Build
-----
@ -15,3 +15,13 @@ Useage
3 send your async task to your factory: eFaw:inWork(myFactory, [{report_log, xxxx}, {write_log, yyyyyy}]).
4 apply your sync task to your factory: eFaw:syncWork(myFactory, retTag, 5000, {report_log, xxxx}).
5 then worker auto do the task
all API:
start/0 %% start app
stop/0 %% stop app
openF/2 %% Open a factory
closeF/1 %% close a factory
hireW/3 %% hire worker
inWork/2 %% Insert async task
inWorks/2 %% Insert async tasks
syncWork/4 %% Insert sync task And wait for the result to receive

+ 3
- 0
src/Faw/fwFMgr.erl Переглянути файл

@ -27,6 +27,9 @@ start_link() ->
init(_Args) ->
{ok, #{}}.
handleCall({mNewQueue, FName}, _State, _FROM) ->
Ret = fwQueue:new(FName),
{reply, Ret};
handleCall(_Msg, _State, _FROM) ->
?ERR("~p call receive unexpect msg ~p ~n ", [?MODULE, _Msg]),
{reply, ok}.

+ 1
- 1
src/Faw/fwKvsToBeam.erl Переглянути файл

@ -4,7 +4,7 @@
load/2
]).
%% map类型的数据不能当做key
%% attention: map() can not make as key
-type key() :: atom() | binary() | bitstring() | float() | integer() | list() | tuple().
-type value() :: atom() | binary() | bitstring() | float() | integer() | list() | tuple() | map().

+ 2
- 1
src/Faw/fwQueue.erl Переглянути файл

@ -30,7 +30,8 @@ in(Name, Value) ->
-spec ins(Name :: atom(), Values :: [term()]) -> true.
ins(Name, Values) ->
[ets:insert(Name, {erlang:unique_integer(), Value}) || Value <- Values],
Tasks = [{erlang:unique_integer(), Value} || Value <- Values],
ets:insert(Name, Tasks),
true.
-spec outF(Name :: atom()) -> empty | Value :: term().

+ 19
- 18
src/eFaw.erl Переглянути файл

@ -3,14 +3,14 @@
-include("eFaw.hrl").
-export([
start/0 %%
, stop/0 %%
, openF/2 %%
, closeW/1 %%
, hireW/3 %%
, inWork/2 %%
, inWorks/2 %%
, syncWork/4 %%
start/0 %% start app
, stop/0 %% stop app
, openF/2 %% Open a factory
, closeF/1 %% close a factory
, hireW/3 %% hire worker
, inWork/2 %% Insert async task
, inWorks/2 %% Insert async tasks
, syncWork/4 %% Insert sync task And wait for the result to receive
]).
start() ->
@ -43,6 +43,7 @@ openF(FName, Kvs) ->
modules => [fwWSup]
},
Ret = supervisor:start_child(eFaw_sup, FChildSpec),
FName = gen_srv:call(fwFMgr, {mNewQueue, FName}),
fwKvsToBeam:load(FName, initCfg(Kvs)),
hireW(FName:getV(?wFCnt), FName, false),
Ret.
@ -53,7 +54,7 @@ hireW(WorkerNum, FName, IsTmp) when is_integer(WorkerNum), WorkerNum > 0 ->
hireW(_WorkerNum, _FName, _IsTmp) ->
ok.
closeW(FName) ->
closeF(FName) ->
supervisor:terminate_child(eFaw_sup, FName).
-spec inWork(FName :: atom(), Work :: term()) -> true | false.
@ -64,14 +65,14 @@ inWork(FName, Work) ->
WFCnt = FName:getV(?wFCnt),
if
FTaskLen > FTMax ->
%% ;
%% The factory is overloaded
false;
FTaskLen == FTLfl ->
%% ;
%% See factory if need to hire hourly worker
gen_srv:send(fwFMgr, mChAddW),
fwQueue:in(FName, Work);
FTaskLen < WFCnt ->
%%
%% See if need to wake up idle workers
gen_srv:send(fwFMgr, mChAwkW),
fwQueue:in(FName, Work);
true ->
@ -86,14 +87,14 @@ inWorks(FName, Works) ->
WFCnt = FName:getV(?wFCnt),
if
FTaskLen > FTMax ->
%% ;
%% The factory is overloaded.
false;
FTaskLen == FTLfl ->
%% ;
%% See factory if need to hire hourly worker
gen_srv:send(fwFMgr, mChAddW),
fwQueue:ins(FName, Works);
FTaskLen < WFCnt ->
%%
%% See if need to wake up idle workers
gen_srv:send(fwFMgr, mChAwkW),
fwQueue:ins(FName, Works);
true ->
@ -108,10 +109,10 @@ syncWork(FName, RetTag, Timeout, Work) ->
WFCnt = FName:getV(?wFCnt),
if
FTaskLen > FTMax ->
%% ;
%% The factory is overloaded.
false;
FTaskLen == FTLfl ->
%% ;
%% See factory if need to hire hourly worker
gen_srv:send(fwFMgr, mChAddW),
fwQueue:in(FName, Work),
receive
@ -121,7 +122,7 @@ syncWork(FName, RetTag, Timeout, Work) ->
timeout
end;
FTaskLen < WFCnt ->
%%
%% See if need to wake up idle workers
gen_srv:send(fwFMgr, mChAwkW),
fwQueue:in(FName, Work),
receive

Завантаження…
Відмінити
Зберегти