Yuan Tian created IOTDB-291:
-------------------------------

             Summary: Statement close operation may cause the whole 
connection's resource to be released
                 Key: IOTDB-291
                 URL: https://issues.apache.org/jira/browse/IOTDB-291
             Project: Apache IoTDB
          Issue Type: Bug
            Reporter: Yuan Tian


The function closeClientOperation() in IoTDBStatement.java invokes the function 
closeOperation(TSCloseOperationReq) in TSServiceImpl. 
Because the queryId field in TSCloseOperationReq is set to be -1L, the 
releaseQueryResource  function will release all the resources  in that 
connection.

{code:java}
  private void closeClientOperation() throws SQLException {
    try {
      if (operationHandle != null) {
        TSCloseOperationReq closeReq = new TSCloseOperationReq(operationHandle, 
-1);
        closeReq.setStmtId(stmtId);
        TSStatus closeResp = client.closeOperation(closeReq);
        RpcUtils.verifySuccess(closeResp);
      }
    } catch (Exception e) {
      throw new SQLException("Error occurs when closing statement.", e);
    }
  }
{code}

{code:java}
  private void releaseQueryResource(TSCloseOperationReq req) throws 
StorageEngineException {
    Map<Long, QueryContext> contextMap = contextMapLocal.get();
    if (contextMap == null) {
      return;
    }
    if (req == null || req.queryId == -1) {
      // end query for all the query tokens created by current thread
      for (QueryContext context : contextMap.values()) {
        
QueryResourceManager.getInstance().endQueryForGivenJob(context.getJobId());
      }
      contextMapLocal.set(new HashMap<>());
    } else {
      QueryResourceManager.getInstance()
          .endQueryForGivenJob(contextMap.remove(req.queryId).getJobId());
    }
  }
{code}




--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to