adding configurable parameters for asterix
diff --git a/asterix-installer/pom.xml b/asterix-installer/pom.xml
index 87a73af..e0986d9 100644
--- a/asterix-installer/pom.xml
+++ b/asterix-installer/pom.xml
@@ -63,6 +63,10 @@
<goal>generate</goal>
</goals>
<configuration>
+ <args>
+ <arg>-Xsetters</arg>
+ <arg>-Xvalue-constructor</arg>
+ </args>
<schemaDirectory>src/main/resources/schema</schemaDirectory>
<schemaIncludes>
<include>cluster.xsd</include>
@@ -75,6 +79,24 @@
<generateDirectory>${project.build.directory}/generated-sources/cluster</generateDirectory>
</configuration>
</execution>
+ <execution>
+ <id>asterixconf</id>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ <configuration>
+ <schemaDirectory>src/main/resources/schema</schemaDirectory>
+ <schemaIncludes>
+ <include>asterix-conf.xsd</include>
+ </schemaIncludes>
+ <generatePackage>edu.uci.ics.asterix.installer.schema.asterixconf</generatePackage>
+ <bindingDirectory>src/main/resources/schema</bindingDirectory>
+ <bindingIncludes>
+ <bindingInclude>jaxb-bindings.xjb</bindingInclude>
+ </bindingIncludes>
+ <generateDirectory>${project.build.directory}/generated-sources/asterixconf</generateDirectory>
+ </configuration>
+ </execution>
</executions>
</plugin>
<plugin>
diff --git a/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/AlterCommand.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/AlterCommand.java
index 5ef7449..7f6b93e 100644
--- a/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/AlterCommand.java
+++ b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/AlterCommand.java
@@ -15,7 +15,6 @@
package edu.uci.ics.asterix.installer.command;
import java.util.Date;
-import java.util.Properties;
import org.kohsuke.args4j.Option;
@@ -23,6 +22,7 @@
import edu.uci.ics.asterix.installer.driver.InstallerUtil;
import edu.uci.ics.asterix.installer.model.AsterixInstance;
import edu.uci.ics.asterix.installer.model.AsterixInstance.State;
+import edu.uci.ics.asterix.installer.schema.asterixconf.AsterixConfiguration;
import edu.uci.ics.asterix.installer.service.ILookupService;
import edu.uci.ics.asterix.installer.service.ServiceProvider;
@@ -36,8 +36,9 @@
ILookupService lookupService = ServiceProvider.INSTANCE.getLookupService();
AsterixInstance instance = lookupService.getAsterixInstance(instanceName);
- Properties asterixConfProp = InstallerUtil.getAsterixConfiguration(((AlterConfig) config).confPath);
- instance.setConfiguration(asterixConfProp);
+ AsterixConfiguration asterixConfiguration = InstallerUtil
+ .getAsterixConfiguration(((AlterConfig) config).confPath);
+ instance.setAsterixConfiguration(asterixConfiguration);
instance.setModifiedTimestamp(new Date());
lookupService.updateAsterixInstance(instance);
LOGGER.info("Configuration for Asterix instance: " + instanceName + " has been altered");
diff --git a/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/CreateCommand.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/CreateCommand.java
index 2de8e53..d8cd2cf 100644
--- a/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/CreateCommand.java
+++ b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/CreateCommand.java
@@ -32,12 +32,14 @@
import edu.uci.ics.asterix.installer.events.PatternCreator;
import edu.uci.ics.asterix.installer.model.AsterixInstance;
import edu.uci.ics.asterix.installer.model.AsterixRuntimeState;
+import edu.uci.ics.asterix.installer.schema.asterixconf.AsterixConfiguration;
import edu.uci.ics.asterix.installer.service.ServiceProvider;
public class CreateCommand extends AbstractCommand {
private String asterixInstanceName;
private Cluster cluster;
+ private AsterixConfiguration asterixConfiguration;
@Override
protected void execCommand() throws Exception {
@@ -51,7 +53,9 @@
InstallerUtil.validateAsterixInstanceNotExists(asterixInstanceName);
CreateConfig createConfig = (CreateConfig) config;
cluster = EventUtil.getCluster(createConfig.clusterPath);
- AsterixInstance asterixInstance = InstallerUtil.createAsterixInstance(asterixInstanceName, cluster);
+ asterixConfiguration = InstallerUtil.getAsterixConfiguration(createConfig.asterixConfPath);
+ AsterixInstance asterixInstance = InstallerUtil.createAsterixInstance(asterixInstanceName, cluster,
+ asterixConfiguration);
InstallerUtil.evaluateConflictWithOtherInstances(asterixInstance);
InstallerUtil.createAsterixZip(asterixInstance, true);
List<Property> clusterProperties = new ArrayList<Property>();
@@ -117,4 +121,7 @@
@Option(name = "-c", required = true, usage = "Path to cluster configuration")
public String clusterPath;
+ @Option(name = "-a", required = true, usage = "Path to asterix configuration")
+ public String asterixConfPath;
+
}
diff --git a/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/driver/InstallerUtil.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/driver/InstallerUtil.java
index e2be142..aa7c20e 100644
--- a/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/driver/InstallerUtil.java
+++ b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/driver/InstallerUtil.java
@@ -40,6 +40,10 @@
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Unmarshaller;
+
import org.apache.commons.io.IOUtils;
import edu.uci.ics.asterix.event.driver.EventDriver;
@@ -50,6 +54,7 @@
import edu.uci.ics.asterix.installer.error.OutputHandler;
import edu.uci.ics.asterix.installer.model.AsterixInstance;
import edu.uci.ics.asterix.installer.model.AsterixInstance.State;
+import edu.uci.ics.asterix.installer.schema.asterixconf.AsterixConfiguration;
import edu.uci.ics.asterix.installer.service.ServiceProvider;
public class InstallerUtil {
@@ -57,16 +62,14 @@
public static final String TXN_LOG_DIR = "txnLogs";
public static final String TXN_LOG_DIR_KEY_SUFFIX = "txnLogDir";
- public static AsterixInstance createAsterixInstance(String asterixInstanceName, Cluster cluster)
- throws FileNotFoundException, IOException {
- Properties asterixConfProp = new Properties();
- asterixConfProp.put("output_dir", cluster.getWorkingDir().getDir() + File.separator + "asterix_output");
+ public static AsterixInstance createAsterixInstance(String asterixInstanceName, Cluster cluster,
+ AsterixConfiguration asterixConfiguration) throws FileNotFoundException, IOException {
Node metadataNode = getMetadataNode(cluster);
String asterixZipName = InstallerDriver.getAsterixZip().substring(
InstallerDriver.getAsterixZip().lastIndexOf(File.separator) + 1);
String asterixVersion = asterixZipName.substring("asterix-server-".length(),
asterixZipName.indexOf("-binary-assembly"));
- AsterixInstance instance = new AsterixInstance(asterixInstanceName, cluster, asterixConfProp,
+ AsterixInstance instance = new AsterixInstance(asterixInstanceName, cluster, asterixConfiguration,
metadataNode.getId(), asterixVersion);
return instance;
}
@@ -190,9 +193,7 @@
conf.append(asterixInstanceName + "_" + node.getId() + ".stores" + "=" + storeDir + "\n");
}
- Properties asterixConfProp = asterixInstance.getConfiguration();
- String outputDir = asterixConfProp.getProperty("output_dir");
- conf.append("OutputDir=" + outputDir);
+ conf.append("OutputDir=" + "dummy");
File asterixConfDir = new File(InstallerDriver.getAsterixDir() + File.separator + asterixInstanceName);
asterixConfDir.mkdirs();
@@ -218,10 +219,13 @@
}
- public static Properties getAsterixConfiguration(String asterixConf) throws FileNotFoundException, IOException {
- Properties prop = new Properties();
- prop.load(new FileInputStream(asterixConf));
- return prop;
+ public static AsterixConfiguration getAsterixConfiguration(String asterixConf) throws FileNotFoundException,
+ IOException, JAXBException {
+ File file = new File(asterixConf);
+ JAXBContext ctx = JAXBContext.newInstance(AsterixConfiguration.class);
+ Unmarshaller unmarshaller = ctx.createUnmarshaller();
+ AsterixConfiguration asterixConfiguration = (AsterixConfiguration) unmarshaller.unmarshal(file);
+ return asterixConfiguration;
}
public static void unzip(String sourceFile, String destDir) throws IOException {
diff --git a/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/model/AsterixInstance.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/model/AsterixInstance.java
index 9a2d43d..7e1dd13 100644
--- a/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/model/AsterixInstance.java
+++ b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/model/AsterixInstance.java
@@ -22,6 +22,7 @@
import edu.uci.ics.asterix.event.schema.cluster.Cluster;
import edu.uci.ics.asterix.event.schema.cluster.Node;
+import edu.uci.ics.asterix.installer.schema.asterixconf.AsterixConfiguration;
public class AsterixInstance implements Serializable {
@@ -38,7 +39,7 @@
private final Date createdTimestamp;
private Date stateChangeTimestamp;
private Date modifiedTimestamp;
- private Properties configuration;
+ private AsterixConfiguration asterixConfiguration;
private State state;
private final String metadataNodeId;
private final String asterixVersion;
@@ -47,11 +48,11 @@
private AsterixRuntimeState runtimeState;
private State previousState;
- public AsterixInstance(String name, Cluster cluster, Properties configuration, String metadataNodeId,
- String asterixVersion) {
+ public AsterixInstance(String name, Cluster cluster, AsterixConfiguration asterixConfiguration,
+ String metadataNodeId, String asterixVersion) {
this.name = name;
this.cluster = cluster;
- this.configuration = configuration;
+ this.asterixConfiguration = asterixConfiguration;
this.metadataNodeId = metadataNodeId;
this.state = State.ACTIVE;
this.previousState = State.UNUSABLE;
@@ -65,14 +66,6 @@
return stateChangeTimestamp;
}
- public Properties getConfiguration() {
- return configuration;
- }
-
- public void setConfiguration(Properties properties) {
- this.configuration = properties;
- }
-
public State getState() {
return state;
}
@@ -174,9 +167,40 @@
buffer.append(pInfo + "\n");
}
+ buffer.append("\n");
+ buffer.append("Asterix Configuration\n");
+ buffer.append("LSM Configuration\n");
+ buffer.append("Size of in-memory component:" + asterixConfiguration.getLsm().getSizeMemoryComponent() + "\n");
+ buffer.append("Total size of in-memory components:"
+ + asterixConfiguration.getLsm().getTotalSizeMemoryComponent() + "\n");
+
+ buffer.append("Transaction Configuration\n");
+ buffer.append("Number of log buffer pages:" + asterixConfiguration.getTransactions().getLogBufferNumPages()
+ + "\n");
+ buffer.append("Log buffer page size:" + asterixConfiguration.getTransactions().getLogBufferPageSize() + "\n");
+
+ buffer.append("Ports Configuration\n");
+ buffer.append("Web-interface-port:" + asterixConfiguration.getPorts().getWebInterfacePort() + "\n");
+ buffer.append("NC port:" + asterixConfiguration.getPorts().getNcPort() + "\n");
+
+ buffer.append("Operator Configuration\n");
+ buffer.append("Sort operator memory:" + asterixConfiguration.getOperators().getJoinOpMemory() + "\n");
+ buffer.append("Join operator memory:" + asterixConfiguration.getOperators().getSortOpMemory() + "\n");
+
+ buffer.append("Misc Configuration\n");
+ buffer.append("Sort operator memory:" + asterixConfiguration.getOperators().getJoinOpMemory() + "\n");
+
}
public State getPreviousState() {
return previousState;
}
+
+ public AsterixConfiguration getAsterixConfiguration() {
+ return asterixConfiguration;
+ }
+
+ public void setAsterixConfiguration(AsterixConfiguration asterixConfiguration) {
+ this.asterixConfiguration = asterixConfiguration;
+ }
}
diff --git a/asterix-installer/src/main/resources/schema/asterix-conf.xsd b/asterix-installer/src/main/resources/schema/asterix-conf.xsd
index 24a35cd..069fe74 100644
--- a/asterix-installer/src/main/resources/schema/asterix-conf.xsd
+++ b/asterix-installer/src/main/resources/schema/asterix-conf.xsd
@@ -2,23 +2,28 @@
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:mg="asterixconf" targetNamespace="asterixconf" elementFormDefault="qualified">
<!-- definition of simple types -->
-<xs:element name="lsm_size_memory_component" type="xs:string"/>
-<xs:element name="lsm_total_size_memory_component" type="xs:integer"/>
-<xs:element name="num_pages_buffer_cache" type="xs:integer"/>
+<xs:element name="size_memory_component" type="xs:string"/>
+<xs:element name="total_size_memory_component" type="xs:integer"/>
+
<xs:element name="sort_op_memory" type="xs:string"/>
<xs:element name="join_op_memory" type="xs:string"/>
+
<xs:element name="log_buffer_num_pages" type="xs:integer"/>
+<xs:element name="log_buffer_page_size" type="xs:integer"/>
+
<xs:element name="web_interface_port" type="xs:string"/>
<xs:element name="nc_port" type="xs:string"/>
+<xs:element name="num_pages_buffer_cache" type="xs:integer"/>
+<xs:element name="log_level" type="xs:string"/>
+
<!-- definition of complex elements -->
<xs:element name="lsm">
<xs:complexType>
<xs:sequence>
- <xs:element ref="mg:lsm_size_memory_component"/>
- <xs:element ref="mg:lsm_total_size_memory_component"/>
- <xs:element ref="mg:lsm_total_size_memory_component" maxOccurs="unbounded"/>
+ <xs:element ref="mg:size_memory_component"/>
+ <xs:element ref="mg:total_size_memory_component"/>
</xs:sequence>
</xs:complexType>
</xs:element>
@@ -27,6 +32,7 @@
<xs:complexType>
<xs:sequence>
<xs:element ref="mg:log_buffer_num_pages"/>
+ <xs:element ref="mg:log_buffer_page_size"/>
</xs:sequence>
</xs:complexType>
</xs:element>