@@ -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
7678func (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
106113func (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
178162func (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+
205230func (tree * BTree ) Height () int {
206231 height := 0
207232
0 commit comments