You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ch...@apache.org on 2013/11/13 19:14:51 UTC

svn commit: r1541646 [6/6] - in /airavata/trunk: ./ modules/thrift/ modules/thrift/interpreter-service-client/ modules/thrift/interpreter-service-client/src/ modules/thrift/interpreter-service-client/src/main/ modules/thrift/interpreter-service-client/...

Added: airavata/trunk/modules/thrift/interpreter-service/src/main/java/org/apache/airavata/experiment/execution/WorkflowSchedulingSettings.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/thrift/interpreter-service/src/main/java/org/apache/airavata/experiment/execution/WorkflowSchedulingSettings.java?rev=1541646&view=auto
==============================================================================
--- airavata/trunk/modules/thrift/interpreter-service/src/main/java/org/apache/airavata/experiment/execution/WorkflowSchedulingSettings.java (added)
+++ airavata/trunk/modules/thrift/interpreter-service/src/main/java/org/apache/airavata/experiment/execution/WorkflowSchedulingSettings.java Wed Nov 13 18:14:50 2013
@@ -0,0 +1,442 @@
+/**
+ * Autogenerated by Thrift Compiler (0.9.1)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+package org.apache.airavata.experiment.execution;
+
+import org.apache.thrift.scheme.IScheme;
+import org.apache.thrift.scheme.SchemeFactory;
+import org.apache.thrift.scheme.StandardScheme;
+
+import org.apache.thrift.scheme.TupleScheme;
+import org.apache.thrift.protocol.TTupleProtocol;
+import org.apache.thrift.protocol.TProtocolException;
+import org.apache.thrift.EncodingUtils;
+import org.apache.thrift.TException;
+import org.apache.thrift.async.AsyncMethodCallback;
+import org.apache.thrift.server.AbstractNonblockingServer.*;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.EnumMap;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.EnumSet;
+import java.util.Collections;
+import java.util.BitSet;
+import java.nio.ByteBuffer;
+import java.util.Arrays;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class WorkflowSchedulingSettings implements org.apache.thrift.TBase<WorkflowSchedulingSettings, WorkflowSchedulingSettings._Fields>, java.io.Serializable, Cloneable, Comparable<WorkflowSchedulingSettings> {
+  private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("WorkflowSchedulingSettings");
+
+  private static final org.apache.thrift.protocol.TField NODE_SETTINGS_LIST_FIELD_DESC = new org.apache.thrift.protocol.TField("nodeSettingsList", org.apache.thrift.protocol.TType.LIST, (short)1);
+
+  private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
+  static {
+    schemes.put(StandardScheme.class, new WorkflowSchedulingSettingsStandardSchemeFactory());
+    schemes.put(TupleScheme.class, new WorkflowSchedulingSettingsTupleSchemeFactory());
+  }
+
+  public List<NodeSettings> nodeSettingsList; // required
+
+  /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+  public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+    NODE_SETTINGS_LIST((short)1, "nodeSettingsList");
+
+    private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
+
+    static {
+      for (_Fields field : EnumSet.allOf(_Fields.class)) {
+        byName.put(field.getFieldName(), field);
+      }
+    }
+
+    /**
+     * Find the _Fields constant that matches fieldId, or null if its not found.
+     */
+    public static _Fields findByThriftId(int fieldId) {
+      switch(fieldId) {
+        case 1: // NODE_SETTINGS_LIST
+          return NODE_SETTINGS_LIST;
+        default:
+          return null;
+      }
+    }
+
+    /**
+     * Find the _Fields constant that matches fieldId, throwing an exception
+     * if it is not found.
+     */
+    public static _Fields findByThriftIdOrThrow(int fieldId) {
+      _Fields fields = findByThriftId(fieldId);
+      if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+      return fields;
+    }
+
+    /**
+     * Find the _Fields constant that matches name, or null if its not found.
+     */
+    public static _Fields findByName(String name) {
+      return byName.get(name);
+    }
+
+    private final short _thriftId;
+    private final String _fieldName;
+
+    _Fields(short thriftId, String fieldName) {
+      _thriftId = thriftId;
+      _fieldName = fieldName;
+    }
+
+    public short getThriftFieldId() {
+      return _thriftId;
+    }
+
+    public String getFieldName() {
+      return _fieldName;
+    }
+  }
+
+  // isset id assignments
+  public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+  static {
+    Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+    tmpMap.put(_Fields.NODE_SETTINGS_LIST, new org.apache.thrift.meta_data.FieldMetaData("nodeSettingsList", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+        new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
+            new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, NodeSettings.class))));
+    metaDataMap = Collections.unmodifiableMap(tmpMap);
+    org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(WorkflowSchedulingSettings.class, metaDataMap);
+  }
+
+  public WorkflowSchedulingSettings() {
+  }
+
+  public WorkflowSchedulingSettings(
+    List<NodeSettings> nodeSettingsList)
+  {
+    this();
+    this.nodeSettingsList = nodeSettingsList;
+  }
+
+  /**
+   * Performs a deep copy on <i>other</i>.
+   */
+  public WorkflowSchedulingSettings(WorkflowSchedulingSettings other) {
+    if (other.isSetNodeSettingsList()) {
+      List<NodeSettings> __this__nodeSettingsList = new ArrayList<NodeSettings>(other.nodeSettingsList.size());
+      for (NodeSettings other_element : other.nodeSettingsList) {
+        __this__nodeSettingsList.add(new NodeSettings(other_element));
+      }
+      this.nodeSettingsList = __this__nodeSettingsList;
+    }
+  }
+
+  public WorkflowSchedulingSettings deepCopy() {
+    return new WorkflowSchedulingSettings(this);
+  }
+
+  @Override
+  public void clear() {
+    this.nodeSettingsList = null;
+  }
+
+  public int getNodeSettingsListSize() {
+    return (this.nodeSettingsList == null) ? 0 : this.nodeSettingsList.size();
+  }
+
+  public java.util.Iterator<NodeSettings> getNodeSettingsListIterator() {
+    return (this.nodeSettingsList == null) ? null : this.nodeSettingsList.iterator();
+  }
+
+  public void addToNodeSettingsList(NodeSettings elem) {
+    if (this.nodeSettingsList == null) {
+      this.nodeSettingsList = new ArrayList<NodeSettings>();
+    }
+    this.nodeSettingsList.add(elem);
+  }
+
+  public List<NodeSettings> getNodeSettingsList() {
+    return this.nodeSettingsList;
+  }
+
+  public WorkflowSchedulingSettings setNodeSettingsList(List<NodeSettings> nodeSettingsList) {
+    this.nodeSettingsList = nodeSettingsList;
+    return this;
+  }
+
+  public void unsetNodeSettingsList() {
+    this.nodeSettingsList = null;
+  }
+
+  /** Returns true if field nodeSettingsList is set (has been assigned a value) and false otherwise */
+  public boolean isSetNodeSettingsList() {
+    return this.nodeSettingsList != null;
+  }
+
+  public void setNodeSettingsListIsSet(boolean value) {
+    if (!value) {
+      this.nodeSettingsList = null;
+    }
+  }
+
+  public void setFieldValue(_Fields field, Object value) {
+    switch (field) {
+    case NODE_SETTINGS_LIST:
+      if (value == null) {
+        unsetNodeSettingsList();
+      } else {
+        setNodeSettingsList((List<NodeSettings>)value);
+      }
+      break;
+
+    }
+  }
+
+  public Object getFieldValue(_Fields field) {
+    switch (field) {
+    case NODE_SETTINGS_LIST:
+      return getNodeSettingsList();
+
+    }
+    throw new IllegalStateException();
+  }
+
+  /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+  public boolean isSet(_Fields field) {
+    if (field == null) {
+      throw new IllegalArgumentException();
+    }
+
+    switch (field) {
+    case NODE_SETTINGS_LIST:
+      return isSetNodeSettingsList();
+    }
+    throw new IllegalStateException();
+  }
+
+  @Override
+  public boolean equals(Object that) {
+    if (that == null)
+      return false;
+    if (that instanceof WorkflowSchedulingSettings)
+      return this.equals((WorkflowSchedulingSettings)that);
+    return false;
+  }
+
+  public boolean equals(WorkflowSchedulingSettings that) {
+    if (that == null)
+      return false;
+
+    boolean this_present_nodeSettingsList = true && this.isSetNodeSettingsList();
+    boolean that_present_nodeSettingsList = true && that.isSetNodeSettingsList();
+    if (this_present_nodeSettingsList || that_present_nodeSettingsList) {
+      if (!(this_present_nodeSettingsList && that_present_nodeSettingsList))
+        return false;
+      if (!this.nodeSettingsList.equals(that.nodeSettingsList))
+        return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    return 0;
+  }
+
+  @Override
+  public int compareTo(WorkflowSchedulingSettings other) {
+    if (!getClass().equals(other.getClass())) {
+      return getClass().getName().compareTo(other.getClass().getName());
+    }
+
+    int lastComparison = 0;
+
+    lastComparison = Boolean.valueOf(isSetNodeSettingsList()).compareTo(other.isSetNodeSettingsList());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetNodeSettingsList()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.nodeSettingsList, other.nodeSettingsList);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    return 0;
+  }
+
+  public _Fields fieldForId(int fieldId) {
+    return _Fields.findByThriftId(fieldId);
+  }
+
+  public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+    schemes.get(iprot.getScheme()).getScheme().read(iprot, this);
+  }
+
+  public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+    schemes.get(oprot.getScheme()).getScheme().write(oprot, this);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder("WorkflowSchedulingSettings(");
+    boolean first = true;
+
+    sb.append("nodeSettingsList:");
+    if (this.nodeSettingsList == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.nodeSettingsList);
+    }
+    first = false;
+    sb.append(")");
+    return sb.toString();
+  }
+
+  public void validate() throws org.apache.thrift.TException {
+    // check for required fields
+    // check for sub-struct validity
+  }
+
+  private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+    try {
+      write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+    } catch (org.apache.thrift.TException te) {
+      throw new java.io.IOException(te);
+    }
+  }
+
+  private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+    try {
+      read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+    } catch (org.apache.thrift.TException te) {
+      throw new java.io.IOException(te);
+    }
+  }
+
+  private static class WorkflowSchedulingSettingsStandardSchemeFactory implements SchemeFactory {
+    public WorkflowSchedulingSettingsStandardScheme getScheme() {
+      return new WorkflowSchedulingSettingsStandardScheme();
+    }
+  }
+
+  private static class WorkflowSchedulingSettingsStandardScheme extends StandardScheme<WorkflowSchedulingSettings> {
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot, WorkflowSchedulingSettings struct) throws org.apache.thrift.TException {
+      org.apache.thrift.protocol.TField schemeField;
+      iprot.readStructBegin();
+      while (true)
+      {
+        schemeField = iprot.readFieldBegin();
+        if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+          break;
+        }
+        switch (schemeField.id) {
+          case 1: // NODE_SETTINGS_LIST
+            if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
+              {
+                org.apache.thrift.protocol.TList _list8 = iprot.readListBegin();
+                struct.nodeSettingsList = new ArrayList<NodeSettings>(_list8.size);
+                for (int _i9 = 0; _i9 < _list8.size; ++_i9)
+                {
+                  NodeSettings _elem10;
+                  _elem10 = new NodeSettings();
+                  _elem10.read(iprot);
+                  struct.nodeSettingsList.add(_elem10);
+                }
+                iprot.readListEnd();
+              }
+              struct.setNodeSettingsListIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          default:
+            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+        }
+        iprot.readFieldEnd();
+      }
+      iprot.readStructEnd();
+
+      // check for required fields of primitive type, which can't be checked in the validate method
+      struct.validate();
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot, WorkflowSchedulingSettings struct) throws org.apache.thrift.TException {
+      struct.validate();
+
+      oprot.writeStructBegin(STRUCT_DESC);
+      if (struct.nodeSettingsList != null) {
+        oprot.writeFieldBegin(NODE_SETTINGS_LIST_FIELD_DESC);
+        {
+          oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.nodeSettingsList.size()));
+          for (NodeSettings _iter11 : struct.nodeSettingsList)
+          {
+            _iter11.write(oprot);
+          }
+          oprot.writeListEnd();
+        }
+        oprot.writeFieldEnd();
+      }
+      oprot.writeFieldStop();
+      oprot.writeStructEnd();
+    }
+
+  }
+
+  private static class WorkflowSchedulingSettingsTupleSchemeFactory implements SchemeFactory {
+    public WorkflowSchedulingSettingsTupleScheme getScheme() {
+      return new WorkflowSchedulingSettingsTupleScheme();
+    }
+  }
+
+  private static class WorkflowSchedulingSettingsTupleScheme extends TupleScheme<WorkflowSchedulingSettings> {
+
+    @Override
+    public void write(org.apache.thrift.protocol.TProtocol prot, WorkflowSchedulingSettings struct) throws org.apache.thrift.TException {
+      TTupleProtocol oprot = (TTupleProtocol) prot;
+      BitSet optionals = new BitSet();
+      if (struct.isSetNodeSettingsList()) {
+        optionals.set(0);
+      }
+      oprot.writeBitSet(optionals, 1);
+      if (struct.isSetNodeSettingsList()) {
+        {
+          oprot.writeI32(struct.nodeSettingsList.size());
+          for (NodeSettings _iter12 : struct.nodeSettingsList)
+          {
+            _iter12.write(oprot);
+          }
+        }
+      }
+    }
+
+    @Override
+    public void read(org.apache.thrift.protocol.TProtocol prot, WorkflowSchedulingSettings struct) throws org.apache.thrift.TException {
+      TTupleProtocol iprot = (TTupleProtocol) prot;
+      BitSet incoming = iprot.readBitSet(1);
+      if (incoming.get(0)) {
+        {
+          org.apache.thrift.protocol.TList _list13 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+          struct.nodeSettingsList = new ArrayList<NodeSettings>(_list13.size);
+          for (int _i14 = 0; _i14 < _list13.size; ++_i14)
+          {
+            NodeSettings _elem15;
+            _elem15 = new NodeSettings();
+            _elem15.read(iprot);
+            struct.nodeSettingsList.add(_elem15);
+          }
+        }
+        struct.setNodeSettingsListIsSet(true);
+      }
+    }
+  }
+
+}
+

Added: airavata/trunk/modules/thrift/interpreter-service/src/main/resources/interpreter.thrift
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/thrift/interpreter-service/src/main/resources/interpreter.thrift?rev=1541646&view=auto
==============================================================================
--- airavata/trunk/modules/thrift/interpreter-service/src/main/resources/interpreter.thrift (added)
+++ airavata/trunk/modules/thrift/interpreter-service/src/main/resources/interpreter.thrift Wed Nov 13 18:14:50 2013
@@ -0,0 +1,119 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+namespace java org.apache.airavata.experiment.execution
+
+typedef string ExperimentName
+typedef map<string,string> workflowInputs
+
+struct HPCSettings {
+    1:string jobManager;
+    2:i32 cpuCount;
+    3:i32 nodeCount;
+    4:string queueName;
+    5:i32 maxWalltime;
+}
+
+struct HostSchedulingSettings {
+    1:string hostID;
+    2:bool isWSGramPreferred;
+    3:string gatekeeperEPR;
+}
+
+struct NameValuePairType {
+    1:string name;
+    2:string value;
+    3:string description;
+}
+
+struct NodeSettings {
+    1:string nodeId;
+    2:string serviceId;
+    3:HostSchedulingSettings hostSchedulingSettings;
+    4:HPCSettings hpcSettings;
+    5:list<NameValuePairType> nameValuePairList;
+}
+
+struct WorkflowSchedulingSettings {
+    1:list<NodeSettings> nodeSettingsList;
+}
+
+struct OutputDataSettings {
+    1:string nodeID;
+    2:string outputdataDir;
+    3:string dataRegURL;
+    4:bool isdataPersisted;
+}
+
+struct WorkflowOutputDataSettings{
+    1:list<OutputDataSettings> outputDataSettingsList;
+}
+
+struct SSHAuthenticationSettings {
+    1:string accessKeyID;
+    2:string secretAccessKey;
+}
+
+struct MyProxyRepositorySettings {
+    1:string userName;
+    2:string password;
+    3:string myproxyServer;
+    4:i32 lifetime;
+}
+
+struct CredentialStoreSecuritySettings {
+    1:string tokenId;
+    2:string portalUser;
+    3:string gatewayID;
+}
+
+struct AmazonWebServicesSettings {
+    1:string accessKey;
+    2:string amiID;
+    3:string instanceID;
+    4:string instanceType;
+    5:string secretAccessKey;
+    6:string username;
+}
+
+struct SecuritySettings {
+    1:AmazonWebServicesSettings amazonWSSettings;
+    2:CredentialStoreSecuritySettings credentialStoreSettings;
+    3:MyProxyRepositorySettings myproxySettings;
+    4:SSHAuthenticationSettings sshAuthSettings;
+}
+
+struct ExperimentAdvanceOptions {
+    1:string executionUser;
+    2:string metadata;
+    3:string experimentName;
+    4:string customExperimentId;
+    5:WorkflowSchedulingSettings workflowSchedulingSettings;
+    6:WorkflowOutputDataSettings workflowOutputDataSettings;
+    7:SecuritySettings securitySettings;
+}
+
+service InterpreterService {
+    string runExperiment(1:string workflowTemplateName, 2:map<string,string> workflowInputs, ExperimentAdvanceOptions experimentAdOptions),
+    void cancelExperiment(1:string experimentID),
+    void suspendExperiment(1:string experimentID),
+    void resumeExperiment(1:string experimentID)
+}
\ No newline at end of file

Added: airavata/trunk/modules/thrift/pom.xml
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/thrift/pom.xml?rev=1541646&view=auto
==============================================================================
--- airavata/trunk/modules/thrift/pom.xml (added)
+++ airavata/trunk/modules/thrift/pom.xml Wed Nov 13 18:14:50 2013
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file 
+    distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under 
+    the Apache License, Version 2.0 (theÏ "License"); you may not use this file except in compliance with the License. You may 
+    obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to 
+    in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 
+    ANY ~ KIND, either express or implied. See the License for the specific language governing permissions and limitations under 
+    the License. -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+    <parent>
+        <groupId>org.apache.airavata</groupId>
+        <artifactId>airavata</artifactId>
+        <version>0.11-SNAPSHOT</version>
+        <relativePath>../../pom.xml</relativePath>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>thrift</artifactId>
+    <packaging>pom</packaging>
+    <name>Airavata Thrift</name>
+    <url>http://airavata.apache.org/</url>
+    
+    <profiles>
+        <profile>
+            <id>default</id>
+            <activation>
+                <activeByDefault>true</activeByDefault>
+            </activation>
+            <modules>
+                <module>interpreter-service</module>
+                <module>interpreter-service-client</module>
+            </modules>
+        </profile>
+    </profiles>
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+    </properties>
+</project>

Modified: airavata/trunk/pom.xml
URL: http://svn.apache.org/viewvc/airavata/trunk/pom.xml?rev=1541646&r1=1541645&r2=1541646&view=diff
==============================================================================
--- airavata/trunk/pom.xml (original)
+++ airavata/trunk/pom.xml Wed Nov 13 18:14:50 2013
@@ -439,6 +439,7 @@
                 <module>modules/security</module>
                 <module>modules/credential-store</module>
                 <module>modules/rest</module>
+                <module>modules/thrift</module>
                 <module>tools</module>
                 <module>samples</module>
                 <module>modules/server</module>