Skip to content

Commit e0d272a

Browse files
authored
HDDS-14198. Reduce parameter count in BucketEndpoint (#9528)
1 parent cfcfc39 commit e0d272a

7 files changed

Lines changed: 127 additions & 119 deletions

File tree

hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketEndpoint.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -104,32 +104,30 @@ public class BucketEndpoint extends EndpointBase {
104104
* for more details.
105105
*/
106106
@GET
107-
@SuppressWarnings({"parameternumber", "methodlength"})
107+
@SuppressWarnings("methodlength")
108108
public Response get(
109109
@PathParam(BUCKET) String bucketName,
110-
@QueryParam(QueryParams.DELIMITER) String delimiter,
111-
@QueryParam(QueryParams.ENCODING_TYPE) String encodingType,
112-
@QueryParam(QueryParams.MARKER) String marker,
113110
@DefaultValue("1000") @QueryParam(QueryParams.MAX_KEYS) int maxKeys,
114-
@QueryParam(QueryParams.PREFIX) String prefix,
115-
@QueryParam(QueryParams.CONTINUATION_TOKEN) String continueToken,
116-
@QueryParam(QueryParams.START_AFTER) String startAfter,
117-
@QueryParam(QueryParams.UPLOADS) String uploads,
118-
@QueryParam(QueryParams.ACL) String aclMarker,
119-
@QueryParam(QueryParams.KEY_MARKER) String keyMarker,
120-
@QueryParam(QueryParams.UPLOAD_ID_MARKER) String uploadIdMarker,
121111
@DefaultValue("1000") @QueryParam(QueryParams.MAX_UPLOADS) int maxUploads
122112
) throws OS3Exception, IOException {
123113
long startNanos = Time.monotonicNowNanos();
124114
S3GAction s3GAction = S3GAction.GET_BUCKET;
125115
PerformanceStringBuilder perf = new PerformanceStringBuilder();
126116

117+
final String continueToken = getQueryParam(QueryParams.CONTINUATION_TOKEN);
118+
final String delimiter = getQueryParam(QueryParams.DELIMITER);
119+
final String encodingType = getQueryParam(QueryParams.ENCODING_TYPE);
120+
final String marker = getQueryParam(QueryParams.MARKER);
121+
String prefix = getQueryParam(QueryParams.PREFIX);
122+
String startAfter = getQueryParam(QueryParams.START_AFTER);
123+
127124
Iterator<? extends OzoneKey> ozoneKeyIterator = null;
128125
ContinueToken decodedToken =
129126
ContinueToken.decodeFromString(continueToken);
130127
OzoneBucket bucket = null;
131128

132129
try {
130+
final String aclMarker = getQueryParam(QueryParams.ACL);
133131
if (aclMarker != null) {
134132
s3GAction = S3GAction.GET_ACL;
135133
S3BucketAcl result = getAcl(bucketName);
@@ -138,8 +136,11 @@ public Response get(
138136
return Response.ok(result, MediaType.APPLICATION_XML_TYPE).build();
139137
}
140138

139+
final String uploads = getQueryParam(QueryParams.UPLOADS);
141140
if (uploads != null) {
142141
s3GAction = S3GAction.LIST_MULTIPART_UPLOAD;
142+
final String uploadIdMarker = getQueryParam(QueryParams.UPLOAD_ID_MARKER);
143+
final String keyMarker = getQueryParam(QueryParams.KEY_MARKER);
143144
return listMultipartUploads(bucketName, prefix, keyMarker, uploadIdMarker, maxUploads);
144145
}
145146

@@ -307,13 +308,13 @@ private int validateMaxKeys(int maxKeys) throws OS3Exception {
307308
@PUT
308309
public Response put(
309310
@PathParam(BUCKET) String bucketName,
310-
@QueryParam(QueryParams.ACL) String aclMarker,
311311
InputStream body
312312
) throws IOException, OS3Exception {
313313
long startNanos = Time.monotonicNowNanos();
314314
S3GAction s3GAction = S3GAction.CREATE_BUCKET;
315315

316316
try {
317+
final String aclMarker = getQueryParam(QueryParams.ACL);
317318
if (aclMarker != null) {
318319
s3GAction = S3GAction.PUT_ACL;
319320
Response response = putAcl(bucketName, body);

hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/EndpointBase.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,14 @@ public abstract class EndpointBase {
114114
protected static final AuditLogger AUDIT =
115115
new AuditLogger(AuditLoggerType.S3GLOGGER);
116116

117+
protected String getQueryParam(String key) {
118+
return getQueryParameters().getFirst(key);
119+
}
120+
121+
public MultivaluedMap<String, String> getQueryParameters() {
122+
return context.getUriInfo().getQueryParameters();
123+
}
124+
117125
protected OzoneBucket getBucket(OzoneVolume volume, String bucketName)
118126
throws OS3Exception, IOException {
119127
OzoneBucket bucket;

hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/endpoint/TestBucketAcl.java

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.apache.hadoop.ozone.client.OzoneClientStub;
3737
import org.apache.hadoop.ozone.client.OzoneVolume;
3838
import org.apache.hadoop.ozone.s3.exception.OS3Exception;
39+
import org.apache.hadoop.ozone.s3.util.S3Consts.QueryParams;
3940
import org.apache.hadoop.ozone.security.acl.IAccessAuthorizer;
4041
import org.junit.jupiter.api.AfterEach;
4142
import org.junit.jupiter.api.BeforeEach;
@@ -68,6 +69,7 @@ public void setup() throws IOException {
6869
.setClient(client)
6970
.setHeaders(headers)
7071
.build();
72+
bucketEndpoint.getQueryParameters().add(QueryParams.ACL, ACL_MARKER);
7173
}
7274

7375
@AfterEach
@@ -81,8 +83,7 @@ public void clean() throws IOException {
8183
public void testGetAcl() throws Exception {
8284
when(parameterMap.containsKey(ACL_MARKER)).thenReturn(true);
8385
Response response =
84-
bucketEndpoint.get(BUCKET_NAME, null, null, null, 0, null,
85-
null, null, null, ACL_MARKER, null, null, 0);
86+
bucketEndpoint.get(BUCKET_NAME, 0, 0);
8687
assertEquals(HTTP_OK, response.getStatus());
8788
System.out.println(response.getEntity());
8889
}
@@ -93,7 +94,7 @@ public void testSetAclWithNotSupportedGranteeType() throws Exception {
9394
.thenReturn(S3Acl.ACLIdentityType.GROUP.getHeaderType() + "=root");
9495
when(parameterMap.containsKey(ACL_MARKER)).thenReturn(true);
9596
OS3Exception e = assertThrows(OS3Exception.class, () ->
96-
bucketEndpoint.put(BUCKET_NAME, ACL_MARKER, null));
97+
bucketEndpoint.put(BUCKET_NAME, null));
9798
assertEquals(e.getHttpCode(), HTTP_NOT_IMPLEMENTED);
9899
}
99100

@@ -103,7 +104,7 @@ public void testRead() throws Exception {
103104
when(headers.getHeaderString(S3Acl.GRANT_READ))
104105
.thenReturn(S3Acl.ACLIdentityType.USER.getHeaderType() + "=root");
105106
Response response =
106-
bucketEndpoint.put(BUCKET_NAME, ACL_MARKER, null);
107+
bucketEndpoint.put(BUCKET_NAME, null);
107108
assertEquals(HTTP_OK, response.getStatus());
108109
S3BucketAcl getResponse = bucketEndpoint.getAcl(BUCKET_NAME);
109110
assertEquals(1, getResponse.getAclList().getGrantList().size());
@@ -117,7 +118,7 @@ public void testWrite() throws Exception {
117118
when(headers.getHeaderString(S3Acl.GRANT_WRITE))
118119
.thenReturn(S3Acl.ACLIdentityType.USER.getHeaderType() + "=root");
119120
Response response =
120-
bucketEndpoint.put(BUCKET_NAME, ACL_MARKER, null);
121+
bucketEndpoint.put(BUCKET_NAME, null);
121122
assertEquals(HTTP_OK, response.getStatus());
122123
S3BucketAcl getResponse = bucketEndpoint.getAcl(BUCKET_NAME);
123124
assertEquals(1, getResponse.getAclList().getGrantList().size());
@@ -131,7 +132,7 @@ public void testReadACP() throws Exception {
131132
when(headers.getHeaderString(S3Acl.GRANT_READ_CAP))
132133
.thenReturn(S3Acl.ACLIdentityType.USER.getHeaderType() + "=root");
133134
Response response =
134-
bucketEndpoint.put(BUCKET_NAME, ACL_MARKER, null);
135+
bucketEndpoint.put(BUCKET_NAME, null);
135136
assertEquals(HTTP_OK, response.getStatus());
136137
S3BucketAcl getResponse =
137138
bucketEndpoint.getAcl(BUCKET_NAME);
@@ -146,7 +147,7 @@ public void testWriteACP() throws Exception {
146147
when(headers.getHeaderString(S3Acl.GRANT_WRITE_CAP))
147148
.thenReturn(S3Acl.ACLIdentityType.USER.getHeaderType() + "=root");
148149
Response response =
149-
bucketEndpoint.put(BUCKET_NAME, ACL_MARKER, null);
150+
bucketEndpoint.put(BUCKET_NAME, null);
150151
assertEquals(HTTP_OK, response.getStatus());
151152
S3BucketAcl getResponse = bucketEndpoint.getAcl(BUCKET_NAME);
152153
assertEquals(1, getResponse.getAclList().getGrantList().size());
@@ -160,7 +161,7 @@ public void testFullControl() throws Exception {
160161
when(headers.getHeaderString(S3Acl.GRANT_FULL_CONTROL))
161162
.thenReturn(S3Acl.ACLIdentityType.USER.getHeaderType() + "=root");
162163
Response response =
163-
bucketEndpoint.put(BUCKET_NAME, ACL_MARKER, null);
164+
bucketEndpoint.put(BUCKET_NAME, null);
164165
assertEquals(HTTP_OK, response.getStatus());
165166
S3BucketAcl getResponse = bucketEndpoint.getAcl(BUCKET_NAME);
166167
assertEquals(1, getResponse.getAclList().getGrantList().size());
@@ -182,7 +183,7 @@ public void testCombination() throws Exception {
182183
when(headers.getHeaderString(S3Acl.GRANT_FULL_CONTROL))
183184
.thenReturn(S3Acl.ACLIdentityType.USER.getHeaderType() + "=root");
184185
Response response =
185-
bucketEndpoint.put(BUCKET_NAME, ACL_MARKER, null);
186+
bucketEndpoint.put(BUCKET_NAME, null);
186187
assertEquals(HTTP_OK, response.getStatus());
187188
S3BucketAcl getResponse = bucketEndpoint.getAcl(BUCKET_NAME);
188189
assertEquals(5, getResponse.getAclList().getGrantList().size());
@@ -195,7 +196,7 @@ public void testPutClearOldAcls() throws Exception {
195196
.thenReturn(S3Acl.ACLIdentityType.USER.getHeaderType() + "=root");
196197
// Put READ
197198
Response response =
198-
bucketEndpoint.put(BUCKET_NAME, ACL_MARKER, null);
199+
bucketEndpoint.put(BUCKET_NAME, null);
199200
assertEquals(HTTP_OK, response.getStatus());
200201
S3BucketAcl getResponse = bucketEndpoint.getAcl(BUCKET_NAME);
201202
assertEquals(1, getResponse.getAclList().getGrantList().size());
@@ -212,7 +213,7 @@ public void testPutClearOldAcls() throws Exception {
212213
.thenReturn(S3Acl.ACLIdentityType.USER.getHeaderType() + "=root");
213214
//Put WRITE
214215
response =
215-
bucketEndpoint.put(BUCKET_NAME, ACL_MARKER, null);
216+
bucketEndpoint.put(BUCKET_NAME, null);
216217
assertEquals(HTTP_OK, response.getStatus());
217218
getResponse = bucketEndpoint.getAcl(BUCKET_NAME);
218219
assertEquals(1, getResponse.getAclList().getGrantList().size());
@@ -230,7 +231,7 @@ public void testAclInBodyWithGroupUser() {
230231
.getResourceAsStream("groupAccessControlList.xml");
231232
when(parameterMap.containsKey(ACL_MARKER)).thenReturn(true);
232233
assertThrows(OS3Exception.class, () -> bucketEndpoint.put(
233-
BUCKET_NAME, ACL_MARKER, inputBody));
234+
BUCKET_NAME, inputBody));
234235
}
235236

236237
@Test
@@ -239,7 +240,7 @@ public void testAclInBody() throws Exception {
239240
.getResourceAsStream("userAccessControlList.xml");
240241
when(parameterMap.containsKey(ACL_MARKER)).thenReturn(true);
241242
Response response =
242-
bucketEndpoint.put(BUCKET_NAME, ACL_MARKER, inputBody);
243+
bucketEndpoint.put(BUCKET_NAME, inputBody);
243244
assertEquals(HTTP_OK, response.getStatus());
244245
S3BucketAcl getResponse = bucketEndpoint.getAcl(BUCKET_NAME);
245246
assertEquals(2, getResponse.getAclList().getGrantList().size());

0 commit comments

Comments
 (0)