RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
Visa 
4274 3200 2453 6495 

Глава 4. Ядерные блоки NDB

Эта глава предоставляет информацию о главных программных модулях, составляющих ядро NDB. Файлы, содержащие внедрения этих блоков, могут быть найдены в нескольких каталогах в storage/ndb/src/kernel/blocks/ дерева исходных текстов NDB Cluster.

Как описано в другом месте, ядро NDB использует много различных потоков, чтобы выполнить различные задачи. Ядерные блоки связаны с этими потоками как показано в следующей таблице:

Таблица 4.1. Ядерные блоки NDB и потоки ядра NDB

Поток (ThreadConfig) Ядерные блоки
Main (main) CMVMI (первичный), DBINFO, DBDICT, DBDIH, NDBCNTR, QMGR, DBUTIL
LDM (ldm) DBTUP, DBACC, DBLQH (primary), DBTUX, BACKUP, TSMAN, LGMAN, PGMAN, RESTORE
TC (tc) DBTC (первичный), TRIX
Replication (rep) SUMA (первичный), DBSPJ
Receiver (recv) CMVMI
Sender (send) CMVMI
I/O (io) NDBFS
Query (query) DBQTUP, DBQACC, DBQLQH, DBQTUX, QBACKUP QRESTORE
Recovery (recover) DBQTUP, DBQACC, DBQLQH, DBQTUX, QBACKUP QRESTORE

NDB 8.0.22 и позже предусматривает следующие комбинации:

  • main и rep как потоки типа main_rep.

  • main, rep и recv как потоки типа main_rep_recv.

query и recover были добавлены в NDB 8.0.23.

Можно получить больше информации об этих потоках из документации для параметра конфигурации ThreadConfig узла данных.

4.1. Блок BACKUP

Этот блок ответственен за обработку резервных копий онлайн и контрольных точек. Это находится в storage/ndb/src/kernel/blocks/backup/ и содержит следующие файлы:

  • Backup.cpp: Определяет методы для обработки сигнала узла, также предоставляет методы вывода резервных сообщений о состоянии пользователю.

  • BackupFormat.hpp: Определяет форматы, используемые для данных резервного копирования, .CTL и файлы журнала.

  • Backup.hpp: Определяет класс Backup.

  • BackupInit.cpp: Фактический конструктор класса Backup.

  • Backup.txt: Содержит резервную схему связи (текстовый формат). Все еще потенциально полезный для понимания последовательности событий, которая происходит во время резервных копий.

  • FsBuffer.hpp: Определяет класс FsBuffer, который осуществляет круглый буфер данных, который используется (вместе с файловой системой NDB) для чтения и написания данных резервного копирования и регистраций.

  • read.cpp: Содержит некоторые сервисные функции для чтения файлов журнала и файлов контрольной точки в STDOUT.

QBACKUP это подтип этого блока, используемый для запроса и потока восстановления, добавленных в NDB 8.0.23.

4.2. Блок CMVMI

Этот блок ответственен за управление конфигурацией взаимодействия между ядерными блоками и виртуальной машиной NDB, а также работы группы que и транспортеров группы. Это расположено в storage/ndb/src/kernel/blocks/cmvmi и содержит эти файлы:

  • Cmvmi.cpp: Коммуникация и методы создания отчетов для класса Cmvmi.

  • Cmvmi.hpp: Определяет класс Cmvmi.

Во время запуска этот блок ассигнует большую часть памяти, необходимой для буферов, используемых ядром NDB, таких как определенные IndexMemory, DataMemory и DiskPageBufferMemory. В это время CMVMI также получает стартовый порядок узлов и выполняет много функций, посредством чего программные модули могут затронуть среду выполнения.

4.3. Блок DBACC

Также называемый ACC, это модуль управления блокировкой и доступом. Это также ответственно за хранение первичного ключа и индексы хэша уникального ключа. Этот блок расположен в storage/ndb/src/kernel/blocks/dbacc, который содержит следующие файлы:

  • Dbacc.hpp: Определяет класс Dbacc, наряду со структурами для операций, просмотра, таблицы и других отчетов.

  • DbaccInit.cpp: Конструктор и деструктор класса Dbacc, методы для инициализации данных и отчетов.

  • DbaccMain.cpp: Реализует методы класса Dbacc.

Блок ACC обрабатывает структуры индекса базы данных, которые сохранены на 8K страницах. Блокировки базы данных также обработаны в блоке ACC.

Когда новый кортеж вставляется, блок TUP хранит кортеж в подходящем пространстве и возвращает индекс (ссылку на адрес кортежа в памяти). ACC хранит первичный ключ и этот индекс кортежа в хэш-таблице.

Как блок TUP, блок ACC реализует часть протокола контрольной точки. Это также используется для регистрации отмен. Это осуществляется классом Dbacc, определенным в storage/ndb/src/kernel/blocks/dbacc/DbaccMain.hpp.

DBQACC это подтип этого блока, используемый для запросов и восстановления, добавленных в NDB 8.0.23.

См. также раздел 4.10.

4.4. Блок DBDICT

Этот блок, блок словаря данных, находится в storage/ndb/src/kernel/blocks/dbdict. Информация о словаре данных копируется всем блокам DICT кластера. Это единственный блок кроме DBTC, к которому приложения могут отправить прямые запросы.

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

Этот блок осуществляется в следующих файлах:

4.5. Блок DBDIH

Этот блок предоставляет услуги управления распределением данных для получения информации о распределении в каждой таблице, разделении таблицы и точной копии фрагмента каждого разделения. Это также ответственно за обработку местных и глобальных контрольных точек. DBDIH также реализует системные перезапуски и управление узлом. Этот блок осуществляется в следующих файлах, все они в каталоге storage/ndb/src/kernel/blocks/dbdih:

  • Dbdih.hpp: Этот файл содержит определение класса Dbdih, а также тип FileRecordPtr, который используется, чтобы хранить информацию о системах хранения фрагмента и его точных копиях. Если у фрагмента есть больше, чем одна резервная точная копия, то список дополнительных присоединен к этому отчету. Этот отчет также хранит статус фрагмента и составляет выровненные 64 байта.

  • DbdihMain.cpp: Содержит определения методов класса Dbdih .

  • printSysfile/printSysfile.cpp: Старая версия printSysfile.cpp из каталога dbdih.

  • DbdihInit.cpp: Инициализирует данные и отчеты Dbdih, также содержит деструктор класса.

  • LCP.txt: Содержит примечания разработчика об обмене сообщениями между DIH и LQH, который происходит во время местной контрольной точки.

  • printSysfile.cpp: Этот файл содержит исходный текст программы ndb_print_sys_file .

  • Sysfile.hpp: Содержит определение структуры Sysfile, другими словами, формат системного файла NDB. См. главу 1 для получения дополнительной информации.

Этот блок часто использует блоки BACKUP на узлах данных, чтобы выполнить распределенные задачи, такие как глобальные контрольные точки и системные перезапуски.

Этот блок осуществляется как класс Dbdih, определение которого может быть найдено в файле storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp.

4.6. Блок DBINFO

Блок DBINFO оказывает поддержку для информационной базы данных ndbinfo, применяемой для получения информации о внутренностях узла данных.

Узел API общается с этим блоком, чтобы получить данные ndbinfo, используя сигналы DBINFO_SCANREQ и DBINFO_SCANCONF. Узел API общается с DBINFO на узле основных данных, который общается с DBINFO на остающихся узлах данных. Блок DBINFO на каждом узле данных приносит информацию от других ядерных блоков на узле, включая DBACC, DBTUP, BACKUP, DBTC, SUMA, DBUTIL, TRIX, DBTUX, DBDICT, CMVMI, DBLQH, LGMAN, PGMAN, DBSPJ, THRMAN, TRPMAN и QMGR. Локальный DBINFO передает информацию обратно в DBINFO на главном узле, который в свою очередь транслирует ее назад к узлу API.

Этот блок осуществляется в файле storage/ndb/src/kernel/blocks/dbinfo/Dbinfo.hpp как класс Dbinfo. Файл Dbinfo.cpp в том же самом каталоге определяет методы этого класса (главным образом, сигналы обработчикам). Также в каталоге dbinfo есть текстовый файл DbinfoScan.txt, который предоставляет информацию о передаче сообщений DBINFO.

4.7. Блок DBLQH

Это местный блок запроса низкого уровня, который управляет данными и транзакциями, местными к узлам данных группы, и действует как координатор двухфазных фиксаций. Это ответственно (когда вызвано операционным координатором) за выполнение операций на кортежах, выполняя эту задачу с помощью блока DBACC (который управляет структурами индекса) и DBTUP (который управляет кортежами). Это составлено из следующих файлов в storage/ndb/src/kernel/blocks/dblqh:

  • Dblqh.hpp: Содержит определение класса Dblqh. Сам код включает следующие модули:

    • Start/Restart Module. Этот модуль обращается со следующими фазами:

      • Start phase 1. Загружает ссылку на блок и ID процессора.

      • Start phase 2. Начинает все отчеты в блоке, соединяет LQH с ACC и TUP.

      • Start phase 4. Соединяет каждого LQH с любым LQH в системе базы данных. Для запуска создайте файлы журнала фрагмента. Для системного перезапуска или перезапуска узла откройте файлы журнала фрагмента и найдите конец файлов журнала.

    • Fragment addition and deletion module. Используется словарем данных, чтобы создать новые фрагменты и удалить старые фрагменты.

    • Execution module. Этот модуль обращается с получением сообщения LQHKEYREQ и ведет всю обработку операций от имени этого запроса. Это также включает прием различных типов сообщений ATTRINFO и KEYINFO, а также связь с ACC и TUP.

    • Log module. Модуль регистрации обращается с чтением и написанием регистрации. Это также ответственно за перезапуски системы обработки и управляет системным перезапуском в TUP и ACC.

    • Transaction module. Этот модуль обращается с фазами передачи и завершения.

    • TC failure module. Обрабатывает сбои в операционном координаторе.

    • Scan module. Этот модуль содержит код, который обращается с просмотром конкретного фрагмента. Это работает под контролем операционного координатора и ACC, выполнить просмотр всех кортежей во фрагменте. TUP выполняет необходимые условия поиска, чтобы гарантировать, что только действительные кортежи возвращены.

    • Node recovery module. Это используется, когда узел потерпел неудачу, копируя произведенный фрагмент к новой точной копии фрагмента. Это также закрывает все связи с неудачным узлом.

    • LCP module. Этот модуль обращается с выполнением и контролем местных контрольных точек в TUP и ACC. Это также взаимодействует с DIH, чтобы определить, какие глобальные контрольные точки восстанавливаемые.

    • Global checkpoint module. Помогает DIH в обнаружении, когда GCP восстанавливаемые и обрабатывает сообщение GCP_SAVEREQ, запрашивающее у LQH сохранить данный GCP на диск и предоставить уведомление о том, когда это будет сделано.

    • File handling module. Это включает много подмодулей:

      • Прием сигнала.

      • Нормальное функционирование.

      • Изменение файла.

      • Начальный перезапуск.

      • Системный перезапуск, фаза 1.

      • Системный перезапуск, фаза 2.

      • Системный перезапуск, фаза 3.

      • Системный перезапуск, фаза 4.

      • Ошибки.

  • DblqhInit.cpp: Инициализирует записи и данные Dblqh. Также включает деструктор класса Dblqh, используемый для его освобождения.

  • DblqhMain.cpp: Реализует функциональность (методы класса) Dblqh.

  • В этом каталоге также есть файлы в подкаталоге redoLogReader, содержащие исходные тексты ndb_redo_log_reader :

    • records.cpp

    • records.hpp

    • redoLogFileReader.cpp

Этот блок также обрабатывает журналов отката и помогает наблюдать блоки DBACC, DBTUP, LGMAN, TSMAN, PGMAN и BACKUP. Это осуществляется как класс Dblqh, определенный в файле storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp.

DBQLQH это подтип этого блока, используемого для запросов и восстановления, добавленных в NDB 8.0.23.

4.8. Блок DBSPJ

Этот блок осуществляет многократные курсоры в ядре NDB, обеспечивая обращения для соединений, сниженных от узлов SQL. Это содержит следующие файлы, которые могут быть найдены в storage/ndb/src/kernel/blocks/dbspj:

  • Dbspj.hpp: Определяет класс Dbspj.

  • DbspjInit.cpp: Инициализирует Dbspj.

  • DbspjMain.cpp: Обрабатывает запросы от API и сигнала, проходящего между DBSPJ и блоками ядра DBLQH и DBTC.

  • DbspjProxy.hpp

  • DbspjProxy.cpp

4.9. Блок DBTC

Это операционный координатор, который обращается с распределенными транзакциями и другими операциями по данным на глобальном уровне (в противоположность DBLQH, который занимается такими проблемами на отдельных узлах данных). В исходном коде это расположено в каталоге storage/ndb/src/kernel/blocks/dbtc, который содержит эти файлы:

  • Dbtc.hpp: Определяет класс Dbtc и связанные с ним конструкции, включая следующее:

    • Trigger and index data (TcDefinedTriggerData). Отчет, формирующий список активных триггеров для каждой таблицы. Этими отчетами управляет пул триггеров, в котором запись сохранена каждый раз, когда триггер активирован.

    • Fired trigger data (TcFiredTriggerData). Отчет, формирующий список запущенных триггеров для данной транзакции.

    • Index data (TcIndexData). Этот отчет формирует списки активных индексов для каждой таблицы. Такими отчетами управляет бассейн индекса, в котором сохранен каждый отчет индекса каждый раз, когда индекс создан.

    • API connection record (ApiConnectRecord). Запись API соединения содержит отчет связи, с которой соединяется приложение. Оно может послать одну операцию за один раз. Это может немедленно послать новую операцию после отправки предыдущей операции. Это означает, что несколько операций могут быть активными в единственной транзакции в операционном координаторе, который достигается при помощи записи API соединения. Каждая активная операция обработана записью соединения TC, как только она посылает запрос обработчику локального запроса, это готово получить новые операции. Запись соединения LQH заботится об ожидании завершения операции, когда операция в записи LQH, новая операция может быть начата на текущей записи соединения LQH. ApiConnectRecord всегда выровнен по 256 байт.

    • Transaction coordinator connection record (TcConnectRecord). TcConnectRecord сохраняет всю информацию, требуемую для выполнения транзакции, операционный диспетчер устанавливает связи с различными блоками для ее выполнения. Могут быть многочисленные отчеты для каждой активной транзакции. Отчет связи TC сотрудничает с отчетом связи API для связи с узлом API и с отчетом связи LQH для связи с любыми обработчиками локального запроса, вовлеченными в транзакцию. TcConnectRecord постоянно связан с отчетом в DBDICT и другим в DIH и содержит список активных записей соединения LQH и список начатых (но в настоящее время неактивных) записей соединения LQH. Это также содержит список всех операций, которые выполняются с текущим отчетом связи TC. TcConnectRecord всегда выровнен по 128 байт.

    • Cache record (CacheRecord). Этот отчет используется между приемом TCKEYREQ и отправкой LQHKEYREQ (см. раздел 3.3). Это отдельный отчет, чтобы улучшить коэффициент удачного обращения к кэшу, а также минимизировать требования к памяти.

    • Host record (HostRecord). Этот отчет содержит статус alive каждого узла в системе и выровнен по 128 байт.

    • Table record (TableRecord). Этот отчет содержит текущие версии схемы всех таблиц в системе.

    • Scan record (ScanRecord). Каждый просмотр ассигнует ScanRecord, чтобы хранить информацию о текущем просмотре.

    • Data buffer (DatabufRecord). Это буфер, используемый для общего хранения данных.

    • Attribute information record (AttrbufRecord). Этот отчет может содержать один сигнал ATTRINFO, который содержит 32 атрибута информационных слов.

    • Global checkpoint information record (GcpRecord). Этот отчет используется, чтобы сохранить число глобальных контрольных точек, а также счетчик во время фазы завершения транзакции. GcpRecord выровнен по 32 байта.

    • TC failure record (TC_FAIL_RECORD). Это используется, обращаясь с поглощением обязанностей TC от неудачного операционного координатора.

  • DbtcInit.cpp: Обрабатывает распределение и освобождение индексов и данных Dbtc (включает деструктор класса).

  • DbtcMain.cpp: Реализует методы Dbtc.

Любой узел данных может действовать как операционный координатор.

Блок DBTC осуществляется как класс Dbtc.

Операционный координатор это ядерный интерфейс, к которому приложение отправляют свои запросы. Это устанавливает связи с различными блоками в системе, чтобы выполнить транзакцию и решает, какой узел будет обращаться с каждой транзакцией, посылая сигнал подтверждения на результате приложению так, чтобы приложение могло проверить, что результат, полученный от блока TUP, правилен.

Этот блок также обращается с уникальными индексами, которые должны быть скоординированы через все узлы данных одновременно.

4.10. Блок DBTUP

Это менеджер кортежей, который справляется с физическим хранением данных о группе. Это состоит из следующих файлов в каталоге storage/ndb/src/kernel/blocks/dbtup:

  • AttributeOffset.hpp: Определяет класс AttributeOffset, который моделирует структуру признака, разрешая до 4096 признаков, все из которых могут быть null.

  • DbtupDiskAlloc.cpp: Обработка дескрипторов и освобождение экстентов для диска.

  • DbtupIndex.cpp: Реализует методы для чтения и написания кортежей, используя упорядоченные индексы.

  • DbtupScan.cpp: Реализует методы для просмотров кортежа.

  • tuppage.cpp: Обработчики, ассигнующие страницы для написания кортежей.

  • tuppage.hpp: Определяет структуры для страниц данных фиксированного и переменного размеров для кортежей.

  • DbtupAbort.cpp: Содержит код для завершения неудавшихся операций по кортежу.

  • DbtupExecQuery.cpp: Реализует обработку запросов для кортежей и чтение из них.

  • DbtupMeta.cpp: Операции по таблице описателей для класса Dbtup.

  • DbtupStoredProcDef.cpp: Модуль для добавления и удаления процедур.

  • DbtupBuffer.cpp: Обработка буферов чтения и записи для операций по кортежу.

  • DbtupFixAlloc.cpp: Ассигнует и освобождает кортежи фиксированного размера от набора страниц, приложенных к фрагменту. Фиксированный размер установлен на фрагмент, может быть только одно такое значение на фрагмент.

  • DbtupPageMap.cpp: Код, используемый Dbtup, чтобы отобразить ID логической страницы к ID физической страницы. Для отображения нужны ID фрагмента и ID логической страницы, чтобы обеспечить физический ID. Эта часть Dbtup это исключительный пользователь определенного набора переменных в записи фрагмента, это также исключительный пользователь структуры для диапазонов страницы (структура PageRange определена в Dbtup.hpp).

  • DbtupTabDesMan.cpp: Этот файл содержит код дескрипторного диспетчера памяти таблицы. У каждой таблицы есть описатель, который является смежным множеством слов данных и ассигнуется из глобального множества, используя алгоритм buddy с пустыми списками, существующими для каждых 2N слов.

  • Notes.txt: Содержит примечания внедрения некоторых разработчиков по кортежам, операциям по кортежу и управлению версиями кортежа.

  • Undo_buffer.hpp: Определяет класс Undo_buffer, используемый для хранения операций, которые, возможно, должны быть отменены.

  • Undo_buffer.cpp: Реализует некоторые необходимые методы Undo_buffer.

  • DbtupCommit.cpp: Содержит код, используемый, чтобы передать операции на кортежах к диску.

  • DbtupGen.cpp: Этот файл содержит код инициализации Dbtup.

  • DbtupPagMan.cpp: Этот файл осуществляет алгоритм buddy менеджера страничной памяти. PagMan вызван, когда фрагменты испытывают недостаток в достаточном внутреннем месте страницы, чтобы приспособить все данные, которые требуется сохранить. Это также вызвано, когда фрагменты освобождают пространство страницы назад в зону свободной памяти.

  • DbtupTrigger.cpp: Код, содержавшийся в этом файле, выполняет обработку внутренних триггеров NDB.

  • DbtupDebug.cpp: Используемый только для целей отладки.

  • Dbtup.hpp: Содержит определение класса Dbtup. Также определяет много существенных структур, таких как просмотры кортежа, дисковые единицы распределения, записи фрагмента и так далее.

  • DbtupRoutines.cpp: Реализует код Dbtup для чтения признаков.

  • test_varpage.cpp: Простая тестовая программа для подтверждения операций по странице переменного размера.

Этот блок также наблюдает изменения в кортежах.

DBQTUP это подтип этого блока, используемого для запросов и потоков восстановления, добавленных в NDB 8.0.23.

4.11. Блок DBTUX

Этот ядерный блок предоставляет сервисы местному управлению упорядоченными индексами. Это состоит из следующих файлов в каталоге storage/ndb/src/kernel/blocks/dbtux:

  • DbtuxCmp.cpp: Код, чтобы искать по ключу префикс узла или запись. Сравнение начинается в данном положении признака, которое обновляется количеством равных начальных найденных признаков. Данные о записи могут быть частичными, в этом случае может быть возвращено CmpUnknown. Признаки нормализованы и имеют переменный размер, данный в словах.

  • DbtuxGen.cpp: Код инициализации используется в запусках узла и перезапусках.

  • DbtuxMaint.cpp: Код, используемый, чтобы поддержать индексы.

  • DbtuxNode.cpp: Код для создания узла, распределения и операций по удалению. Также назначает списки просмотров узлам.

  • DbtuxSearch.cpp: Код для обработки сообщений запроса просмотра узла.

  • DbtuxTree.cpp: Код для выполнения операций по дереву узла.

  • Times.txt: Содержит некоторые (старые) исполнительные пояснения от тестовых прогонов на операциях, используя упорядоченные индексы. Представляет только исторический интерес.

  • DbtuxDebug.cpp: Код отладки для дампинга статусов узла.

  • Dbtux.hpp: Содержит определение класса Dbtux.

  • DbtuxMeta.cpp: Код для создания, урегулирования и удаления индексов. Также обеспечивает средства прерывания этих операций в случае неудачи.

  • DbtuxScan.cpp: Код для выполнения просмотров индекса.

  • DbtuxStat.cpp: Методы для получения статистики узла.

  • tuxstatus.html: Отчет 2004-01-30 о состоянии внедрения упорядоченного индекса. Представляет только исторический интерес.

DBQTUX это подтип этого блока, используемого для запросов и потоков восстановления, добавленных в NDB 8.0.23.

4.12. Блок DBUTIL

Этот блок предоставляет внутренние интерфейсы транзакции и операциям по данным, выполняя существенные операции на сигналах, переданных между узлами. Этот блок осуществляет транзакционные услуги, которые могут использоваться другими блоками. Это также используется в создании индексов онлайн и находится в каталоге storage/ndb/src/kernel/blocks/dbutil, который включает эти файлы:

  • DbUtil.cpp: Реализует методы класса Dbutil.

  • DbUtil.hpp: Определяет класс Dbutil, используемый, чтобы предоставить транзакционные услуги.

  • DbUtil.txt: Описывает протокоы, реализованные DBUTIL .

Среди обязанностей, выполненных этим блоком, обслуживание последовательностей для резервных ID и других распределенных идентификаторов.

4.13. Блок LGMAN

Этот блок, менеджер группы регистрации, ответственен за обработку регистраций для дисковых таблиц данных. Это осуществляется в этих файлах в каталоге storage/ndb/src/kernel/blocks:

  • lgman.cpp: Реализует Lgman для добавления, удаления и работы с файлами журнала и группами файлов.

  • lgman.hpp: Содержит определение для класса Lgman, используемого, чтобы обращаться к файлам журнала. Обрабатывает распределение пространства буфера регистрации.

4.14. Блок NDBCNTR

Это блок управления группой, который обращается с инициализацией блока и конфигурацией. Во время процесса запуска узла данных это запускается из блока QMGR и продолжает процесс. Это также помогает с запланированными закрытиями узлов данных. Этот блок осуществляется в storage/ndb/src/kernel/blocks/ndbcntr, который содержит эти файлы:

  • Ndbcntr.hpp: Определяет класс Ndbcntr, используемый для осуществления функций управления группой.

  • NdbcntrInit.cpp: Инициализаторы для данных и записей Ndbcntr.

  • NdbcntrMain.cpp: Методы используются для запусков, перезапусков и чтения данных конфигурации.

  • NdbcntrSysTable.cpp: NDBCNTR создает и инициализирует системные таблицы на начальном системном запуске. Таблицы определяются в статических структурах в этом файле.

4.15. Блок NDBFS

Этот блок обеспечивает NDB уровень абстракции файловой системы и расположен в каталоге storage/ndb/src/kernel/blocks/ndbfs, который содержит следующие файлы:

  • AsyncFile.hpp: Определяет класс AsyncFile, который представляет асинхронный файл. Все действия выполняются одновременно с другими действиями, выполненными процессом. Поскольку все действия выполняются в отдельном потоке, результат действия передают обратно через канал памяти. Для асинхронного уведомления о законченном запросе, каждый вызов включает запрос в качестве параметра. Этот класс используется для написания или чтения данных на диск и с диска одновременно с другими действиями.

  • AsyncFile.cpp: Определяет действия, возможные для асинхронного файла, и осуществляет их.

  • Filename.hpp: Определяет класс Filename. Берет 128-битовое значение (в качестве множества из четырех long) и делает имя файла из него. Это имя файла кодирует информацию о файле, такую как является ли это файлом или каталогом, и если первое, то тип файла. Возможные типы включают файл данных, регистрацию фрагмента, список фрагментов, список таблиц, регистрацию схемы и системный файл.

  • Filename.cpp: Реализует методы set() для класса Filename.

  • MemoryChannelTest/MemoryChannelTest.cpp: Основная программа для тестирования чтения из и записи в канал памяти (то есть, кольцевого буфера).

  • OpenFiles.hpp: Реализует класс OpenFiles, который обеспечивает некоторые удобные методы для определения, открыт ли данный файл.

  • VoidFs.cpp: Используется для бездисковой операции. Производит фиктивный ответ на операции записи.

  • CircularIndex.hpp: Класс CircularIndex, определенный в этом файле, служит стандартным блоком для осуществления кольцевых буферов. Это увеличивается как нормальный индекс, пока не достигает максимального размера, затем сбрасывается к нолю.

  • CircularIndex.cpp: Содержит только один #define, на самом деле не используемый в это время.

  • MemoryChannel.hpp: Определяет классы MemoryChannel и MemoryChannelMultipleWriter, которые обеспечивают основанный на указателе канал для связи между двумя потоками. Это не копирует данных в или из канала, таким образом, пункт, который вставляется, не может использоваться, пока другой поток не отдаст его. Нет никакой поддержки обнаружения возвращения пункта.

  • MemoryChannel.cpp: Фиктивный файл, сейчас не применяется.

  • Ndbfs.hpp: Поскольку запрос сигнала NDB может привести к многократным запросам AsyncFile, один класс (определенный в этом файле) ответственен за отслеживание всех запросов, и когда все закончены, должен передать результат к блоку отправки.

  • Ndbfs.cpp: Инициализация и методы обработки сигнала для класса Ndbfs.

  • Pool.hpp: Создает и управляет пулом объектов для использования Ndbfs и другими классами в этом блоке.

  • AsyncFileTest/AsyncFileTest.cpp: Тестовая программа, используемая, чтобы проверить и определить эффективность функциональности AsyncFile.

4.16. Блок PGMAN

Этот блок обеспечивает страницу и услуги по организации буферизации данных для дисковых таблиц данных. Включает эти файлы:

  • diskpage.hpp: Определяет структуры File_formats, Datafile и Undofile.

  • diskpage.cpp: Инициализирует пустые заголовки страницы; включает некоторый вывод для сообщения и отладки.

  • pgman.hpp: Определяет класс Pgman, осуществляющий многие буферные и страничные услуги, включая записи страницы и запроса, замену страницы, списки страниц, очистку страницы и другую обработку страниц.

  • pgman.cpp: Реализует методы Pgman для инициализации и различных задач управления страницей.

4.17. Блок QMGR

Это блок управления логическим кластером, обращается с членством узла в группе, используя механизм синхронизации. QMGR ответственно за опрос узлов данных, когда неудача узла данных происходит и решая, что узел на самом деле потерпел неудачу и должен быть исключен из группы. Этот блок содержит следующие файлы из каталога storage/ndb/src/kernel/blocks/qmgr:

  • Qmgr.hpp: Определяет класс Qmgr и связанные структуры, включая используемые в обнаружении неудачи узла и разделения группы.

  • QmgrInit.cpp: Реализует методы и записи инициализации Qmgr, также включает его деструктор.

  • QmgrMain.cpp: Содержит код для контроля синхронизации, обнаружения и обработки проблем split-brain и управления некоторыми фазами запуска.

  • timer.hpp: Определяет класс Timer, используемый NDB, чтобы сохранять строгое хронометрирование независимо от системных часов.

Этот блок также помогает в ранних фазах запуска узла данных.

Блок QMGR осуществляется классом Qmgr, определение которого находится в файле storage/ndb/src/kernel/blocks/qmgr/Qmgr.hpp.

4.18. Блок RESTORE

Этот блок осуществляется в файлах restore.hpp, restore.cpp, RestoreProxy.hpp и RestoreProxy.cpp в каталоге storage/ndb/src/kernel/blocks. Это обращается с восстановлением группы из резервных копий онлайн. Это также используется, чтобы восстановить местные контрольные точки как часть процесса старта узла данных.

QRESTORE это подтип этого блока, используемого для запроса и потоков восстановления, добавленных в NDB 8.0.23.

4.19. Блок SUMA

Менеджер подписки группы, который обращается с регистрацией событий и сообщающими функциями. Это также заметно фигурирует в NDB Cluster Replication. SUMA состоит из следующих файлов в каталоге storage/ndb/src/kernel/blocks/suma/:

  • Suma.hpp: Определяет класс Suma и интерфейсы для подписок и выполнения необходимых связей с другим блоками.

  • SumaInit.cpp: Выполняет инициализацию DICT, DIH и других интерфейсов.

  • Suma.cpp: Реализует режимы обработки подписки.

  • Suma.txt: Содержит основанное на тексте иллюстрирование диаграммы протокола SUMA.

4.20. Блок THRMAN

Это блок управления потоком, выполняется в каждом потоке ядра NDB. Этот блок также используется для оценки использования CPU и для записи разной информации в таблицы threadblocks и threadstat информационной базы данных ndbinfo.

Блок THRMAN осуществляется как класс Thrman в файле storage/ndb/src/kernel/blocks/thrman.hpp. thrman.cpp в том же каталоге определяет метод measure_cpu_usage() этого класса для измерения использования CPU данным потоком. Это также определяет метод execDBINFO_SCANREQ(), который пишет это и другую информацию, такую как идентификационный номер потока и номер блока в таблицы threadblocks и threadstat.

4.21. Блок TRPMAN

Это блок управления транспортировкой сигнала ядра NDB, осуществленное в storage/ndb/src/kernel/blocks/trpman.hpp как класс Trpman, методы которого определяются в trpman.cpp, тоже в каталоге blocks.

TRPMAN также ответственнен за написание строк в таблицу ndbinfo.transporters.

4.22. Блок TSMAN

Это менеджер табличномго пространства для данных дисковых таблиц, осуществленный в следующих файлах в storage/ndb/src/kernel/blocks:

  • tsman.hpp: Определяет класс Tsman, а также структуры, представляющие файлы данных и табличные пространства.

  • tsman.cpp: Реализует методы Tsman.

4.23. Блок TRIX

Этот ядерный блок ответственен за обработку внутренних триггеров и уникальных индексов. TRIX, подобно DBUTIL, является сервисным блоком, содержащим много вспомогательных функций для создания индексов и обработки сигналов между узлами. Это осуществляется в следующих файлах в storage/ndb/src/kernel/blocks/trix:

  • Trix.hpp: Определяет класс Trix, наряду со структурами, представляющими подписные данные и отчеты (для связи с SUMA) и данные об узле (необходимые, общаясь с удаленными блоками TRIX).

  • Trix.cpp: Реализует методы класса Trix, включая необходимые для того, чтобы принять соответствующие меры в случае неудачи узла.

Поиск

 

Найди своих коллег!

Вы можете направить письмо администратору этой странички, Алексею Паутову. mailto:alexey.v.pautov@mail.ru