You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							54 lines
						
					
					
						
							1.7 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							54 lines
						
					
					
						
							1.7 KiB
						
					
					
				| package erasure_coding | |
| 
 | |
| import ( | |
| 	"fmt" | |
| 	"os" | |
| 	"testing" | |
| 
 | |
| 	"github.com/stretchr/testify/assert" | |
| 
 | |
| 	"github.com/chrislusf/seaweedfs/weed/storage/needle" | |
| 	"github.com/chrislusf/seaweedfs/weed/storage/types" | |
| ) | |
| 
 | |
| func TestPositioning(t *testing.T) { | |
| 
 | |
| 	ecxFile, err := os.OpenFile("389.ecx", os.O_RDONLY, 0) | |
| 	if err != nil { | |
| 		t.Errorf("failed to open ecx file: %v", err) | |
| 	} | |
| 	defer ecxFile.Close() | |
| 
 | |
| 	stat, _ := ecxFile.Stat() | |
| 	fileSize := stat.Size() | |
| 
 | |
| 	tests := []struct { | |
| 		needleId string | |
| 		offset   int64 | |
| 		size     int | |
| 	}{ | |
| 		{needleId: "0f0edb92", offset: 31300679656, size: 1167}, | |
| 		{needleId: "0ef7d7f8", offset: 11513014944, size: 66044}, | |
| 	} | |
| 
 | |
| 	for _, test := range tests { | |
| 		needleId, _ := types.ParseNeedleId(test.needleId) | |
| 		offset, size, err := SearchNeedleFromSortedIndex(ecxFile, fileSize, needleId, nil) | |
| 		assert.Equal(t, nil, err, "SearchNeedleFromSortedIndex") | |
| 		fmt.Printf("offset: %d size: %d\n", offset.ToAcutalOffset(), size) | |
| 	} | |
| 
 | |
| 	needleId, _ := types.ParseNeedleId("0f087622") | |
| 	offset, size, err := SearchNeedleFromSortedIndex(ecxFile, fileSize, needleId, nil) | |
| 	assert.Equal(t, nil, err, "SearchNeedleFromSortedIndex") | |
| 	fmt.Printf("offset: %d size: %d\n", offset.ToAcutalOffset(), size) | |
| 
 | |
| 	var shardEcdFileSize int64 = 1118830592 // 1024*1024*1024*3 | |
| 	intervals := LocateData(ErasureCodingLargeBlockSize, ErasureCodingSmallBlockSize, DataShardsCount*shardEcdFileSize, offset.ToAcutalOffset(), uint32(needle.GetActualSize(size, needle.CurrentVersion))) | |
| 
 | |
| 	for _, interval := range intervals { | |
| 		shardId, shardOffset := interval.ToShardIdAndOffset(ErasureCodingLargeBlockSize, ErasureCodingSmallBlockSize) | |
| 		fmt.Printf("interval: %+v, shardId: %d, shardOffset: %d\n", interval, shardId, shardOffset) | |
| 	} | |
| 
 | |
| }
 |