Пример #1
0
  @Override
  public Void call() throws Exception {
    if (!status.markRunning()) {
      // the client has already cancelled us or has died before we could get started, so stop now
      return null;
    }

    ActivationHolder ah = queryRequest.ah;
    SpliceOperation root = ah.getOperationsMap().get(queryRequest.rootResultSetNumber);
    DistributedDataSetProcessor dsp =
        EngineDriver.driver().processorFactory().distributedProcessor();
    DataSet<LocatedRow> dataset;
    OperationContext<SpliceOperation> context;
    try {
      ah.reinitialize(null);
      Activation activation = ah.getActivation();
      root.setActivation(activation);
      if (!(activation.isMaterialized())) activation.materialize();
      long txnId = root.getCurrentTransaction().getTxnId();

      String sql = queryRequest.sql;
      String userId = queryRequest.userId;
      String jobName = userId + " <" + txnId + ">";
      dsp.setJobGroup(jobName, sql);
      dsp.clearBroadcastedOperation();
      dataset = root.getDataSet(dsp);
      context = dsp.createOperationContext(root);
      SparkDataSet<LocatedRow> sparkDataSet = (SparkDataSet<LocatedRow>) dataset;
      String clientHost = queryRequest.host;
      int clientPort = queryRequest.port;
      UUID uuid = queryRequest.uuid;
      int numPartitions = sparkDataSet.rdd.getNumPartitions();

      StreamableRDD streamableRDD =
          new StreamableRDD<>(
              sparkDataSet.rdd,
              context,
              uuid,
              clientHost,
              clientPort,
              queryRequest.streamingBatches,
              queryRequest.streamingBatchSize);
      streamableRDD.submit();

      status.markCompleted(new QueryResult(numPartitions));
    } finally {
      EmbedConnection internalConnection =
          (EmbedConnection) EngineDriver.driver().getInternalConnection();
      internalConnection.getContextManager().popContext();
      ah.getActivation().getLanguageConnectionContext().popMe();
      ah.close();
    }

    return null;
  }