HDFS-12205. Ozone: List Key on an empty ozone bucket fails with command failed error. Contributed by Lokesh Jain.
This commit is contained in:
parent
8052374e79
commit
712bd70ac7
@ -634,6 +634,10 @@ public void createBucket(BucketArgs args) throws OzoneException {
|
|||||||
userDB.put(args.getParentName().getBytes(encoding),
|
userDB.put(args.getParentName().getBytes(encoding),
|
||||||
bucketList.toDBString().getBytes(encoding));
|
bucketList.toDBString().getBytes(encoding));
|
||||||
|
|
||||||
|
// Update userDB with volume/bucket -> empty key list
|
||||||
|
userDB.put(args.getResourceName().getBytes(encoding),
|
||||||
|
new ListKeys().toDBString().getBytes(encoding));
|
||||||
|
|
||||||
// and update the metadataDB with volume/bucket->BucketInfo
|
// and update the metadataDB with volume/bucket->BucketInfo
|
||||||
metadataDB.put(args.getResourceName().getBytes(encoding),
|
metadataDB.put(args.getResourceName().getBytes(encoding),
|
||||||
bucketInfo.toDBString().getBytes(encoding));
|
bucketInfo.toDBString().getBytes(encoding));
|
||||||
@ -916,12 +920,7 @@ public void commitKey(KeyArgs args, OutputStream stream)
|
|||||||
ListKeys keyList;
|
ListKeys keyList;
|
||||||
byte[] bucketListBytes = userDB.get(args.getParentName()
|
byte[] bucketListBytes = userDB.get(args.getParentName()
|
||||||
.getBytes(encoding));
|
.getBytes(encoding));
|
||||||
if (bucketListBytes == null) {
|
|
||||||
keyList = new ListKeys();
|
|
||||||
} else {
|
|
||||||
keyList = ListKeys.parse(new String(bucketListBytes, encoding));
|
keyList = ListKeys.parse(new String(bucketListBytes, encoding));
|
||||||
}
|
|
||||||
|
|
||||||
KeyInfo keyInfo;
|
KeyInfo keyInfo;
|
||||||
|
|
||||||
byte[] objectBytes = metadataDB.get(args.getResourceName()
|
byte[] objectBytes = metadataDB.get(args.getResourceName()
|
||||||
|
@ -178,4 +178,8 @@ public void testGetVolumesOfAnotherUserShouldFail() throws IOException {
|
|||||||
super.testGetVolumesOfAnotherUserShouldFail(port);
|
super.testGetVolumesOfAnotherUserShouldFail(port);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testListKeyOnEmptyBucket() throws IOException {
|
||||||
|
super.testListKeyOnEmptyBucket(port);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -351,4 +351,64 @@ public void testGetVolumesOfAnotherUserShouldFail(int port)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testListKeyOnEmptyBucket(int port) throws IOException {
|
||||||
|
SimpleDateFormat format =
|
||||||
|
new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss ZZZ", Locale.US);
|
||||||
|
CloseableHttpClient client = createHttpClient();
|
||||||
|
String volumeName = OzoneUtils.getRequestID().toLowerCase();
|
||||||
|
String bucketName = OzoneUtils.getRequestID().toLowerCase() + "bucket";
|
||||||
|
try {
|
||||||
|
|
||||||
|
HttpPost httppost = new HttpPost(
|
||||||
|
String.format("http://localhost:%d/%s", port, volumeName));
|
||||||
|
httppost.addHeader(Header.OZONE_VERSION_HEADER,
|
||||||
|
Header.OZONE_V1_VERSION_HEADER);
|
||||||
|
httppost.addHeader(HttpHeaders.DATE,
|
||||||
|
format.format(new Date(Time.monotonicNow())));
|
||||||
|
httppost.addHeader(HttpHeaders.AUTHORIZATION,
|
||||||
|
Header.OZONE_SIMPLE_AUTHENTICATION_SCHEME + " "
|
||||||
|
+ OzoneConsts.OZONE_SIMPLE_HDFS_USER);
|
||||||
|
httppost.addHeader(Header.OZONE_USER, OzoneConsts.OZONE_SIMPLE_HDFS_USER);
|
||||||
|
HttpResponse response = client.execute(httppost);
|
||||||
|
assertEquals(response.toString(), HTTP_CREATED,
|
||||||
|
response.getStatusLine().getStatusCode());
|
||||||
|
client.close();
|
||||||
|
|
||||||
|
client = createHttpClient();
|
||||||
|
httppost = new HttpPost(String
|
||||||
|
.format("http://localhost:%d/%s/%s", port, volumeName, bucketName));
|
||||||
|
httppost.addHeader(Header.OZONE_VERSION_HEADER,
|
||||||
|
Header.OZONE_V1_VERSION_HEADER);
|
||||||
|
httppost.addHeader(HttpHeaders.DATE,
|
||||||
|
format.format(new Date(Time.monotonicNow())));
|
||||||
|
httppost.addHeader(HttpHeaders.AUTHORIZATION,
|
||||||
|
Header.OZONE_SIMPLE_AUTHENTICATION_SCHEME + " "
|
||||||
|
+ OzoneConsts.OZONE_SIMPLE_HDFS_USER);
|
||||||
|
httppost.addHeader(Header.OZONE_USER, OzoneConsts.OZONE_SIMPLE_HDFS_USER);
|
||||||
|
response = client.execute(httppost);
|
||||||
|
assertEquals(response.toString(), HTTP_CREATED,
|
||||||
|
response.getStatusLine().getStatusCode());
|
||||||
|
client.close();
|
||||||
|
|
||||||
|
client = createHttpClient();
|
||||||
|
HttpGet httpget = new HttpGet(String
|
||||||
|
.format("http://localhost:%d/%s/%s", port, volumeName, bucketName));
|
||||||
|
httpget.addHeader(Header.OZONE_VERSION_HEADER,
|
||||||
|
Header.OZONE_V1_VERSION_HEADER);
|
||||||
|
httpget.addHeader(HttpHeaders.DATE,
|
||||||
|
format.format(new Date(Time.monotonicNow())));
|
||||||
|
httpget.addHeader(HttpHeaders.AUTHORIZATION,
|
||||||
|
Header.OZONE_SIMPLE_AUTHENTICATION_SCHEME + " "
|
||||||
|
+ OzoneConsts.OZONE_SIMPLE_HDFS_USER);
|
||||||
|
httpget.addHeader(Header.OZONE_USER, OzoneConsts.OZONE_SIMPLE_HDFS_USER);
|
||||||
|
response = client.execute(httpget);
|
||||||
|
assertEquals(response.toString() + " " + response.getStatusLine()
|
||||||
|
.getReasonPhrase(), HTTP_OK,
|
||||||
|
response.getStatusLine().getStatusCode());
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
client.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user