User Tools

Site Tools


dcomp:fcp:rest:reqschema

Форматы обмена сообщениями и запросов к грид-сервисам: общее описание, JSON Schema и примеры

Сервис выполнения многошаговых заданий реализован в виде RESTful грид-сервиса, поэтому взаимодействие с другими компонентами грид-сети происходит в режиме “запрос-ответ”. Далее следует описание запросов к серверу pilot-httpd. Все запросы, отправляемые на сервер, имеющие не пустое тело, должны содержать заголовок Content-MD5. Все ответы сервера, имеющие не пустое тело, всегда содержат заголовок Content-MD5. Все URL запросов из описания ниже используют префикс pilot/ для обозначения адреса реального сервера pilot-httpd. Формальное описание дается на языке JSON Schema.

Создание нового задания

Для создания новых заданий используется запрос POST к pilot/jobs/, запрос является объектом, имеющим следующие атрибуты:

  • definition, объект - описание задания, и, возможно, задач, согласно спецификации описания заданий, задач и ресурсных требований.

Ответ на запрос соответствует ответу на запрос списка заданий. Возможные коды HTTP ответа: 201, 400, 401, 412.

Формальное описание (JSON Schema)

{ "description": "Запрос на создание задания",
  "type": "object",
  "properties":
  { "definition": { "type": "string",
                    "description": "описание задания на языке описания заданий",
                    "format": "application/octet-stream"
                  }
  },
  "additionalProperties": false
}

Пример запроса:

{ "definition": "# Example job\n#\nJOB  A  A.jt\nJOB  B  B.jt\nJOB  C  C.jt\nPARENT A CHILD B\nPARENT B CHILD C\n"
}

Получение информации о задании

Для получения информации о состоянии задания используется запрос GET к pilot/jobs/<jobid>/, где <jobid> — идентификатор задания.

Ответ на запрос является объектом, имеющим следующие атрибуты:

  • created, modified, строка - дата/время создания задания и дата/время последнего изменения задания или его состояния.
  • expires, строка - дата/время автоматического удаления задания с сервера.
  • server_time, строка - дата/время на сервере на момент генерации данного ответа сервера.
  • server_policy_url, строка - URL документа, описывающего политику сервера, применяемую к данному заданию. Политика сервера описывает используемые сервером умолчания, и ограничения.
  • owner, строка - DN владельца задания
  • state, список объектов - история изменений состояния задания. Каждый объект имеет атрибуты:
    • s, строка - состояние задания; возможные значения:
      • new: только что созданное задание;
      • pending: задание ожидает начала выполнения;
      • running: задание выполняется;
      • paused: выполнение задания приостановлено;
      • finished: выполнение задания завершено;
      • aborted: выполнение задания отменено.
  • ts, строка - дата/время, когда наступило соответствующее состояние.

Объект состояния может так же иметь другие атрибуты, не определенные в данном списке.

Текущее состояние задания соответствует элементу с наиболее свежей датой/временем. Порядок, в котором объекты присутствуют в списке, может быть произвольным.

  • operation, список объектов - текущие операции и история выполнения операций над заданием; каждый объект имеет атрибуты:
    • op, строка -операция; возможные значения:
      • start: запуск задания на выполнение;
      • pause: приостановка выполнения задания;
      • abort: отмена выполнения задания.
    • id, строка - уникальный в рамках одного задания идентификатор операции.
    • created, строка - дата и время помещения данной операции в очередь.
    • completed, строка - дата и время завершения данной операции.
    • success, boolean - было ли завершение операции успешным.
    • result, объект - расширенный результат завершения операции, произвольный объект.

Объект операция может так же иметь другие атрибуты, не определенные в данном списке.

Операции обрабатываются системой в хронологическом порядке. Порядок, в котором объекты присутствуют в списке, может быть произвольным.

  • definition, объект - описание задания, без описания задач, согласно спецификации описания заданий, задач и ресурсных требований.
  • tasks, объект - URI задач задания; атрибуты объекта соответствуют идентификаторам задач из описания задания, значения этих атрибутов — URI соответствующих задач (возможно, относительные).

Возможные коды HTTP ответа: 201, 400, 401, 412.

Формальное описание (JSON Schema):

{ "description": "Задание",
  "type": "object",
  "properties":
  { "created": { "type": "string", "format": "date-time" },
    "modified": { "type": "string", "format": "date-time", "optional": true },
    "expires": { "type": "string", "format": "date-time",
                 "description": "Дата, когда данная задача будет удалена с сервера." },
    "server_time": { "type": "string", "format": "date-time",
                     "description": "Текущие дата и время на сервере" },
    "server_policy_uri": { "type": "string", "format": "uri",
                           "description": "URI ресурса с описанием политики работы сервера" },
    "owner": { "type": "string",
               "description": "DN пользователя, создавшего задание",
               "maxLength": 256 },
    "state": { "type": "array",
               "description": "Состояние задания, со всей историей его изменений",
               "items": { "type": "object",
                          "description": "Запись о состоянии задания.",
                          "properties":
                          { "s": { "type": "string",
                                   "description": "состояние",
                                   "enum": [ "new", "pending", "running", "paused", "finished", "aborted"] },
                            "ts": { "type": "string",
                                    "format": "date-time",
                                    "description": "время, когда наступило данное состояние" }
                          },
                          "additionalProperties": true
                        }
             },
    "operation": { "type": "array",
                   "description": "операции, которые должны быть выполнены с данным заданием",
                   "items": { "type": "object",
                              "description": "Операция с заданием",
                              "properties":
                              { "op": { "type": "string",
                                        "description": "операция",
                                        "enum": [ "start", "pause", "abort" ] },
                                "id": { "type": "string",
                                        "description": "id операции",
                                        "maxLength": 36 },
                                "created": { "type": "string",
                                             "format": "date-time",
                                             "description": "время, когда была запрошена данная операция" },
                                "completed": { "type": "string",
                                               "format": "date-time",
                                               "description": "время, когда была вполнена данная операция",
                                               "optional": true,
                                               "requires": "success" },
                                "success": { "type": "boolean",
                                             "description": "было ли выполнение операции успешным",
                                             "optional": true,
                                             "requires": "completed" },
                                "result": { "type": "object",
                                            "description": "результат завершения операции",
                                            "optional": true,
                                            "requires": "completed" }

                              },
                              "additionalProperties": true
                            }
                 },
    "definition": { "type": "string",
                    "description": "описание задания на языке описания заданий",
                    "format": "application/octet-stream"
                  },
    "tasks": { "type": "array",
               "description": "список URI задач задания",
               "items": { "type": "string",
                          "format": "uri" }
             }
  },
  "additionalProperties": false

Пример ответа с информацией о задании:

{ "created": "2009-07-03T10:27:00Z",
  "modified": "2009-07-03T10:27:14Z",
  "expires": "2009-07-04T10:28:30Z",
  "server_time": "2009-07-03T10:28:30Z",
  "server_policy_uri": "https://pilot.grid-net.ru/policy/job/",
  "definition": { "version": 2,
                  "description": "тестовое задание",
                  "default_storage_base": "gsiftp://tb01.grid-net.ru/home/shamardin/jt/",
                  "tasks": [ { "id": "a",
                               "description": "задача #1",
                               "definition": { "version": 2,
                                               "executable": "/usr/bin/whoami",
                                               "stdout": "test.txt"
                                             }
                             }
                           ]
                }
  "state": [ { "s": "new",
               "ts": "2009-07-03T10:27:00Z" },
             { "s": "pending",
               "ts": "2009-07-03T10:27:14Z" },
             { "s": "running",
               "ts": "2009-07-03T10:27:22Z" } ],
  "owner": "/C=RU/O=NanoGrid/OU=users/OU=sinp.msu.ru/CN=Lev Shamardin",
  "operation": [ { "op": "start",
                   "id": "c9deca6c-3208-4146-848b-2b65b0943127",
                   "created": "2009-07-03T10:27:03Z",
                   "completed": "2009-07-03T10:27:14Z",
                   "success": true
                 } ],
  "tasks": {
      "a": "https://pilot.grid-net.ru/jobs/912832/a/"
  }
}

Изменение задания и выполнение операций над заданием

Для изменения задания, а так же для выполнения операций над заданием (например, запуск задания), используются запросы методом PUT по URI задания, который обычно имеет вид pilot/jobs/<jobid>/.

Запрос является объектом, имеющим следующие атрибуты:

  • definition, объект, опциональный параметр - новое описание задания и, возможно, задач, согласно спецификации описания заданий, задач и ресурсных требований. При наличии данного атрибута в запросе произойдет изменение описания задания и, возможно, задач задания. Изменение возможно только для заданий, находящихся в состоянии new. Попытка изменения описания задания, находящегося в другом состоянии вызовет ошибку 403. Все задачи, отсутствующие в новом описании задания, будут сразу же удалены с сервера. Задачи, описания которых отсутствуют в новом описании задания, изменены не будут.
  • operation, объект, опциональный параметр - при наличии этого параметра будет создана новая операция над заданием, если ее не существовало ранее; объект имеет следующие атрибуты:
    • op, строка - выполняемая операция. Возможные значения:
      • start: запустить задание на выполнение;
      • pause: приостановить выполнение задания;
      • abort: отменить выполнение задания.
    • id, строка - уникальный в рамках одного задания идентификатор операции. Генерация уникального id является ответственностью клиента, в качестве id рекомендуется использовать, например, uuid4.

Возможные коды HTTP ответа: 204, 401, 404.

Формальное описание JSON Schema:

{ "description": "Запрос на модификацию параметров задания",
  "type": "object",
  "properties":
  { "operation": { "type": "object",
                   "description": "Операция с заданием",
                   "properties":
                   { "op": { "type": "string",
                             "description": "операция",
                             "enum": [ "start", "pause", "abort" ] },
                     "id": { "type": "string",
                             "description": "id операции",
                             "maxLength": 36 }
                   },
                   "additionalProperties": true,
                   "optional": true
                 },
    "definition": { "type": "string",
                    "description": "описание задания на языке описания заданий",
                    "format": "application/octet-stream",
                    "optional": true
                  }
  }
}

Пример запроса на запуск задания:

{ "operation": { "op": "start",
                 "id": "c9deca6c-3208-4146-848b-2b65b0943127" } }

Получение списка заданий

Для получения списка заданий пользователя (в любом состоянии) используется запрос методом GET к pilot/jobs/. Ответом сервера является список объектов, каждый из которых имеет следующие атрибуты:

  • uri, строка - URI задания.

Возможные коды HTTP ответа: 200, 401.

Формальное описание JSON Schema:

{ "description": "Список заданий, к которым есть доступ у пользователя",
  "type": "array",
  "items":
  { "type": "object",
    "properties":
    { "uri":
      { "type": "string",
        "description": "URI задания",
        "format": "uri"
      }
    },
    "additionalProperties": false
  }
}

Пример ответа на запрос получения списка заданий:

[ { "uri": "https://pilot.grid-net.ru/jobs/199231/" },
  { "uri": "https://pilot.grid-net.ru/jobs/912832/" } ]
dcomp/fcp/rest/reqschema.txt · Last modified: 26/01/2017 12:07 by admin