diff --git a/pkg/vm/engine/tae/dataio/segmentio/segment_test.go b/pkg/vm/engine/tae/dataio/segmentio/segment_test.go index f2688bb17f2adb4b269083e75be415e36fda38ef..22d4c182c07c8b32e8c5329d90a4688624f41188 100644 --- a/pkg/vm/engine/tae/dataio/segmentio/segment_test.go +++ b/pkg/vm/engine/tae/dataio/segmentio/segment_test.go @@ -99,7 +99,7 @@ func TestSegmentFile_Replay(t *testing.T) { } seg = SegmentFileIOOpenFactory(name, id) - cache := bytes.NewBuffer(make([]byte, 10240*4096)) + cache := bytes.NewBuffer(make([]byte, 2*1024*1024)) err := seg.Replay(colCnt, indexCnt, cache) assert.Nil(t, err) for i := 0; i < 20; i++ { diff --git a/pkg/vm/engine/tae/layout/segment/log.go b/pkg/vm/engine/tae/layout/segment/log.go index 449a7122e86152d1f4350eb55560c72d87ce5957..34adf583b0cab680e1f5e9b360cc5c7882dbd8fd 100644 --- a/pkg/vm/engine/tae/layout/segment/log.go +++ b/pkg/vm/engine/tae/layout/segment/log.go @@ -154,14 +154,14 @@ func (l *Log) replayData(data *bytes.Buffer, offset int64) (pos int, hole uint32 return 0, hole, err } if n == 0 { - if int(l.logFile.segment.super.blockSize) == cache.Len() { + if int(l.logFile.segment.super.inodeSize) == cache.Len() { break } - cache = bytes.NewBuffer(cache.Bytes()[l.logFile.segment.super.blockSize-magicLen:]) - hole += l.logFile.segment.super.blockSize + cache = bytes.NewBuffer(cache.Bytes()[l.logFile.segment.super.inodeSize-magicLen:]) + hole += l.logFile.segment.super.inodeSize continue } - seekLen := l.logFile.segment.super.blockSize - (uint32(n) % l.logFile.segment.super.blockSize) + seekLen := l.logFile.segment.super.inodeSize - (uint32(n) % l.logFile.segment.super.inodeSize) if file.snode.state == REMOVE { l.logFile.segment.nodes[file.name] = file } else { @@ -266,7 +266,7 @@ func (l *Log) Append(file *BlockFile) error { return err } } - ibufLen := (segment.super.blockSize - (uint32(ibuffer.Len()) % segment.super.blockSize)) + uint32(ibuffer.Len()) + ibufLen := (segment.super.inodeSize - (uint32(ibuffer.Len()) % segment.super.inodeSize)) + uint32(ibuffer.Len()) offset, allocated := l.allocator.Allocate(uint64(ibufLen)) if n, err := segment.segFile.WriteAt(ibuffer.Bytes(), int64(offset+LOG_START)); err != nil || n != ibuffer.Len() { return err diff --git a/pkg/vm/engine/tae/layout/segment/segment.go b/pkg/vm/engine/tae/layout/segment/segment.go index 27f2d641c4ed04eee8c96f62b87c4ad76d4dbd23..d44e79061f84e6dcec8b70812a0f266e3368bc6e 100644 --- a/pkg/vm/engine/tae/layout/segment/segment.go +++ b/pkg/vm/engine/tae/layout/segment/segment.go @@ -24,19 +24,21 @@ import ( "sync" ) -const INODE_NUM = 10240 +const INODE_NUM = 4096 +const INODE_SIZE = 512 const BLOCK_SIZE = 4096 const SIZE = 4 * 1024 * 1024 * 1024 -const LOG_START = 2 * 4096 -const DATA_START = LOG_START + BLOCK_SIZE*INODE_NUM +const LOG_START = 2 * INODE_SIZE +const DATA_START = LOG_START + INODE_SIZE*INODE_NUM const DATA_SIZE = SIZE - DATA_START const LOG_SIZE = DATA_START - LOG_START -const HOLE_SIZE = 512 * BLOCK_SIZE +const HOLE_SIZE = 512 * INODE_SIZE const MAGIC = 0xFFFFFFFF type SuperBlock struct { version uint64 blockSize uint32 + inodeSize uint32 colCnt uint32 lognode *Inode state StateType @@ -61,6 +63,7 @@ func (s *Segment) Init(name string) error { s.super = SuperBlock{ version: 1, blockSize: BLOCK_SIZE, + inodeSize: INODE_SIZE, } log := &Inode{ magic: MAGIC, @@ -136,7 +139,7 @@ func (s *Segment) Mount() { s.log.seq = seq + 1 s.nodes[logFile.name] = s.log.logFile s.allocator = NewBitmapAllocator(DATA_SIZE, s.GetPageSize()) - s.log.allocator = NewBitmapAllocator(LOG_SIZE, s.GetPageSize()) + s.log.allocator = NewBitmapAllocator(LOG_SIZE, s.GetInodeSize()) } func (s *Segment) Unmount() { @@ -162,6 +165,7 @@ func (s *Segment) Replay(cache *bytes.Buffer) error { s.super = SuperBlock{ version: 1, blockSize: BLOCK_SIZE, + inodeSize: INODE_SIZE, } log := &Inode{ magic: MAGIC, @@ -274,6 +278,10 @@ func (s *Segment) GetPageSize() uint32 { return s.super.blockSize } +func (s *Segment) GetInodeSize() uint32 { + return s.super.inodeSize +} + func (s *Segment) Sync() error { return s.segFile.Sync() } diff --git a/pkg/vm/engine/tae/layout/segment/segment_test.go b/pkg/vm/engine/tae/layout/segment/segment_test.go index c5a0a0349c4b9a0ab89d94e4ecf38a270a9cc913..8cca29973c9101333cf1ebad3c3b80d15d32341a 100644 --- a/pkg/vm/engine/tae/layout/segment/segment_test.go +++ b/pkg/vm/engine/tae/layout/segment/segment_test.go @@ -270,7 +270,7 @@ func TestSegment_Replay2(t *testing.T) { assert.Nil(t, err) seg.Mount() var file *BlockFile - for i := 0; i < 5120; i++ { + for i := 0; i < INODE_NUM/2; i++ { file = seg.NewBlockFile(fmt.Sprintf("test_%d.blk", i)) file.snode.algo = compress.None err = seg.Append(file, []byte(fmt.Sprintf("this is tests %d", i))) @@ -278,7 +278,7 @@ func TestSegment_Replay2(t *testing.T) { err = seg.Append(file, []byte(fmt.Sprintf("this is tests %d", i))) assert.Nil(t, err) } - for i := 5120; i < 10240; i++ { + for i := INODE_NUM / 2; i < INODE_NUM; i++ { file = seg.NewBlockFile(fmt.Sprintf("test_%d.blk", i)) file.snode.algo = compress.None err = seg.Append(file, []byte(fmt.Sprintf("this is tests %d", i))) @@ -293,7 +293,7 @@ func TestSegment_Replay2(t *testing.T) { cache := bytes.NewBuffer(make([]byte, 2*1024*1024)) err = seg1.Replay(cache) assert.Nil(t, err) - assert.Equal(t, 10241, len(seg1.nodes)) + assert.Equal(t, INODE_NUM+1, len(seg1.nodes)) checkSegment(t, &seg, &seg1) }