/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
[
  {
      "namespace": "org.apache.reef.reef.bridge.client.avro",
      "type": "record",
      "name": "AvroJobSubmissionParameters",
      "doc": "General cross-language job submission parameters shared by all runtimes",
      "fields": [
        { "name": "jobId", "type": "string" },
        { "name": "jobSubmissionFolder", "type": "string" }
      ]
  },
  {
      "namespace": "org.apache.reef.reef.bridge.client.avro",
      "type": "record",
      "name": "AvroLocalJobSubmissionParameters",
      "doc": "Job submission parameters used by the local runtime",
      "fields": [
        { "name": "sharedJobSubmissionParameters", "type": "AvroJobSubmissionParameters" },
        { "name": "driverStdoutFilePath", "type": "string" },
        { "name": "driverStderrFilePath", "type": "string" }
      ]
  },
  {
      "namespace": "org.apache.reef.reef.bridge.client.avro",
      "type": "record",
      "name": "AvroYarnJobSubmissionParameters",
      "doc": "General cross-language submission parameters to the YARN runtime",
      "fields": [
        { "name": "sharedJobSubmissionParameters", "type": "AvroJobSubmissionParameters" },
        { "name": "dfsJobSubmissionFolder", "type": "string", "default": "NULL" },
        { "name": "fileSystemUrl", "type": "string", "default": "NULL" },
        { "name": "jobSubmissionDirectoryPrefix", "type": "string" }
      ]
  },
  {
      "namespace": "org.apache.reef.reef.bridge.client.avro",
      "type": "record",
      "name": "AvroYarnClusterJobSubmissionParameters",
      "doc": "Cross-language submission parameters to the YARN runtime using Hadoop's submission client",
      "fields": [
        { "name": "yarnJobSubmissionParameters", "type": "AvroYarnJobSubmissionParameters" },
        { "name": "securityTokenKind", "type": "string", "default": "NULL" },
        { "name": "securityTokenService", "type": "string", "default": "NULL" },
        { "name": "driverMemory", "type": "int" },
        { "name": "maxApplicationSubmissions", "type": "int" },
        { "name": "driverStdoutFilePath", "type": "string" },
        { "name": "driverStderrFilePath", "type": "string" }
      ]
  }
]
