Skip to content

Commit e221461

Browse files
committed
Changed begins and ends calculation for consistancy
1 parent d55eac8 commit e221461

File tree

2 files changed

+56
-98
lines changed

2 files changed

+56
-98
lines changed

data-node/cache/container.go

+5-6
Original file line numberDiff line numberDiff line change
@@ -71,25 +71,24 @@ func (i *indexItem) MatchRange(begins uint32, ends uint32) []byte {
7171
startIndex := begins - dC.begins
7272
remainSize := dC.Size() - startIndex
7373
if ends < dC.ends {
74-
remainSize = ends - begins + 1
74+
remainSize = ends - begins
7575
}
7676

7777
compiledData = append(compiledData, dC.data[startIndex:startIndex+remainSize]...)
78-
begins += remainSize - 1
78+
begins += remainSize
7979

8080
if begins == ends {
8181
return compiledData
8282
}
83-
84-
// if still needs to be filled, so move one byte forward not to repeat the same byte
85-
begins++
8683
}
8784
}
8885

8986
return nil
9087
}
9188

9289
// Merge returns current size and new size after merge
90+
// ends is the ending index and not included
91+
// begins = 6, ends: 10 length should be 4 indices are 6 7 8 9
9392
func (i *indexItem) Merge(begins uint32, ends uint32, data []byte) (uint64, uint64) {
9493
currentSize := i.Size()
9594

@@ -150,7 +149,7 @@ func (i *indexItem) Merge(begins uint32, ends uint32, data []byte) (uint64, uint
150149
continue
151150
}
152151

153-
mergingContainer.data = append(mergingContainer.data, dC.data[remainsBegins-dC.begins+1:]...)
152+
mergingContainer.data = append(mergingContainer.data, dC.data[remainsBegins-dC.begins:]...)
154153
mergingContainer.ends += dC.ends - remainsBegins
155154

156155
i.dataItems = append(i.dataItems[0:idx], i.dataItems[idx+1:]...)

data-node/cache/container_test.go

+51-92
Original file line numberDiff line numberDiff line change
@@ -138,51 +138,54 @@ func TestIndexItem_MatchRangeV1(t *testing.T) {
138138
dataItems: []dataContainer{
139139
{
140140
begins: 21,
141-
ends: 29,
141+
ends: 30,
142142
data: []byte{0, 1, 2, 3, 4, 5, 6, 7, 8},
143143
},
144144
{
145145
begins: 30,
146-
ends: 35,
146+
ends: 36,
147147
data: []byte{9, 10, 11, 12, 13, 14},
148148
},
149149
{
150150
begins: 37,
151-
ends: 40,
151+
ends: 41,
152152
data: []byte{16, 17, 18, 19},
153153
},
154154
{
155155
begins: 41,
156-
ends: 44,
157-
data: []byte{20, 21, 23, 24},
156+
ends: 45,
157+
data: []byte{20, 21, 22, 23},
158158
},
159159
{
160160
begins: 45,
161-
ends: 50,
162-
data: []byte{25, 26, 27, 28, 29, 30},
161+
ends: 52,
162+
data: []byte{24, 25, 26, 27, 28, 29, 30},
163163
},
164164
},
165165
}
166166

167167
result1 := item.MatchRange(24, 28)
168-
assert.Equal(t, []byte{3, 4, 5, 6, 7}, result1)
168+
assert.Equal(t, []byte{3, 4, 5, 6}, result1)
169169

170170
result2 := item.MatchRange(21, 29)
171-
assert.Equal(t, []byte{0, 1, 2, 3, 4, 5, 6, 7, 8}, result2)
171+
assert.Equal(t, []byte{0, 1, 2, 3, 4, 5, 6, 7}, result2)
172+
173+
result2_1 := item.MatchRange(21, 30)
174+
assert.Equal(t, []byte{0, 1, 2, 3, 4, 5, 6, 7, 8}, result2_1)
172175

173176
result3 := item.MatchRange(28, 33)
174-
assert.Equal(t, []byte{7, 8, 9, 10, 11, 12}, result3)
177+
assert.Equal(t, []byte{7, 8, 9, 10, 11}, result3)
175178

176179
result4 := item.MatchRange(28, 38)
177180
assert.Nil(t, result4)
178181

179-
result5 := item.MatchRange(37, 50)
180-
assert.Equal(t, []byte{16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30}, result5)
182+
result5 := item.MatchRange(37, 52)
183+
assert.Equal(t, []byte{16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30}, result5)
181184

182185
result6 := item.MatchRange(19, 28)
183186
assert.Nil(t, result6)
184187

185-
result7 := item.MatchRange(37, 51)
188+
result7 := item.MatchRange(36, 51)
186189
assert.Nil(t, result7)
187190

188191
result8 := item.MatchRange(0, 0)
@@ -245,69 +248,60 @@ func TestIndexItem_MergeV1(t *testing.T) {
245248
dataItems: []dataContainer{
246249
{
247250
begins: 21,
248-
ends: 29,
251+
ends: 30,
249252
data: []byte{0, 1, 2, 3, 4, 5, 6, 7, 8},
250253
},
251254
{
252255
begins: 24,
253-
ends: 28,
256+
ends: 29,
254257
data: []byte{3, 4, 5, 6, 7},
255258
},
256259
{
257260
begins: 27,
258-
ends: 32,
261+
ends: 33,
259262
data: []byte{6, 7, 8, 9, 10, 11},
260263
},
261264
{
262265
begins: 41,
263-
ends: 44,
266+
ends: 45,
264267
data: []byte{20, 21, 23, 24},
265268
},
266269
{
267270
begins: 45,
268-
ends: 50,
271+
ends: 51,
269272
data: []byte{25, 26, 27, 28, 29, 30},
270273
},
271274
},
272275
}
273276

274-
item.Merge(33, 39, []byte{12, 13, 14, 15, 16, 17, 18})
277+
item.Merge(34, 38, []byte{13, 14, 15, 16})
275278

276279
assert.Equal(t,
277280
dataContainer{
278281
data: []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11},
279282
begins: 21,
280-
ends: 32,
283+
ends: 33,
281284
},
282285
item.dataItems[0],
283286
)
284287

285288
assert.Equal(t,
286289
dataContainer{
287-
data: []byte{12, 13, 14, 15, 16, 17, 18},
288-
begins: 33,
289-
ends: 39,
290+
data: []byte{13, 14, 15, 16},
291+
begins: 34,
292+
ends: 38,
290293
},
291294
item.dataItems[1],
292295
)
293296

294297
assert.Equal(t,
295298
dataContainer{
296299
begins: 41,
297-
ends: 44,
298-
data: []byte{20, 21, 23, 24},
300+
ends: 51,
301+
data: []byte{20, 21, 23, 24, 25, 26, 27, 28, 29, 30},
299302
},
300303
item.dataItems[2],
301304
)
302-
303-
assert.Equal(t,
304-
dataContainer{
305-
begins: 45,
306-
ends: 50,
307-
data: []byte{25, 26, 27, 28, 29, 30},
308-
},
309-
item.dataItems[3],
310-
)
311305
}
312306

313307
func TestIndexItem_MergeV2(t *testing.T) {
@@ -319,27 +313,27 @@ func TestIndexItem_MergeV2(t *testing.T) {
319313
dataItems: []dataContainer{
320314
{
321315
begins: 21,
322-
ends: 29,
316+
ends: 30,
323317
data: []byte{0, 1, 2, 3, 4, 5, 6, 7, 8},
324318
},
325319
{
326320
begins: 24,
327-
ends: 28,
321+
ends: 29,
328322
data: []byte{3, 4, 5, 6, 7},
329323
},
330324
{
331325
begins: 27,
332-
ends: 32,
326+
ends: 33,
333327
data: []byte{6, 7, 8, 9, 10, 11},
334328
},
335329
{
336330
begins: 41,
337-
ends: 44,
331+
ends: 45,
338332
data: []byte{20, 21, 23, 24},
339333
},
340334
{
341335
begins: 45,
342-
ends: 50,
336+
ends: 51,
343337
data: []byte{25, 26, 27, 28, 29, 30},
344338
},
345339
},
@@ -359,7 +353,7 @@ func TestIndexItem_MergeV2(t *testing.T) {
359353
assert.Equal(t,
360354
dataContainer{
361355
begins: 41,
362-
ends: 44,
356+
ends: 45,
363357
data: []byte{20, 21, 23, 24},
364358
},
365359
item.dataItems[1],
@@ -368,7 +362,7 @@ func TestIndexItem_MergeV2(t *testing.T) {
368362
assert.Equal(t,
369363
dataContainer{
370364
begins: 45,
371-
ends: 50,
365+
ends: 51,
372366
data: []byte{25, 26, 27, 28, 29, 30},
373367
},
374368
item.dataItems[2],
@@ -384,39 +378,39 @@ func TestIndexItem_MergeV3(t *testing.T) {
384378
dataItems: []dataContainer{
385379
{
386380
begins: 21,
387-
ends: 29,
381+
ends: 30,
388382
data: []byte{0, 1, 2, 3, 4, 5, 6, 7, 8},
389383
},
390384
{
391385
begins: 24,
392-
ends: 28,
386+
ends: 29,
393387
data: []byte{3, 4, 5, 6, 7},
394388
},
395389
{
396390
begins: 27,
397-
ends: 32,
391+
ends: 33,
398392
data: []byte{6, 7, 8, 9, 10, 11},
399393
},
400394
{
401395
begins: 41,
402-
ends: 44,
396+
ends: 45,
403397
data: []byte{20, 21, 23, 24},
404398
},
405399
{
406400
begins: 45,
407-
ends: 50,
401+
ends: 51,
408402
data: []byte{25, 26, 27, 28, 29, 30},
409403
},
410404
},
411405
}
412406

413-
item.Merge(21, 50, []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30})
407+
item.Merge(21, 51, []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30})
414408

415409
assert.Equal(t,
416410
dataContainer{
417411
data: []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30},
418412
begins: 21,
419-
ends: 50,
413+
ends: 51,
420414
},
421415
item.dataItems[0],
422416
)
@@ -431,33 +425,33 @@ func TestIndexItem_MergeV4(t *testing.T) {
431425
dataItems: []dataContainer{
432426
{
433427
begins: 21,
434-
ends: 29,
428+
ends: 30,
435429
data: []byte{0, 1, 2, 3, 4, 5, 6, 7, 8},
436430
},
437431
{
438432
begins: 24,
439-
ends: 28,
433+
ends: 29,
440434
data: []byte{3, 4, 5, 6, 7},
441435
},
442436
{
443437
begins: 27,
444-
ends: 32,
438+
ends: 33,
445439
data: []byte{6, 7, 8, 9, 10, 11},
446440
},
447441
{
448442
begins: 41,
449-
ends: 44,
443+
ends: 45,
450444
data: []byte{20, 21, 23, 24},
451445
},
452446
{
453447
begins: 45,
454-
ends: 50,
448+
ends: 51,
455449
data: []byte{25, 26, 27, 28, 29, 30},
456450
},
457451
},
458452
}
459453

460-
item.Merge(0, 0, []byte{0, 1, 2, 3, 4, 5, 6})
454+
oldSize, newSize := item.Merge(0, 0, []byte{0, 1, 2, 3, 4, 5, 6})
461455

462456
assert.Equal(t,
463457
dataContainer{
@@ -467,45 +461,10 @@ func TestIndexItem_MergeV4(t *testing.T) {
467461
},
468462
item.dataItems[0],
469463
)
470-
}
471-
472-
func TestIndexItem_MergeV5(t *testing.T) {
473-
item := indexItem{
474-
sha512Hex: "test",
475-
expiresAt: time.Now(),
476-
sortIndex: 0,
477-
478-
dataItems: []dataContainer{
479-
{
480-
begins: 21,
481-
ends: 29,
482-
data: []byte{0, 1, 2, 3, 4, 5, 6, 7, 8},
483-
},
484-
{
485-
begins: 24,
486-
ends: 28,
487-
data: []byte{3, 4, 5, 6, 7},
488-
},
489-
{
490-
begins: 27,
491-
ends: 32,
492-
data: []byte{6, 7, 8, 9, 10, 11},
493-
},
494-
{
495-
begins: 41,
496-
ends: 44,
497-
data: []byte{20, 21, 23, 24},
498-
},
499-
{
500-
begins: 45,
501-
ends: 50,
502-
data: []byte{25, 26, 27, 28, 29, 30},
503-
},
504-
},
505-
}
506-
507-
oldSize, newSize := item.Merge(0, 0, []byte{0, 1, 2, 3, 4, 5, 6})
508464

509465
assert.Equal(t, uint64(30), oldSize)
510466
assert.Equal(t, uint64(7), newSize)
467+
468+
result1 := item.MatchRange(2, 5)
469+
assert.Equal(t, []byte{2, 3, 4}, result1)
511470
}

0 commit comments

Comments
 (0)