Останов ядра СУБД ЛИНТЕР

Назначение

Останов ядра СУБД ЛИНТЕР.

Синтаксис
 
L_LONG LinDatabaseControl(t_LINDBCtrl* LINDBCtrl, t_LinDatabaseCommand Command [,L_LONG Flags [,char *AddComand]]);
Входные данные

Входными данными являются:

  1. инициализированная управляющая структура LINDBCtrl;

  2. идентификатор LIN_DATABASE_SHUT команды «Останов ядра СУБД ЛИНТЕР»;

  3. флаги Flags, модифицирующие поведение команды;

  4. необязательный аргумент AddCommand, содержащий командную строку для программы shut.

Допустимые флаги:

Флаг Значение
LIN_DATABASE_SHUT_IGNOREROLE Разрешает выполнять останов «чужих» ядер СУБД ЛИНТЕР
LIN_DATABASE_SHUT_FORCE Останов ядра выполнять с помощью посылки сигнала SIGKILL
LIN_DATABASE_SHUT_BY_SHUT_RUN Останов ядра выполнять с помощью программы shut
Выходные данные

Выходными данными является управляющая структура LINDBCtrl.

В управляющей структуре будут возвращены:

Имя поля Значение
RetStatus Библиотечный код завершения
SysStatus Системный код завершения
Описание

В режиме умолчания (аргумент Flags не задан):

  • останов ядра СУБД ЛИНТЕР выполняется путем посылки ему сигнала SIGTERM;

  • остановлено может быть только ядро, запущенное данным клиентским приложением с использованием библиотеки linctrl;

  • незавершенные транзакции не откатываются.

Если установлен флаг LIN_DATABASE_SHUT_IGNOREROLE, функция выполняет останов любого ядра СУБД ЛИНТЕР, ранее запущенного как с помощью библиотеки linctrl, так и с помощью средств ОС. В таком случае используемая в функции управляющая структура LINDBCtrl должна быть предварительно подготовлена с помощью команды LIN_DATABASE_ATTACH.

Если установлен флаг LIN_DATABASE_SHUT_FORCE, то останов ядра будет производиться путем посылки сигнала SIGKILL (вместо сигнала по умолчанию SIGTERM).

Если установлен флаг LIN_DATABASE_SHUT_BY_SHUT_RUN, то останов ядра будет производиться путем вызова программы shut, поэтому в аргументе AddCommand должна быть передана строка, содержащая имя пользователя БД и его пароль в БД, разделенные символом «/».

Программа shut должна находиться в подкаталоге /bin каталога, заданного в поле LinterPath управляющей структуры LINDBCtrl.

После останова ядра СУБД ЛИНТЕР pid уже остановленного ядра продолжает сохраняться в управляющей структуре LINDBCtrl. Это необходимо для отслеживания реального момента останова ядра командой LIN_DATABASE_ALIVE.

Для отката всех незаконченных транзакций перед остановом ядра следует задавать одновременно флаги LIN_DATABASE_SHUT_FORCE и LIN_DATABASE_SHUT_BY_SHUT_RUN.

Возвращаемые значения

Функция возвращает:

  • 0 – нормальное завершение;

  • -1 – ядро не остановлено.

Коды завершения
Код Описание
E_LINCTRL_SHUTFAILED Неудачный запуск программы shut. Уточняющий код завершения см. в поле SysStatus управляющей структуры LINDBCtrl
E_LINCTRL_KILLFAILED Неудачная попытка посылки сигнала ядру
E_LINCTRL_RUN Неудачный запуск программы shut
E_LINCTRL_NOMEM Невозможность выделения динамической памяти для полей управляющей структуры LINDBCtrl
E_LINCTRL_LINPID Неизвестный Pid останавливаемого ядра СУБД ЛИНТЕР (предварительно не выполнена команда LIN_DATABASE_ATTACH или LIN_DATABASE_RUN)
E_LINCTRL_ROLE Попытка останова «чужого» ядра СУБД ЛИНТЕР без флага LIN_DATABASE_SHUT_IGNOREROLE
Пример
#include < stdio.h >
#include < stdlib.h >
#include < string.h >
#include "linctrl.h"
#include "exlib.h"

void  PrintError(t_LINDBCtrl *LINDBCtrl);

void  main()
  {
  t_LINDBCtrl LINDBCtrl;
  CHAR  LinterPath[]="/usr/linter";
  LONGINT Err;
  Err=LINDBCtrlInit(&LINDBCtrl,LinterPath);
  if (Err != NORMAL)
    PrintError(&LINDBCtrl);
  printf("Initialisation LINDBCtrl\n");
  Err=LinDatabaseControl(LINDBCtrl, LIN_DATABASE_SHUT,
  LIN_DATABASE_SHUT_FORCE);
  If (Err != NORMAL)
    PrintError(&LINDBCtrl);
  printf("Shutdown DBMS Linter\n");
  printf("End Example\n");
  }