code: public synchronized void submitRunTaskCommand(long jobId, int taskId, JobConfig jobConfig,
        Object taskArgs, long workerId) {
      RunTaskCommand.Builder runTaskCommand = RunTaskCommand.newBuilder();
      runTaskCommand.setJobId(jobId);
      runTaskCommand.setTaskId(taskId);
      try {
        runTaskCommand.setJobConfig(ByteString.copyFrom(SerializationUtils.serialize(jobConfig)));
        if (taskArgs != null) {
          runTaskCommand.setTaskArgs(ByteString.copyFrom(SerializationUtils.serialize(taskArgs)));
        }
      } catch (IOException e) {
        // TODO(yupeng) better exception handling
        LOG.info("Failed to serialize the run task command:" + e);
        return;
      }
      JobCommand.Builder command = JobCommand.newBuilder();
      command.setRunTaskCommand(runTaskCommand);
      if (!mWorkerIdToPendingCommands.containsKey(workerId)) {
        mWorkerIdToPendingCommands.put(workerId, Lists.<JobCommand>newArrayList());
      }
      mWorkerIdToPendingCommands.get(workerId).add(command.build());
    }
docs: Submits a run-task command to a specified worker.
  
  @param jobId the id of the job
  @param taskId the id of the task
  @param jobConfig the job configuration
  @param taskArgs the arguments passed to the executor on the worker
  @param workerId the id of the worker