Browse Source

增加获取文件信息的接口

gitlink
Sydonian 1 year ago
parent
commit
433c52f010
2 changed files with 29 additions and 2 deletions
  1. +27
    -2
      common/pkgs/storage/local/shard_store.go
  2. +2
    -0
      common/pkgs/storage/types/shard_store.go

+ 27
- 2
common/pkgs/storage/local/shard_store.go View File

@@ -83,7 +83,7 @@ func (s *ShardStore) Open(opt types.OpenOption) (io.ReadCloser, error) {
return nil, fmt.Errorf("invalid file name") return nil, fmt.Errorf("invalid file name")
} }


filePath := filepath.Join(s.cfg.Root, BlocksDir, fileName[:2], fileName)
filePath := s.getFilePathFromHash(cdssdk.FileHash(fileName))
file, err := os.Open(filePath) file, err := os.Open(filePath)
if err != nil { if err != nil {
return nil, err return nil, err
@@ -104,6 +104,23 @@ func (s *ShardStore) Open(opt types.OpenOption) (io.ReadCloser, error) {
return file, nil return file, nil
} }


func (s *ShardStore) Info(hash cdssdk.FileHash) (types.FileInfo, error) {
s.lock.Lock()
defer s.lock.Unlock()

filePath := s.getFilePathFromHash(hash)
info, err := os.Stat(filePath)
if err != nil {
return types.FileInfo{}, err
}

return types.FileInfo{
Hash: hash,
Size: info.Size(),
Description: filePath,
}, nil
}

func (s *ShardStore) ListAll() ([]types.FileInfo, error) { func (s *ShardStore) ListAll() ([]types.FileInfo, error) {
s.lock.Lock() s.lock.Lock()
defer s.lock.Unlock() defer s.lock.Unlock()
@@ -187,7 +204,7 @@ func (s *ShardStore) onWritterFinish(w *ShardWriter, hash cdssdk.FileHash) (type


log.Debugf("write file %v finished, size: %v, hash: %v", w.path, w.size, hash) log.Debugf("write file %v finished, size: %v, hash: %v", w.path, w.size, hash)


blockDir := filepath.Join(s.cfg.Root, BlocksDir, string(hash)[:2])
blockDir := s.getFileDirFromHash(hash)
err := os.MkdirAll(blockDir, 0755) err := os.MkdirAll(blockDir, 0755)
if err != nil { if err != nil {
s.removeTempFile(w.path) s.removeTempFile(w.path)
@@ -228,3 +245,11 @@ func (s *ShardStore) removeTempFile(path string) {
func (s *ShardStore) getLogger() logger.Logger { func (s *ShardStore) getLogger() logger.Logger {
return logger.WithField("S", SvcName).WithField("Storage", s.stg.String()) return logger.WithField("S", SvcName).WithField("Storage", s.stg.String())
} }

func (s *ShardStore) getFileDirFromHash(hash cdssdk.FileHash) string {
return filepath.Join(s.cfg.Root, BlocksDir, string(hash)[:2])
}

func (s *ShardStore) getFilePathFromHash(hash cdssdk.FileHash) string {
return filepath.Join(s.cfg.Root, BlocksDir, string(hash)[:2], string(hash))
}

+ 2
- 0
common/pkgs/storage/types/shard_store.go View File

@@ -28,6 +28,8 @@ type ShardStore interface {
New() ShardWriter New() ShardWriter
// 使用F函数创建Option对象 // 使用F函数创建Option对象
Open(opt OpenOption) (io.ReadCloser, error) Open(opt OpenOption) (io.ReadCloser, error)
// 获得指定文件信息
Info(fileHash cdssdk.FileHash) (FileInfo, error)
// 获取所有文件信息,尽量保证操作是原子的 // 获取所有文件信息,尽量保证操作是原子的
ListAll() ([]FileInfo, error) ListAll() ([]FileInfo, error)
// 删除指定的文件 // 删除指定的文件


Loading…
Cancel
Save