package com.breakersoft.plow.test.dispatcher.dao; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.Map; import javax.annotation.Resource; import org.junit.Before; import org.junit.Test; import com.breakersoft.plow.dispatcher.DispatchService; import com.breakersoft.plow.dispatcher.dao.StatsDao; import com.breakersoft.plow.dispatcher.domain.DispatchJob; import com.breakersoft.plow.dispatcher.domain.DispatchNode; import com.breakersoft.plow.dispatcher.domain.DispatchProc; import com.breakersoft.plow.dispatcher.domain.DispatchTask; import com.breakersoft.plow.event.JobLaunchEvent; import com.breakersoft.plow.rnd.thrift.DiskIO; import com.breakersoft.plow.rnd.thrift.RunningTask; import com.breakersoft.plow.service.JobService; import com.breakersoft.plow.test.AbstractTest; import com.breakersoft.plow.thrift.JobSpecT; import com.google.common.collect.Lists; public class StatsDaoTests extends AbstractTest { @Resource JobService jobService; @Resource DispatchService dispatchService; @Resource StatsDao statsDao; private DispatchNode node; private DispatchJob job; private DispatchProc proc; private DispatchTask task; private JobLaunchEvent event; @Before public void init() { JobSpecT spec = getTestJobSpec(); event = jobService.launch(spec); node = dispatchService.getDispatchNode( nodeService.createNode(getTestNodePing()).getName()); job = new DispatchJob(event.getJob()); task = dispatchService.getDispatchableTasks(job, node).get(0); assertTrue(dispatchService.reserveTask(task)); proc = dispatchService.allocateProc(node, task); } @Test public void testUpdateProcRuntimeStats() { RunningTask r_task = new RunningTask(); r_task.taskId = task.getTaskId().toString(); r_task.procId = proc.getProcId().toString(); r_task.jobId = job.getJobId().toString(); r_task.layerId = task.getLayerId().toString(); r_task.rssMb = 1024; r_task.pid = 101; r_task.lastLog = "foo bar"; // This is converted to a float in DB. r_task.cpuPercent = 50; r_task.diskIO = new DiskIO(10l, 10l, 100l, 200l); statsDao.batchUpdateProcRuntimeStats(Lists.newArrayList(r_task)); Map<String, Object> record = jdbc().queryForMap( "SELECT * FROM plow.proc WHERE pk_proc=?", proc.getProcId()); assertEquals(r_task.lastLog, record.get("str_last_log_line")); assertEquals(r_task.rssMb, record.get("int_ram_used")); assertEquals(r_task.rssMb, record.get("int_ram_high")); assertEquals(0.5f, record.get("flt_cores_used")); assertEquals(0.5f, record.get("flt_cores_high")); } @Test public void testUpdateTaskRuntimeStats() { RunningTask r_task = new RunningTask(); r_task.taskId = task.getTaskId().toString(); r_task.procId = proc.getProcId().toString(); r_task.jobId = job.getJobId().toString(); r_task.layerId = task.getLayerId().toString(); r_task.rssMb = 1024; r_task.pid = 101; r_task.lastLog = "foo bar"; // This is converted to a float in DB. r_task.cpuPercent = 50; r_task.diskIO = new DiskIO(10l, 10l, 100l, 200l); statsDao.batchUpdateTaskRuntimeStats(Lists.newArrayList(r_task)); Map<String, Object> record = jdbc().queryForMap( "SELECT * FROM plow.task WHERE pk_task=?", proc.getTaskId()); } @Test public void testUpdateJobRuntimeStats() { RunningTask r_task = new RunningTask(); r_task.taskId = task.getTaskId().toString(); r_task.procId = proc.getProcId().toString(); r_task.jobId = job.getJobId().toString(); r_task.layerId = task.getLayerId().toString(); r_task.rssMb = 4096; r_task.pid = 101; r_task.lastLog = "foo bar"; // This is converted to a float in DB. r_task.cpuPercent = 50; r_task.diskIO = new DiskIO(10l, 10l, 100l, 200l); statsDao.batchUpdateJobRuntimeStats(Lists.newArrayList(r_task)); long memory = jdbc().queryForObject("SELECT int_ram_high FROM plow.job_stat WHERE pk_job=?", Integer.class, task.getJobId()); assertEquals(4096, memory); float cpu = jdbc().queryForObject("SELECT flt_cores_high FROM plow.job_stat WHERE pk_job=?", Float.class, task.getJobId()); assertEquals(0.5f, cpu, 0.01); } @Test public void testUpdateLayerRuntimeStats() { RunningTask r_task = new RunningTask(); r_task.taskId = task.getTaskId().toString(); r_task.procId = proc.getProcId().toString(); r_task.jobId = job.getJobId().toString(); r_task.layerId = task.getLayerId().toString(); r_task.rssMb = 2048; r_task.pid = 101; r_task.lastLog = "foo bar"; r_task.cpuPercent = 50; r_task.diskIO = new DiskIO(10l, 10l, 100l, 200l); statsDao.batchUpdateLayerRuntimeStats(Lists.newArrayList(r_task)); int result; r_task.rssMb = 4096; statsDao.batchUpdateLayerRuntimeStats(Lists.newArrayList(r_task)); result = jdbc().queryForObject("SELECT int_ram_high FROM plow.layer_stat WHERE pk_layer=?", Integer.class, task.getLayerId()); assertEquals(4096, result); float memory = jdbc().queryForObject("SELECT flt_cores_high FROM plow.layer_stat WHERE pk_layer=?", Float.class, task.getLayerId()); assertEquals(.5, memory, 0.01); } @Test public void testUpdateLayerMinMemory() { RunningTask r_task = new RunningTask(); r_task.taskId = task.getTaskId().toString(); r_task.procId = proc.getProcId().toString(); r_task.jobId = job.getJobId().toString(); r_task.layerId = task.getLayerId().toString(); r_task.rssMb = 2048; r_task.pid = 101; r_task.lastLog = "foo bar"; r_task.cpuPercent = 50; r_task.diskIO = new DiskIO(10l, 10l, 100l, 200l); int result; statsDao.batchUpdateLayerMinimumMemory(Lists.newArrayList(r_task)); result = jdbc().queryForObject("SELECT int_ram_min FROM plow.layer WHERE pk_layer=?", Integer.class, task.getLayerId()); assertEquals(2048, result); r_task.rssMb = 4096; statsDao.batchUpdateLayerMinimumMemory(Lists.newArrayList(r_task)); result = jdbc().queryForObject("SELECT int_ram_min FROM plow.layer WHERE pk_layer=?", Integer.class, task.getLayerId()); assertEquals(4096, result); r_task.rssMb = 1024; statsDao.batchUpdateLayerMinimumMemory(Lists.newArrayList(r_task)); result = jdbc().queryForObject("SELECT int_ram_min FROM plow.layer WHERE pk_layer=?", Integer.class, task.getLayerId()); assertEquals(4096, result); } }