logbuf

package
v0.7.0 Latest Latest
Warning

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

Go to latest
Published: Oct 27, 2026 License: AGPL-3.0 Imports: 2 Imported by: 0

Documentation

Overview

Package logbuf — журнал в память, который проба читает, ПОКА в него пишет чужая горутина.

Зачем, если у обработчика журнала свой мьютекс

Обработчик `log/slog` сериализует ЗАПИСИ между собой, и только их: читатель буфера под этот мьютекс не заходит. Голый `bytes.Buffer` поэтому безопасен, пока писатель — сама проба, и становится гонкой, как только пишет исполнитель асинхронной операции, а проба читает из своей горутины (или из горутины `require.Eventually`).

Почему такая гонка краснеет на чужом запросе слияния

Без детектора такая гонка отказа почти не даёт: чтение, застигнутое посреди записи, обычно отдаёт лишь неполный текст. Под детектором — не на каждом процессе (замер 2026-09-15 на пробе пути приглашения: 12 процессов из 100): он сообщает только о той паре доступов, которую застал без упорядочивающей синхронизации, а посторонняя синхронизация между писателем и читателем то случается, то нет. Отсюда форма отказа — проба, зелёная на стволе, краснеет на запросе слияния, который её не трогал. Буфер ниже делает упорядочение обязательным, а не случайным.

Чего здесь нет — намеренно

Нет `Bytes()`: срез, отданный из-под замка, делит память с буфером, и следующая запись (рост, копирование) пишет в неё уже без замка — та же гонка, перенесённая на одну строку ниже. `String()` отдаёт копию.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Buffer

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

Buffer — `io.Writer` для обработчика журнала; нулевое значение готово к работе. Копировать после первого использования нельзя (несёт мьютекс).

func (*Buffer) String

func (b *Buffer) String() string

String — копия накопленного на момент вызова.

func (*Buffer) Write

func (b *Buffer) Write(p []byte) (int, error)

Write дописывает запись под замком — тем же, под которым её читают.

Jump to

Keyboard shortcuts

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