[
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)