Search in sources :

Example 6 with SerializationStrategy

use of io.fabric8.dosgi.api.SerializationStrategy in project fabric8 by jboss-fuse.

the class InvocationTest method testUnderLoadSyncObject.

@Test(timeout = 30 * 1000)
public void testUnderLoadSyncObject() throws Exception {
    HashMap<String, SerializationStrategy> map = new HashMap<String, SerializationStrategy>();
    DispatchQueue queue = Dispatch.createQueue();
    ServerInvokerImpl server = new ServerInvokerImpl("tcp://localhost:0", queue, map);
    server.start();
    ClientInvokerImpl client = new ClientInvokerImpl(queue, map);
    client.start();
    try {
        final HelloImpl helloImpl = new HelloImpl();
        server.registerService("service-id", new ServerInvoker.ServiceFactory() {

            public Object get() {
                return helloImpl;
            }

            public void unget() {
            }
        }, HelloImpl.class.getClassLoader());
        InvocationHandler handler = client.getProxy(server.getConnectAddress(), "service-id", HelloImpl.class.getClassLoader());
        final Hello hello = (Hello) Proxy.newProxyInstance(HelloImpl.class.getClassLoader(), new Class[] { Hello.class }, handler);
        assertEquals("Hello World!", hello.helloworld());
        final AtomicInteger requests = new AtomicInteger(0);
        final AtomicInteger failures = new AtomicInteger(0);
        final long[] latencies = new long[BENCHMARK_CLIENTS * BENCHMARK_INVOCATIONS_PER_CLIENT];
        final long start = System.nanoTime();
        Thread[] threads = new Thread[BENCHMARK_CLIENTS];
        for (int t = 0; t < BENCHMARK_CLIENTS; t++) {
            final int thread_idx = t;
            threads[t] = new Thread() {

                public void run() {
                    for (int i = 0; i < BENCHMARK_INVOCATIONS_PER_CLIENT; i++) {
                        try {
                            requests.incrementAndGet();
                            String response;
                            final long start = System.nanoTime();
                            response = hello.hello("Fabric");
                            final long end = System.nanoTime();
                            latencies[(thread_idx * BENCHMARK_INVOCATIONS_PER_CLIENT) + i] = end - start;
                            assertEquals("Hello Fabric!", response);
                        } catch (Throwable t) {
                            latencies[(thread_idx * BENCHMARK_INVOCATIONS_PER_CLIENT) + i] = -1;
                            failures.incrementAndGet();
                            if (t instanceof UndeclaredThrowableException) {
                                t = ((UndeclaredThrowableException) t).getUndeclaredThrowable();
                            }
                            System.err.println("Error: " + t.getClass().getName() + (t.getMessage() != null ? " (" + t.getMessage() + ")" : ""));
                        }
                    }
                }
            };
            threads[t].start();
        }
        for (int t = 0; t < BENCHMARK_CLIENTS; t++) {
            threads[t].join();
        }
        final long end = System.nanoTime();
        long latency_sum = 0;
        for (int t = 0; t < latencies.length; t++) {
            if (latencies[t] != -1) {
                latency_sum += latencies[t];
            }
        }
        double latency_avg = ((latency_sum * 1.0d) / requests.get()) / MILLIS_IN_A_NANO;
        double request_rate = ((requests.get() * 1.0d) / (end - start)) * SECONDS_IN_A_NANO;
        System.err.println(String.format("Requests/Second: %,.2f", request_rate));
        System.err.println(String.format("Average request latency: %,.2f ms", latency_avg));
        System.err.println("Error Ratio: " + failures.get() + " / " + requests.get());
    } finally {
        server.stop();
        client.stop();
    }
}
Also used : ServerInvoker(io.fabric8.dosgi.io.ServerInvoker) HashMap(java.util.HashMap) InvocationHandler(java.lang.reflect.InvocationHandler) ClientInvokerImpl(io.fabric8.dosgi.tcp.ClientInvokerImpl) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) UndeclaredThrowableException(java.lang.reflect.UndeclaredThrowableException) ServerInvokerImpl(io.fabric8.dosgi.tcp.ServerInvokerImpl) DispatchQueue(org.fusesource.hawtdispatch.DispatchQueue) Test(org.junit.Test)

Example 7 with SerializationStrategy

use of io.fabric8.dosgi.api.SerializationStrategy in project fabric8 by jboss-fuse.

the class InvocationTest method testNoOverflow.

@Test(timeout = 30 * 1000)
public void testNoOverflow() throws Exception {
    DispatchQueue queue = Dispatch.createQueue();
    HashMap<String, SerializationStrategy> map = new HashMap<String, SerializationStrategy>();
    map.put("protobuf", new ProtobufSerializationStrategy());
    ServerInvokerImpl server = new ServerInvokerImpl("tcp://localhost:0", queue, map);
    server.start();
    ClientInvokerImpl client = new ClientInvokerImpl(queue, map);
    client.start();
    try {
        server.registerService("service-id", new ServerInvoker.ServiceFactory() {

            public Object get() {
                return new HelloImpl();
            }

            public void unget() {
            }
        }, HelloImpl.class.getClassLoader());
        InvocationHandler handler = client.getProxy(server.getConnectAddress(), "service-id", HelloImpl.class.getClassLoader());
        Hello hello = (Hello) Proxy.newProxyInstance(HelloImpl.class.getClassLoader(), new Class[] { Hello.class }, handler);
        char[] chars = new char[65 * 1024];
        String payload = new String(chars);
        for (int i = 0; i < 100; i++) {
            hello.hello(payload);
        }
    } finally {
        server.stop();
        client.stop();
    }
}
Also used : ServerInvoker(io.fabric8.dosgi.io.ServerInvoker) HashMap(java.util.HashMap) InvocationHandler(java.lang.reflect.InvocationHandler) ClientInvokerImpl(io.fabric8.dosgi.tcp.ClientInvokerImpl) ServerInvokerImpl(io.fabric8.dosgi.tcp.ServerInvokerImpl) DispatchQueue(org.fusesource.hawtdispatch.DispatchQueue) Test(org.junit.Test)

Example 8 with SerializationStrategy

use of io.fabric8.dosgi.api.SerializationStrategy in project fabric8 by jboss-fuse.

the class TransportFailureTest method testInvoke.

@Test
public void testInvoke() throws Exception {
    DispatchQueue queue = Dispatch.createQueue();
    HashMap<String, SerializationStrategy> map = new HashMap<String, SerializationStrategy>();
    map.put("protobuf", new ProtobufSerializationStrategy());
    ServerInvokerImpl server = new ServerInvokerImpl("tcp://localhost:0", queue, map);
    server.start();
    ClientInvokerImpl client = new ClientInvokerImpl(queue, map);
    client.start();
    try {
        server.registerService("service-id", new ServerInvoker.ServiceFactory() {

            public Object get() {
                return new HelloImpl();
            }

            public void unget() {
            }
        }, HelloImpl.class.getClassLoader());
        InvocationHandler handler = client.getProxy(server.getConnectAddress(), "service-id", HelloImpl.class.getClassLoader());
        Hello hello = (Hello) Proxy.newProxyInstance(HelloImpl.class.getClassLoader(), new Class[] { Hello.class }, handler);
        AsyncCallbackFuture<String> future1 = new AsyncCallbackFuture<String>();
        hello.hello("Guillaume", future1);
        long t0 = System.currentTimeMillis();
        try {
            assertEquals("Hello Guillaume!", future1.get(MAX_DELAY, TimeUnit.MILLISECONDS));
            fail("Should have thrown an exception");
        } catch (Exception e) {
            // Expected
            long t1 = System.currentTimeMillis();
            assertTrue(t1 - t0 > SLEEP_TIME / 2);
            assertTrue(t1 - t0 < MAX_DELAY / 2);
        }
    } finally {
        server.stop();
        client.stop();
    }
}
Also used : ServerInvoker(io.fabric8.dosgi.io.ServerInvoker) HashMap(java.util.HashMap) InvocationHandler(java.lang.reflect.InvocationHandler) AsyncCallbackFuture(io.fabric8.dosgi.api.AsyncCallbackFuture) ClientInvokerImpl(io.fabric8.dosgi.tcp.ClientInvokerImpl) ProtobufSerializationStrategy(io.fabric8.dosgi.api.ProtobufSerializationStrategy) SerializationStrategy(io.fabric8.dosgi.api.SerializationStrategy) ServerInvokerImpl(io.fabric8.dosgi.tcp.ServerInvokerImpl) ProtobufSerializationStrategy(io.fabric8.dosgi.api.ProtobufSerializationStrategy) DispatchQueue(org.fusesource.hawtdispatch.DispatchQueue) Test(org.junit.Test)

Aggregations

ServerInvoker (io.fabric8.dosgi.io.ServerInvoker)7 ClientInvokerImpl (io.fabric8.dosgi.tcp.ClientInvokerImpl)7 ServerInvokerImpl (io.fabric8.dosgi.tcp.ServerInvokerImpl)7 InvocationHandler (java.lang.reflect.InvocationHandler)7 HashMap (java.util.HashMap)7 DispatchQueue (org.fusesource.hawtdispatch.DispatchQueue)7 Test (org.junit.Test)7 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)4 SerializationStrategy (io.fabric8.dosgi.api.SerializationStrategy)2 AsyncCallbackFuture (io.fabric8.dosgi.api.AsyncCallbackFuture)1 ObjectSerializationStrategy (io.fabric8.dosgi.api.ObjectSerializationStrategy)1 ProtobufSerializationStrategy (io.fabric8.dosgi.api.ProtobufSerializationStrategy)1 Serialization (io.fabric8.dosgi.api.Serialization)1 UndeclaredThrowableException (java.lang.reflect.UndeclaredThrowableException)1 ArrayList (java.util.ArrayList)1 Buffer (org.fusesource.hawtbuf.Buffer)1 UTF8Buffer (org.fusesource.hawtbuf.UTF8Buffer)1