Skip to content

Commit 1d7c8b4

Browse files
committed
Refactor
1 parent 77f437d commit 1d7c8b4

9 files changed

Lines changed: 241 additions & 220 deletions

File tree

secretary/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ one: clean
88
go test ./... -v -run $(test)
99

1010
mul: clean
11-
go test ./... -v -run "^$(test)$$"
11+
go test ./... -v -run "^$(test).*$$"
1212

1313
test: clean
1414
go test ./... -cover -coverprofile=cover.txt

secretary/btree.go

Lines changed: 49 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -159,41 +159,19 @@ func (tree *BTree) writeRoot() error {
159159
return tree.WriteNodeAtIndex(tree.root, 0)
160160
}
161161

162-
func (s *Secretary) NewBTreeReadHeader(collectionName string) (*BTree, error) {
163-
temp, err := s.NewBTree(collectionName,
164-
10,
165-
0,
166-
0,
167-
125,
168-
0,
169-
)
170-
if err != nil {
171-
return nil, err
172-
}
173-
174-
headerData, err := temp.nodePager.ReadAt(0, SECRETARY_HEADER_LENGTH)
175-
if err != nil {
176-
return nil, err
177-
}
178-
179-
data := bytes.Trim(headerData, "-")[len(SECRETARY):]
180-
var deserializedTree BTree
181-
err = binstruct.Deserialize(data, &deserializedTree)
182-
if err != nil {
183-
return nil, err
184-
}
185-
186-
return &deserializedTree, nil
187-
}
188-
189162
// func (s *Secretary) NewBTreeReadHeader(collectionName string) (*BTree, error) {
190-
// temptree := BTree{CollectionName: collectionName}
191-
// nodePager, err := temptree.NewNodePager("index", 0)
163+
// temp, err := s.NewBTree(collectionName,
164+
// 10,
165+
// 0,
166+
// 0,
167+
// 125,
168+
// 0,
169+
// )
192170
// if err != nil {
193171
// return nil, err
194172
// }
195173

196-
// headerData, err := nodePager.ReadAt(0, SECRETARY_HEADER_LENGTH)
174+
// headerData, err := temp.nodePager.ReadAt(0, SECRETARY_HEADER_LENGTH)
197175
// if err != nil {
198176
// return nil, err
199177
// }
@@ -205,27 +183,50 @@ func (s *Secretary) NewBTreeReadHeader(collectionName string) (*BTree, error) {
205183
// return nil, err
206184
// }
207185

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-
// }
186+
// return &deserializedTree, nil
187+
// }
219188

220-
// tree.NodeSeq = deserializedTree.NodeSeq
221-
// tree.NumNodeSeq = deserializedTree.NumNodeSeq
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+
}
222195

223-
// // if err := tree.readRoot(); err != nil {
224-
// // return nil, err
225-
// // }
196+
headerData, err := nodePager.ReadAt(0, SECRETARY_HEADER_LENGTH)
197+
if err != nil {
198+
return nil, err
199+
}
226200

227-
// return tree, nil
228-
// }
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+
// fmt.Println("--> ", collectionName, err.Error())
225+
// return nil, err
226+
// }
227+
228+
return tree, nil
229+
}
229230

230231
func (tree *BTree) Height() int {
231232
height := 0

secretary/btree_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
)
1010

1111
func TestBTreeSerialization(t *testing.T) {
12-
s, originalTree := dummyTree(t, "TestBTreeSerialization", 10)
12+
s, originalTree := dummySecretary(t, "TestBTreeSerialization", 10)
1313

1414
serializedData, err := binstruct.Serialize(originalTree)
1515
if err != nil {
@@ -71,7 +71,7 @@ func TestBtreeInvalid(t *testing.T) {
7171
}
7272

7373
func TestBtreeSaveReadHeader(t *testing.T) {
74-
s, tree := dummyTree(t, "TestBtreeSaveReadHeader", 10)
74+
s, tree := dummySecretary(t, "TestBtreeSaveReadHeader", 10)
7575

7676
err := tree.SaveHeader()
7777
if err != nil {
@@ -98,7 +98,7 @@ func TestBtreeSaveReadHeader(t *testing.T) {
9898
}
9999

100100
func TestBTreeHeight(t *testing.T) {
101-
s, tree := dummyTree(t, "TestBTreeHeight", 4)
101+
s, tree := dummySecretary(t, "TestBTreeHeight", 4)
102102

103103
var keySeq uint64 = 0
104104

@@ -129,7 +129,7 @@ func TestBTreeHeight(t *testing.T) {
129129
}
130130

131131
func TestBTreeClose(t *testing.T) {
132-
s, _ := dummyTree(t, "TestBTreeClose", 4)
132+
s, _ := dummySecretary(t, "TestBTreeClose", 4)
133133

134134
err := s.PagerShutdown()
135135
if err != nil {

secretary/example/main.go

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package main
22

33
import (
4-
"fmt"
54
"os"
65

76
"github.com/codeharik/secretary"
@@ -26,7 +25,7 @@ func main() {
2625

2726
images, imagesErr := s.NewBTree(
2827
"images",
29-
4,
28+
8,
3029
32,
3130
1024*1024,
3231
125,
@@ -36,22 +35,7 @@ func main() {
3635
utils.Log(userErr, imagesErr)
3736
}
3837

39-
var keySeq uint64 = 0
40-
var sortedRecords []*secretary.Record
41-
var sortedKeys [][]byte
42-
var sortedValues []string
43-
44-
for r := 0; r < 64; r++ {
45-
key := []byte(utils.GenerateSeqString(&keySeq, 16, 5))
46-
sortedKeys = append(sortedKeys, key)
47-
48-
sortedRecords = append(sortedRecords, &secretary.Record{
49-
Key: key,
50-
Value: []byte(fmt.Sprint(r + 1)),
51-
})
52-
53-
sortedValues = append(sortedValues, fmt.Sprint(r))
54-
}
38+
_, sortedRecords := secretary.SampleSortedKeyRecords()
5539
images.SortedRecordSet(sortedRecords)
5640

5741
for _, r := range sortedRecords {

secretary/helper.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package secretary
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/codeharik/secretary/utils"
7+
)
8+
9+
func SampleSortedKeyRecords() (keys [][]byte, records []*Record) {
10+
var keySeq uint64 = 0
11+
var sortedRecords []*Record
12+
var sortedKeys [][]byte
13+
var sortedValues []string
14+
15+
for r := 0; r < 64; r++ {
16+
key := []byte(utils.GenerateSeqString(&keySeq, 16, 5))
17+
sortedKeys = append(sortedKeys, key)
18+
19+
sortedRecords = append(sortedRecords, &Record{
20+
Key: key,
21+
Value: key,
22+
})
23+
24+
sortedValues = append(sortedValues, fmt.Sprint(r))
25+
}
26+
return sortedKeys, sortedRecords
27+
}

secretary/node.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ func (tree *BTree) NodeVerify(node *Node) error {
3636
return ErrorKeysGTEOrder
3737
}
3838
if node != tree.root && len(node.Keys) < int(tree.minNumKeys) {
39+
fmt.Println(node.NodeID, utils.ArrayToStrings(node.Keys), tree.minNumKeys)
3940
return ErrorKeysLTOrder
4041
}
4142

@@ -121,7 +122,7 @@ func (tree *BTree) recursiveNodeVerify(node *Node) []error {
121122
if node != nil {
122123
err := tree.NodeVerify(node)
123124
if err != nil {
124-
rErrs = append(rErrs, err)
125+
rErrs = append(rErrs, fmt.Errorf("%d : %v", node.NodeID, err))
125126
}
126127
for _, n := range node.children {
127128
cErrs := tree.recursiveNodeVerify(n)
@@ -361,6 +362,11 @@ func (tree *BTree) SortedRecordSet(sortedRecords []*Record) error {
361362

362363
tree.root = tree.buildInternalNodes(leafNodes)
363364

365+
lastIndex := len(leafNodes) - 1
366+
if lastIndex > 0 {
367+
tree.handleUnderflow(leafNodes[lastIndex])
368+
}
369+
364370
return nil
365371
}
366372

0 commit comments

Comments
 (0)