Search in sources :

Example 6 with LogUnitServer

use of org.corfudb.infrastructure.LogUnitServer in project CorfuDB by CorfuDB.

the class LogUnitClientTest method flushLogunitCache.

@Test
public void flushLogunitCache() throws Exception {
    LogUnitServer server2 = new LogUnitServer(serverContext);
    serverRouter.reset();
    serverRouter.addServer(server2);
    assertThat(server2.getDataCache().asMap().size()).isEqualTo(0);
    byte[] testString = "hello world".getBytes();
    client.write(0, Collections.<UUID>emptySet(), null, testString, Collections.emptyMap()).get();
    assertThat(server2.getDataCache().asMap().size()).isEqualTo(1);
    client.flushCache();
    assertThat(server2.getDataCache().asMap().size()).isEqualTo(0);
    LogData r = client.read(0).get().getReadSet().get(0L);
    assertThat(server2.getDataCache().asMap().size()).isEqualTo(1);
}
Also used : ILogData(org.corfudb.protocols.wireprotocol.ILogData) LogData(org.corfudb.protocols.wireprotocol.LogData) LogUnitServer(org.corfudb.infrastructure.LogUnitServer) UUID(java.util.UUID) Test(org.junit.Test)

Example 7 with LogUnitServer

use of org.corfudb.infrastructure.LogUnitServer in project CorfuDB by CorfuDB.

the class QCSMRobject method main.

public static String[] main(String[] args) {
    if (args != null && args.length > 0 && args[0].contentEquals("reboot")) {
        ManagementServer ms = CorfuServer.getManagementServer();
        ms.shutdown();
        CorfuServer.addManagementServer();
        LogUnitServer ls = CorfuServer.getLogUnitServer();
        if (ls != null) {
            ls.shutdown();
            CorfuServer.addLogUnit();
            return replyOk();
        } else {
            return replyErr("No active log server");
        }
    }
    // Parse the options given, using docopt.
    Map<String, Object> opts = new Docopt(USAGE).withVersion(GitRepositoryState.getRepositoryState().describe).parse(args);
    // Get a org.corfudb.runtime instance from the options.
    String config = (String) opts.get("--config");
    String qapp = (String) opts.get("--quickcheck-ap-prefix");
    String addressportPrefix = "";
    if (qapp != null) {
        addressportPrefix = qapp;
    }
    CorfuRuntime rt;
    if (rtMap.get(addressportPrefix + config) == null) {
        rt = configureRuntime(opts);
        rtMap.putIfAbsent(addressportPrefix + config, rt);
    }
    rt = (CorfuRuntime) rtMap.get(addressportPrefix + config);
    String argz = ((String) opts.get("<args>"));
    int arity;
    String[] split;
    if (argz == null) {
        split = new String[0];
        arity = 0;
    } else {
        split = argz.split(",");
        if (argz.charAt(argz.length() - 1) == ',') {
            arity = split.length + 1;
            String[] new_split = new String[arity];
            for (int i = 0; i < arity - 1; i++) {
                new_split[i] = split[i];
            }
            new_split[arity - 1] = "";
            split = new_split;
        } else {
            arity = split.length;
        }
    }
    // Attempt to open the object
    Class<?> cls;
    try {
        cls = Class.forName((String) opts.get("<class>"));
    } catch (ClassNotFoundException cnfe) {
        throw new RuntimeException(cnfe);
    }
    Object o = rt.getObjectsView().build().setStreamName((String) opts.get("--stream-id")).setType(cls).open();
    // Use reflection to find the method...
    Method m;
    try {
        m = Arrays.stream(cls.getDeclaredMethods()).filter(x -> x.getName().equals(opts.get("<method>"))).filter(x -> x.getParameterCount() == arity).findFirst().get();
    } catch (NoSuchElementException nsee) {
        return replyErr("Method " + opts.get("<method>") + " with " + arity + " arguments not found!");
    }
    if (m == null) {
        return replyErr("Method " + opts.get("<method>") + " with " + arity + " arguments not found!");
    }
    Object ret;
    final int c10 = 10, c50 = 50;
    for (int i = 0; i < c10; i++) {
        try {
            ret = m.invoke(o, split);
        } catch (InvocationTargetException e) {
            Throwable c = ExceptionUtils.getCause(e);
            if (c.getClass() == org.corfudb.runtime.exceptions.NetworkException.class && c.toString().matches(".*Disconnected endpoint.*")) {
                // caused by a disconnection with the remote endpoint.
                try {
                    Thread.sleep(c50);
                } catch (InterruptedException ie) {
                }
                ;
                continue;
            } else {
                return replyErr("exception", e.getClass().getSimpleName(), "stack: " + ExceptionUtils.getStackTrace(e), "cause: " + ExceptionUtils.getCause(e));
            }
        } catch (IllegalAccessException e) {
            return replyErr("exception", e.getClass().getSimpleName(), "stack: " + ExceptionUtils.getStackTrace(e));
        } catch (Exception e) {
            return replyErr("Exception on object: " + e, "stack: " + ExceptionUtils.getStackTrace(e), "cause: " + ExceptionUtils.getCause(e));
        }
        if (ret != null) {
            return replyOk(ret.toString());
        } else {
            return replyOk();
        }
    }
    return replyErr("Exhausted for loop retries");
}
Also used : QCUtil.replyErr(org.corfudb.util.quickcheck.QCUtil.replyErr) Arrays(java.util.Arrays) GitRepositoryState(org.corfudb.util.GitRepositoryState) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) LogUnitServer(org.corfudb.infrastructure.LogUnitServer) Docopt(org.docopt.Docopt) QCUtil.replyOk(org.corfudb.util.quickcheck.QCUtil.replyOk) ManagementServer(org.corfudb.infrastructure.ManagementServer) InvocationTargetException(java.lang.reflect.InvocationTargetException) ExceptionUtils(org.codehaus.plexus.util.ExceptionUtils) Map(java.util.Map) CorfuRuntime(org.corfudb.runtime.CorfuRuntime) CorfuServer(org.corfudb.infrastructure.CorfuServer) QCUtil.configureRuntime(org.corfudb.util.quickcheck.QCUtil.configureRuntime) NoSuchElementException(java.util.NoSuchElementException) Method(java.lang.reflect.Method) Method(java.lang.reflect.Method) InvocationTargetException(java.lang.reflect.InvocationTargetException) InvocationTargetException(java.lang.reflect.InvocationTargetException) NoSuchElementException(java.util.NoSuchElementException) ManagementServer(org.corfudb.infrastructure.ManagementServer) Docopt(org.docopt.Docopt) CorfuRuntime(org.corfudb.runtime.CorfuRuntime) LogUnitServer(org.corfudb.infrastructure.LogUnitServer) NoSuchElementException(java.util.NoSuchElementException)

Aggregations

LogUnitServer (org.corfudb.infrastructure.LogUnitServer)7 Test (org.junit.Test)5 UUID (java.util.UUID)4 ILogData (org.corfudb.protocols.wireprotocol.ILogData)3 LogData (org.corfudb.protocols.wireprotocol.LogData)3 CorfuRuntime (org.corfudb.runtime.CorfuRuntime)3 ExecutionException (java.util.concurrent.ExecutionException)2 AbstractViewTest (org.corfudb.runtime.view.AbstractViewTest)2 ByteBuf (io.netty.buffer.ByteBuf)1 RandomAccessFile (java.io.RandomAccessFile)1 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 Method (java.lang.reflect.Method)1 ByteBuffer (java.nio.ByteBuffer)1 Arrays (java.util.Arrays)1 Map (java.util.Map)1 NoSuchElementException (java.util.NoSuchElementException)1 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)1 ExceptionUtils (org.codehaus.plexus.util.ExceptionUtils)1 Types (org.corfudb.format.Types)1 CorfuServer (org.corfudb.infrastructure.CorfuServer)1