/
githubmirror
/
ydb-go-sdk
Обзор
Документация
Войти
/
githubmirror
/
ydb-go-sdk
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
internal/topic/topicreadercommon/one_time_reader.go
46 строк
820 B
Timofey Koolin
Prevented create decoder instance until start read a message from topics
05 фев 2025, 23:20
05 фев 2025, 23:20
dcbcdd3
Код
Авторство
О чём код?
package topicreadercommon import ( "io" ) type oneTimeReader struct { err error reader io.Reader // prevent early create decoder, because it can consume a lot of memory // https://github.com/ydb-platform/ydb-go-sdk/issues/1341 readerMaker readerMaker } type readerMaker func() io.Reader func newOneTimeReader(readerMaker readerMaker) oneTimeReader { return oneTimeReader{ readerMaker: readerMaker, } } func newOneTimeReaderFromReader(reader io.Reader) oneTimeReader { maker := func() io.Reader { return reader } return newOneTimeReader(maker) } func (s *oneTimeReader) Read(p []byte) (n int, err error) { if s.err != nil { return 0, s.err } if s.reader == nil { s.reader = s.readerMaker() } n, err = s.reader.Read(p) if err != nil { s.err = err s.reader = nil } return n, err }