wp
This commit is contained in:
@@ -89,6 +89,8 @@ type WriterOptions struct {
|
||||
WAL string
|
||||
DataFreeList *freelist.FreeList
|
||||
IndexFreeList *freelist.FreeList
|
||||
DataFile *os.File
|
||||
IndexFile *os.File
|
||||
//Atree *atree.Atree
|
||||
ExitCh chan struct{}
|
||||
WaitGroup *sync.WaitGroup
|
||||
@@ -122,9 +124,12 @@ func NewWriter(opt WriterOptions) (*Writer, error) {
|
||||
if opt.IndexFreeList == nil {
|
||||
return nil, errors.New("IndexFreeList option is required")
|
||||
}
|
||||
// if opt.Atree == nil {
|
||||
// return nil, errors.New("Atree option is required")
|
||||
// }
|
||||
if opt.DataFile == nil {
|
||||
return nil, errors.New("DataFile option is required")
|
||||
}
|
||||
if opt.IndexFile == nil {
|
||||
return nil, errors.New("IndexFile option is required")
|
||||
}
|
||||
if opt.ExitCh == nil {
|
||||
return nil, errors.New("ExitCh option is required")
|
||||
}
|
||||
@@ -162,6 +167,8 @@ func NewWriter(opt WriterOptions) (*Writer, error) {
|
||||
workerInbox: opt.WorkerInbox,
|
||||
dir: opt.Dir,
|
||||
databaseName: opt.DatabaseName,
|
||||
dataFile: opt.DataFile,
|
||||
indexFile: opt.IndexFile,
|
||||
dataFreeList: opt.DataFreeList,
|
||||
indexFreeList: opt.IndexFreeList,
|
||||
writePreparer: writePreparer,
|
||||
@@ -184,6 +191,7 @@ func NewWriter(opt WriterOptions) (*Writer, error) {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return s, nil
|
||||
}
|
||||
|
||||
@@ -220,28 +228,33 @@ func (s *Writer) packAndWrite() (err error) {
|
||||
prepared := s.writePreparer.Prepare(input)
|
||||
|
||||
//fmt.Printf("prepared: %#v\n", prepared)
|
||||
fmt.Println("prepared")
|
||||
|
||||
// 3. Пишу на диск WAL (append)
|
||||
n, err := s.wal.Write(prepared.Packet)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
//fmt.Printf("written to wal: % x\n", prepared.Packet)
|
||||
if n != len(prepared.Packet) {
|
||||
return fmt.Errorf("written %d != packet size %d", n, len(prepared.Packet))
|
||||
}
|
||||
if err = s.wal.Sync(); err != nil {
|
||||
return
|
||||
}
|
||||
fmt.Println("synced to wal")
|
||||
|
||||
// 4. Пишу в atree сторінки
|
||||
err = WriteDataPages(s.dataFile, prepared.WriteToData)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
fmt.Println("written to data")
|
||||
err = WriteIndexPages(s.indexFile, prepared.WriteToIndex)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
fmt.Println("written to index")
|
||||
|
||||
// 6. відправляю input - worker-у
|
||||
|
||||
@@ -300,6 +313,7 @@ func (s *Writer) packAndWrite() (err error) {
|
||||
s.workerInbox.Push(Changes{
|
||||
Commits: prepared.Commits,
|
||||
})
|
||||
fmt.Println("pushed commits")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -345,6 +359,9 @@ type PageToWrite struct {
|
||||
|
||||
func WriteDataPages(file *os.File, pages []PageToWrite) (err error) {
|
||||
for _, p := range pages {
|
||||
fmt.Println("pageNo: %d\n", p.PageNo)
|
||||
}
|
||||
for _, p := range pages {
|
||||
if len(p.Content) != DataPageSize {
|
||||
return fmt.Errorf("wrong data page size: %d", len(p.Content))
|
||||
}
|
||||
@@ -354,7 +371,7 @@ func WriteDataPages(file *os.File, pages []PageToWrite) (err error) {
|
||||
)
|
||||
n, err = file.WriteAt(p.Content, int64(off))
|
||||
if err != nil {
|
||||
return
|
||||
return fmt.Errorf("file.WriteAt: %s; off=%d", err, off)
|
||||
}
|
||||
if n != DataPageSize {
|
||||
return fmt.Errorf("write %d instead of %d", n, DataPageSize)
|
||||
|
||||
Reference in New Issue
Block a user