记 S3Service 代码中的一个低级错误

2020-02-25 12:42:16 浏览数 (3)

osgl-storage 是 osgl 工具箱 中用于简化存储的. 其特点是接口简单, 支持多种存储引擎插件, 包括本地文件系统, AWS S3, Azure Blob, 七牛 Kodo 服务.

最近老码农在一次调试中偶然发现了 osgl-storage S3Service 中一个隐藏很久的第几错误, 在此记录下来.

osgl-storage 的结构很简单, 大致是有 StorageService 来操作 SObject:

S3Service 定义了一个字段 defStorageClass, 用于设定默认的 S3 存储等级:

代码语言:javascript复制
public class S3Service extends StorageServiceBase<S3Obj> implements IStorageService {  
	public enum StorageClass {  
		STANDARD, REDUCED_REDUNDANCY, GLACIER;
	}
	private StorageClass defStorageClass = StorageClass.REDUCED_REDUNDANCY;
	...
}

S3Service 也重载了 StorageServiceBaseconfigure(Map) 方法, 并在其中处理用户配置的 def storage class:

代码语言:javascript复制
@Override  
protected void configure(Map<String, String> conf) {
	super.configure(conf, "s3");
	...
	String sc = conf.get(CONF_DEF_STORAGE_CLASS);
	if (null != sc) {
		defStorageClass = StorageClass.valueOf(sc, defStorageClass);
	}
	...
}

S3Service 的构造函数:

代码语言:javascript复制
public S3Service(Map<String, String> conf) {  
  super(conf, S3Obj.class);  
}

StorageServiceBase 的构造函数:

代码语言:javascript复制
public StorageServiceBase(Map<String, String> conf, Class<SOBJ_TYPE> sobjType) {  
  this.sobjType = $.requireNotNull(sobjType);  
  configure(conf);  
}

到这里请各位看官研究一下这个低级错误在哪里. 我们在评论中揭晓答案 ^_^

0 人点赞