@Override
  public Configuration loadResourceConfiguration() throws Exception {
    Properties properties = new Properties();
    properties.load(new FileInputStream(jvmOptsFile));

    Configuration config = new Configuration();

    String heapDumpOnOOMError = properties.getProperty("heap_dump_on_OOMError");
    String heapDumpDir = properties.getProperty("heap_dump_dir");

    config.put(new PropertySimple("minHeapSize", getHeapMinProp(properties)));
    config.put(new PropertySimple("maxHeapSize", getHeapMaxProp(properties)));
    config.put(new PropertySimple("heapNewSize", getHeapNewProp(properties)));
    config.put(new PropertySimple("threadStackSize", getStackSizeProp(properties)));

    if (!StringUtil.isEmpty(heapDumpOnOOMError)) {
      config.put(new PropertySimple("heapDumpOnOOMError", true));
    } else {
      config.put(new PropertySimple("heapDumpOnOOMError", false));
    }

    if (!StringUtil.isEmpty(heapDumpDir)) {
      config.put(new PropertySimple("heapDumpDir", heapDumpDir));
    } else {
      File basedir = jvmOptsFile.getParentFile().getParentFile();
      config.put(new PropertySimple("heapDumpDir", new File(basedir, "bin").getAbsolutePath()));
    }

    ConfigEditor yamlEditor = new ConfigEditor(cassandraYamlFile);
    yamlEditor.load();
    config.put(new PropertySimple("cqlPort", yamlEditor.getNativeTransportPort()));
    config.put(new PropertySimple("gossipPort", yamlEditor.getStoragePort()));

    return config;
  }
  private void updateCassandraYaml(Configuration newConfig) {
    ConfigEditor editor = new ConfigEditor(cassandraYamlFile);
    try {
      editor.load();

      PropertySimple cqlPortProperty = newConfig.getSimple("cqlPort");
      if (cqlPortProperty != null) {
        editor.setNativeTransportPort(cqlPortProperty.getIntegerValue());
      }

      PropertySimple gossipPortProperty = newConfig.getSimple("gossipPort");
      if (gossipPortProperty != null) {
        editor.setStoragePort(gossipPortProperty.getIntegerValue());
      }

      editor.save();
    } catch (ConfigEditorException e) {
      if (e.getCause() instanceof YAMLException) {
        log.error("Failed to update " + cassandraYamlFile);
        log.info("Attempting to restore " + cassandraYamlFile);
        try {
          editor.restore();
          throw e;
        } catch (ConfigEditorException e1) {
          log.error(
              "Failed to restore "
                  + cassandraYamlFile
                  + ". A copy of the file prior to any "
                  + "modifications can be found at "
                  + editor.getBackupFile());
          throw new ConfigEditorException(
              "There was an error updating "
                  + cassandraYamlFile
                  + " and "
                  + "undoing the changes failed. A copy of the file can be found at "
                  + editor.getBackupFile()
                  + ". See the agent logs for more details.",
              e);
        }
      } else {
        log.error(
            "No updates were made to " + cassandraYamlFile + " due to an unexpected error", e);
        throw e;
      }
    }
  }