diff --git a/common/src/main/java/org/apache/hadoop/metadata/service/ServiceInitializer.java b/common/src/main/java/org/apache/hadoop/metadata/service/ServiceInitializer.java index 868502f..49b738a 100644 --- a/common/src/main/java/org/apache/hadoop/metadata/service/ServiceInitializer.java +++ b/common/src/main/java/org/apache/hadoop/metadata/service/ServiceInitializer.java @@ -36,15 +36,13 @@ public class ServiceInitializer { public void initialize() throws MetadataException { String serviceClassNames; try { - PropertiesConfiguration configuration = new PropertiesConfiguration("application.properties"); + PropertiesConfiguration configuration = + new PropertiesConfiguration("application.properties"); serviceClassNames = configuration.getString("application.services"); } catch (ConfigurationException e) { - throw new MetadataException("unable to get server properties"); + throw new RuntimeException("unable to get server properties"); } - serviceClassNames - = "org.apache.hadoop.metadata.services.TitanGraphService,org.apache.hadoop.metadata.services.GraphBackedMetadataRepositoryService"; - for (String serviceClassName : serviceClassNames.split(",")) { serviceClassName = serviceClassName.trim(); if (serviceClassName.isEmpty()) { diff --git a/common/src/main/java/org/apache/hadoop/metadata/service/Services.java b/common/src/main/java/org/apache/hadoop/metadata/service/Services.java index 1ff3076..3079373 100644 --- a/common/src/main/java/org/apache/hadoop/metadata/service/Services.java +++ b/common/src/main/java/org/apache/hadoop/metadata/service/Services.java @@ -59,7 +59,8 @@ public final class Services implements Iterable<Service> { if (services.containsKey(serviceName)) { return (T) services.get(serviceName); } else { - throw new NoSuchElementException("Service " + serviceName + " not registered with registry"); + throw new NoSuchElementException( + "Service " + serviceName + " not registered with registry"); } } @@ -79,7 +80,8 @@ public final class Services implements Iterable<Service> { String serviceClassName; try { - PropertiesConfiguration configuration = new PropertiesConfiguration("application.properties"); + PropertiesConfiguration configuration = + new PropertiesConfiguration("application.properties"); serviceClassName = configuration.getString(serviceName + ".impl"); } catch (ConfigurationException e) { throw new MetadataException("unable to get server properties"); diff --git a/repository/src/main/java/org/apache/hadoop/metadata/services/GraphBackedMetadataRepositoryService.java b/repository/src/main/java/org/apache/hadoop/metadata/services/GraphBackedMetadataRepositoryService.java index 779f5db..a81728e 100644 --- a/repository/src/main/java/org/apache/hadoop/metadata/services/GraphBackedMetadataRepositoryService.java +++ b/repository/src/main/java/org/apache/hadoop/metadata/services/GraphBackedMetadataRepositoryService.java @@ -20,7 +20,6 @@ package org.apache.hadoop.metadata.services; import com.google.common.base.Preconditions; import com.tinkerpop.blueprints.Graph; -import com.tinkerpop.blueprints.GraphQuery; import com.tinkerpop.blueprints.TransactionalGraph; import com.tinkerpop.blueprints.Vertex; import org.apache.hadoop.metadata.service.Services; @@ -31,7 +30,6 @@ import org.slf4j.LoggerFactory; import java.io.IOException; import java.util.Collections; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.UUID; @@ -102,6 +100,7 @@ public class GraphBackedMetadataRepositoryService implements MetadataRepositoryS @Override public String submitEntity(String entity, String entityType) { + LOG.info("adding entity={} type={}", entity, entityType); Map<String, String> properties = (Map<String, String>) JSONValue.parse(entity); final String entityName = properties.get("entityName"); @@ -132,6 +131,7 @@ public class GraphBackedMetadataRepositoryService implements MetadataRepositoryS @Override public String getEntityDefinition(String entityName, String entityType) { + LOG.info("Retrieving entity name={} type={}", entityName, entityType); Vertex entityVertex = GraphUtils.findVertex(getBlueprintsGraph(), entityName, entityType); if (entityVertex == null) { return null; @@ -143,52 +143,7 @@ public class GraphBackedMetadataRepositoryService implements MetadataRepositoryS @Override public List<String> getEntityList(String entityType) { + LOG.info("Retrieving entity list for type={}", entityType); return Collections.emptyList(); } - - public static void main(String[] args) throws Exception { - TitanGraphService titanGraphService = new TitanGraphService(); - titanGraphService.start(); - Services.get().register(titanGraphService); - - GraphBackedMetadataRepositoryService service = new GraphBackedMetadataRepositoryService(); - try { - service.start(); - String guid = UUID.randomUUID().toString(); - - final TransactionalGraph graph = service.getTransactionalGraph(); - System.out.println("graph = " + graph); - System.out.println("graph.getVertices() = " + graph.getVertices()); - - - Vertex entityVertex = null; - try { - graph.rollback(); - entityVertex = graph.addVertex(null); - entityVertex.setProperty("guid", guid); - entityVertex.setProperty("entityName", "entityName"); - entityVertex.setProperty("entityType", "entityType"); - } catch (Exception e) { - graph.rollback(); - e.printStackTrace(); - } finally { - graph.commit(); - } - - System.out.println("vertex = " + GraphUtils.vertexString(entityVertex)); - - GraphQuery query = graph.query() - .has("entityName", "entityName") - .has("entityType", "entityType"); - - Iterator<Vertex> results = query.vertices().iterator(); - if (results.hasNext()) { - Vertex vertexFromQuery = results.next(); - System.out.println("vertex = " + GraphUtils.vertexString(vertexFromQuery)); - } - } finally { - service.stop(); - titanGraphService.stop(); - } - } } diff --git a/repository/src/main/java/org/apache/hadoop/metadata/services/TitanGraphService.java b/repository/src/main/java/org/apache/hadoop/metadata/services/TitanGraphService.java index b20b9a4..469d37e 100644 --- a/repository/src/main/java/org/apache/hadoop/metadata/services/TitanGraphService.java +++ b/repository/src/main/java/org/apache/hadoop/metadata/services/TitanGraphService.java @@ -18,13 +18,9 @@ package org.apache.hadoop.metadata.services; -import com.thinkaurelius.titan.core.Cardinality; -import com.thinkaurelius.titan.core.PropertyKey; import com.thinkaurelius.titan.core.TitanFactory; import com.thinkaurelius.titan.core.TitanGraph; -import com.thinkaurelius.titan.core.schema.TitanManagement; import com.tinkerpop.blueprints.Edge; -import com.tinkerpop.blueprints.Element; import com.tinkerpop.blueprints.Graph; import com.tinkerpop.blueprints.KeyIndexableGraph; import com.tinkerpop.blueprints.TransactionalGraph; @@ -50,10 +46,8 @@ public class TitanGraphService implements GraphService { /** * Constant for the configuration property that indicates the prefix. */ - private static final String METADATA_PREFIX = "metadata.titanGraph."; - private static final String METADATA_INDEX_KEY = "index.name"; + private static final String METADATA_PREFIX = "metadata.graph."; - private Configuration graphConfig; private TitanGraph titanGraph; private Set<String> vertexIndexedKeys; private Set<String> edgeIndexedKeys; @@ -75,11 +69,10 @@ public class TitanGraphService implements GraphService { */ @Override public void start() throws Exception { -// graphConfig = getConfiguration(); + Configuration graphConfig = getConfiguration(); + titanGraph = initializeGraphDB(graphConfig); - titanGraph = initializeGraphDB(); - -// createIndicesForVertexKeys(); + createIndicesForVertexKeys(); // todo - create Edge Cardinality Constraints LOG.info("Initialized titanGraph db: {}", titanGraph); @@ -90,29 +83,17 @@ public class TitanGraphService implements GraphService { LOG.info("Init edge property keys: {}", edgeIndexedKeys); } - protected TitanGraph initializeGraphDB() { - LOG.info("Initializing titanGraph db"); - - // todo: externalize this - Configuration graphConfig = new PropertiesConfiguration(); - graphConfig.setProperty("storage.backend", "berkeleyje"); - graphConfig.setProperty("storage.directory", "target/data/graphdb"); - - return TitanFactory.open(graphConfig); - } - private static Configuration getConfiguration() throws ConfigurationException { - PropertiesConfiguration configProperties = new PropertiesConfiguration("application.properties"); + PropertiesConfiguration configProperties = + new PropertiesConfiguration("application.properties"); Configuration graphConfig = new PropertiesConfiguration(); final Iterator<String> iterator = configProperties.getKeys(); while (iterator.hasNext()) { String key = iterator.next(); - System.out.println("key = " + key); if (key.startsWith(METADATA_PREFIX)) { String value = (String) configProperties.getProperty(key); key = key.substring(METADATA_PREFIX.length()); - System.out.println("**** key = " + key + ", value = " + value); graphConfig.setProperty(key, value); } } @@ -120,49 +101,19 @@ public class TitanGraphService implements GraphService { return graphConfig; } - /** - * This unfortunately requires a handle to Titan implementation since - * com.tinkerpop.blueprints.KeyIndexableGraph#createKeyIndex does not create an index. - */ + protected TitanGraph initializeGraphDB(Configuration graphConfig) { + LOG.info("Initializing titanGraph db"); + return TitanFactory.open(graphConfig); + } + protected void createIndicesForVertexKeys() { - if (!((KeyIndexableGraph) titanGraph).getIndexedKeys(Vertex.class).isEmpty()) { + if (!titanGraph.getIndexedKeys(Vertex.class).isEmpty()) { LOG.info("Indexes already exist for titanGraph"); return; } LOG.info("Indexes does not exist, Creating indexes for titanGraph"); - // todo - externalize this - String indexName = graphConfig.getString(METADATA_INDEX_KEY); - PropertyKey guid = createPropertyKey("guid", String.class, Cardinality.SINGLE); - createIndex(indexName, guid, Vertex.class, true); - - getTitanGraph().commit(); - } - - private PropertyKey createPropertyKey(String propertyKeyName, Class<String> dataType, - Cardinality cardinality) { - PropertyKey propertyKey = getTitanGraph().getManagementSystem() - .makePropertyKey(propertyKeyName) - .dataType(dataType) - .cardinality(cardinality) - .make(); - LOG.info("Created property key {}", propertyKey); - return propertyKey; - } - - private void createIndex(String indexName, PropertyKey propertyKey, - Class<? extends Element> clazz, boolean isUnique) { - TitanManagement managementSystem = getTitanGraph().getManagementSystem(); - managementSystem.buildPropertyIndex(propertyKey, indexName); - - TitanManagement.IndexBuilder indexBuilder = managementSystem - .buildIndex(indexName, clazz) - .addKey(propertyKey); - if (isUnique) { - indexBuilder.unique(); - } - - indexBuilder.buildCompositeIndex(); + // todo - add index for vertex and edge property keys } /** diff --git a/webapp/src/main/resources/application.properties b/webapp/src/main/resources/application.properties index c4e6f11..2c88054 100644 --- a/webapp/src/main/resources/application.properties +++ b/webapp/src/main/resources/application.properties @@ -16,23 +16,21 @@ # limitations under the License. # +application.services=org.apache.hadoop.metadata.services.TitanGraphService,\ + org.apache.hadoop.metadata.services.GraphBackedMetadataRepositoryService -application.services=org.apache.hadoop.metadata.services.TitanGraphService,org.apache.hadoop.metadata.services.GraphBackedMetadataRepositoryService - -#metadata.graph.schema.default=none # Graph implementation -metadata.graph.blueprints.graph=com.thinkaurelius.titan.core.TitanFactory +#metadata.graph.blueprints.graph=com.thinkaurelius.titan.core.TitanFactory # Graph Storage metadata.graph.storage.backend=berkeleyje -metadata.graph.storage.directory=${user.dir}/target/data/graphdb +metadata.graph.storage.directory=target/data/berkeley # Graph Search Index -#metadata.graph.index.name=search -#metadata.graph.index.search.backend=elasticsearch -#metadata.graph.index.search.directory=${user.dir}/target/data/searchindex -#metadata.graph.index.search.elasticsearch.client-only=false -#metadata.graph.index.search.elasticsearch.local-mode=true +metadata.graph.index.search.backend=elasticsearch +metadata.graph.index.search.directory=target/data/es +metadata.graph.index.search.elasticsearch.client-only=false +metadata.graph.index.search.elasticsearch.local-mode=true metadata.enableTLS=false