Documentation ¶
Index ¶
- func AddPadding(readBytes int) int
- func CreateEmptyFsBinlog(options Options) (string, error)
- func NewFsBinlog(logger Logger, options Options) (binlog.Binlog, error)
- func NewFsBinlogMasterChange(logger Logger, options Options) (binlog.Binlog, *chan struct{}, error)
- type Logger
- type Options
- type ReadBuffer
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func AddPadding ¶
AddPadding высчитывает размер событий бинлога с учетом alignment (по умолчанию все события выровнены по 4 байта) Типичное использование:
read := 0 for { ... lev, n, err := deserializeLev(payload) n = binlog2.AddPadding(n) payload = payload(n:) read += n ... } return read, err
TODO: get rid of
func CreateEmptyFsBinlog ¶
CreateEmptyFsBinlog создает новый бинлог. Обычная схема такая: движок запускается с флагом --create-binlog и завершает работу, после его запускают на уже существующих файлах
func NewFsBinlog ¶
NewFsBinlog создает объект бинлога с правильными дефолтами
func NewFsBinlogMasterChange ¶
NewFsBinlogMasterChange используется в сценарии replace pid мастера (при апдейте движка). В этом сценарии может получится, что бинлоги дойдут до EOF, но потом что-то ещё запишется потому-что предыдущий мастер ещё жив. Для корректной обработки сценария есть эта функция.
В этом режиме бинлог при получении ошибки EOF вызывает Binlog.ChangeRole с параметром Ready == false. После этого он блокируется на канале, который возвращается из этой функции. Обязанность клиента - дернуть канал, когда станет известно, что предыдущий мастер завершил работу (см. vkd.Options.ReadyHandler). После этого бинлог возвращается к обычной работе и при получении EOF будет вызван Binlog.ChangeRole с Ready == true
Types ¶
type Options ¶
type Options struct { PrefixPath string // путь до бинлога, включающий префикс для файлов финлога (например `some/path/gopusher_binlog`) Magic uint32 // Ожидаемый magic (scheme) движка (0 - если можно открывать любой тип) ReadOnly bool ReplicaMode bool // Бинлог открывается в режиме читающей реплики (постоянно читаем файл, если EOF, ждем новой записи) WriteCrcEveryKB int32 // Как часто нужно писать в бинлог LEV_CRC32 события (по умолчанию defaultWriteCrcEveryKB) MaxChunkSize uint32 // Примерный порог (в байтах) для срабатывания ротации бинлога BuffSizeLimit int // Лимит буффера, при котором он будет передаваться воркеру на запись, если он свободен (по умолчанию равен WriteCrcEveryKB * 1024) HardMemLimit int // Лимит буффера, при котором включается механизм back pressure: Append начнет блокироваться, пока буффер не передастся на запись (по умолчанию defaultHardMemoryLimitKB) EngineIDInCluster uint // Номер данного шарда в кластере, для статы ClusterSize uint // Размер кластера для данного шарда, для статы FlushInterval time.Duration }
type ReadBuffer ¶
type ReadBuffer struct {
// contains filtered or unexported fields
}
func NewReadBuffer ¶
func NewReadBuffer(size int) *ReadBuffer
func (*ReadBuffer) Bytes ¶
func (b *ReadBuffer) Bytes() []byte
func (*ReadBuffer) IsLowFilled ¶
func (b *ReadBuffer) IsLowFilled() bool
func (*ReadBuffer) RemoveProcessed ¶
func (b *ReadBuffer) RemoveProcessed(readBytes int)
func (*ReadBuffer) TryReadFrom ¶
func (b *ReadBuffer) TryReadFrom(r io.Reader) (int, error)
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
internal
|
|
gen
Code generated by vktl/cmd/tlgen2; DO NOT EDIT.
|
Code generated by vktl/cmd/tlgen2; DO NOT EDIT. |
gen/constants
Code generated by vktl/cmd/tlgen2; DO NOT EDIT.
|
Code generated by vktl/cmd/tlgen2; DO NOT EDIT. |
gen/internal
Code generated by vktl/cmd/tlgen2; DO NOT EDIT.
|
Code generated by vktl/cmd/tlgen2; DO NOT EDIT. |
gen/tlfsbinlog
Code generated by vktl/cmd/tlgen2; DO NOT EDIT.
|
Code generated by vktl/cmd/tlgen2; DO NOT EDIT. |