@Override public void resolve(String identifier, DeploymentOptions deploymentOptions, ClassLoader classLoader, Future<String> resolution) { deploymentOptions.setMultiThreaded(true); vertx.runOnContext(v -> { // Async resolution resolution.complete("whatever"); }); } @Override
case "multiThreaded": if (member.getValue() instanceof Boolean) { obj.setMultiThreaded((Boolean)member.getValue());
@Test public void testInMultithreadedWorker() throws Exception { vertx.deployVerticle(new AbstractVerticle() { @Override public void start() throws Exception { assertTrue(Vertx.currentContext().isWorkerContext()); assertTrue(Vertx.currentContext().isMultiThreadedWorkerContext()); assertTrue(Context.isOnWorkerThread()); try { vertx.createHttpServer(); fail("Should throw exception"); } catch (IllegalStateException e) { // OK } try { vertx.createHttpClient(); fail("Should throw exception"); } catch (IllegalStateException e) { // OK } testComplete(); } }, new DeploymentOptions().setWorker(true).setMultiThreaded(true)); await(); }
@Test public void testUseInMultithreadedWorker() throws Exception { class MyVerticle extends AbstractVerticle { @Override public void start() { assertIllegalStateException(() -> peer1 = vertx.createDatagramSocket(new DatagramSocketOptions())); testComplete(); } } MyVerticle verticle = new MyVerticle(); vertx.deployVerticle(verticle, new DeploymentOptions().setWorker(true).setMultiThreaded(true)); await(); }
@Test public void testUseInMultithreadedWorker() throws Exception { class MyVerticle extends AbstractVerticle { @Override public void start() { assertIllegalStateException(() -> vertx.createDnsClient(1234, "localhost")); testComplete(); } } MyVerticle verticle = new MyVerticle(); vertx.deployVerticle(verticle, new DeploymentOptions().setWorker(true).setMultiThreaded(true)); await(); }
@Test public void testUseInMultithreadedWorker() throws Exception { class MyVerticle extends AbstractVerticle { @Override public void start() { assertIllegalStateException(() -> server = vertx.createHttpServer(new HttpServerOptions())); assertIllegalStateException(() -> client = vertx.createHttpClient(new HttpClientOptions())); testComplete(); } } MyVerticle verticle = new MyVerticle(); vertx.deployVerticle(verticle, new DeploymentOptions().setWorker(true).setMultiThreaded(true)); await(); }
@Test public void testDeployMultithreadedNotWorker() throws Exception { MyVerticle verticle = new MyVerticle(); try { vertx.deployVerticle(verticle, new DeploymentOptions().setWorker(false).setMultiThreaded(true), ar -> { }); fail("Should throw exception"); } catch (IllegalArgumentException e) { // OK } try { vertx.deployVerticle(MyVerticle.class.getName(), new DeploymentOptions().setWorker(false).setMultiThreaded(true), ar -> { }); fail("Should throw exception"); } catch (IllegalArgumentException e) { // OK } }
@Test public void testThreadPoolMetricsWithWorkerVerticleAndMultiThread() { testWithWorkerVerticle(new DeploymentOptions().setWorker(true).setMultiThreaded(true)); }
@Test public void testInMultithreadedWorker() throws Exception { class MyVerticle extends AbstractVerticle { @Override public void start() { try { server = vertx.createNetServer(new NetServerOptions()); fail("Should throw exception"); } catch (IllegalStateException e) { // OK } try { client = vertx.createNetClient(new NetClientOptions()); fail("Should throw exception"); } catch (IllegalStateException e) { // OK } testComplete(); } } MyVerticle verticle = new MyVerticle(); vertx.deployVerticle(verticle, new DeploymentOptions().setWorker(true).setMultiThreaded(true)); await(); }
verticleContext.set(Vertx.currentContext()); }, new DeploymentOptions().setWorker(worker).setMultiThreaded(multiThreaded), ar1 -> { assertTrue(ar1.succeeded()); vertx.undeploy(ar1.result(), ar2 -> {
@Test public void testMTWorkerConsumer() { int num = 3; waitFor(num); vertx.deployVerticle(new AbstractVerticle() { @Override public void start() { CyclicBarrier barrier = new CyclicBarrier(3); vertx.eventBus().consumer(ADDRESS1, msg -> { try { barrier.await(); complete(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); fail(e); } catch (BrokenBarrierException e) { fail(e); } }); } }, new DeploymentOptions() .setInstances(1) .setWorker(true) .setMultiThreaded(true), onSuccess(id -> { for (int i = 0;i < num;i++) { vertx.eventBus().send(ADDRESS1, "msg-" + i); } })); await(); }
vertx.deployVerticle(verticle, new DeploymentOptions().setWorker(worker).setMultiThreaded(multiThreaded)); await();
@Test public void testDeployMultithreadedWorkerWithConfig() throws Exception { MyVerticle verticle = new MyVerticle(); JsonObject conf = generateJSONObject(); vertx.deployVerticle(verticle, new DeploymentOptions().setConfig(conf).setWorker(true).setMultiThreaded(true), ar -> { assertDeployment(1, verticle, conf, ar); assertTrue(verticle.startContext.isMultiThreadedWorkerContext()); assertTrue(verticle.startContext.isWorkerContext()); assertFalse(verticle.startContext.isEventLoopContext()); vertx.undeploy(ar.result(), ar2 -> { assertTrue(ar2.succeeded()); assertEquals(verticle.startContext, verticle.stopContext); testComplete(); }); }); await(); }
options.setConfig(config); options.setWorker(worker); options.setMultiThreaded(multiThreaded); options.setIsolationGroup(isolationGroup); options.setHa(ha);
options.setConfig(config); options.setWorker(worker); options.setMultiThreaded(multiThreaded); options.setIsolationGroup(isolationGroup); options.setHa(ha);
static void deploy(final Vertx vertx, final Class<?> clazz, final DeploymentOptions option, final Annal logger) { // Verticle deployment final String name = clazz.getName(); final String flag = option.isWorker() ? "Worker" : "Agent"; // Multi Thread worker enabled for trying. if (option.isWorker()) { option.setMultiThreaded(true); } vertx.deployVerticle(name, option, (result) -> { // Success or Failed. if (result.succeeded()) { logger.info(Info.VTC_END, name, option.getInstances(), result.result(), flag); INSTANCES.put(clazz, result.result()); } else { logger.warn(Info.VTC_FAIL, name, option.getInstances(), result.result(), null == result.cause() ? null : result.cause().getMessage(), flag); } }); }
static void deploy(final Vertx vertx, final Class<?> clazz, final DeploymentOptions option, final Annal logger) { // Verticle deployment final String name = clazz.getName(); final String flag = option.isWorker() ? "Worker" : "Agent"; // Multi Thread worker enabled for trying. if (option.isWorker()) { option.setMultiThreaded(true); } vertx.deployVerticle(name, option, (result) -> { // Success or Failed. if (result.succeeded()) { logger.info(Info.VTC_END, name, option.getInstances(), result.result(), flag); INSTANCES.put(clazz, result.result()); } else { logger.warn(Info.VTC_FAIL, name, option.getInstances(), result.result(), null == result.cause() ? null : result.cause().getMessage(), flag); } }); }
@Test public void testMTWorkerRightThread() throws Exception { assertFalse(Context.isOnVertxThread()); Verticle verticle = new AbstractVerticle() { @Override public void start() throws Exception { assertTrue(Context.isOnVertxThread()); assertTrue(Context.isOnWorkerThread()); assertFalse(Context.isOnEventLoopThread()); } @Override public void stop() throws Exception { assertTrue(Context.isOnVertxThread()); assertTrue(Context.isOnWorkerThread()); assertFalse(Context.isOnEventLoopThread()); } }; vertx.deployVerticle(verticle, new DeploymentOptions().setWorker(true).setMultiThreaded(true), onSuccess(res -> { assertTrue(Context.isOnVertxThread()); assertFalse(Context.isOnWorkerThread()); assertTrue(Context.isOnEventLoopThread()); vertx.undeploy(res, onSuccess(res2 -> { assertTrue(Context.isOnVertxThread()); assertFalse(Context.isOnWorkerThread()); assertTrue(Context.isOnEventLoopThread()); testComplete(); })); })); await(); }
assertTrue(options.isWorker()); assertFalse(options.isMultiThreaded()); assertEquals(options, options.setMultiThreaded(true)); assertTrue(options.isMultiThreaded()); assertNull(options.getIsolationGroup());
if(multiWork != DeploymentOptions.DEFAULT_MULTI_THREADED) options.setMultiThreaded(multiWork); if(requireSingle && options.getInstances() != 1) throw new IllegalStateException("verticleName must be single instance");