Skip to content

Commit

Permalink
expose GraphqlSessionPool
Browse files Browse the repository at this point in the history
  • Loading branch information
chuhuilong committed Apr 14, 2023
1 parent 315e8eb commit 06381ac
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 96 deletions.
25 changes: 15 additions & 10 deletions src/main/java/com/nebulagraphql/AutoGenerateMain.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import com.google.common.collect.Lists;
import com.nebulagraphql.schema.SchemaManger;
import com.nebulagraphql.session.GraphqlSessionPool;
import com.nebulagraphql.session.GraphqlSessionPoolConfig;
import com.nebulagraphql.util.InitialUtil;
import com.vesoft.nebula.client.graph.data.HostAddress;
import graphql.ExecutionResult;
Expand All @@ -19,17 +21,20 @@ public class AutoGenerateMain {
public static void main(String[] args) throws UnknownHostException {
logger.info("Test");
InitialUtil.initialBasketballPlayer();
HostAddress hostAddress = new HostAddress("metad0",9559);
System.out.println("connect to metad");
SchemaManger schemaManger = new SchemaManger(Lists.newArrayList(hostAddress));
GraphQLSchema graphQLSchema = schemaManger.generateSchema("basketballplayer");
SchemaPrinter schemaPrinter = new SchemaPrinter();
String printer = schemaPrinter.print(graphQLSchema);
System.out.println(printer);
GraphQL build = GraphQL.newGraphQL(graphQLSchema).build();
ExecutionResult executionResult = build.execute("{players(age:32){name\nage}}");
HostAddress metadAddress = new HostAddress("metad0",9559);
HostAddress graphdAddress = new HostAddress("graphd", 9669);
String spaceName = "basketballplayer";
String username = "root";
String password = "nebula";
GraphqlSessionPoolConfig graphqlSessionPoolConfig = new GraphqlSessionPoolConfig(
Lists.newArrayList(graphdAddress),
Lists.newArrayList(metadAddress),
spaceName, username, password);
graphqlSessionPoolConfig.setTimeout(3000);
GraphqlSessionPool pool = new GraphqlSessionPool(graphqlSessionPoolConfig);
ExecutionResult executionResult = pool.execute("{players(age:32){name\nage}}");
System.out.println(executionResult.getData().toString());
ExecutionResult executionResult2 = build.execute("{players(name:\"Kobe Bryant\"){name\nage}}");
ExecutionResult executionResult2 = pool.execute("{players(name:\"Kobe Bryant\"){name\nage}}");
System.out.println(executionResult2.getData().toString());
}
}
14 changes: 0 additions & 14 deletions src/main/java/com/nebulagraphql/ngql/DataProcessor.java

This file was deleted.

47 changes: 0 additions & 47 deletions src/main/java/com/nebulagraphql/ngql/DataProcessorImpl.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package com.nebulagraphql.schema;

import com.nebulagraphql.ngql.DataProcessor;
import com.nebulagraphql.ngql.DataProcessorImpl;
import com.nebulagraphql.ngql.GetVerticesByProperty;
import com.nebulagraphql.rsboot.ResultSetBoot;
import com.nebulagraphql.rsboot.domain.Vertex;
Expand Down Expand Up @@ -29,12 +27,10 @@
public class NebulaDataFetcher implements DataFetcher<Object> {
private static final Logger logger = LoggerFactory.getLogger(NebulaDataFetcher.class);

private String space;
private final SessionPool sessionPool;
private MetaData metaData;

public NebulaDataFetcher(String space,SessionPool sessionPool,MetaData metaData){
this.space = space;
public NebulaDataFetcher(SessionPool sessionPool,MetaData metaData){
this.sessionPool = sessionPool;
this.metaData = metaData;
}
Expand All @@ -44,7 +40,6 @@ public Object get(DataFetchingEnvironment environment) throws Exception {
GraphQLFieldDefinition fieldDefinition = environment.getFieldDefinition();
String field = fieldDefinition.getName();
String tagName = field.substring(0,field.length()-1);
DataProcessor dataProcessor = new DataProcessorImpl(space,tagName);
Map<String,Object> arguments = environment.getArguments();
logger.debug("arguments:{}",arguments);
Map<String, String> properties = arguments.entrySet().stream()
Expand All @@ -67,8 +62,6 @@ public Object get(DataFetchingEnvironment environment) throws Exception {
} catch (IOErrorException | ClientServerIncompatibleException | AuthFailedException | BindSpaceFailedException e) {
e.printStackTrace();
System.exit(1);
} finally {
sessionPool.close();
}
return null;
}
Expand Down
13 changes: 3 additions & 10 deletions src/main/java/com/nebulagraphql/schema/SchemaManger.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.nebulagraphql.schema;

import com.nebulagraphql.session.MetaData;
import com.nebulagraphql.util.SchemaUtils;
import com.vesoft.nebula.PropertyType;
import com.vesoft.nebula.client.graph.SessionPool;
Expand All @@ -26,24 +27,18 @@ public class SchemaManger {

private final MetaClient metaClient;

private static final Map<String, Map<String, Map<String, PropertyType>>> spaceTagsFieldsMap = new HashMap<>();

public SchemaManger(List<HostAddress> addresses) throws UnknownHostException {
this.metaClient = new MetaClient(addresses,30000,3,3);
}

public static Map<String, Map<String, Map<String, PropertyType>>> getSpaceTagsFieldsMap() {
return spaceTagsFieldsMap;
}

public GraphQLSchema generateSchema(String space,SessionPool sessionPool) {
public GraphQLSchema generateSchema(String space,SessionPool sessionPool,MetaData metaData) {
logger.debug("Generating graphql schema from space: {}",space);
try {
metaClient.connect();
List<TagItem> tags = metaClient.getTags(space);
GraphQLObjectType.Builder queryTypeBuilder = GraphQLObjectType.newObject();
GraphQLCodeRegistry.Builder codeRegistryBuilder = GraphQLCodeRegistry.newCodeRegistry();
DataFetcher<Object> propertyDataFetcher = new NebulaDataFetcher(space,sessionPool);
DataFetcher<Object> propertyDataFetcher = new NebulaDataFetcher(sessionPool,metaData);
queryTypeBuilder.name("Query");
Map<String, Map<String, PropertyType>> tagsFieldsMap = new HashMap<>();
for (TagItem tag : tags) {
Expand Down Expand Up @@ -97,8 +92,6 @@ public GraphQLSchema generateSchema(String space,SessionPool sessionPool) {
codeRegistryBuilder.dataFetcher(FieldCoordinates.coordinates("Query", tagName + "s"), propertyDataFetcher);
logger.debug("Generate tag schema success, tagName: {}",tagName);
}
spaceTagsFieldsMap.put(space, tagsFieldsMap);
logger.debug("Generated spaceTagsFieldsMap: {}", spaceTagsFieldsMap);
GraphQLCodeRegistry codeRegistry = codeRegistryBuilder.build();
GraphQLObjectType queryType = queryTypeBuilder.build();
GraphQLSchema graphQLSchema = GraphQLSchema.newSchema()
Expand Down
24 changes: 17 additions & 7 deletions src/main/java/com/nebulagraphql/session/GraphqlSessionPool.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import com.vesoft.nebula.meta.Schema;
import com.vesoft.nebula.meta.TagItem;

import graphql.ExecutionResult;
import graphql.GraphQL;
import graphql.schema.GraphQLSchema;

Expand All @@ -32,29 +33,38 @@ public class GraphqlSessionPool {
private final GraphQL build;
private final GraphQLSchema graphQLSchema;

private final MetaData metaData;
private MetaData metaData;

public GraphqlSessionPool(GraphqlSessionPoolConfig config) throws UnknownHostException{
this.metaData = getMetaData(config.getMetadAddress(), config.getSpaceName(), config.getTimeout(), 3, 3);

getMetaData(config.getMetadAddress(), config.getSpaceName(), config.getTimeout(), 3, 3);
sessionPool = new SessionPool(config.getSessionPoolConfig());
sessionPool.init();
SchemaManger schemaManger = new SchemaManger(config.getMetadAddress());
graphQLSchema = schemaManger.generateSchema(config.getSpaceName(),sessionPool);
graphQLSchema = schemaManger.generateSchema(config.getSpaceName(),sessionPool,metaData);
build = GraphQL.newGraphQL(graphQLSchema).build();
}

private MetaData getMetaData(List<HostAddress> addresses,String spaceName,int timeout,int connectionRetry,int executionRetry) throws UnknownHostException{
public ExecutionResult execute(String statement){
return build.execute(statement);
}

public void close(){
sessionPool.close();
}

private void getMetaData(List<HostAddress> addresses,String spaceName,int timeout,int connectionRetry,int executionRetry) throws UnknownHostException{
MetaClient client = new MetaClient(addresses,timeout,connectionRetry,executionRetry);
try {
client.connect();
List<TagItem> tags = client.getTags(spaceName);
Map<String,Map<String,PropertyType>> tagsFileds = getTagsFields(tags);
return new MetaData(tagsFileds);
this.metaData = new MetaData(tagsFileds);
} catch (TException | ClientServerIncompatibleException | ExecuteFailedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
client.close();
}

}

private String decodeString(byte[] bytes) {
Expand Down

0 comments on commit 06381ac

Please sign in to comment.