Explorar el Código

Added node scavenge functionality to ebb_work_manager.

Paul Downen hace 13 años
padre
commit
c6e64dc470
Se han modificado 1 ficheros con 13 adiciones y 3 borrados
  1. 13 3
      src/ebb_work_manager.erl

+ 13 - 3
src/ebb_work_manager.erl

@@ -105,7 +105,7 @@ handle_cast({work_finished, Node}, State = #state{node_queue=Queue}) ->
     State2 = State#state{node_queue=Queue2},
     {noreply, State2};
 handle_cast({add_node, Node}, State = #state{node_queue=Queue}) ->
-    Queue2 = priority_queue:insert(0, Node, Queue),
+    Queue2 = new_node(Node, Queue),
     State2 = State#state{node_queue=Queue2},
     {noreply, State2};
 handle_cast({remove_node, Node}, State = #state{node_queue=Queue}) ->
@@ -113,8 +113,8 @@ handle_cast({remove_node, Node}, State = #state{node_queue=Queue}) ->
     State2 = State#state{node_queue=Queue2},
     {noreply, State2};
 handle_cast(scavenge, State = #state{node_queue=Queue}) ->
-    % Scavenge nodes here
-    Queue2 = Queue,
+    World = net_adm:world(),
+    Queue2 = new_nodes(World, Queue),
     State2 = State#state{node_queue=Queue2},
     {noreply, State2}.
 
@@ -158,3 +158,13 @@ start_work_from_queue(Func, Args, Receiver, Queue) ->
 	_Error ->
 	    start_work_from_queue(Func, Args, Receiver, Queue2)
     end.
+
+new_nodes(Nodes, Queue) ->
+    lists:foldl(fun(Node, Q) -> new_node(Node, Q) end,
+		Queue, Nodes).
+
+new_node(Node, Queue) ->
+    case priority_queue:find_value(Node, Queue) of
+	{_Priority, Node} -> Queue;
+	none -> priority_queue:insert(0, Node, Queue)
+    end.