Skip to content

Commit 77f437d

Browse files
committed
Refactor
1 parent 444efdb commit 77f437d

15 files changed

Lines changed: 183 additions & 113 deletions

secretary/Makefile

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,17 @@ clean:
77
one: clean
88
go test ./... -v -run $(test)
99

10+
mul: clean
11+
go test ./... -v -run "^$(test)$$"
12+
1013
test: clean
11-
go test -cover -coverprofile=cover.txt ./...
14+
go test ./... -cover -coverprofile=cover.txt
1215

1316
vtest: clean
14-
go test -cover -coverprofile=cover.txt -v ./...
17+
go test ./... -v -cover -coverprofile=cover.txt
1518

1619
cover: clean
17-
go test -cover -coverprofile=cover.txt ./...
20+
go test ./... -cover -coverprofile=cover.txt
1821
go tool cover -func=cover.txt
1922
go tool cover -html=cover.txt
2023

secretary/btree.go

Lines changed: 72 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -70,18 +70,25 @@ func (s *Secretary) NewBTree(
7070
}
7171
tree.recordPagers = recordPagers
7272

73+
s.AddTree(tree)
74+
7375
return tree, nil
7476
}
7577

7678
func (tree *BTree) close() error {
7779
errs := []error{}
78-
if err := tree.nodePager.file.Close(); err != nil {
79-
errs = append(errs, err)
80+
81+
if tree.nodePager != nil {
82+
if err := tree.nodePager.file.Close(); err != nil {
83+
errs = append(errs, err)
84+
}
8085
}
8186

8287
for _, pager := range tree.recordPagers {
83-
if err := pager.file.Close(); err != nil {
84-
errs = append(errs, err)
88+
if pager != nil {
89+
if err := pager.file.Close(); err != nil {
90+
errs = append(errs, err)
91+
}
8592
}
8693
}
8794

@@ -104,23 +111,7 @@ func (tree *BTree) SaveHeader() error {
104111
}
105112

106113
func (tree *BTree) ReadNodeAtIndex(index uint64) (*Node, error) {
107-
// offset := SECRETARY_HEADER_LENGTH + index*uint64(tree.nodeSize)
108-
109-
// rootBytes, err := tree.nodePager.ReadAt(int64(offset), int32(tree.nodeSize))
110-
// if err != nil {
111-
// return nil, err
112-
// }
113-
114-
// var node Node
115-
// err = binstruct.Deserialize(rootBytes, &node)
116-
// if err != nil {
117-
// return nil, err
118-
// }
119-
120-
// return &node, nil
121-
122114
page, err := tree.nodePager.ReadPage(int64(index))
123-
124115
return page.Data, err
125116
}
126117

@@ -133,7 +124,22 @@ func (tree *BTree) readRoot() error {
133124
return nil
134125
}
135126

136-
func (tree *BTree) SaveNode(node *Node) error {
127+
func (tree *BTree) WriteNodeAtIndex(node *Node, index uint64) error {
128+
node.Index = index
129+
if node.parent != nil {
130+
node.ParentIndex = node.parent.Index
131+
}
132+
// if node.next != nil {
133+
// node.NextIndex = node.next.Index
134+
// }
135+
// if node.prev != nil {
136+
// node.PrevIndex = node.prev.Index
137+
// }
138+
139+
return tree.nodePager.WritePage(node, int64(index))
140+
}
141+
142+
func (tree *BTree) WriteNode(node *Node) error {
137143
if node.Index == 0 {
138144
lastFileIndex, err := tree.nodePager.NumPages()
139145
if err != nil {
@@ -142,37 +148,15 @@ func (tree *BTree) SaveNode(node *Node) error {
142148
if uint64(lastFileIndex) != tree.NumNodeSeq {
143149
return fmt.Errorf("NumNodes dont match %d != %d", lastFileIndex, tree.NumNodeSeq)
144150
}
145-
tree.SaveNodeAtIndex(node, uint64(lastFileIndex))
151+
tree.WriteNodeAtIndex(node, uint64(lastFileIndex))
146152
} else {
147-
tree.SaveNodeAtIndex(node, uint64(node.Index))
153+
tree.WriteNodeAtIndex(node, uint64(node.Index))
148154
}
149155
return nil
150156
}
151157

152-
func (tree *BTree) SaveNodeAtIndex(node *Node, index uint64) error {
153-
node.Index = index
154-
if node.parent != nil {
155-
node.ParentIndex = node.parent.Index
156-
}
157-
if node.next != nil {
158-
node.NextIndex = node.next.Index
159-
}
160-
if node.prev != nil {
161-
node.PrevIndex = node.prev.Index
162-
}
163-
164-
rootHeader, err := binstruct.Serialize(node)
165-
if err != nil {
166-
return err
167-
}
168-
169-
offset := SECRETARY_HEADER_LENGTH + index*uint64(tree.nodeSize)
170-
171-
return tree.nodePager.WriteAt(rootHeader, int64(offset))
172-
}
173-
174-
func (tree *BTree) saveRoot() error {
175-
return tree.SaveNodeAtIndex(tree.root, 0)
158+
func (tree *BTree) writeRoot() error {
159+
return tree.WriteNodeAtIndex(tree.root, 0)
176160
}
177161

178162
func (s *Secretary) NewBTreeReadHeader(collectionName string) (*BTree, error) {
@@ -202,6 +186,47 @@ func (s *Secretary) NewBTreeReadHeader(collectionName string) (*BTree, error) {
202186
return &deserializedTree, nil
203187
}
204188

189+
// func (s *Secretary) NewBTreeReadHeader(collectionName string) (*BTree, error) {
190+
// temptree := BTree{CollectionName: collectionName}
191+
// nodePager, err := temptree.NewNodePager("index", 0)
192+
// if err != nil {
193+
// return nil, err
194+
// }
195+
196+
// headerData, err := nodePager.ReadAt(0, SECRETARY_HEADER_LENGTH)
197+
// if err != nil {
198+
// return nil, err
199+
// }
200+
201+
// data := bytes.Trim(headerData, "-")[len(SECRETARY):]
202+
// var deserializedTree BTree
203+
// err = binstruct.Deserialize(data, &deserializedTree)
204+
// if err != nil {
205+
// return nil, err
206+
// }
207+
208+
// tree, err := s.NewBTree(
209+
// collectionName,
210+
// deserializedTree.Order,
211+
// deserializedTree.NumLevel,
212+
// deserializedTree.BaseSize,
213+
// deserializedTree.Increment,
214+
// deserializedTree.CompactionBatchSize,
215+
// )
216+
// if err != nil {
217+
// return nil, err
218+
// }
219+
220+
// tree.NodeSeq = deserializedTree.NodeSeq
221+
// tree.NumNodeSeq = deserializedTree.NumNodeSeq
222+
223+
// // if err := tree.readRoot(); err != nil {
224+
// // return nil, err
225+
// // }
226+
227+
// return tree, nil
228+
// }
229+
205230
func (tree *BTree) Height() int {
206231
height := 0
207232

secretary/btree_test.go

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,10 @@ import (
88
"github.com/codeharik/secretary/utils/binstruct"
99
)
1010

11-
// TestBTreeSerialization tests the serialization and deserialization of BPlusTree
1211
func TestBTreeSerialization(t *testing.T) {
13-
_, originalTree := dummyTree(t, "TestBTreeSerialization", 10)
12+
s, originalTree := dummyTree(t, "TestBTreeSerialization", 10)
1413

15-
// Serialize the tree
1614
serializedData, err := binstruct.Serialize(originalTree)
17-
// serializedData, err := originalTree.Serialize()
1815
if err != nil {
1916
t.Fatalf("Serialization failed: %v", err)
2017
}
@@ -33,6 +30,8 @@ func TestBTreeSerialization(t *testing.T) {
3330
if !eq || err != nil {
3431
t.Fatalf("\nShould be Equal\n")
3532
}
33+
34+
s.PagerShutdown()
3635
}
3736

3837
func TestBtreeInvalid(t *testing.T) {
@@ -67,10 +66,12 @@ func TestBtreeInvalid(t *testing.T) {
6766
if invalidNameErr == nil || invalidIncrementErr == nil || invalidOrderErr == nil {
6867
t.Fatal(invalidNameErr, invalidIncrementErr, invalidOrderErr)
6968
}
69+
70+
s.PagerShutdown()
7071
}
7172

72-
func TestSaveReadHeader(t *testing.T) {
73-
s, tree := dummyTree(t, "TestSaveHeader", 10)
73+
func TestBtreeSaveReadHeader(t *testing.T) {
74+
s, tree := dummyTree(t, "TestBtreeSaveReadHeader", 10)
7475

7576
err := tree.SaveHeader()
7677
if err != nil {
@@ -92,10 +93,12 @@ func TestSaveReadHeader(t *testing.T) {
9293
if dErr != nil || tErr != nil || bytes.Compare(tJson, dJson) != 0 {
9394
t.Log("\n", string(tJson), "\n", string(dJson))
9495
}
96+
97+
s.PagerShutdown()
9598
}
9699

97100
func TestBTreeHeight(t *testing.T) {
98-
_, tree := dummyTree(t, "TestSaveHeader", 4)
101+
s, tree := dummyTree(t, "TestBTreeHeight", 4)
99102

100103
var keySeq uint64 = 0
101104

@@ -121,12 +124,14 @@ func TestBTreeHeight(t *testing.T) {
121124
if tree.Height() != 3 {
122125
t.Fatalf("Expected height %d", tree.Height())
123126
}
127+
128+
s.PagerShutdown()
124129
}
125130

126131
func TestBTreeClose(t *testing.T) {
127-
_, tree := dummyTree(t, "TestSaveHeader", 4)
132+
s, _ := dummyTree(t, "TestBTreeClose", 4)
128133

129-
err := tree.close()
134+
err := s.PagerShutdown()
130135
if err != nil {
131136
t.Fatal(err)
132137
}

secretary/datalocation.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,6 @@ func (nodes *Node) NewPage(index int64) *Page[*Node] {
2222
}
2323
}
2424

25-
func (records *Record) NewPage(index int64) *Page[*Record] {
26-
return &Page[*Record]{
27-
Index: index,
28-
Data: &Record{},
29-
}
30-
}
31-
3225
func (nodes *Node) FromBytes(data []byte) error {
3326
err := binstruct.Deserialize(data, nodes)
3427
if err != nil {
@@ -37,6 +30,13 @@ func (nodes *Node) FromBytes(data []byte) error {
3730
return nil
3831
}
3932

33+
func (records *Record) NewPage(index int64) *Page[*Record] {
34+
return &Page[*Record]{
35+
Index: index,
36+
Data: &Record{},
37+
}
38+
}
39+
4040
func (records *Record) ToBytes() ([]byte, error) {
4141
return binstruct.Serialize(records)
4242
}

secretary/example/main.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,6 @@ func main() {
3636
utils.Log(userErr, imagesErr)
3737
}
3838

39-
s.AddTree(users)
40-
s.AddTree(images)
41-
4239
var keySeq uint64 = 0
4340
var sortedRecords []*secretary.Record
4441
var sortedKeys [][]byte

0 commit comments

Comments
 (0)