Package org.voltdb.utils

Examples of org.voltdb.utils.InMemoryJarfile$JarLoader


        boolean success = builder.compile(pathToCatalog, 2, 1, 0);
        assertTrue("Schema compilation failed", success);
        MiscUtils.copyFile(builder.getPathToDeployment(), pathToDeployment);

        // This is maybe cheating a little bit?
        InMemoryJarfile jarfile = new InMemoryJarfile();
        for (Class<?> clazz : PROC_CLASSES) {
            VoltCompiler comp = new VoltCompiler();
            comp.addClassToJar(jarfile, clazz);
        }
        for (Class<?> clazz : EXTRA_CLASSES) {
            VoltCompiler comp = new VoltCompiler();
            comp.addClassToJar(jarfile, clazz);
        }
        // Add a deployment file just to have something other than classes in the jar
        jarfile.put("deployment.xml", new File(pathToDeployment));

        try {
            VoltDB.Configuration config = new VoltDB.Configuration();
            config.m_pathToCatalog = pathToCatalog;
            config.m_pathToDeployment = pathToDeployment;
            startSystem(config);

            ClientResponse resp;
            resp = m_client.callProcedure("@SystemCatalog", "CLASSES");
            System.out.println(resp.getResults()[0]);
            // New cluster, you're like summer vacation...
            assertEquals(0, resp.getResults()[0].getRowCount());
            assertFalse(VoltTableTestHelpers.moveToMatchingRow(resp.getResults()[0], "CLASS_NAME",
                        PROC_CLASSES[0].getCanonicalName()));
            boolean threw = false;
            try {
                resp = m_client.callProcedure(PROC_CLASSES[0].getSimpleName());
            }
            catch (ProcCallException pce) {
                assertTrue(pce.getMessage().contains("was not found"));
                threw = true;
            }
            assertTrue(threw);

            // First, some tests of incorrect parameters
            // only 1 param
            threw = false;
            try {
                resp = m_client.callProcedure("@UpdateClasses", jarfile.getFullJarBytes());
            }
            catch (ProcCallException pce) {
                assertTrue(pce.getMessage().contains("UpdateClasses system procedure requires exactly two parameters"));
                threw = true;
            }
            assertTrue(threw);

            // wrong jarfile param type
            threw = false;
            try {
                resp = m_client.callProcedure("@UpdateClasses", 10L, null);
            }
            catch (ProcCallException pce) {
                assertTrue(pce.getMessage().contains("UpdateClasses system procedure takes the jarfile bytes as a byte array"));
                threw = true;
            }
            assertTrue(threw);

            // wrong delete string param type
            threw = false;
            try {
                resp = m_client.callProcedure("@UpdateClasses", jarfile.getFullJarBytes(), 10L);
            }
            catch (ProcCallException pce) {
                assertTrue(pce.getMessage().contains("UpdateClasses system procedure takes the list of classes"));
                threw = true;
            }
            assertTrue(threw);

            resp = m_client.callProcedure("@UpdateClasses", jarfile.getFullJarBytes(), null);
            System.out.println(((ClientResponseImpl)resp).toJSONString());

            // Are we still like summer vacation?
            resp = m_client.callProcedure("@SystemCatalog", "CLASSES");
            VoltTable results = resp.getResults()[0];
View Full Code Here


        boolean success = builder.compile(pathToCatalog, 2, 1, 0);
        assertTrue("Schema compilation failed", success);
        MiscUtils.copyFile(builder.getPathToDeployment(), pathToDeployment);

        // This is maybe cheating a little bit?
        InMemoryJarfile jarfile = new InMemoryJarfile();
        for (Class<?> clazz : PROC_CLASSES) {
            VoltCompiler comp = new VoltCompiler();
            comp.addClassToJar(jarfile, clazz);
        }
        for (Class<?> clazz : EXTRA_CLASSES) {
            VoltCompiler comp = new VoltCompiler();
            comp.addClassToJar(jarfile, clazz);
        }

        Client auth_client = null;
        try {
            VoltDB.Configuration config = new VoltDB.Configuration();
            config.m_pathToCatalog = pathToCatalog;
            config.m_pathToDeployment = pathToDeployment;
            // Default client auth is going to fail, catch and keep chugging
            try {
                startSystem(config);
            }
            catch (IOException ioe) {
                assertTrue(ioe.getMessage().contains("Authentication rejected"));
            }
            m_client.close();
            // reconnect m_client with auth that will connect but no sysproc powers
            ClientConfig bad_config = new ClientConfig("adhocuser", "adhocuser");
            m_client = ClientFactory.createClient(bad_config);
            m_client.createConnection("localhost");

            // Need a client with the right auth
            ClientConfig auth_config = new ClientConfig("sysuser", "sysuser");
            auth_client = ClientFactory.createClient(auth_config);
            auth_client.createConnection("localhost");

            ClientResponse resp;
            resp = auth_client.callProcedure("@SystemCatalog", "CLASSES");
            System.out.println(resp.getResults()[0]);
            // New cluster, you're like summer vacation...
            assertEquals(0, resp.getResults()[0].getRowCount());
            assertFalse(VoltTableTestHelpers.moveToMatchingRow(resp.getResults()[0], "CLASS_NAME",
                        PROC_CLASSES[0].getCanonicalName()));
            boolean threw = false;
            try {
                resp = auth_client.callProcedure(PROC_CLASSES[0].getSimpleName());
            }
            catch (ProcCallException pce) {
                assertTrue(pce.getMessage().contains("was not found"));
                threw = true;
            }
            assertTrue(threw);

            threw = false;
            try {
                resp = m_client.callProcedure("@UpdateClasses", jarfile.getFullJarBytes(), null);
            }
            catch (ProcCallException pce) {
                assertTrue(pce.getMessage().contains("does not have sysproc permission"));
                threw = true;
            }
            assertTrue(threw);

            resp = auth_client.callProcedure("@UpdateClasses", jarfile.getFullJarBytes(), null);
            assertEquals(ClientResponse.SUCCESS, resp.getStatus());

            // Are we still like summer vacation?
            resp = auth_client.callProcedure("@SystemCatalog", "CLASSES");
            VoltTable results = resp.getResults()[0];
View Full Code Here

        boolean success = builder.compile(pathToCatalog, 2, 1, 0);
        assertTrue("Schema compilation failed", success);
        MiscUtils.copyFile(builder.getPathToDeployment(), pathToDeployment);

        // This is maybe cheating a little bit?
        InMemoryJarfile jarfile = new InMemoryJarfile();
        for (Class<?> clazz : PROC_CLASSES) {
            VoltCompiler comp = new VoltCompiler();
            comp.addClassToJar(jarfile, clazz);
        }
        for (Class<?> clazz : EXTRA_CLASSES) {
            VoltCompiler comp = new VoltCompiler();
            comp.addClassToJar(jarfile, clazz);
        }

        try {
            VoltDB.Configuration config = new VoltDB.Configuration();
            config.m_pathToCatalog = pathToCatalog;
            config.m_pathToDeployment = pathToDeployment;
            startSystem(config);

            ClientResponse resp;
            resp = m_client.callProcedure("@SystemCatalog", "CLASSES");
            System.out.println(resp.getResults()[0]);
            // New cluster, you're like summer vacation...
            assertEquals(0, resp.getResults()[0].getRowCount());
            assertFalse(VoltTableTestHelpers.moveToMatchingRow(resp.getResults()[0], "CLASS_NAME",
                        PROC_CLASSES[0].getCanonicalName()));
            boolean threw = false;
            try {
                resp = m_client.callProcedure(PROC_CLASSES[0].getSimpleName());
            }
            catch (ProcCallException pce) {
                assertTrue(pce.getMessage().contains("was not found"));
                threw = true;
            }
            assertTrue(threw);

            resp = m_client.callProcedure("@UpdateClasses", jarfile.getFullJarBytes(), null);
            System.out.println(((ClientResponseImpl)resp).toJSONString());

            // Are we still like summer vacation?
            resp = m_client.callProcedure("@SystemCatalog", "CLASSES");
            VoltTable results = resp.getResults()[0];
            System.out.println(results);
            assertEquals(3, results.getRowCount());
            assertTrue(VoltTableTestHelpers.moveToMatchingRow(results, "CLASS_NAME",
                        PROC_CLASSES[0].getCanonicalName()));
            assertEquals(1L, results.getLong("VOLT_PROCEDURE"));
            assertEquals(0L, results.getLong("ACTIVE_PROC"));
            // Can we turn it into a procedure?
            resp = m_client.callProcedure("@AdHoc", "create procedure from class " +
                    PROC_CLASSES[0].getCanonicalName() + ";");
            System.out.println(((ClientResponseImpl)resp).toJSONString());
            resp = m_client.callProcedure(PROC_CLASSES[0].getSimpleName());
            assertEquals(ClientResponse.SUCCESS, resp.getStatus());
            results = resp.getResults()[0];
            assertEquals(10L, results.asScalarLong());

            // now, let's collide identically simpleName'd classes
            InMemoryJarfile boom = new InMemoryJarfile();
            for (Class<?> clazz : COLLIDING_CLASSES) {
                VoltCompiler comp = new VoltCompiler();
                comp.addClassToJar(boom, clazz);
            }
            resp = m_client.callProcedure("@UpdateClasses", boom.getFullJarBytes(), null);
            System.out.println(((ClientResponseImpl)resp).toJSONString());

            // should be okay to have classnames with same simplename
            resp = m_client.callProcedure("@SystemCatalog", "CLASSES");
            results = resp.getResults()[0];
View Full Code Here

            config.m_pathToDeployment = pathToDeployment;
            startSystem(config);

            // Something sane ought to work
            ClientResponse resp;
            InMemoryJarfile boom = new InMemoryJarfile();
            VoltCompiler comp = new VoltCompiler();
            comp.addClassToJar(boom, org.voltdb_testprocs.updateclasses.InnerClassesTestProc.class);
            try {
                resp = m_client.callProcedure("@UpdateClasses", boom.getFullJarBytes(), null);
                System.out.println(((ClientResponseImpl)resp).toJSONString());
            }
            catch (ProcCallException pce) {
                pce.printStackTrace();
                fail("Loading proc with inner classes should succeed");
            }

            // Error in non-visible inner class static initializer?
            boolean threw = false;
            boom = new InMemoryJarfile();
            comp = new VoltCompiler();
            comp.addClassToJar(boom, org.voltdb_testprocs.updateclasses.BadInnerClassesTestProc.class);
            try {
                resp = m_client.callProcedure("@UpdateClasses", boom.getFullJarBytes(), null);
                System.out.println(((ClientResponseImpl)resp).toJSONString());
            }
            catch (ProcCallException pce) {
                pce.printStackTrace();
                threw = true;
View Full Code Here

            config.m_pathToCatalog = pathToCatalog;
            config.m_pathToDeployment = pathToDeployment;
            startSystem(config);

            ClientResponse resp;
            InMemoryJarfile boom = new InMemoryJarfile();
            VoltCompiler comp = new VoltCompiler();
            comp.addClassToJar(boom, org.voltdb_testprocs.updateclasses.testBadInitializerProc.class);
            boolean threw = false;
            try {
                resp = m_client.callProcedure("@UpdateClasses", boom.getFullJarBytes(), null);
                System.out.println(((ClientResponseImpl)resp).toJSONString());
            }
            catch (ProcCallException pce) {
                pce.printStackTrace();
                threw = true;
            }
            assertTrue("Bad class jar should have thrown", threw);

            threw = false;
            boom = new InMemoryJarfile();
            comp = new VoltCompiler();
            comp.addClassToJar(boom, org.voltdb_testprocs.updateclasses.BadClassLoadClass.class);
            try {
                resp = m_client.callProcedure("@UpdateClasses", boom.getFullJarBytes(), null);
                System.out.println(((ClientResponseImpl)resp).toJSONString());
            }
            catch (ProcCallException pce) {
                pce.printStackTrace();
                threw = true;
View Full Code Here

        boolean success = builder.compile(pathToCatalog, 2, 1, 0);
        assertTrue("Schema compilation failed", success);
        MiscUtils.copyFile(builder.getPathToDeployment(), pathToDeployment);

        // This is maybe cheating a little bit?
        InMemoryJarfile jarfile = new InMemoryJarfile();
        for (Class<?> clazz : PROC_CLASSES) {
            VoltCompiler comp = new VoltCompiler();
            comp.addClassToJar(jarfile, clazz);
        }
        for (Class<?> clazz : EXTRA_CLASSES) {
            VoltCompiler comp = new VoltCompiler();
            comp.addClassToJar(jarfile, clazz);
        }
        for (Class<?> clazz : COLLIDING_CLASSES) {
            VoltCompiler comp = new VoltCompiler();
            comp.addClassToJar(jarfile, clazz);
        }

        try {
            VoltDB.Configuration config = new VoltDB.Configuration();
            config.m_pathToCatalog = pathToCatalog;
            config.m_pathToDeployment = pathToDeployment;
            startSystem(config);

            ClientResponse resp;
            // Make sure we're clean
            resp = m_client.callProcedure("@SystemCatalog", "CLASSES");
            assertEquals(0, resp.getResults()[0].getRowCount());

            // Add the jarfile we built
            resp = m_client.callProcedure("@UpdateClasses", jarfile.getFullJarBytes(), null);
            resp = m_client.callProcedure("@SystemCatalog", "CLASSES");
            assertEquals(PROC_CLASSES.length + EXTRA_CLASSES.length + COLLIDING_CLASSES.length,
                    resp.getResults()[0].getRowCount());

            // remove one class
            assertTrue(findClassInSystemCatalog(PROC_CLASSES[0].getCanonicalName()));
            resp = m_client.callProcedure("@UpdateClasses", null, PROC_CLASSES[0].getCanonicalName());
            assertFalse(findClassInSystemCatalog(PROC_CLASSES[0].getCanonicalName()));

            // remove everything under fullddlfeatures
            assertTrue(findClassInSystemCatalog(COLLIDING_CLASSES[0].getCanonicalName()));
            assertTrue(findClassInSystemCatalog(COLLIDING_CLASSES[1].getCanonicalName()));
            resp = m_client.callProcedure("@UpdateClasses", null,
                    "org.voltdb_testprocs.fullddlfeatures.*");
            assertFalse(findClassInSystemCatalog(COLLIDING_CLASSES[0].getCanonicalName()));
            assertFalse(findClassInSystemCatalog(COLLIDING_CLASSES[1].getCanonicalName()));

            // Remove everything left
            assertTrue(findClassInSystemCatalog(PROC_CLASSES[1].getCanonicalName()));
            assertTrue(findClassInSystemCatalog(EXTRA_CLASSES[0].getCanonicalName()));
            resp = m_client.callProcedure("@UpdateClasses", null, "org.voltdb**");
            assertFalse(findClassInSystemCatalog(PROC_CLASSES[1].getCanonicalName()));
            assertFalse(findClassInSystemCatalog(EXTRA_CLASSES[0].getCanonicalName()));
            resp = m_client.callProcedure("@SystemCatalog", "CLASSES");
            assertEquals(0, resp.getResults()[0].getRowCount());

            // put everything back
            // Add the jarfile we built
            resp = m_client.callProcedure("@UpdateClasses", jarfile.getFullJarBytes(), null);
            resp = m_client.callProcedure("@SystemCatalog", "CLASSES");
            assertEquals(PROC_CLASSES.length + EXTRA_CLASSES.length + COLLIDING_CLASSES.length,
                    resp.getResults()[0].getRowCount());

            // delete the common simple names from both packages simultaneously
            resp = m_client.callProcedure("@UpdateClasses", null,
                    "**testImportProc   , **testCreateProcFromClassProc");
            resp = m_client.callProcedure("@SystemCatalog", "CLASSES");
            // should be the only thing left
            assertEquals(1, resp.getResults()[0].getRowCount());
            assertTrue(findClassInSystemCatalog(EXTRA_CLASSES[0].getCanonicalName()));

            // make a jar without the extra
            InMemoryJarfile jarfile2 = new InMemoryJarfile();
            for (Class<?> clazz : PROC_CLASSES) {
                VoltCompiler comp = new VoltCompiler();
                comp.addClassToJar(jarfile2, clazz);
            }
            for (Class<?> clazz : COLLIDING_CLASSES) {
                VoltCompiler comp = new VoltCompiler();
                comp.addClassToJar(jarfile2, clazz);
            }

            // finally, delete what's left and put the new jar in simultaneously
            resp = m_client.callProcedure("@UpdateClasses", jarfile2.getFullJarBytes(),
                    "**updateclasses.*");
            resp = m_client.callProcedure("@SystemCatalog", "CLASSES");
            // extra class should be gone, others installed
            assertEquals(PROC_CLASSES.length + COLLIDING_CLASSES.length,
                    resp.getResults()[0].getRowCount());
            assertFalse(findClassInSystemCatalog(EXTRA_CLASSES[0].getCanonicalName()));
            assertTrue(findClassInSystemCatalog(PROC_CLASSES[0].getCanonicalName()));
            assertTrue(findClassInSystemCatalog(PROC_CLASSES[1].getCanonicalName()));
            assertTrue(findClassInSystemCatalog(COLLIDING_CLASSES[0].getCanonicalName()));
            assertTrue(findClassInSystemCatalog(COLLIDING_CLASSES[1].getCanonicalName()));

            // now add a class with inner classes
            InMemoryJarfile inner = new InMemoryJarfile();
            VoltCompiler comp = new VoltCompiler();
            comp.addClassToJar(inner, org.voltdb_testprocs.updateclasses.InnerClassesTestProc.class);
            resp = m_client.callProcedure("@UpdateClasses", inner.getFullJarBytes(), null);
            // old stuff should have survived
            assertTrue(findClassInSystemCatalog(PROC_CLASSES[0].getCanonicalName()));
            assertTrue(findClassInSystemCatalog(PROC_CLASSES[1].getCanonicalName()));
            assertTrue(findClassInSystemCatalog(COLLIDING_CLASSES[0].getCanonicalName()));
            assertTrue(findClassInSystemCatalog(COLLIDING_CLASSES[1].getCanonicalName()));
View Full Code Here

        // Use a special DDL reader to provide the contents.
        List<VoltCompilerReader> ddlReaderList = new ArrayList<VoltCompilerReader>(1);
        ddlReaderList.add(new VoltCompilerStringReader("ddl.sql", m_emptyDDLComment));
        // Seed it with the DDL so that a version upgrade hack in compileInternalToFile()
        // doesn't try to get the DDL file from the path.
        InMemoryJarfile jarFile = new InMemoryJarfile();
        try {
            ddlReaderList.get(0).putInJar(jarFile, "ddl.sql");
        }
        catch (IOException e) {
            compilerLog.error("Failed to add DDL file to empty in-memory jar.");
View Full Code Here

        // pull in the class files for procedures and imports
        autoGenCompiler.m_classLoader = origJarFile.getLoader();
        List<VoltCompilerReader> autogenReaderList = new ArrayList<VoltCompilerReader>(1);
        autogenReaderList.add(new VoltCompilerJarFileReader(origJarFile, AUTOGEN_DDL_FILE_NAME));
        DatabaseType autoGenDatabase = getProjectDatabase(null);
        InMemoryJarfile autoGenJarOutput = new InMemoryJarfile();
        autoGenCompiler.m_currentFilename = AUTOGEN_DDL_FILE_NAME;
        Catalog autoGenCatalog = autoGenCompiler.compileCatalogInternal(autoGenDatabase,
                autogenReaderList, autoGenJarOutput);
        FilteredCatalogDiffEngine diffEng = new FilteredCatalogDiffEngine(origCatalog, autoGenCatalog);
        String diffCmds = diffEng.commands();
View Full Code Here

        if (jarOutputPath == null) {
            addErr("The output jar path is null.");
            return false;
        }

        InMemoryJarfile jarOutput = compileInternal(projectReader, ddlReaderList, jarOutputRet);
        if (jarOutput == null) {
            return false;
        }

        try {
            jarOutput.writeToFile(new File(jarOutputPath)).run();
        }
        catch (final Exception e) {
            e.printStackTrace();
            addErr("Error writing catalog jar to disk: " + e.getMessage());
            return false;
View Full Code Here

            final InMemoryJarfile jarOutputRet)
    {
        // Expect to have either >1 ddl file or a project file.
        assert(ddlReaderList.size() > 0 || projectReader != null);
        // Make a temporary local output jar if one wasn't provided.
        final InMemoryJarfile jarOutput = (jarOutputRet != null
                                                ? jarOutputRet
                                                : new InMemoryJarfile());
        m_projectFileURL = (projectReader != null ? projectReader.getPath() : null);

        if (m_projectFileURL == null && (ddlReaderList == null || ddlReaderList.isEmpty())) {
            addErr("One or more DDL files are required.");
            return null;
        }

        // clear out the warnings and errors
        m_warnings.clear();
        m_infos.clear();
        m_errors.clear();

        // do all the work to get the catalog
        DatabaseType database = getProjectDatabase(projectReader);
        if (database == null) {
            return null;
        }
        final Catalog catalog = compileCatalogInternal(database, ddlReaderList, jarOutput);
        if (catalog == null) {
            return null;
        }

        // Build DDL from Catalog Data
        m_canonicalDDL = CatalogSchemaTools.toSchema(catalog, m_importLines);

        // generate the catalog report and write it to disk
        try {
            m_report = ReportMaker.report(m_catalog, m_warnings, m_canonicalDDL);
            File file = new File("catalog-report.html");
            FileWriter fw = new FileWriter(file);
            fw.write(m_report);
            fw.close();
            m_reportPath = file.getAbsolutePath();
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }

        jarOutput.put(AUTOGEN_DDL_FILE_NAME, m_canonicalDDL.getBytes(Constants.UTF8ENCODING));
        if (DEBUG_VERIFY_CATALOG) {
            debugVerifyCatalog(jarOutput, catalog);
        }

        // WRITE CATALOG TO JAR HERE
        final String catalogCommands = catalog.serialize();

        byte[] catalogBytes = catalogCommands.getBytes(Constants.UTF8ENCODING);

        try {
            // Don't update buildinfo if it's already present, e.g. while upgrading.
            // Note when upgrading the version has already been updated by the caller.
            if (!jarOutput.containsKey(CatalogUtil.CATALOG_BUILDINFO_FILENAME)) {
                addBuildInfo(jarOutput);
            }
            jarOutput.put(CatalogUtil.CATALOG_FILENAME, catalogBytes);
            // put the compiler report into the jarfile
            jarOutput.put("catalog-report.html", m_report.getBytes(Constants.UTF8ENCODING));
        }
        catch (final Exception e) {
            e.printStackTrace();
            return null;
        }
View Full Code Here

TOP

Related Classes of org.voltdb.utils.InMemoryJarfile$JarLoader

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.