package lobstack;
import java.util.TreeMap;
import java.util.concurrent.SynchronousQueue;
import jelectrum.SimpleFuture;
public class LobstackWorkThread extends Thread
{
private SynchronousQueue<WorkUnit> queue;
public LobstackWorkThread(SynchronousQueue<WorkUnit> queue)
{
this.queue = queue;
setName("LobstackWorkThread");
setDaemon(true);
}
public void run()
{
while(true)
{
SimpleFuture<NodeEntry> return_node = null;
try
{
WorkUnit wu = queue.take();
if (wu.mode.equals("PUT"))
{
return_node = wu.return_entry;
NodeEntry ne = wu.node.putAll(wu.stack, wu.save_entries, wu.put_map);
return_node.setResult(ne);
}
else if (wu.mode.equals("REPOSITION"))
{
return_node = wu.return_entry;
NodeEntry ne = wu.node.reposition(wu.stack, wu.save_entries, wu.min_file);
return_node.setResult(ne);
}
else if (wu.mode.equals("ESTIMATE_REPOSITION"))
{
TreeMap<Integer, Long> sz_map = wu.node.estimateReposition(wu.stack, wu.max_file);
wu.estimate.setResult(sz_map);
}
}
catch(Throwable t)
{
if (return_node != null)
{
t.printStackTrace();
return_node.setException(new RuntimeException(t));
}
else
{
t.printStackTrace();
}
}
}
}
}