9. Спецификация ПОДД-адаптера - Модуль подписок
9.1. Уведомление о новых данных по подписке
Данная спецификация описывает возможность получения уведомления о новых данных по подписке.
9.1.1. delta.notification
delta.notification - Топик нотификаций ядра о наличии новых дельт.
Структура сообщения
deltaNotificationMessage:
description: Ответ с ошибкой получения дельты
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
bindings:
kafka:
key:
type: string
format: uuid
description: Уникальный идентификатор подзапроса
headers:
type: object
properties:
AGENT_CONSUMER_ID:
description: Идентификатор агента потребителя
type: string
payload:
$ref: '#/components/schemas/deltaNotification'
examples:
- name: simple
headers:
AGENT_CONSUMER_ID: agent-oktmo
payload:
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
subRequestId:
string: 00000000-0000-0000-0000-000000000000
datamartMnemonic:
string: dm
synId:
int: 1
subscriptions:
- subscriptionId: dcf43fc7-e152-459b-8af5-48d91d4b6a21
fromId: 100
deltaKeySize: 1024
snapshotKeySize: 1024
Avro-схема сообщения
deltaNotification:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: DeltaNotificationEvent
namespace: ru.rtlabs.common.replication.delta
fields:
- name: requestId
description: Уникальный идентификатор запроса
type:
type: string
logicalType: uuid
- name: subRequestId
description: Уникальный идентификатор подзапроса
default: null
type:
- 'null'
- type: string
logicalType: uuid
- name: datamartMnemonic
description: Мнемоника витрины-источника, в которой обновились данные
default: null
type:
- 'null'
- string
- name: synId
description: ДЛЯ РАСПРЕДПОДПИСОК. Id новой дельты
default: null
type:
- 'null'
- int
- name: subscriptions
description: Список всех подписок, для которых есть новые данные
type:
type: array
items:
type: record
name: DeltaNotificationSubscription
fields:
- name: subscriptionId
description: Идентификатор подписки, для которой есть новые данные
type:
type: string
logicalType: uuid
- name: fromId
description: \use in replicator version 1.1\ Id новой дельты
default: null
type:
- 'null'
- int
- name: deltaKeySize
description: размер ключей дельты в байтах
default: 0
type: long
- name: snapshotKeySize
description: Размер ключей снапшота в байтах
default: 0
type: long
9.2. Запрос первоначальной выгрузки
Данная спецификация описывает возможность запроса дельты изменений по подписке, получения успешного ответа на запрос или ошибки, в случае невозможности выполнения запроса, с описанием причины ошибки.
9.2.1. delta.rq
delta.rq - Топик запросов на получение дельты у поставщика.
Структура сообщения
deltaRequestMessage:
description: Запрос из ПОДД на получение дельты у поставщика
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
bindings:
kafka:
key:
type: string
format: uuid
description: Уникальный идентификатор подзапроса
headers:
type: object
properties:
AGENT_CONSUMER_ID:
description: Идентификатор агента потребителя
type: string
payload:
$ref: '#/components/schemas/deltaRequest'
examples:
- name: snapshot
headers:
AGENT_CONSUMER_ID: agent-oktmo
payload:
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
subRequestId:
string: 00000000-0000-0000-0000-000000000000
subscriptionId: dcf43fc7-e152-459b-8af5-48d91d4b6a21
fromId: null
- name: delta
headers:
AGENT_CONSUMER_ID: agent-oktmo
payload:
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
subRequestId:
string: 00000000-0000-0000-0000-000000000000
subscriptionId: dcf43fc7-e152-459b-8af5-48d91d4b6a21
fromId:
int: 100
Avro-схема сообщения
deltaRequest:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: DeltaRequest
namespace: ru.rtlabs.common.replication.delta
fields:
- name: requestId
description: Уникальный идентификатор операции, все запрос-ответы в рамках одной операции
type:
type: string
logicalType: uuid
- name: subRequestId
description: Идентификатор подзапроса, идентифицирует одно взаимодействие типа запрос-ответ
default: null
type:
- 'null'
- type: string
logicalType: uuid
- name: subscriptionId
description: Уникальный идентификатор подписки
type:
type: string
logicalType: uuid
- name: fromId
description: Идентификатор запрашиваемой дельты.
default: null
type:
- int
- 'null'
9.2.2. delta.rs
delta.rs - Топик чанков данных дельт репликации от поставщика.
Структура сообщения
deltaResultChunkMessage:
description: Чанк с данными дельты репликации
contentType: 'application/octet-stream'
bindings:
kafka:
key:
$ref: '#/components/schemas/deltaResultChunkKey'
headers:
type: object
properties:
AGENT_CONSUMER_ID:
description: Идентификатор агента потребителя
type: string
payload:
description: Бинарные данные чанка
examples:
- name: base64
headers:
AGENT_CONSUMER_ID: agent_fias
payload:
value: JEEJNodyLO7p1pgsRHG9pEiXeYGvHW4YCl4FgrgBmu5C92iVX1PV2GZdcqsb66bx8sk=
Avro-схема сообщения
deltaResultChunkKey:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: DeltaResultChunk
namespace: ru.rtlabs.common.replication.delta
fields:
- name: requestId
description: Уникальный идентификатор запроса
type:
type: string
logicalType: uuid
- name: subscriptionId
description: Уникальный идентификатор подписки
type:
type: string
logicalType: uuid
- name: sql
description: sql, для которого возвращается дельта
type: string
- name: synId
description: Идентификатор синхронизации витрины
type: int
- name: minSynId
description: Номер первой передаваемой в этом пакете дельты
type: int
- name: maxSynId
description: Номер последней передаваемой в этом пакете дельты
type: int
- name: synTime
description: Время дельты
type: long
- name: streamNumber
description: Номер стрима дланных
type:
- int
- 'null'
- name: streamTotal
description: Общее количество стримов
type:
- int
- 'null'
- name: chunkNumber
description: Номер порции по порядку
type: int
- name: isLastChunk
description: Признак последнего сообщения
type: boolean
- name: replicaHash
description: Чек-сумма реплики после применения дельты с данным
type:
- string
- 'null'
examples:
- requestId: 74e43a84-c6c6-4e25-bac4-9d39c59b3da5
subscriptionId: a1ba39be-962b-4ac0-b3f3-893151883e59
sql: 'select * from v1_addrobj'
synId: 10
minSynId: 10
maxSynId: 10
synTime: 1000
streamNumber:
int: 1
streamTotal:
int: 1
chunkNumber: 1
isLastChunk: true
replicaHash:
string: '123456789'
- requestId: 74e43a84-c6c6-4e25-bac4-9d39c59b3da5
subscriptionId: a1ba39be-962b-4ac0-b3f3-893151883e59
sql: 'select * from v1_addrobj'
synId: 10
minSynId: 10
maxSynId: 10
synTime: 1000
streamNumber:
int: 1
streamTotal:
int: 1
chunkNumber: 1
isLastChunk: false
replicaHash: null
9.2.3. delta.err
delta.err - Топик c ошибками получения дельт у поставщика.
Структура сообщения
deltaErrorMessage:
description: Ответ с ошибкой получения дельты у поставщика
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
bindings:
kafka:
key:
type: string
format: uuid
description: Уникальный идентификатор подзапроса
headers:
type: object
properties:
AGENT_CONSUMER_ID:
description: Идентификатор агента потребителя
type: string
payload:
$ref: '#/components/schemas/deltaError'
examples:
- name: simple
headers:
AGENT_CONSUMER_ID: agent-oktmo
payload:
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
subRequestId:
string: 00000000-0000-0000-0000-000000000000
subscriptionId: dcf43fc7-e152-459b-8af5-48d91d4b6a21
errorCode: DATAMART-001
message: Непредвиденная ошибка
Avro-схема сообщения
deltaError:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: DeltaError
namespace: ru.rtlabs.common.replication.delta
fields:
- name: requestId
description: Уникальный идентификатор запроса
type:
type: string
logicalType: uuid
- name: subRequestId
description: Уникальный идентификатор подзапроса
default: null
type:
- 'null'
- type: string
logicalType: uuid
- name: subscriptionId
description: Уникальный идентификатор подписки
type:
type: string
logicalType: uuid
- name: errorCode
description: Код ошибки выполнения
type: string
- name: message
description: Сообщение об ошибке
type: string
9.3. Создание структур для репликации/подписки на уведомления
Данная спецификация описывает возможность запроса на создание таблиц для хранения данных подписки на репликацию в Витрину данных потребителя, получения успешного ответа на запрос или ошибки, в случае невозможности выполнения запроса, с описанием причины ошибки.
9.3.1. replication.in.rq
replication.in - Топик запросов к витрине потребителя на формирование хранилищ реплик.
Структура сообщения
createReplicationStorageRequestMessage:
description: Запрос к витрине потребителя на формирование хранилища реплик
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
bindings:
kafka:
key:
type: string
format: uuid
description: Уникальный идентификатор подзапроса
headers:
type: object
properties:
AGENT_CONSUMER_ID:
description: Идентификатор агента потребителя
type: string
payload:
$ref: '#/components/schemas/createReplicationStorageRequest'
examples:
- name: replication
headers:
AGENT_CONSUMER_ID: agent-oktmo
payload:
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
subRequestId:
string: 00000000-0000-0000-0000-000000000000
subscriptionId: dcf43fc7-e152-459b-8af5-48d91d4b6a21
datamartMnemonic: oktmo
lastSynId: 10
table:
tableId:
string: 00000000-0000-0000-0000-000000000000
tableName:
string: tab
sql:
string: select * from v1_addrobj
fields:
- name: oktmo
type: VARCHAR
length: null
precision: null
scale: null
primaryKey: null
shardingKey: null
Avro-схема сообщения
createReplicationStorageRequest:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: CreateReplicationStorageRequest
namespace: ru.rtlabs.common.replication.storage
fields:
- name: requestId
description: Уникальный идентификатор запроса регистрации
type:
type: string
logicalType: uuid
- name: subRequestId
description: Идентификатор подзапроса, идентифицирует одно взаимодействие типа запрос-ответ
default: null
type:
- 'null'
- type: string
logicalType: uuid
- name: subscriptionId
description: Уникальный идентификатор подписки
type:
type: string
logicalType: uuid
- name: datamartMnemonic
description: Наименование целевого датамарта, приходит в ПОДД в момент регистрации подписки через ЕИП
type: string
- name: lastSynId
description: Последний id синхронизации в витрине
type: int
default: 0
- tables:
description: Структура таблиц хранения реплик
default: []
type:
type: array
items:
type: record
name: ReplicationTableInfo
namespace: ru.rtlabs.common.replication.storage
fields:
- name: tableId
description: Идентификатор таблицы
default: null
type:
- 'null'
- type: string
logicalType: uuid
- name: tableName
description: Наименование таблицы
type:
- 'null'
- type: string
- name: sql
description: sql, для которого должна быть создана таблица
default: null
type:
- 'null'
- type: string
- name: fields
description: Поля таблицы
type:
type: array
items:
type: record
name: ReplicationFieldInfo
namespace: ru.rtlabs.common.replication.storage
description: Описание поля таблицы
fields:
- name: name
description: Имя поля
type: string
- name: type
description: Тип поля
type: string
- name: length
description: Максимальная длина строки, если пусто, то нет ограничений
type:
- int
- 'null'
- name: precision
description: Количество значимых цифр у decimal и numeric. Т.е. количество в целой части + количество в дробной части. Если пусто, то без размера
type:
- int
- 'null'
- name: scale
description: \use only PODD\ Масштаб decimal и numeric. Т.е. количество значимых цифр в дробной части. Если пусто, то нет дробной части
default: null
type:
- 'null'
- int
- name: primaryKey
description: Порядковый номер поля (начиная с 0) в составе первичного ключа. null - если не входит в состав первичного ключа
type:
- int
- 'null'
- name: shardingKey
description: Порядковый номер поля (начиная с 0) в составе ключа шардирования. null - если не входит в состав ключа шардирования
type:
- int
- 'null'
9.3.2. replication.in.rs
replication.in.rs - Топик ответов с успешными результатами обработки запроса на формирование структуры хранения реплик.
Структура сообщения
createReplicationStorageResultMessage:
description: Ответ с успешным результатом обработки запроса на формирование структуры хранения реплик
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
bindings:
kafka:
key:
type: string
format: uuid
description: Уникальный идентификатор подзапроса
headers:
type: object
properties:
AGENT_CONSUMER_ID:
description: Идентификатор агента потребителя
type: string
payload:
$ref: '#/components/schemas/createReplicationStorageResult'
examples:
- name: replication
headers:
AGENT_CONSUMER_ID: agent-oktmo
payload:
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
subRequestId:
string: 00000000-0000-0000-0000-000000000000
subscriptionId: dcf43fc7-e152-459b-8af5-48d91d4b6a21
Avro-схема сообщения
createReplicationStorageResult:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: CreateReplicationStorageResult
namespace: ru.rtlabs.common.replication.storage
fields:
- name: requestId
description: Уникальный идентификатор операции
type:
type: string
logicalType: uuid
- name: subRequestId
description: Идентификатор подзапроса, идентифицирует одно взаимодействие типа запрос-ответ
default: null
type:
- 'null'
- type: string
logicalType: uuid
- name: subscriptionId
description: Уникальный идентификатор подписки
type:
type: string
logicalType: uuid
9.3.3. replication.in.err
replication.in.err - Топик c ошибками обработки запросов на формирование структуры хранения реплик.
Структура сообщения
createReplicationStorageErrorMessage:
description: Ответ с ошибкой обработки запроса на формирование структуры хранения реплик
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
bindings:
kafka:
key:
type: string
format: uuid
description: Уникальный идентификатор подзапроса
headers:
type: object
properties:
AGENT_CONSUMER_ID:
description: Идентификатор агента потребителя
type: string
payload:
$ref: '#/components/schemas/createReplicationStorageError'
examples:
- name: simple
headers:
AGENT_CONSUMER_ID: agent-oktmo
payload:
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
subRequestId:
string: 00000000-0000-0000-0000-000000000000
subscriptionId: dcf43fc7-e152-459b-8af5-48d91d4b6a21
errorCode: DATAMART-001
message: Непредвиденная ошибка создания структуры хранения реплик
Avro-схема сообщения
createReplicationStorageError:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: CreateReplicationStorageError
namespace: ru.rtlabs.common.replication.storage
fields:
- name: requestId
description: Уникальный идентификатор операции
type:
type: string
logicalType: uuid
- name: subRequestId
description: Уникальный идентификатор идентифицирует одно взаимодействие типа запрос-ответ
default: null
type:
- 'null'
- type: string
logicalType: uuid
- name: subscriptionId
description: Уникальный идентификатор подписки
type:
type: string
logicalType: uuid
- name: errorCode
description: Код ошибки выполнения
type: string
- name: message
description: Сообщение об ошибке
type: string
9.4. Управление структурой таблиц витрины
Данная спецификация описывает возможность запроса метаданных в Витрину, получения успешного ответа на запрос или ошибки, в случае невозможности выполнения запроса, с описанием причины ошибки.
Запрос структуры таблиц
9.4.1. metadata.rq
Передача Агентом ПОДД запроса метаданных в Витрину.
Формат сообщения
Header |
Не используется |
Key |
текст, содержит requestId, не используется. |
Value |
Сериализация: в json (см. схему ниже.) |
Схема
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"requestId": {
"type": "string"
},
"datamartMnemonic": {
"type": "string"
}
},
"required": [
"requestId",
"datamartMnemonic"
]
}
, где:
requestId - UUID запроса;
datamartMnemonic - мнемоника Витрины данных, к которой адресован запрос.
9.4.2. metadata.rs
Передача Агенту ПОДД ответа на запрос метаданных витрины из Витрины.
Формат сообщения
Header |
Не используется |
Key |
текст, содержит requestId |
Value |
Сериализация: в json (см. схему ниже.) |
Схема
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"requestId": {
"type": "string"
},
"metadata": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"datamart": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"mnemonic": {
"type": "string"
},
"datamartClassess": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"mnemonic": {
"type": "string"
},
"label": {
"type": "string"
},
"classAttributes": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"mnemonic": {
"type": "string"
},
"type": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"id",
"value"
]
}
},
"required": [
"id",
"mnemonic",
"type"
]
}
]
},
"primaryKey": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"mnemonic": {
"type": "string"
},
"type": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"id",
"value"
]
}
},
"required": [
"id",
"mnemonic",
"type"
]
}
]
}
},
"required": [
"id",
"mnemonic",
"label",
"classAttributes",
"primaryKey"
]
}
]
}
},
"required": [
"id",
"mnemonic",
"datamartClassess"
]
}
},
"required": [
"datamart"
]
}
]
}
},
"required": [
"requestId",
"metadata"
]
}
, где:
requestId- UUID запроса;metadata– описание структуры данных;datamart– описание витрины;id– UUID витрины (не используется);mnemonic– имя витрины;datamartClassess– список таблиц витрины;id– UUID таблицы (не используется);mnemonic– имя таблицы;label– не используется;classAttributes– список полей таблицы;id– UUID поля (не используется);mnemonic– имя поля;type– тип данных поля;id– UUID типа данных (не используется);value– название типа данных;primaryKey– список полей, составляющих PK таблицы;id– UUID поля (не используется);mnemonic– имя поля;type– тип данных поля;id– UUID типа данных (не используется);value– название типа данных.
9.4.3. metadata.err
Получение Агентом ПОДД ошибки при обработке запроса метаданных от Витрины.
Формат сообщения
Header |
Не используется |
Key |
текст, содержит requestId |
Value |
Сериализация: в json (см. схему ниже.) |
Схема
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"requestId": {
"type": "string"
},
"errorCode": {
"type": "string"
},
"msg": {
"type": "string"
}
},
"required": [
"requestId",
"errorCode",
"msg"
]
}
, где:
requestId- UUID запроса;errorCode– содержит константуINTERNAL;msg– описание ошибки.
Создание структуры таблиц
9.4.4. metadata.newdata.rq
Запрос создание структуры витрины по запросу
Передача Агентом ПОДД запроса на создание таблиц в Витрину.
Формат сообщения
Header |
Не используется |
Key |
текст, содержит requestId, не используется. |
Value |
Сериализация: в Avro (см. схему ниже.) |
Схема
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"requestId": {
"type": "string"
},
"metadata": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"datamart": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"mnemonic": {
"type": "string"
},
"datamartClassess": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"mnemonic": {
"type": "string"
},
"label": {
"type": "string"
},
"classAttributes": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"mnemonic": {
"type": "string"
},
"type": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"id",
"value"
]
}
},
"required": [
"id",
"mnemonic",
"type"
]
}
]
},
"primaryKey": {
"type": "array",
"items": [
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"mnemonic": {
"type": "string"
},
"type": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"id",
"value"
]
}
},
"required": [
"id",
"mnemonic",
"type"
]
}
]
}
},
"required": [
"id",
"mnemonic",
"label",
"classAttributes",
"primaryKey"
]
}
]
}
},
"required": [
"id",
"mnemonic",
"datamartClassess"
]
}
},
"required": [
"datamart"
]
}
]
}
},
"required": [
"requestId",
"metadata"
]
}
, где:
requestId- UUID запроса;metadata– описание структуры данных; -datamart– описание витрины;id– UUID витрины (не используется);mnemonic– имя витрины;datamartClassess– список таблиц витрины:id– UUID таблицы (не используется);mnemonic– имя таблицы;label– не используется;classAttributes– список полей таблицы;id– UUID поля (не используется);mnemonic– имя поля;type– тип данных поля; -id ``– UUID типа данных (не используется); - ``value– название типа данных;
primaryKey– список полей, составляющих PK таблицы;id– UUID поля (не используется);mnemonic– имя поля;type– тип данных поля;id– UUID типа данных (не используется);value– название типа данных.
9.4.5. metadata.newdata.rs
Передача Агенту ПОДД ответа на запрос создания структуры таблиц в витрине из Витрины.
Формат сообщения
Header |
Не используется |
Key |
текст, содержит requestId |
Value |
Сериализация: в json (см. схему ниже.) |
Схема
см. metadata.err.
, но:
errorCode– содержит константу «SUCCESS»;msg– содержитnull.
9.4.6. metadata.newdata.err
Передача Агенту ПОДД ошибки при обработке запроса на создания структуры таблиц в витрине из Витрины.
Формат сообщения
Header |
Не используется |
Key |
текст, содержит requestId |
Value |
Сериализация: в json (см. metadata.err) |
9.5. Запрос на регистрацию репликации
Данная спецификация описывает возможность запроса подписки на репликацию в Витрину - источник данных, получения успешного ответа на создание структуры данных по подписке или ошибки, в случае невозможности выполнения запроса, с описанием причины ошибки.
9.5.1. replication.rq
replication.rq - Топик запросов регистрации подписки репликации у поставщика
Структура сообщения
subscriptionRegistrationRequestMessage:
description: Запрос регистрации подписки репликации у поставщика
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
bindings:
kafka:
key:
type: string
format: uuid
description: Уникальный идентификатор подзапроса
headers:
type: object
properties:
AGENT_CONSUMER_ID:
description: Идентификатор агента потребителя
type: string
payload:
$ref: '#/components/schemas/subscriptionRegistrationRequest'
examples:
- name: simple
headers:
AGENT_CONSUMER_ID: agent-fias
payload:
requestId: 00000000-0000-0000-0000-000000000000
subRequestId:
string: 00000000-0000-0000-0000-000000000000
subscriptionId: 00000000-0000-0000-0000-000000000000
datamartMnemonic: fias
sql:
string: select * from v1_addrobj
queries:
- id: 00000000-0000-0000-0000-000000000000
sql: select 1
type: DATA
isReplication:
boolean: true
- name: multiple
headers:
AGENT_CONSUMER_ID: agent-fias
payload:
requestId: 00000000-0000-0000-0000-000000000000
subRequestId:
string: 00000000-0000-0000-0000-000000000000
subscriptionId: 00000000-0000-0000-0000-000000000000
datamartMnemonic: fias
sql:
string: select * from v1_addrobj; select * from v1_house
isReplication:
boolean: true
Avro-схема сообщения
subscriptionRegistrationRequest:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: SubscriptionRegistrationRequest
namespace: ru.rtlabs.common.replication.subscription
fields:
- name: requestId
description: Уникальный идентификатор запроса регистрации
type:
type: string
logicalType: uuid
- name: subRequestId
description: Уникальный идентификатор подзапроса, идентифицирует одно взаимодействие типа запрос-ответ
default: null
type:
- 'null'
- type: string
logicalType: uuid
- name: subscriptionId
description: Уникальный идентификатор подписки
type:
type: string
logicalType: uuid
- name: datamartMnemonic
description: Мнемоника витрины, к которой выполняется запрос
type: string
- name: sql
description: sql запрос текущей подписки для старых витрин тут может приходить массив.
default: null
type:
- 'null'
- string
- name: isReplication
description: \version 1.1\ Признак типа подписки true - подписка на репликацию, false - подписка на уведомления
default: null
type:
- 'null'
- boolean
9.5.2. replication.rs
replication.rs - Топик с ответами на регистрацию подписки у поставщика
Позитивный ответ на запрос подписки на репликацию передается только в случае, если Витрина успешного обработала все выражения из параметра sql запроса. Один запрос - один ответ. Один ответ - одно сообщение.
Структура сообщения
subscriptionRegistrationResultMessage:
description: Успешный ответ с результатом регистрации подписки у поставщика. Содержит сведения о структуре таблиц, необходимой для хранения реплик
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
bindings:
kafka:
key:
type: string
format: uuid
description: Уникальный идентификатор подзапроса
headers:
type: object
properties:
AGENT_CONSUMER_ID:
description: Идентификатор агента потребителя
type: string
payload:
$ref: '#/components/schemas/subscriptionRegistrationResult'
examples:
- name: simple
headers:
AGENT_CONSUMER_ID: agent-fias
payload:
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
subRequestId:
string: 00000000-0000-0000-0000-000000000000
subscriptionId: dcf43fc7-e152-459b-8af5-48d91d4b6a21
datamartMnemonic: fias
lastSynId: 10
snapshotKeySize: 1024
deltaUuid: 79a928f5-eab5-49ea-a947-2c99fbf39b6e
tables:
- tableId: 90722850-b1c7-42eb-836c-b2f88849e22c
tableName:
string: tab
sql: select * from v1_addrobj
fields:
- name: oktmo
type: VARCHAR
length: null
precision: null
scale: null
primaryKey: null
shardingKey: null
tables:
ru.rtlabs.common.replication.storage.ReplicationTableInfo:
tableId:
string: 00000000-0000-0000-0000-000000000000
tableName:
string: tab
sql:
string: select * from v1_addrobj
fields:
- name: oktmo
type: VARCHAR
length: null
precision: null
primaryKey: null
scale: null
shardingKey: null
Avro-схема сообщения
subscriptionRegistrationResult:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: SubscriptionRegistrationResult
namespace: ru.rtlabs.common.replication.subscription
fields:
- name: requestId
description: Уникальный идентификатор запроса
type:
type: string
logicalType: uuid
- name: subRequestId
description: Уникальный идентификатор подзапроса,
default: null
type:
- 'null'
- type: string
logicalType: uuid
- name: subscriptionId
description: Уникальный идентификатор подписки
type:
type: string
logicalType: uuid
- name: datamartMnemonic
description: Мнемоника витрины-источника
type: string
- name: lastSynId
description: Последний id дельты примененной в витрине на момент подписки (если дельт нет, то придет -1)
type: int
- name: tables
description: Структура таблиц хранения реплик
default: []
type:
type: array
items:
type: record
name: ReplicationTableInfo
namespace: ru.rtlabs.common.replication.storage
fields:
- name: tableId
description: Идентификатор таблицы
default: null
type:
- 'null'
- type: string
logicalType: uuid
- name: tableName
description: Наименование таблицы
type:
- 'null'
- type: string
- name: sql
description: sql, для которого должна быть создана таблица
default: null
type:
- 'null'
- type: string
- name: fields
description: Поля таблицы
type:
type: array
items:
type: record
name: ReplicationFieldInfo
namespace: ru.rtlabs.common.replication.storage
description: Описание поля таблицы
fields:
- name: name
description: Имя поля
type: string
- name: type
description: Тип поля
type: string
- name: length
description: Максимальная длина строки, если пусто, то нет ограничений
type:
- int
- 'null'
- name: precision
description: Количество значимых цифр у decimal и numeric. Т.е. количество в целой части + количество в дробной части. Если пусто, то без размера
type:
- int
- 'null'
- name: scale
description: Масштаб decimal и numeric. Т.е. количество значимых цифр в дробной части. Если пусто, то нет дробной части
default: null
type:
- 'null'
- int
- name: primaryKey
description: Порядковый номер поля (начиная с 0) в составе первичного ключа. null - если не входит в состав первичного ключа
type:
- int
- 'null'
- name: shardingKey
description: Порядковый номер поля (начиная с 0) в составе ключа шардирования. null - если не входит в состав ключа шардирования
type:
- int
- 'null'
9.5.3. replication.err
replication.err - Топик c ошибками регистрации подписки у поставщика
Получение Агентом ПОДД ошибки при обработке подписки на репликацию от Витрины.
Негативный ответ на запрос подписки на репликацию - описание причины ошибки, передается только в случае невозможности выполнения запроса. Один запрос - один ответ (об ошибке). Один ответ - одно сообщение.
Структура сообщения
subscriptionRegistrationErrorMessage:
description: Неуспешный результат регистрации подписки у поставщика
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
bindings:
kafka:
key:
type: string
format: uuid
description: Уникальный идентификатор подзапроса
headers:
type: object
properties:
AGENT_CONSUMER_ID:
description: Идентификатор агента потребителя
type: string
payload:
$ref: '#/components/schemas/subscriptionRegistrationError'
examples:
- name: simple
headers:
AGENT_CONSUMER_ID: agent-fias
payload:
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
subRequestId:
string: 00000000-0000-0000-0000-000000000000
subscriptionId: dcf43fc7-e152-459b-8af5-48d91d4b6a21
errorCode: DATAMART-001
message: Непредвиденная ошибка
Avro-схема сообщения
subscriptionRegistrationError:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: SubscriptionRegistrationError
namespace: ru.rtlabs.common.replication.subscription
fields:
- name: requestId
description: Уникальный идентификатор запроса
type:
type: string
logicalType: uuid
- name: subRequestId
description: Уникальный идентификатор подзапроса
default: null
type:
- 'null'
- type: string
logicalType: uuid
- name: subscriptionId
description: Уникальный идентификатор подписки
type:
type: string
logicalType: uuid
- name: errorCode
description: Код ошибки выполнения
type: string
- name: message
description: Сообщение об ошибке
type: string
9.6. Запрос на отмену репликации
Данная спецификация описывает возможность запроса на отмену подписки на репликацию в Витрину - источник данных, получения успешного ответа на создание структуры данных по подписке или ошибки, в случае невозможности выполнения запроса, с описанием причины ошибки.
9.6.1. replication.cancel.rq
replication.cancel.rq - Топик запросов на отмену подписки у поставщика
Структура сообщения
subscriptionCancelRequestMessage:
description: Запрос на отмену подписки у поставщика
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
bindings:
kafka:
key:
type: string
format: uuid
description: Уникальный идентификатор подзапроса
headers:
type: object
properties:
AGENT_CONSUMER_ID:
description: Идентификатор агента потребителя
type: string
payload:
$ref: '#/components/schemas/subsriptionCancelRequest'
examples:
- name: simple
headers:
AGENT_CONSUMER_ID: agent-fias
payload:
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
subRequestId:
string: 00000000-0000-0000-0000-000000000000
subscriptionId: dcf43fc7-e152-459b-8af5-48d91d4b6a21
Avro-схема сообщения
subsriptionCancelRequest:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: SubscriptionAgentCancelRequest
namespace: ru.rtlabs.common.replication.subscription
fields:
- name: requestId
description: Уникальный идентификатор операции
type:
type: string
logicalType: uuid
- name: subRequestId
description: Идентификатор подзапроса, идентифицирует одно взаимодействие типа запрос-ответ
default: null
type:
- 'null'
- type: string
logicalType: uuid
- name: subscriptionId
description: Уникальный идентификатор подписки
type:
type: string
logicalType: uuid
9.6.2. replication.cancel.rs
replication.cancel.rs Топик с ответами на регистрацию подписки у поставщика.
Успешный ответ с результатом регистрации подписки у поставщика. Содержит сведения о структуре таблиц, необходимой для хранения реплик.
Структура сообщения
subscriptionCancelResultMessage:
description: Ответ с результатом отмены подписки у поставщика
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
bindings:
kafka:
key:
type: string
format: uuid
description: Уникальный идентификатор подзапроса
headers:
type: object
properties:
AGENT_CONSUMER_ID:
description: Идентификатор агента потребителя
type: string
payload:
$ref: '#/components/schemas/subscriptionCancelResult'
examples:
- name: success
headers:
AGENT_CONSUMER_ID: agent-fias
payload:
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
subRequestId:
string: 00000000-0000-0000-0000-000000000000
subscriptionId: dcf43fc7-e152-459b-8af5-48d91d4b6a21
success: true
message: Подписка успешно отменена
- name: error
headers:
AGENT_CONSUMER_ID: agent-fias
payload:
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
subRequestId:
string: 00000000-0000-0000-0000-000000000000
subscriptionId: dcf43fc7-e152-459b-8af5-48d91d4b6a21
success: false
message: Непредвиденная ошибка отмены подписки
Avro-схема сообщения
subscriptionCancelResult:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: SubscriptionAgentCancelResult
namespace: ru.rtlabs.common.replication.subscription
fields:
- name: requestId
description: Уникальный идентификатор операции
type:
type: string
logicalType: uuid
- name: subRequestId
description: Идентификатор подзапроса, идентифицирует одно взаимодействие типа запрос-ответ
default: null
type:
- 'null'
- type: string
logicalType: uuid
- name: subscriptionId
description: Уникальный идентификатор подписки
type:
type: string
logicalType: uuid
- name: success
description: Успешность выполнения отмены подписки
type: boolean
- name: message
description: Сообщения с результатом выполнения операции
default: null
type:
- 'null'
- string
9.7. Прием данных репликаций
Данная спецификация описывает возможность запроса на прием данных по дельте в Витрину потребителя данных, получения успешного ответа на передачу реплицируемых данных дельты или ошибки при обработке данных, в случае невозможности выполнения передачи данных, с описанием причины ошибки.
9.7.1. delta.in.rq
delta.in - Топик чанков дельт репликации на применение у поставщика.
Структура сообщения
deltaResultChunkMessage:
description: Чанк с данными дельты репликации
contentType: 'application/octet-stream'
bindings:
kafka:
key:
$ref: '#/components/schemas/deltaResultChunkKey'
headers:
type: object
properties:
AGENT_CONSUMER_ID:
description: Идентификатор агента потребителя
type: string
payload:
description: Бинарные данные чанка
examples:
- name: base64
headers:
AGENT_CONSUMER_ID: agent_fias
payload:
value: JEEJNodyLO7p1pgsRHG9pEiXeYGvHW4YCl4FgrgBmu5C92iVX1PV2GZdcqsb66bx8sk=
Avro-схема сообщения
deltaResultChunkKey:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: DeltaResultChunk
namespace: ru.rtlabs.common.replication.delta
fields:
- name: requestId
description: Уникальный идентификатор распределенного
type:
type: string
logicalType: uuid
- name: subRequestId
description: Уникальный идентификатор подзапроса
default: null
type:
- 'null'
- type: string
logicalType: uuid
- name: sourceDatamart
description: Наименование датамарта источника
default: null
type:
- 'null'
- string
- name: subscriptionId
description: Уникальный идентификатор подписки
type:
type: string
logicalType: uuid
- name: synId
description: Идентификатор синхронизации витрины
type: int
- name: sql
description:sql, для которого возвращается дельта
default: null
type:
- 'null'
- string
- name: minSynId
description: Номер первой передаваемой в этом пакете дельты
default: null
type:
- 'null'
- int
- name: maxSynId
description: Номер последней передаваемой в этом пакете дельты
default: null
type:
- 'null'
- int
- name: synTime
description:Время дельты
default: 0
type: long
- name: streamNumber
description: Номер стрима данных
type:
- int
- 'null'
- name: streamTotal
description: Общее количество стримов
default: 1
type:
- int
- 'null'
- name: chunkNumber
description: Номер порции по порядку
type: int
- name: isLastChunk
description: Признак последнего сообщения
type: boolean
- name: replicaHash
description: Чек-сумма реплики после применения дельты с данным
default: null
type:
- 'null'
- string
examples:
- requestId: 00000000-0000-0000-0000-000000000000
subRequestId:
string: 00000000-0000-0000-0000-000000000000
subscriptionId: 00000000-0000-0000-0000-000000000000
sourceDatamart:
string: dm
sql:
string: 'select * from v1_addrobj'
minSynId:
int: 10
maxSynId:
int: 10
synTime: 1000
streamNumber:
int: 1
streamTotal:
int: 1
chunkNumber: 1
isLastChunk: true
replicaHash:
string: '123456789'
9.7.2. delta.in.rs
delta.in.rs - Топик c ответами с подтверждением применения дельты у потребителя.
Структура сообщения
deltaApplyResultMessage:
description: Ответ с подтверждением применения дельты
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
bindings:
kafka:
key:
type: string
format: uuid
description: Уникальный идентификатор подзапроса
headers:
type: object
properties:
AGENT_CONSUMER_ID:
description: Идентификатор агента потребителя
type: string
payload:
$ref: '#/components/schemas/deltaApplyResult'
examples:
- name: simple
headers:
AGENT_CONSUMER_ID: agent-oktmo
payload:
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
subRequestId:
string: 00000000-0000-0000-0000-000000000000
subscriptionId: dcf43fc7-e152-459b-8af5-48d91d4b6a21
synId: 100
Avro-схема сообщения
deltaApplyResult:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: DeltaApplyResult
namespace: ru.rtlabs.common.replication.delta
fields:
- name: requestId
description: Уникальный идентификатор распределенного запроса
type:
type: string
logicalType: uuid
- name: subRequestId
description: Уникальный идентификатор подзапроса
default: null
type:
- 'null'
- type: string
logicalType: uuid
- name: subscriptionId
description: Уникальный идентификатор подписки
type:
type: string
logicalType: uuid
- name: synId
description: Id дельты витрины-потребителя
type: int
9.7.3. delta.in.err
delta.in.err - Ответ с ошибкой применения дельты. Один ответ на дельту с множеством чанков.
Структура сообщения
deltaApplyErrorMessage:
description: Ответ с ошибкой применения дельты у потребителя
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
bindings:
kafka:
key:
type: string
format: uuid
description: Уникальный идентификатор подзапроса
headers:
type: object
properties:
AGENT_CONSUMER_ID:
description: Идентификатор агента потребителя
type: string
payload:
$ref: '#/components/schemas/deltaApplyError'
examples:
- name: simple
headers:
AGENT_CONSUMER_ID: agent-oktmo
payload:
requestId: 2e8c8ab2-44db-4dcb-8ae5-2365121b4e14
subRequestId:
string: 00000000-0000-0000-0000-000000000000
subscriptionId: dcf43fc7-e152-459b-8af5-48d91d4b6a21
synId: 1
errorCode: DATAMART-001
message: Непредвиденная ошибка применения дельты
Avro-схема сообщения
deltaApplyError:
schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
type: record
name: DeltaApplyError
namespace: ru.rtlabs.common.replication.delta
fields:
- name: requestId
description: Уникальный идентификатор запроса
type:
type: string
logicalType: uuid
- name: subRequestId
description: Уникальный идентификатор подзапроса
default: null
type:
- 'null'
- type: string
logicalType: uuid
- name: subscriptionId
description: Уникальный идентификатор подписки
type:
type: string
logicalType: uuid
- name: synId
description: \use in replicator version 1.1\Номер дельты, на которой возникла ошибка
default: null
type:
- 'null'
- int
- name: errorCode
description: Код ошибки выполнения
type: string
- name: message
description: Сообщение об ошибке
type: string