Opcionalmente, definir tempos limite em um nível por consulta
O Neptune oferece a capacidade de definir um tempo limite para suas consultas usando a opção de grupo de parâmetros neptune_query_timeout (consulte Parâmetros). Você também pode substituir o tempo limite global com um código como este:
final Cluster cluster = Cluster.build("localhost") .port(8182) .maxInProcessPerConnection(32) .maxSimultaneousUsagePerConnection(32) .serializer(Serializers.GRAPHBINARY_V1D0) .create(); try { final GraphTraversalSource g = traversal().withRemote(DriverRemoteConnection.using(cluster)); List<Object> verticesWithNamePumba = g.with(ARGS_EVAL_TIMEOUT, 500L).V().has("name", "pumba").out("friendOf").id().toList(); System.out.println(verticesWithNamePumba); } finally { cluster.close(); }
Ou, para envio de consulta baseada em string, o código teria a seguinte aparência:
RequestOptions options = RequestOptions.build().timeout(500).create(); List<Result> result = client.submit("g.V()", options).all().get();
nota
Você poderá gerar custos inesperados se definir um valor de tempo limite de consulta muito alto, especialmente em uma instância sem servidor. Sem uma configuração de tempo limite razoável, a consulta poderá continuar sendo executada por muito mais tempo do que o esperado, gerando custos jamais previstos. Esse é particularmente o caso em uma instância sem servidor cuja escala pode ser aumentada verticalmente para um tipo de instância grande e caro durante a execução da consulta.
É possível evitar despesas inesperadas desse tipo usando um valor de tempo limite de consulta que acomode o tempo de execução esperado e ocasione apenas um tempo limite de execução excepcionalmente longo.
A partir da versão 1.3.2.0 do mecanismo do Neptune, o Neptune oferece suporte a um novo parâmetro neptune_lab_mode como StrictTimeoutValidation. Quando este parâmetro tem um valor de Enabled, um valor de tempo limite por consulta especificado como uma opção de solicitação ou uma dica de consulta não pode exceder o valor definido globalmente no grupo de parâmetros. Nesse caso, o Neptune lançará InvalidParameterException.
Essa configuração pode ser confirmada em uma resposta no endpoint “/status” quando o valor é Disabled, e na versão 1.3.2.0, o valor padrão desse parâmetro é Disabled. A partir da versão 1.4.0.0, o StrictTimeoutValidation foi alterado para ser Enabled por padrão.