public synchronized void loadClassesAndDDLIfNeeded()

in voltdb/src/main/java/site/ycsb/db/voltdb/YCSBSchemaBuilder.java [129:195]


  public synchronized void loadClassesAndDDLIfNeeded(Client voltClient) throws Exception {
    
    if (schemaExists(voltClient)) {
      return;
    }
    
    File tempDir = Files.createTempDirectory("voltdbYCSB").toFile();
    
    if (!tempDir.canWrite()) {
      throw new Exception("Temp Directory (from Files.createTempDirectory()) '" 
            + tempDir.getAbsolutePath() + "' is not writable"); 
    }
  
    ClientResponse cr;

    for (int i = 0; i < ddlStatements.length; i++) {
      try {
        cr = voltClient.callProcedure("@AdHoc", ddlStatements[i]);
        if (cr.getStatus() != ClientResponse.SUCCESS) {
          throw new Exception("Attempt to execute '" + ddlStatements[i] + "' failed:" + cr.getStatusString());
        }
        logger.info(ddlStatements[i]);
      } catch (Exception e) {

        if (e.getMessage().indexOf("object name already exists") > -1) {
          // Someone else has done this...
          return;
        }

        throw (e);
      }
    }

    logger.info("Creating JAR file in " + tempDir + File.separator + jarFileName);
    Manifest manifest = new Manifest();
    manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
    JarOutputStream newJarFile = new JarOutputStream(new FileOutputStream(tempDir + File.separator + jarFileName),
        manifest);

    for (int i = 0; i < jarFiles.length; i++) {
      InputStream is = getClass().getResourceAsStream("/site/ycsb/db/voltdb/procs/" + jarFiles[i]);
      add("site/ycsb/db/voltdb/procs/" + jarFiles[i], is, newJarFile);
    }

    newJarFile.close();
    File file = new File(tempDir + File.separator + jarFileName);

    byte[] jarFileContents = new byte[(int) file.length()];
    FileInputStream fis = new FileInputStream(file);
    fis.read(jarFileContents);
    fis.close();
    logger.info("Calling @UpdateClasses to load JAR file containing procedures");

    cr = voltClient.callProcedure("@UpdateClasses", jarFileContents, null);
    if (cr.getStatus() != ClientResponse.SUCCESS) {
      throw new Exception("Attempt to execute UpdateClasses failed:" + cr.getStatusString());
    }

    for (int i = 0; i < procStatements.length; i++) {
      logger.info(procStatements[i]);
      cr = voltClient.callProcedure("@AdHoc", procStatements[i]);
      if (cr.getStatus() != ClientResponse.SUCCESS) {
        throw new Exception("Attempt to execute '" + procStatements[i] + "' failed:" + cr.getStatusString());
      }
    }

  }