列举并行文件系统
功能介绍
并行文件系统(Parallel File System)是对象存储服务(Object Storage Service,OBS)提供的一种经过优化的高性能文件系统,提供毫秒级别访问时延,TB/s级别带宽和百万级别的IOPS,能够快速处理高性能计算(HPC)工作负载。
作为对象存储服务的子产品,并行文件系统支持用户按照标准的OBS接口读取数据。也支持通过部署在弹性云服务器中的PFS客户端(obsfs工具),按照POSIX文件语义读写数据;通过obsfs用户可以将创建的并行文件系统挂载到云端Linux服务器上,并能像操作本地文件系统一样对并行文件系统内的文件和目录进行在线处理,包括:创建和删除文件/目录,重命名文件/目录,修改写文件等操作。
您可以通过ObsClient.listBuckets列举已存在的并行文件系统。
接口约束
- 您必须拥有obs:bucket:ListAllMyBuckets权限,才能获取并行文件系统列表。建议使用IAM进行授权,配置方式详见使用IAM自定义策略。
- OBS支持的region以及region与endPoint的对应关系,详细信息请参见地区与终端节点。
- 并行文件系统暂不支持配额配置功能,默认无配额限制。
- 必须设置ListBucketsRequest.setBucketType参数为BucketTypeEnum.PFS,才可以列举出当前用户的并行文件系统。
- 设置ListBucketsRequest.setQueryLocation参数为true后,可在列举并行文件系统时查询并行文件系统的区域位置。
方法定义
obsClient.listBuckets(ListBucketsRequest request)
请求参数说明
| 参数名称 | 参数类型 | 是否必选 | 描述 |
|---|---|---|---|
| request | 必选 | 参数解释: 获取并行文件系统列表请求参数,详见ListBucketsRequest。 |
返回结果说明
| 参数名称 | 参数类型 | 描述 |
|---|---|---|
| statusCode | int | 参数解释: HTTP状态码。 取值范围: 状态码是一组从2xx(成功)到4xx或5xx(错误)的数字代码,状态码表示了请求响应的状态。 完整的状态码列表请参见状态码。 默认取值: 无 |
| responseHeaders | Map<String, Object> | 参数解释: 响应消息头列表,由多个元组构成。元组中String代表响应消息头的名称,Object代表响应消息头的值。 默认取值: 无 |
| owner | 参数解释: 并行文件系统拥有者信息,详见Owner。 默认取值: 无 | |
| buckets | List<ObsBucket> | 参数解释: 并行文件系统列表信息。详见ObsBucket。 默认取值: 无 |
| 常量名 | 说明 |
|---|---|
| AccessControlList.REST_CANNED_PRIVATE | 私有读写。 桶或对象的所有者拥有完全控制的权限,其他任何人都没有访问权限。 |
| AccessControlList.REST_CANNED_PUBLIC_READ | 公共读。 设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、桶的多版本。 设在对象上,所有人可以获取该对象内容和元数据。 |
| AccessControlList.REST_CANNED_PUBLIC_READ_WRITE | 公共读写。 设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、上传对象、删除对象、初始化段任务、上传段、合并段、拷贝段、取消多段上传任务。 设在对象上,所有人可以获取该对象内容和元数据。 |
| AccessControlList.REST_CANNED_PUBLIC_READ_DELIVERED | 桶公共读,桶内对象公共读。 设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据,可以获取该桶内对象的内容和元数据。 不能应用于对象。 |
| AccessControlList.REST_CANNED_PUBLIC_READ_WRITE_DELIVERED | 桶公共读写,桶内对象公共读写。 设在桶上,所有人可以获取该桶内对象列表、桶内多段任务、桶的元数据、上传对象、删除对象、初始化段任务、上传段、合并段、拷贝段、取消多段上传任务,可以获取该桶内对象的内容和元数据。 不能应用于对象。 |
| AccessControlList.REST_CANNED_BUCKET_OWNER_FULL_CONTROL | 设在对象上,桶和对象的所有者拥有对象的完全控制权限,其他任何人都没有访问权限。 默认情况下,上传对象至其他用户的桶中,桶拥有者没有对象的控制权限。对象拥有者为桶拥有者添加此权限控制策略后,桶所有者可以完全控制对象。 例如,用户A上传对象x至用户B的桶中,系统默认用户B没有对象x的控制权。当用户A为对象x设置bucket-owner-full-control策略后,用户B就拥有了对象x的控制权。 |
| 参数名称 | 参数类型 | 是否必选 | 描述 |
|---|---|---|---|
| owner | 可选 | 参数解释: 并行文件系统所有者的信息,详见Owner。 | |
| delivered | boolean | 可选 | 参数解释: 并行文件系统的ACL是否向并行文件系统内对象传递,作用于并行文件系统内所有对象。 取值范围: true:是,并行文件系统ACL向并行文件系统内对象传递。 false:否,并行文件系统ACL不向并行文件系统内对象传递,仅作用于并行文件系统。 默认取值: false |
| grants | Set<GrantAndPermission> | 可选 | 参数解释: 被授权用户相关信息,详见GrantAndPermission。 |
| 参数名称 | 参数类型 | 是否必选 | 描述 |
|---|---|---|---|
| grantee | 必选 | 参数解释: 被授权用户或用户组。 取值范围: 被授权用户的用户信息,详见CanonicalGrantee。 被授权用户组的用户组信息,详见GroupGrantee。 | |
| permission | 必选 | 参数解释: 用户或用户组被授予的权限。 取值范围: 详见Permission。 默认取值: 无 | |
| delivered | boolean | 可选 | 参数解释: 并行文件系统的ACL是否向并行文件系统内对象传递,作用于并行文件系统内所有对象。 取值范围: true:是,并行文件系统ACL向并行文件系统内对象传递。 false:否,并行文件系统ACL不向并行文件系统内对象传递,仅作用于并行文件系统。 默认取值: false |
| 参数名称 | 参数类型 | 描述 |
|---|---|---|
| grantId | String | 参数解释: 被授权用户的账号ID,即domain_id。 |
| displayName | String | 参数解释: 被授权用户的账号名。 |
| 常量名 | 原始值 | 说明 |
|---|---|---|
| PERMISSION_READ | READ | 读权限。 如果有桶的读权限,则可以获取该桶内对象列表、桶内多段任务、桶的元数据、桶的多版本。 如果有对象的读权限,则可以获取该对象内容和元数据。 |
| PERMISSION_WRITE | WRITE | 写权限。 如果有桶的写权限,则可以上传、覆盖和删除该桶内任何对象和段。 此权限在对象上不适用。 |
| PERMISSION_READ_ACP | READ_ACP | 读取ACL配置的权限。 如果有读ACP的权限,则可以获取对应的桶或对象的权限控制列表(ACL)。 桶或对象的所有者永远拥有读对应桶或对象ACP的权限。 |
| PERMISSION_WRITE_ACP | WRITE_ACP | 修改ACL配置的权限。 如果有写ACP的权限,则可以更新对应桶或对象的权限控制列表(ACL)。 桶或对象的所有者永远拥有写对应桶或对象的ACP的权限。 拥有了写ACP的权限,由于可以更改权限控制策略,实际上意味着拥有了完全访问的权限。 |
| PERMISSION_FULL_CONTROL | FULL_CONTROL | 完全控制权限,包括对桶或对象的读写权限,以及对桶或对象ACL配置的读写权限。 如果有桶的完全控制权限意味着拥有READ、WRITE、READ_ACP和WRITE_ACP的权限。 如果有对象的完全控制权限意味着拥有READ、READ_ACP和WRITE_ACP的权限。 |
| 参数名称 | 参数类型 | 描述 |
|---|---|---|
| statusCode | int | 参数解释: HTTP状态码。 取值范围: 状态码是一组从2xx(成功)到4xx或5xx(错误)的数字代码,状态码表示了请求响应的状态。 完整的状态码列表请参见状态码。 默认取值: 无 |
| responseHeaders | Map<String, Object> | 参数解释: 响应消息头列表,由多个元组构成。元组中String代表响应消息头的名称,Object代表响应消息头的值。 默认取值: 无 |
| bucketName | String | 参数解释: 并行文件系统名。 约束限制:
默认取值: 无 |
| owner | 参数解释: 并行文件系统拥有者信息,详见Owner。 | |
| creationDate | java.util.Date | 参数解释: 并行文件系统创建时间。 默认取值: 无 |
| location | String | 参数解释: 并行文件系统所在的区域。 约束限制: 该参数定义了并行文件系统将会被创建在哪个区域,如果使用的终端节点是obs.myhuaweicloud.com,可以不携带此参数;如果使用的终端节点不是obs.myhuaweicloud.com,则必须携带此参数。 取值范围: 当前有效的OBS区域和终端节点的更多信息,请参考地区和终端节点。终端节点即调用API的请求地址,不同服务不同区域的终端节点不同,您可以向企业管理员获取区域和终端节点信息。 默认取值: 终端节点为obs.myhuaweicloud.com且用户未设定区域时,默认为华北-北京一(cn-north-1)。 |
| storageClass | 参数解释: 创建并行文件系统时暂不支持配置并行文件系统默认存储类别。 | |
| acl | 参数解释: 创并行文件系统时可指定并行文件系统的ACL,您可以使用预定义的ACL,也可以自定义ACL,有关访问控制列表(Access Control List,ACL)功能的详细信息可参见ACL功能介绍。 取值范围:
默认取值: AccessControlList.REST_CANNED_PRIVATE | |
| bucketTypeEnum | BucketTypeEnum | 参数解释: 创建的并行文件系统类型。 取值范围: 列举并行文件系统时,bucketType为PFS。 默认取值: 无 |
代码示例
本示例用于列举并行文件系统。
import android.util.Log;
import com.obs.services.ObsClient;
import com.obs.services.exception.ObsException;
import com.obs.services.model.BucketType;
import com.obs.services.model.ListBucketsRequest;
import com.obs.services.model.ListBucketsResult;
import com.obs.services.model.ObsBucket;
// 注意:网络操作必须在子线程中执行,否则会抛出NetworkOnMainThreadException
new Thread(() -> {
// 安全提示:硬编码AK/SK存在安全风险,建议从安全凭证管理系统获取
String ak = System.getenv("ACCESS_KEY_ID");
String sk = System.getenv("SECRET_ACCESS_KEY");
String endPoint = "https://your-endpoint";
ObsClient obsClient = null;
try {
obsClient = new ObsClient(ak, sk, endPoint);
// 列举并行文件系统
ListBucketsRequest request = new ListBucketsRequest();
request.setBucketType(BucketType.PFS);
request.setQueryLocation(true);
ListBucketsResult result = obsClient.listBuckets(request);
Log.i("ObsDemo", "列举并行文件系统成功,数量: " + result.getBuckets().size());
for (ObsBucket bucket : result.getBuckets()) {
Log.i("ObsDemo", "并行文件系统名: " + bucket.getBucketName()
+ ",区域: " + bucket.getLocation()
+ ",创建时间: " + bucket.getCreateDate()
+ ",类型: " + bucket.getBucketType());
}
} catch (ObsException e) {
Log.e("ObsDemo", "列举并行文件系统失败,HTTP状态码: " + e.getResponseCode()
+ ",错误码: " + e.getErrorCode()
+ ",错误信息: " + e.getErrorMessage());
} finally {
if (obsClient != null) {
try {
obsClient.close();
} catch (Exception e) {
Log.e("ObsDemo", "关闭ObsClient失败", e);
}
}
}
}).start();