Search in sources :

Example 6 with WeaveRunner

use of com.continuuity.weave.api.WeaveRunner in project weave by continuuity.

the class ResourceReportTestRun method testResourceReportWithFailingContainers.

@Test
public void testResourceReportWithFailingContainers() throws InterruptedException, IOException, TimeoutException, ExecutionException {
    WeaveRunner runner = YarnTestSuite.getWeaveRunner();
    ResourceSpecification resourceSpec = ResourceSpecification.Builder.with().setVirtualCores(1).setMemory(128, ResourceSpecification.SizeUnit.MEGA).setInstances(2).build();
    WeaveController controller = runner.prepare(new BuggyServer(), resourceSpec).addLogHandler(new PrinterLogHandler(new PrintWriter(System.out, true))).withApplicationArguments("echo").withArguments("BuggyServer", "echo2").start();
    final CountDownLatch running = new CountDownLatch(1);
    controller.addListener(new ServiceListenerAdapter() {

        @Override
        public void running() {
            running.countDown();
        }
    }, Threads.SAME_THREAD_EXECUTOR);
    Assert.assertTrue(running.await(30, TimeUnit.SECONDS));
    Iterable<Discoverable> echoServices = controller.discoverService("echo");
    Assert.assertTrue(YarnTestSuite.waitForSize(echoServices, 2, 60));
    // check that we have 2 runnables.
    ResourceReport report = controller.getResourceReport();
    Assert.assertEquals(2, report.getRunnableResources("BuggyServer").size());
    // cause a divide by 0 in one server
    Discoverable discoverable = echoServices.iterator().next();
    Socket socket = new Socket(discoverable.getSocketAddress().getAddress(), discoverable.getSocketAddress().getPort());
    try {
        PrintWriter writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream(), Charsets.UTF_8), true);
        writer.println("0");
    } finally {
        socket.close();
    }
    // takes some time for app master to find out the container completed...
    TimeUnit.SECONDS.sleep(5);
    // check that we have 1 runnable, not 2.
    report = controller.getResourceReport();
    Assert.assertEquals(1, report.getRunnableResources("BuggyServer").size());
    controller.stop().get(30, TimeUnit.SECONDS);
    // Sleep a bit before exiting.
    TimeUnit.SECONDS.sleep(2);
}
Also used : WeaveRunner(com.continuuity.weave.api.WeaveRunner) Discoverable(com.continuuity.weave.discovery.Discoverable) ServiceListenerAdapter(com.continuuity.weave.common.ServiceListenerAdapter) ResourceSpecification(com.continuuity.weave.api.ResourceSpecification) CountDownLatch(java.util.concurrent.CountDownLatch) PrinterLogHandler(com.continuuity.weave.api.logging.PrinterLogHandler) WeaveController(com.continuuity.weave.api.WeaveController) ResourceReport(com.continuuity.weave.api.ResourceReport) OutputStreamWriter(java.io.OutputStreamWriter) Socket(java.net.Socket) PrintWriter(java.io.PrintWriter) Test(org.junit.Test)

Example 7 with WeaveRunner

use of com.continuuity.weave.api.WeaveRunner in project weave by continuuity.

the class ResourceReportTestRun method testRunnablesGetAllowedResourcesInEnv.

@Test
public void testRunnablesGetAllowedResourcesInEnv() throws InterruptedException, IOException, TimeoutException, ExecutionException {
    WeaveRunner runner = YarnTestSuite.getWeaveRunner();
    ResourceSpecification resourceSpec = ResourceSpecification.Builder.with().setVirtualCores(1).setMemory(2048, ResourceSpecification.SizeUnit.MEGA).setInstances(1).build();
    WeaveController controller = runner.prepare(new EnvironmentEchoServer(), resourceSpec).addLogHandler(new PrinterLogHandler(new PrintWriter(System.out, true))).withApplicationArguments("envecho").withArguments("EnvironmentEchoServer", "echo2").start();
    final CountDownLatch running = new CountDownLatch(1);
    controller.addListener(new ServiceListenerAdapter() {

        @Override
        public void running() {
            running.countDown();
        }
    }, Threads.SAME_THREAD_EXECUTOR);
    Assert.assertTrue(running.await(30, TimeUnit.SECONDS));
    Iterable<Discoverable> envEchoServices = controller.discoverService("envecho");
    Assert.assertTrue(YarnTestSuite.waitForSize(envEchoServices, 1, 30));
    // TODO: check virtual cores once yarn adds the ability
    Map<String, String> expectedValues = Maps.newHashMap();
    expectedValues.put(EnvKeys.YARN_CONTAINER_MEMORY_MB, "2048");
    expectedValues.put(EnvKeys.WEAVE_INSTANCE_COUNT, "1");
    // check environment of the runnable.
    Discoverable discoverable = envEchoServices.iterator().next();
    for (Map.Entry<String, String> expected : expectedValues.entrySet()) {
        Socket socket = new Socket(discoverable.getSocketAddress().getHostName(), discoverable.getSocketAddress().getPort());
        try {
            PrintWriter writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream(), Charsets.UTF_8), true);
            LineReader reader = new LineReader(new InputStreamReader(socket.getInputStream(), Charsets.UTF_8));
            writer.println(expected.getKey());
            Assert.assertEquals(expected.getValue(), reader.readLine());
        } finally {
            socket.close();
        }
    }
    controller.stop().get(30, TimeUnit.SECONDS);
    // Sleep a bit before exiting.
    TimeUnit.SECONDS.sleep(2);
}
Also used : WeaveRunner(com.continuuity.weave.api.WeaveRunner) Discoverable(com.continuuity.weave.discovery.Discoverable) InputStreamReader(java.io.InputStreamReader) ServiceListenerAdapter(com.continuuity.weave.common.ServiceListenerAdapter) ResourceSpecification(com.continuuity.weave.api.ResourceSpecification) CountDownLatch(java.util.concurrent.CountDownLatch) LineReader(com.google.common.io.LineReader) PrinterLogHandler(com.continuuity.weave.api.logging.PrinterLogHandler) WeaveController(com.continuuity.weave.api.WeaveController) OutputStreamWriter(java.io.OutputStreamWriter) Map(java.util.Map) Socket(java.net.Socket) PrintWriter(java.io.PrintWriter) Test(org.junit.Test)

Example 8 with WeaveRunner

use of com.continuuity.weave.api.WeaveRunner in project weave by continuuity.

the class ResourceReportTestRun method testResourceReport.

@Test
public void testResourceReport() throws InterruptedException, ExecutionException, IOException, URISyntaxException, TimeoutException {
    WeaveRunner runner = YarnTestSuite.getWeaveRunner();
    WeaveController controller = runner.prepare(new ResourceApplication()).addLogHandler(new PrinterLogHandler(new PrintWriter(System.out, true))).withApplicationArguments("echo").withArguments("echo1", "echo1").withArguments("echo2", "echo2").start();
    final CountDownLatch running = new CountDownLatch(1);
    controller.addListener(new ServiceListenerAdapter() {

        @Override
        public void running() {
            running.countDown();
        }
    }, Threads.SAME_THREAD_EXECUTOR);
    Assert.assertTrue(running.await(30, TimeUnit.SECONDS));
    // wait for 3 echo servers to come up
    Iterable<Discoverable> echoServices = controller.discoverService("echo");
    Assert.assertTrue(YarnTestSuite.waitForSize(echoServices, 3, 60));
    ResourceReport report = controller.getResourceReport();
    // make sure resources for echo1 and echo2 are there
    Map<String, Collection<WeaveRunResources>> usedResources = report.getResources();
    Assert.assertEquals(2, usedResources.keySet().size());
    Assert.assertTrue(usedResources.containsKey("echo1"));
    Assert.assertTrue(usedResources.containsKey("echo2"));
    Collection<WeaveRunResources> echo1Resources = usedResources.get("echo1");
    // 2 instances of echo1
    Assert.assertEquals(2, echo1Resources.size());
    // TODO: check cores after hadoop-2.1.0
    for (WeaveRunResources resources : echo1Resources) {
        Assert.assertEquals(128, resources.getMemoryMB());
    }
    Collection<WeaveRunResources> echo2Resources = usedResources.get("echo2");
    // 2 instances of echo1
    Assert.assertEquals(1, echo2Resources.size());
    // TODO: check cores after hadoop-2.1.0
    for (WeaveRunResources resources : echo2Resources) {
        Assert.assertEquals(256, resources.getMemoryMB());
    }
    // Decrease number of instances of echo1 from 2 to 1
    controller.changeInstances("echo1", 1);
    echoServices = controller.discoverService("echo1");
    Assert.assertTrue(YarnTestSuite.waitForSize(echoServices, 1, 60));
    report = controller.getResourceReport();
    // make sure resources for echo1 and echo2 are there
    usedResources = report.getResources();
    Assert.assertEquals(2, usedResources.keySet().size());
    Assert.assertTrue(usedResources.containsKey("echo1"));
    Assert.assertTrue(usedResources.containsKey("echo2"));
    echo1Resources = usedResources.get("echo1");
    // 1 instance of echo1 now
    Assert.assertEquals(1, echo1Resources.size());
    // TODO: check cores after hadoop-2.1.0
    for (WeaveRunResources resources : echo1Resources) {
        Assert.assertEquals(128, resources.getMemoryMB());
    }
    echo2Resources = usedResources.get("echo2");
    // 2 instances of echo1
    Assert.assertEquals(1, echo2Resources.size());
    // TODO: check cores after hadoop-2.1.0
    for (WeaveRunResources resources : echo2Resources) {
        Assert.assertEquals(256, resources.getMemoryMB());
    }
    controller.stop().get(30, TimeUnit.SECONDS);
    // Sleep a bit before exiting.
    TimeUnit.SECONDS.sleep(2);
}
Also used : WeaveRunner(com.continuuity.weave.api.WeaveRunner) Discoverable(com.continuuity.weave.discovery.Discoverable) ServiceListenerAdapter(com.continuuity.weave.common.ServiceListenerAdapter) CountDownLatch(java.util.concurrent.CountDownLatch) WeaveRunResources(com.continuuity.weave.api.WeaveRunResources) PrinterLogHandler(com.continuuity.weave.api.logging.PrinterLogHandler) Collection(java.util.Collection) WeaveController(com.continuuity.weave.api.WeaveController) ResourceReport(com.continuuity.weave.api.ResourceReport) PrintWriter(java.io.PrintWriter) Test(org.junit.Test)

Example 9 with WeaveRunner

use of com.continuuity.weave.api.WeaveRunner in project weave by continuuity.

the class TaskCompletedTestRun method testTaskCompleted.

@Test
public void testTaskCompleted() throws InterruptedException {
    WeaveRunner weaveRunner = YarnTestSuite.getWeaveRunner();
    WeaveController controller = weaveRunner.prepare(new SleepTask(), ResourceSpecification.Builder.with().setVirtualCores(1).setMemory(512, ResourceSpecification.SizeUnit.MEGA).setInstances(3).build()).addLogHandler(new PrinterLogHandler(new PrintWriter(System.out, true))).start();
    final CountDownLatch runLatch = new CountDownLatch(1);
    final CountDownLatch stopLatch = new CountDownLatch(1);
    controller.addListener(new ServiceListenerAdapter() {

        @Override
        public void running() {
            runLatch.countDown();
        }

        @Override
        public void terminated(Service.State from) {
            stopLatch.countDown();
        }
    }, Threads.SAME_THREAD_EXECUTOR);
    Assert.assertTrue(runLatch.await(1, TimeUnit.MINUTES));
    Assert.assertTrue(stopLatch.await(1, TimeUnit.MINUTES));
    TimeUnit.SECONDS.sleep(2);
}
Also used : WeaveRunner(com.continuuity.weave.api.WeaveRunner) PrinterLogHandler(com.continuuity.weave.api.logging.PrinterLogHandler) Service(com.google.common.util.concurrent.Service) WeaveController(com.continuuity.weave.api.WeaveController) ServiceListenerAdapter(com.continuuity.weave.common.ServiceListenerAdapter) CountDownLatch(java.util.concurrent.CountDownLatch) PrintWriter(java.io.PrintWriter) Test(org.junit.Test)

Aggregations

WeaveController (com.continuuity.weave.api.WeaveController)9 WeaveRunner (com.continuuity.weave.api.WeaveRunner)9 PrinterLogHandler (com.continuuity.weave.api.logging.PrinterLogHandler)9 PrintWriter (java.io.PrintWriter)9 Test (org.junit.Test)9 ServiceListenerAdapter (com.continuuity.weave.common.ServiceListenerAdapter)6 Discoverable (com.continuuity.weave.discovery.Discoverable)6 CountDownLatch (java.util.concurrent.CountDownLatch)6 OutputStreamWriter (java.io.OutputStreamWriter)4 Socket (java.net.Socket)4 ResourceSpecification (com.continuuity.weave.api.ResourceSpecification)3 LineReader (com.google.common.io.LineReader)3 InputStreamReader (java.io.InputStreamReader)3 ResourceReport (com.continuuity.weave.api.ResourceReport)2 Service (com.google.common.util.concurrent.Service)2 WeaveRunResources (com.continuuity.weave.api.WeaveRunResources)1 WeaveRunnerService (com.continuuity.weave.api.WeaveRunnerService)1 File (java.io.File)1 InetSocketAddress (java.net.InetSocketAddress)1 Collection (java.util.Collection)1