Skip to content

HDDS-3002. NFS mountd support for Ozone #828

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 151 commits into from
Closed
Changes from 1 commit
Commits
Show all changes
151 commits
Select commit Hold shift + click to select a range
7faa07f
HDDS-3289. Add a freon generator to create nested directories. (#730)
aryangupta1998 Apr 1, 2020
32f13f7
HDDS-3289. (Checkstyle addendum) Add a freon generator to create nest…
elek Apr 1, 2020
f43b33e
HDDS-3281. (Addendum: topology) Add timeouts to all robot tests
elek Apr 1, 2020
ce6ad30
HDDS-2621. Revert/Disable OM HA tests.
elek Apr 1, 2020
61b6be0
HDDS-3165. Integrate Recon missing containers UI with endpoint. (#735)
vivekratnavel Apr 1, 2020
1ccf78f
HDDS-3047. ObjectStore#listVolumesByUser and CreateVolumeHandler#call…
smengcl Apr 1, 2020
6384b8d
HDDS-3130. Add jaeger trace span in s3gateway
runzhiwang Apr 2, 2020
8d4aa8d
HDDS-3240. Improve write efficiency by creating container in parallel…
runzhiwang Apr 2, 2020
e6c8e4c
HDDS-3311. OM logs not available for OM HA acceptance test (#747)
adoroszlai Apr 2, 2020
6661469
HDDS-3308. Update Ratis snapshot (#741)
adoroszlai Apr 2, 2020
55d78d6
HDDS-3330. Disable TestDeleteWithSlowFollower test as it has known pr…
elek Apr 2, 2020
f1da73b
HDDS-3324. OM Client fails with StringIndexOutOfBoundsException. (#759)
bharatviswa504 Apr 2, 2020
0189f8d
HDDS-3334. OM Client failover to next OM on NotLeaderException (#760)
hanishakoneru Apr 2, 2020
63fde40
HDDS-3253. Initialize Recon metrics for prometheus at /prom endpoint
vivekratnavel Apr 3, 2020
1ebadbe
HDDS-3173. Provide better default JVM options
elek Apr 3, 2020
12fb2f6
HDDS-3316. Checkstyle check fails silently in case of mvn related errors
elek Apr 3, 2020
1ceb514
HDDS-3239. Provide message-level metrics from the generic protocol di…
elek Apr 3, 2020
692cd7a
HDDS-3320. Add read only based load generator to MiniOzoneChaosCluste…
mukul1987 Apr 3, 2020
9f8ff0e
HDDS-3295. Ozone admins getting Permission Denied error while creatin…
vivekratnavel Apr 3, 2020
e9742db
HDDS-3318. Support /close command in the Github comments
elek Apr 3, 2020
dc9b24d
HDDS-2798. beyond/Containers.md translation
Apr 3, 2020
598e24c
HDDS-3332. Make Robot test invocation independent from Python version…
adoroszlai Apr 3, 2020
b4eafde
HDDS-3332. Upgrade Robot tests to Python 3 (#766)
adoroszlai Apr 3, 2020
f04a409
HDDS-3339. Rename CONTRIBUTION.md to CONTRIBUTING.md (#765)
elek Apr 3, 2020
f2c32e4
HDDS-3337. Export the IPC port of OM in docker-compose
maobaolong Apr 3, 2020
065d443
HDDS-3224. Enforce volume and bucket name rule at create time. (#718)
swagle Apr 3, 2020
7d45380
HDDS-2691. Ozone Shell code cleanup
adoroszlai Apr 3, 2020
11b0984
HDDS-3341. Checkstyle fails for new modules/versions (#768)
adoroszlai Apr 3, 2020
876bec0
HDDS-2817. Fix listing buckets for setting --prefix equal to bucket n…
cxorm Apr 4, 2020
e54d0b5
HDDS-3237. Recon should provide the list of datanodes that a missing …
vivekratnavel Apr 4, 2020
0fbacbc
HDDS-2793. concept/Datanodes.md translation (#520)
Apr 4, 2020
b80aaad
HDDS-3349. Fix two link addresses in README.md (#774)
runitao Apr 6, 2020
d3b81a4
HDDS-3241. Invalid container reported to SCM should be deleted
linyiqun Apr 6, 2020
54580ec
HDDS-3351. Remove unnecessary dependency Curator. (#777)
fapifta Apr 7, 2020
7164c19
HDDS-3344. Remove Jenkins file (#778)
dineshchitlangia Apr 7, 2020
9872253
HDDS-3328. List design docs as part of the documentation page. (#755)
elek Apr 7, 2020
ad92019
HDDS-3312. Remove sever-side dependencies from hdds/ozone-common
elek Apr 7, 2020
15db251
HDDS-3319. Handle HA for BasicOzoneClientAdapterImpl#renew/cancel(). …
xiaoyuyao Apr 7, 2020
b0973ff
HDDS-3280. Ozone BaseHTTPServer should honor ozone.security.enabled c…
vivekratnavel Apr 7, 2020
a1ae540
HDDS-3347. PipelineActionHandler should handle unknown pipeline. (#773)
nandakumar131 Apr 7, 2020
de30b37
HDDS-3348. scmcli container info command shows the wrong container st…
nandakumar131 Apr 7, 2020
89c34b4
HDDS-3353. Remove unnecessary transitive hadoop-common dependencies o…
elek Apr 8, 2020
ccf8bd8
HDDS-3331. Simplify s3bucket -> ozone volume/bucket mapping (#756)
elek Apr 8, 2020
a24a79b
HDDS-3270. Allow safemode listeners to be notified when some precheck…
sodonnel Apr 8, 2020
aae0fd3
HDDS-3290. REVERT: Disable all the freon integration tests. (#786)
elek Apr 8, 2020
e2ebbf8
HDDS-3302. Add ability in MiniOzoneCluster to create multiple storage…
mukul1987 Apr 9, 2020
b50e932
HDDS-3244. Improve write efficiency by opening RocksDB only once (#709)
runzhiwang Apr 9, 2020
eb177f4
HDDS-3366. Ozone Client should not retry on invalid token (#802)
adoroszlai Apr 9, 2020
ebc6160
HDDS-3340. Move Ozone Shell from ozone-manager to tools
adoroszlai Apr 9, 2020
1412b6c
HDDS-3359. Remove Yetus helper code from ozone
mukul1987 Apr 9, 2020
e31a4ce
Revert "HDDS-3291. Write operation when both OM followers are shutdow…
mukul1987 Apr 9, 2020
e71c383
HDDS-3365. Ensure OzoneConfiguration is initialized in OzoneClientFac…
xiaoyuyao Apr 9, 2020
216b41f
HDDS-3335. Recon unit tests cleanup. (#772)
avijayanhwx Apr 10, 2020
5d8be37
HDDS-2294. Create a new HISTORY.md in the new repository. (#764)
elek Apr 10, 2020
486d749
HDDS-3135. Enable topology acceptance test added in HDDS-3084 to read…
sodonnel Apr 10, 2020
c75d4c7
HDDS-3372. Delete HISTORY.txt (#805)
dineshchitlangia Apr 10, 2020
90c29d7
HDDS-3093. Allow forced overwrite of local file (#800)
adoroszlai Apr 10, 2020
129496f
HDDS-3368. Ozone filesystem jar should not include webapps folder (#804)
vivekratnavel Apr 10, 2020
09ff517
HDDS-3377. Remove guava 26.0-android jar. (#808)
jojochuang Apr 13, 2020
b037c93
Handle InterruptedException in OzoneContainer (#801)
danidelvalle Apr 13, 2020
c9a1925
HDDS-2976. Recon throws error while trying to get snapshot over https…
prashantpogde Apr 13, 2020
ac5fb0f
HDDS-3374. OMVolumeSetOwnerRequest doesn't check if user is already t…
smengcl Apr 14, 2020
25913f7
HDDS-3355. Add wait time between client retries to OM (#784)
hanishakoneru Apr 14, 2020
8287c72
HDDS-3374. Addendum: OMVolumeSetOwnerRequest doesn't check if user is…
smengcl Apr 15, 2020
506778f
HDDS-3134. Debug Tool that gives chunk location information given a k…
sadanand48 Apr 15, 2020
5936594
HDDS-2802. tools/AuditParser.md translation (#793)
Apr 15, 2020
9d0d341
HDDS-3394. Skip generation of encryptionkey for directory create oper…
bharatviswa504 Apr 15, 2020
901a7bc
HDDS-3384. Update SpringFramework to 5.1.14. (#829)
swagle Apr 16, 2020
bc8d43e
HDDS-3357. Add check for import from shaded package (#788)
adoroszlai Apr 16, 2020
e9a466d
HDDS-2682: OM File create request does not check for existing directo…
rakeshadr Apr 16, 2020
8712d50
HDDS-3387. Fix ContainerOperationClient#createContainer (#831)
sadanand48 Apr 16, 2020
1505778
HDDS-3386. Remove unnecessary transitive hadoop-common dependencies o…
fapifta Apr 16, 2020
17456bc
HDDS-3386. Remove unnecessary transitive hadoop-common dependencies o…
adoroszlai Apr 16, 2020
3699e79
HDDS-3291. Write operation when both OM followers are shutdown. (#815)
bharatviswa504 Apr 16, 2020
f020e6a
HDDS-3392.OM create key/file should not generate different data encry…
bharatviswa504 Apr 16, 2020
67ca42c
HDDS-3401. Ozone audit entries could be consistent among volume creat…
bharatviswa504 Apr 16, 2020
2f37a25
HDDS-3322. StandAlone Pipelines are created in an infinite loop (#749)
hanishakoneru Apr 17, 2020
57c9cc9
HDDS-3360. Duplicate Ozone Client in renew/cancel token handlers (#799)
adoroszlai Apr 17, 2020
151fe08
HDDS-2575. Handle InterruptedException in LogSubcommand
danidelvalle Apr 17, 2020
f58cae9
HDDS-3336. Metrics for Recon OzoneManager DB sync.
Apr 17, 2020
8b4d3f5
HDDS-3406. Remove RetryInvocation INFO logging from ozone CLI output …
hanishakoneru Apr 17, 2020
77bb315
HDDS-3400. Extract test utilities to separate module
adoroszlai Apr 17, 2020
09fd46b
HDDS-3403. Generate ozone specific version from type in FSProto.proto
elek Apr 17, 2020
94beb2a
HDDS-2911. lastUsed and stateEnterTime value in container info is not…
captainzmc Apr 17, 2020
3bb5838
Update grpc/netty dependencies (#840)
mukul1987 Apr 17, 2020
8c80e3c
Revert "Update grpc/netty dependencies (#840)" (#841)
arp7 Apr 17, 2020
e800d2b
HDDS-3397. Make jmh jar dependencies optional
elek Apr 20, 2020
491d69a
HDDS-3456. Fix Acceptance test failures due to disk out of space. (#844)
adoroszlai Apr 20, 2020
ce94889
HDDS-3380. MiniOzoneHAClusterImpl#initOMRatisConf will reset the conf…
umamaheswararao Apr 21, 2020
ffb340e
HDDS-3101. Depend on lightweight ConfigurationSource interface instea…
elek Apr 21, 2020
fc4d951
HDDS-3468. Organize log4j dependency in pom.xml. (#849)
bshashikant Apr 21, 2020
2acd2b1
HDDS-3399. Update JaegerTracing
elek Apr 21, 2020
6afe2a8
HDDS-3471. Update to latest Ratis Snapshot 0.6.0-490b689-SNAPSHOT. (#…
bshashikant Apr 21, 2020
fac26e1
HDDS-3139. Pipeline placement should max out pipeline usage (#668)
timmylicheng Apr 21, 2020
a59ff25
HDDS-3451. Add timeout to XceiverServerRatis#submitRequest call. (#845)
nandakumar131 Apr 21, 2020
091993b
HDDS-3056. Allow users to list volumes they have access to, and optio…
smengcl Apr 21, 2020
1b7f617
HDDS-3388. Add bucket encryption key info to bucket create audit log.…
xiaoyuyao Apr 21, 2020
ca6da46
HDDS-2809. recipe/_index.md translation (#795)
Apr 21, 2020
00799c2
HDDS-3393. Recon throws NPE in clusterState endpoint (#854)
vivekratnavel Apr 22, 2020
36cdf5a
HDDS-3467. OM Client RPC failover retries happening more than configu…
umamaheswararao Apr 22, 2020
706fe1b
HDDS-3168. Improve read efficiency by merging a lot of RPC call getCo…
runzhiwang Apr 22, 2020
2098516
HDDS-3155. Improved ozone client flush implementation to make it fast…
captainzmc Apr 22, 2020
0466ade
HDDS-3172. Use DBStore instead of MetadataStore in SCM
elek Apr 22, 2020
fa3aaf1
HDDS-2810. recipe/Prometheus.md translation (#796)
Apr 22, 2020
811e18c
HDDS-3373. Intermittent failure in TestDnRatisLogParser and TestOMRat…
adoroszlai Apr 22, 2020
52f68c1
HDDS-2801. tools/Genconf.md translation (#792)
Apr 22, 2020
cadf414
HDDS-2804. tools/TestTools.md (#794)
Apr 23, 2020
b1b12a1
HDDS-3472. Remove redundant hdds.version from hadoop-hdds/common/pom.…
mukul1987 Apr 23, 2020
d980e5a
HDDS-3483. Handle unhealthy replica state of an open container.
nandakumar131 Apr 23, 2020
266a9e8
HDDS-3464. Use dedicated build partition for acceptance tests in gith…
elek Apr 23, 2020
0e3f807
HDDS-3480. TestSCMNodeMetrics is flaky (#860)
elek Apr 23, 2020
a53209e
HDDS-3352. Support for native ozone filesystem client using libhdfs. …
aryangupta1998 Apr 24, 2020
c973bac
HDDS-3461. Add acceptance test to smoketest CSI service startup
elek Apr 24, 2020
ab0e66e
HDDS-3373. Intermittent failure in TestOMRatisLogParser (#867)
adoroszlai Apr 24, 2020
76e3460
HDDS-3222. Add integration test for Recon FSCK. (#850)
avijayanhwx Apr 24, 2020
cb35ed8
Revert "HDDS-3461. Add acceptance test to smoketest CSI service startup"
elek Apr 24, 2020
4b1fa10
HDDS-3465. OM Failover retry happens too quickly when new leader sugg…
umamaheswararao Apr 25, 2020
81a2886
HDDS-3318. Addendum: Support /close command in the Github comments. (…
elek Apr 27, 2020
f7fb073
HDDS-2569. Handle InterruptedException in LogStreamServlet
danidelvalle Apr 27, 2020
e4febef
HDDS-3455. Change MiniLoadGenerator to a pluggable model. (#842)
mukul1987 Apr 27, 2020
68fc181
HDDS-3488. Remove unnecessary jackson dependencies from Ozone
Apr 27, 2020
2791d71
HDDS-3487. Ozone start fails with NullPointerException in TLS enabled…
avijayanhwx Apr 27, 2020
ea94276
HDDS-3490. Remove avro as a dependency in Ozone. (#873)
mukul1987 Apr 28, 2020
eeb7ea2
HDDS-3375. S3A failing complete multipart upload with Ozone S3. (#807)
bharatviswa504 Apr 28, 2020
ade09f1
HDDS-3315. Use EventQueue for delayed/immediate safe mode rule notifi…
elek Apr 28, 2020
9042944
HDDS-3504. Disable flaky topology related acceptance test until the fix.
elek Apr 28, 2020
51e9cfa
HDDS-3506. Disable TestOzoneFileInterfaces.testOzoneManagerLocatedFil…
elek Apr 28, 2020
1293258
HDDS-3321. Prometheus endpoint should have an option to be configured…
Apr 28, 2020
b4f594d
HDDS-3398. Update Ratis/gRPC/Netty dependencies. (#879)
mukul1987 Apr 28, 2020
5fbb045
HDDS-3223. Improve s3g read 1GB object efficiency by 100 times (#843)
runzhiwang Apr 29, 2020
693a88c
HDDS-3507. Disable Jaeger tracing by default. (#883)
bshashikant Apr 29, 2020
099e808
HDDS-3443. Enable TestOmMetrics#testBucketOps (#882)
cku328 Apr 29, 2020
1a51d58
HDDS-3314. scmcli container info command failing intermittently (#833)
sadanand48 Apr 29, 2020
8ce8efa
HDDS-2406. Ozone shell key get throws IllegalArgumentException if pip…
flirmnave Apr 30, 2020
a7a754b
HDDS-3469. Add third party jar versions as properties in pom.xml (#878)
adoroszlai Apr 30, 2020
d849904
HDDS-3482. Impl getUriDefaultPort to BasicOzFsOzFs, return -1 forever…
elek Apr 30, 2020
f2b5b10
HDDS-3053. Decrease the number of the chunk writer threads
elek Apr 30, 2020
b5d6743
HDDS-3385. Simplify S3 -> Ozone volume mapping
adoroszlai Apr 30, 2020
3a1681b
HDDS-3411. Switch Recon SQL DB to Derby. (#839)
avijayanhwx Apr 30, 2020
72bb9b7
HDDS-3515. Ensure consistent OM token service field in HA environment…
xiaoyuyao Apr 30, 2020
3271ad0
HDDS-3495. Clarify the document of OzoneFs (#875)
maobaolong May 1, 2020
7f66b06
HDDS-3502. Remove dependence on commons-lang (#888)
adoroszlai May 1, 2020
b0051d7
HDDS-3418. Enable TestNodeFailure test cases. (#848)
nandakumar131 May 4, 2020
05adebe
HDDS-3002. NFS mountd support for Ozone
prashantpogde Feb 26, 2020
03717bc
HDDS-3002. Fixing checkstyle findbugs and test errors.
prashantpogde Apr 22, 2020
aa69d95
HDDS-3002. Fixing some UT errors.
prashantpogde Apr 28, 2020
d0981ce
HDDS-3002. Part2 : Fixing some UT errors.
prashantpogde May 5, 2020
cb73d38
HDDS-3002. Part3 : Fixing it-filesystem test.
prashantpogde May 5, 2020
c9d1cba
HDDS-3002. Part4 : Fixing it-filesystem failure.
prashantpogde May 6, 2020
daba674
HDDS-3002. Part5 : Fixing it-filesystem failure.
prashantpogde May 6, 2020
9ffeab7
HDDS-3002. Part6 : Fixing acceptance test failures.
prashantpogde May 9, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
HDDS-3331. Simplify s3bucket -> ozone volume/bucket mapping (#756)
  • Loading branch information
elek authored Apr 8, 2020
commit ccf8bd807cbf7d1d8d9454b54173ea4b0791ef75
181 changes: 181 additions & 0 deletions hadoop-hdds/docs/content/design/ozone-volume-management.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,181 @@
---
title: Ozone Volume Management
summary: A simplified version of mapping between S3 buckets and Ozone volume/buckets
date: 2020-04-02
jira: HDDS-3331
status: accepted
author: Marton Elek, Arpit Agarwall, Sunjay Radia
---

<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->


## Introduction

This document explores how we can improve the Ozone volume semantics especially with respect to the S3 compatibility layer.

## The Problems

1. Unpriviliged users cannot enumerate volumes.
2. The mapping of S3 buckets to Ozone volumes is confusing. Based on external feedback it's hard to understand the exact Ozone URL to be used.
3. The volume name is not friendly and cannot be remembered by humans.
4. Ozone buckets created via the native object store interface are not visible via the S3 gateway.
5. We don't support the revocation of access keys.

We explore some of these in more detail in subsequent sections.

### Volume enumeration problem

Currently when a user enumerates volumes, they see the list of volumes that they own. This means that when an unprivileged user enumerates volumes, it always gets any empty list. Instead users should be able to see all volumes that they have been granted read or write access to.

This also has an impact on [ofs](https://issues.apache.org/jira/browse/HDDS-2665) which makes volumes appear as top-level directories.

### S3 to HCFS path mapping problem

Ozone has the semantics of volume *and* buckets while S3 has only buckets. To make it possible to use the same bucket both from Hadoop world and via S3 we need a mapping between them.

Currently we maintain a map between the S3 buckets and Ozone volumes + buckets in `OmMetadataManagerImpl`

```
s3_bucket --> ozone_volume/ozone_bucket
```

The current implementation uses the `"s3" + s3UserName` string as the volume name and the `s3BucketName` as the bucket name. Where `s3UserName` is is the `DigestUtils.md5Hex(kerberosUsername.toLowerCase())`

To create an S3 bucket and use it from o3fs, you should:

1. Get your personal secret based on your kerberos keytab

```
> kinit -kt /etc/security/keytabs/testuser.keytab testuser/scm
> ozone s3 getsecret
awsAccessKey=testuser/[email protected]
awsSecret=7a6d81dbae019085585513757b1e5332289bdbffa849126bcb7c20f2d9852092
```

2. Create the bucket with S3 cli

```
> export AWS_ACCESS_KEY_ID=testuser/[email protected]
> export AWS_SECRET_ACCESS_KEY=7a6d81dbae019085585513757b1e5332289bdbffa849126bcb7c20f2d9852092
> aws s3api --endpoint http://localhost:9878 create-bucket --bucket=bucket1
```

3. And identify the ozone path

```
> ozone s3 path bucket1
Volume name for S3Bucket is : s3c89e813c80ffcea9543004d57b2a1239
Ozone FileSystem Uri is : o3fs://bucket1.s3c89e813c80ffcea9543004d57b2a1239
```

## Proposed solution[1]

### Supporting multiple access keys (#5 from the problem listing)

Problem #5 can be easily supported with improving the `ozone s3` CLI. Ozone has a separated table for the S3 secrets and the API can be improved to handle multiple secrets for one specific kerberos user.

### Solving the mapping problem (#2-4 from the problem listing)

1. Let's always use `s3` volume for all the s3 buckets **if the bucket is created from the s3 interface**.

This is an easy an fast method, but with this approach not all the volumes are avilable via the S3 interface. We need to provide a method to publish any of the ozone volumes / buckets.

2. Let's improve the existing toolset to expose **any** Ozone volume/bucket as an s3 bucket. (Eg. expose `o3:/vol1/bucketx` as an S3 bucket `s3://foobar` )

**Implementation**:

The first part is easy compared to the current implementation. We don't need any mapping table any more.

To implement the second (expose ozone buckets as s3 buckets) we have multiple options:

1. Store some metadata (** s3 bucket name **) on each of the buckets
2. Implement a **bind mount** mechanic which makes it possible to *mount* any volume/buckets to the specific "s3" volume.

The first approach required a secondary cache table and it violates the naming hierarchy. The s3 bucket name is a global unique name, therefore it's more than just a single attribute on a specific object. It's more like an element in the hierachy. For this reason the second option is proposed:

For example if the default s3 volume is `s3`

1. Every new buckets created via s3 interface will be placed under the `/s3` volume
2. Any existing **Ozone** buckets can be exposed with mounting it to s3: `ozone sh mount /vol1/bucket1 /s3/s3bucketname`

**Lock contention problem**

One possible problem with using just one volume is using the locks of the same volume for all the D3 buckets (thanks Xiaoyu). But this shouldn't be a big problem.

1. We hold only a READ lock. Most of the time it can acquired without any contention (writing lock is required only to change owner / set quota)
2. For symbolic link / bind mounts the read lock is only required for the first read. After that the lock of the referenced volume will be used. In case of any performance problem multiple volumes + bind mounts can be used.

Note: Sunjay is added to the authors as the original proposal of this approach.

## Alternative approaches and reasons to reject

To solve the the _s3 bucket name to ozone bucket name mapping_ problem some other approaches are also considered. They are rejected but keeping them in this section together with the reasons to reject.


### 1. Predefined volume mapping

1. Let's support multiple `ACCESS_KEY_ID` for the same user.
2. For each `ACCESS_KEY_ID` a volume name MUST be defined.
3. Instead of using a specific mapping table, the `ACCESS_KEY_ID` would provide a **view** of the buckets in the specified volume.

With this approach the used volume will be more visible and -- hopefully -- understandable.

Instead of using `ozone s3 getsecret`, following commands would be used:

1. `ozone s3 secret create --volume=myvolume`: To create a secret and use myvolume for all of these buckets
2. `ozone s3 secret list`: To list all of the existing S3 secrets (available for the current user)
3. `ozone s3 secret delete <ACCESS_KEY_ID`: To delete any secret

The `AWS_ACCESS_KEY_ID` should be a random identifier instead of using a kerberos principal.

* __pro__: Easier to understand
* __con__: We should either have global unique bucket names or it will be possible to see two different buckets with
* __con__: It can be hard to remember which volumes are assigned to a specific ACCESS_KEY_ID

### 3. String Magic

We can try to make volume name visible for the S3 world by using some structured bucket names. Unfortunately the available separator characters are very limited:

For example we can't use `/`

```
aws s3api create-bucket --bucket=vol1/bucket1

Parameter validation failed:
Invalid bucket name "vol1/bucket1": Bucket name must match the regex "^[a-zA-Z0-9.\-_]{1,255}$" or be an ARN matching the regex "^arn:(aws).*:s3:[a-z\-0-9]+:[0-9]{12}:accesspoint[/:][a-zA-Z0-9\-]{1,63}$"
```

But it's possible to use `volume-bucket` notion:

```
aws s3api create-bucket --bucket=vol1-bucket1
```
* __pro__: Volume mapping is visible all the time.
* __con__: Harder to use any external tool with defaults (all the buckets should have at least one `-`)
* __con__: Hierarchy is not visble. The uniform way to separated elements in fs hierarchy is `/`. It can be confusing.
*
### 4. Remove volume From OzoneFs Paths

We can also make volumes a lightweight *bucket group* object by removing it from the ozonefs path. With this approach we can use all the benefits of the volumes as an administration object but it would be removed from the `o3fs` path.

* __pro__: can be the most simple solution. Easy to understand as there are no more volumes in the path.
* __con__: Bigger change (all the API can't be modified to make volumes optional)
* __con__: Harder to dis-joint namespaces based on volumes. (With the current scheme, it's easier to delegate the responsibilties for one volumes to a different OM).
* __con__: We lose volumes as the top-level directories in `ofs` scheme.
* __con__: One level of hierarchy might not be enough in case of multi-tenancy.
* __con__: One level of hierarchy is not enough if we would like to provide separated level for users and admins
* __con__: Hierarchical abstraction can be easier to manage and understand