wal

package
v0.0.0-...-e558f2e Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 23, 2024 License: MIT Imports: 13 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Controller

type Controller struct {
	// contains filtered or unexported fields
}

Controller - адаптер контроллера базы данных для работы WAL журнала предзаписи.

func NewController

func NewController(
	storageController StorageController,
	fs afero.Fs,
	logger *slog.Logger,
	flushingBatchSize int,
	flushingBatchTimeout time.Duration,
	maxSegmentSize int,
	dataDirectory string,
) (*Controller, error)

func (*Controller) Execute

func (c *Controller) Execute(command *querylang.Command) (string, error)

Execute адаптер для выполнения команд БД. Все операции чтения напрямую делегируются нижележащему контроллеру. Операции записи перед выполнением добавляются в WAL журнал. Команда записи делегируется нижележащему контроллеру только в случае успешной записи в WAL журнал.

func (*Controller) Serve

func (c *Controller) Serve(ctx context.Context) error

Serve - сервисная функция для обслуживания WAL журнала. Ее необходимо запускать в фоне работы приложения для корректной работы журнала. Функция обеспечивает периодический сброс накопленных команд на жесткий диск. Завершается по получению сигнала отмены контекста.

type LSN

type LSN struct {
	SessionID uint64
	SeqID     uint64
}

LSN - Log Sequence Number, уникальный идентификатор записи в WAL журнале. Состоит из двух частей. SessionID - идентификатор сеанса работы сервера, который генерируется как метка времени запуска. SeqID - идентификатор выполняемой операции, генерируется как последовательное число.

func (LSN) Compare

func (lsn LSN) Compare(compared LSN) int

type Log

type Log struct {
	// contains filtered or unexported fields
}

Log - сервис для работы WAL журналом. Обеспечивает операции добавления команд в журнал, их извлечение и процедуру обслуживания.

func NewLog

func NewLog(
	fs afero.Fs,
	logger *slog.Logger,
	flushingBatchSize int,
	flushingBatchTimeout time.Duration,
	maxSegmentSize int,
	dataDirectory string,
) (*Log, error)

func (*Log) Add

func (l *Log) Add(command *querylang.Command) error

Add - добавляет команду в журнал WAL. Команда отправляется сначала в буфер команд. Сброс команд из буфера в журнал записи осуществляется по достижении лимита flushingBatchSize или по срабатыванию таймера flushingBatchTimeout. Операция возвращает управление только после записи всех данных на жесткий диск.

func (*Log) Restore

func (l *Log) Restore() ([]*querylang.Command, error)

Restore - восстанавливает команды из WAL журнала.

func (*Log) Serve

func (l *Log) Serve(ctx context.Context)

Serve - сервисная функция для обслуживания WAL журнала. Ее необходимо запускать в фоне работы приложения для корректной работы журнала. Функция обеспечивает периодический сброс накопленных команд на жесткий диск. Завершается по получению сигнала отмены контекста.

type LogRecord

type LogRecord struct {
	LSN       LSN
	CommandID querylang.CommandID
	Arguments []string
}

type LogTask

type LogTask struct {
	Record *LogRecord
	Err    chan error
}

type Reader

type Reader struct {
	// contains filtered or unexported fields
}

Reader - сервис для вычитывания записей из WAL журнала.

func NewReader

func NewReader(fs afero.Fs, directory string) *Reader

func (*Reader) ReadRecords

func (r *Reader) ReadRecords() ([]*LogRecord, error)

ReadRecords - вычитывает ранее записанные команды из WAL журнала. Для этого последовательно читает данные из файлов, а затем сортирует их по меткам LSN.

type StorageController

type StorageController interface {
	Execute(command *querylang.Command) (string, error)
}

type Writer

type Writer struct {
	// contains filtered or unexported fields
}

Writer отвечает за запись элементов WAL журнала в файлы.

func NewWriter

func NewWriter(
	fs afero.Fs,
	logger *slog.Logger,
	maxSegmentSize int,
	directory string,
	sessionID uint64,
) (*Writer, error)

func (*Writer) WriteRecords

func (w *Writer) WriteRecords(records []*LogRecord) error

WriteRecords записывает пачку элементов журнала в текущий файл сегмента. Если сегмента еще не существует или достигнут лимит размера maxSegmentSize, то осуществляет ротацию сегмента на новый файл.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL