[ 
https://issues.apache.org/jira/browse/TINKERPOP-2003?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16539908#comment-16539908
 ] 

xifenghz commented on TINKERPOP-2003:
-------------------------------------

Sorry for not show the context for my code in detail.

In a restful API based on SpringPVC,I call the submit method:

List<Result> results = Service.getInstance().submit(command);

 

Below is how the class Sevice defines.

 

_public class Service{_

_private static final Logger logger = LoggerFactory.getLogger(Service.class);_
 _private static final Service INSTANCE = new Service();_
 _private Cluster cluster;_
 _private Client client;_
 _private String configPath = "remote.yaml";_
 _private Service(){_
 _try {_
 _ClassLoader configClassLoader = this.getClass().getClassLoader();_
 _URL config = null;_
 _if (configClassLoader != null) {_
 _config = configClassLoader.getResource(configPath);_
 _}_
 _if (config == null) {_
 _logger.error("cannot find config file: " + configPath);_
 _return ;_
 _}_
 _cluster = Cluster.build(FileUtils.toFile(config)).create();_
 _logger.info("create Cluster success");_
 _client = cluster.connect();_
 _logger.info("create Client success");_
 _} catch (FileNotFoundException e) {_
 _logger.error("config file is not found: ", configPath);_
 _logger.error(ExceptionUtils.getStackTrace(e));_
 _}_
 _}_

_public static Service getInstance() {_
 _return INSTANCE;_
 _}_
 
 _public List<Result> submit(final String gremlinScript) throws 
GremlinServiceException {_
 _if (!isConnected()) {_
 _throw new GremlinServiceException("ConfigFile remote.yaml not found", 
GraphErrorCode.GraphErr.GREMLIN_CONFIG_FILE_NOT_FOUND);_
 _}_
 _logger.debug("submit script to gremlin server: " + gremlinScript);_

_ResultSet resultSet = null;_
 _synchronized (Service.class)_
 _{_
 _resultSet = client.submit(gremlinScript);_
 _}_
 _CompletableFuture<List<Result>> future = null;_
 _List<Result> results = null;_
 _if (resultSet != null) {_
 _future = resultSet.all();_
 _}_
 _if (future != null) {_
 _try {_
 _results = future.get();_
 _} catch (InterruptedException e) {_
 _logger.error("interrupted from gremlin server error: " + gremlinScript);_
 _throw new GremlinServiceException(e.getMessage(), 
GraphErrorCode.GraphErr.GREMLIN_QUERY_EXECUTE_FAILED);_
 _} catch (ExecutionException e) {_
 _logger.error("execution from gremlin server error: " + gremlinScript);_
 _throw new GremlinServiceException(e.getMessage(), 
GraphErrorCode.GraphErr.GREMLIN_QUERY_EXECUTE_ERROR);_
 _}_
 _}_
 _return results;_
 _}_

_}_

> After a long period (almost 5days)of parallel requests(almost 200 request per 
> second),client.submit blocked
> -----------------------------------------------------------------------------------------------------------
>
>                 Key: TINKERPOP-2003
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-2003
>             Project: TinkerPop
>          Issue Type: Bug
>          Components: driver
>    Affects Versions: 3.3.0
>            Reporter: xifenghz
>            Priority: Major
>
> After a long period (almost 5days)of parallel requests(almost 200 request per 
> second),client.submit blocked for scriptEvaluationTimeout configured,and 
> return timeout.At the same time,many TCP connections in Gremlin Server are in 
> CLOSE_WAIT state.
> Here is my usages:
> cluster = Cluster.build(FileUtils.toFile(config)).create();
>  client = cluster.connect();
>  ResultSet resultSet = null;
>  {color:#ff0000}synchronized (Service.class){color}
> { resultSet = client.submit(gremlinScript); }
> CompletableFuture<List<Result>> future = null;
>  List<Result> results = null;
>  future = resultSet.all();
>  results = future.get();
>  
> The code snippet above runs in a java web app based on SpringMVC.I found a PR 
> related to my question.
> [https://github.com/apache/tinkerpop/pull/367/commits/58d8bade7425c7a7865382990eaaed2b7d90659c#diff-06d5dfb02d5d2c807c2387c3e9338709]
> In this PR,the author seems to say gremlin doer not support high concurrency。
> {color:#ff0000}Removed recommendations for submitting parallel requests on a 
> session from docs.{color}
> {color:#333333}So,I submit the gremlin script in order(use synchronized 
> keyword,just as my code snippet ).But in order to lift throughput,I do not 
> lock the code for getting result from Gremlin Server。I want to know some 
> details about how Gremlin Server receive and process requests,such as the 
> receiver and executor threads are the same one?If so ,the Gremlin server can 
> only process the requests one by one ? {color}
> {color:#333333}I wonder whether or not Gremlin supports high concurrency(such 
> as 200 second per second,including simple vertex or edge queries and complex 
> combinatorial queries).If so,please help to find out why the process time for 
> a simple script such as query vertex exceed scriptEvaluationTimeout. If 
> not,is there other ways to make Gremlin Server support  high concurrency,such 
> as multi-gremlinserver。{color}
> Thank you sincerely for your help。
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to