Skip to content

Latest commit

 

History

History
56 lines (44 loc) · 3.25 KB

README.md

File metadata and controls

56 lines (44 loc) · 3.25 KB

Шардирование файла.

Пакет предоставляет функционал по шардированию файла и абстрагирует его, до уровня стандартного интерфейса GoLang io.ReadWriteCloser.

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

  • Collection - предоставляет коллекцию шардов файлов, доступные готовые реализации находятся в пакете collection;
  • Namer - предоставляет имя для нового шарда файла, доступные готовые реализации находятся в пакете namer;
  • Rotator - Условия для ротации шардов файла, доступные готовые реализации находятся в пакете rotator;
  • Writer - расширяет стандартный интерфейс GoLang io.WriteCloser под нужды пакета, реализации должны абстрагировать запись в шарды файла, имитируя запись в один файл, доступные готовые реализации находятся в пакете writer;
  • Reader - расширяет стандартный интерфейс GoLang io.ReadCloser под нужды пакета, реализации должны абстрагировать чтение из шардов файла, имитируя чтение из одного файла, доступные готовые реализации находятся в пакете reader.
type CollectionOption func(collection Collection) (Collection, error)

type Collection interface {
	Next() (*os.File, error)
	Count() int
	Namer() Namer
}

type Namer interface {
    Name() string
    SearchRegexp() *regexp.Regexp
    AddExtension(extension string)
}

type Rotator interface {
    Rotate(fileInfo os.FileInfo) bool
}

type WriterOption func(writer Writer) (Writer, error)

type Writer interface {
    io.WriteCloser
    File() (*os.File, error)
    OpenNewFile() error
    Namer() Namer
}

type ReaderOption func(reader Reader) (Reader, error)

type Reader interface {
    io.ReadCloser
    File() (*os.File, error)
    Collection() Collection
}

Пакет предоставляет объект File, который реализует интерфейс io.ReadWriteCloser и синхронизирует компоненты Writer и Reader, во избежание чтения и записи в/из одного шарда файла. Для получения ссылки на новый объект File следует использовать метод NewFile(writer Writer, reader Reader)

Важно. Объект File не является потокобезопасным, весь процесс записи должен проходить последовательно, для избежании повреждения данных.