This commit is contained in:
2026-06-19 07:25:46 +03:00
parent 06823ee547
commit 2d73ce1727
52 changed files with 5173 additions and 547 deletions

View File

@@ -23,7 +23,7 @@ const (
filePerm = 0770
dumpSnapshotAfterNBytes = 1024 * 1024 * 1024 // 1 GB
dumpSnapshotAfterNBytes = 20 * 1024 // 1024 * 1024 * 1024 // 1 GB
writeBufferSize = 4 * 1024 * 1024
)
@@ -64,19 +64,18 @@ type Writer struct {
indexPagesCount uint32
dataFreeList *freelist.FreeList
indexFreeList *freelist.FreeList
//atree *atree.Atree
dir string
databaseName string
w *bytes.Buffer // wal буфер для упаковки даних перед записом на диск
wal *os.File
dataFile *os.File
indexFile *os.File
input []any
writePreparer *WritePreparer
written int64
isExited bool
exitCh chan struct{}
waitGroup *sync.WaitGroup
dir string
databaseName string
w *bytes.Buffer // wal буфер для упаковки даних перед записом на диск
wal *os.File
dataFile *os.File
indexFile *os.File
input []any
writePreparer *WritePreparer
written int64
isExited bool
exitCh chan struct{}
waitGroup *sync.WaitGroup
}
type WriterOptions struct {
@@ -225,7 +224,7 @@ func (s *Writer) packAndWrite() (err error) {
prepared := s.writePreparer.Prepare(input)
//fmt.Printf("prepared: %#v\n", prepared)
fmt.Println("prepared")
//fmt.Println("prepared")
// 3. Пишу на диск WAL (append)
n, err := s.wal.Write(prepared.Packet)
@@ -239,7 +238,8 @@ func (s *Writer) packAndWrite() (err error) {
if err = s.wal.Sync(); err != nil {
return
}
fmt.Println("synced to wal")
s.written += int64(len(prepared.Packet))
//fmt.Println("synced to wal")
// 4. Пишу в atree сторінки
if len(prepared.WriteToData) > 0 {
@@ -250,7 +250,7 @@ func (s *Writer) packAndWrite() (err error) {
if err = s.dataFile.Sync(); err != nil {
return
}
fmt.Println("written to data")
//fmt.Println("written to data")
}
if len(prepared.WriteToIndex) > 0 {
err = WriteIndexPages(s.indexFile, prepared.WriteToIndex)
@@ -260,7 +260,7 @@ func (s *Writer) packAndWrite() (err error) {
if err = s.indexFile.Sync(); err != nil {
return
}
fmt.Println("written to index")
//fmt.Println("written to index")
}
// 6. відправляю input - worker-у
@@ -296,6 +296,8 @@ func (s *Writer) packAndWrite() (err error) {
snapshotNumber := <-snapshotNumberCh
//fmt.Println("got snapshot number:", snapshotNumber)
// копіюю сторінки із delta файла в base файл і потім роблю Truncate
err = s.indexFreeList.Merge()
if err != nil {
@@ -305,6 +307,7 @@ func (s *Writer) packAndWrite() (err error) {
if err != nil {
return
}
//fmt.Println("free lists merged")
var err error
s.wal, err = os.OpenFile(
@@ -315,11 +318,12 @@ func (s *Writer) packAndWrite() (err error) {
if err != nil {
return fmt.Errorf("create new changes file: %s", err)
}
//fmt.Println("new wal created")
} else {
s.workerInbox.Push(Changes{
Commits: prepared.Commits,
})
fmt.Println("pushed commits")
//fmt.Println("pushed commits")
}
return nil
}