Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_CLIENT_REQUIRED_OM_VERSION_MIN_KEY;
import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_CLIENT_SERVER_DEFAULTS_VALIDITY_PERIOD_MS;
import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_CLIENT_SERVER_DEFAULTS_VALIDITY_PERIOD_MS_DEFAULT;
import static org.apache.hadoop.ozone.OzoneConsts.ETAG;
import static org.apache.hadoop.ozone.OzoneConsts.MAXIMUM_NUMBER_OF_PARTS_PER_UPLOAD;
import static org.apache.hadoop.ozone.OzoneConsts.OLD_QUOTA_DEFAULT;
import static org.apache.hadoop.ozone.OzoneConsts.OZONE_MAXIMUM_ACCESS_ID_LENGTH;
Expand Down Expand Up @@ -1722,8 +1723,10 @@ public List<OzoneKey> listKeys(String volumeName, String bucketName,
key.getCreationTime(),
key.getModificationTime(),
key.getReplicationConfig(),
Collections.singletonMap(ETAG, key.getETag()),
key.isFile(),
key.getOwnerName()))
key.getOwnerName(),
Collections.emptyMap()))
.collect(Collectors.toList());
} else {
List<OmKeyInfo> keys = ozoneManagerClient.listKeys(
Expand All @@ -1735,8 +1738,10 @@ public List<OzoneKey> listKeys(String volumeName, String bucketName,
key.getCreationTime(),
key.getModificationTime(),
key.getReplicationConfig(),
key.getMetadata(),
key.isFile(),
key.getOwnerName()))
key.getOwnerName(),
key.getTags()))
.collect(Collectors.toList());
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -532,17 +532,40 @@ public void testGetObjectWithoutETag() throws Exception {
}

@Test
public void testListObjectsMany() {
public void testListObjectsMany() throws Exception {
final String bucketName = getBucketName();
s3Client.createBucket(bucketName);
final List<String> keyNames = Arrays.asList(
getKeyName("1"),
getKeyName("2"),
getKeyName("3")
);
final List<String> keyNamesWithoutETag = Arrays.asList(
getKeyName("4"),
getKeyName("5")
);

final Map<String, String> keyToEtag = new HashMap<>();
for (String keyName: keyNames) {
s3Client.putObject(bucketName, keyName, RandomStringUtils.secure().nextAlphanumeric(5));
PutObjectResult putObjectResult = s3Client.putObject(bucketName, keyName,
RandomStringUtils.secure().nextAlphanumeric(5));
keyToEtag.put(keyName, putObjectResult.getETag());
}
try (OzoneClient ozoneClient = OzoneClientFactory.getRpcClient(cluster.getConf())) {
ObjectStore store = ozoneClient.getObjectStore();

OzoneVolume volume = store.getS3Volume();
OzoneBucket bucket = volume.getBucket(bucketName);

for (String keyNameWithoutETag : keyNamesWithoutETag) {
byte[] valueBytes = RandomStringUtils.secure().nextAlphanumeric(5).getBytes(StandardCharsets.UTF_8);
try (OzoneOutputStream out = bucket.createKey(keyNameWithoutETag,
valueBytes.length,
ReplicationConfig.fromTypeAndFactor(ReplicationType.RATIS, ReplicationFactor.ONE),
Collections.emptyMap())) {
out.write(valueBytes);
}
}
}

ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
Expand All @@ -554,34 +577,64 @@ public void testListObjectsMany() {
assertEquals(listObjectsResponse.getObjectSummaries().stream()
.map(S3ObjectSummary::getKey).collect(Collectors.toList()),
keyNames.subList(0, 2));
for (S3ObjectSummary objectSummary : listObjectsResponse.getObjectSummaries()) {
assertEquals(keyToEtag.get(objectSummary.getKey()), objectSummary.getETag());
}
assertTrue(listObjectsResponse.isTruncated());


// Include both keys with and without ETag
listObjectsRequest = new ListObjectsRequest()
.withBucketName(bucketName)
.withMaxKeys(2)
.withMaxKeys(5)
.withMarker(listObjectsResponse.getNextMarker());
listObjectsResponse = s3Client.listObjects(listObjectsRequest);
assertThat(listObjectsResponse.getObjectSummaries()).hasSize(1);
assertThat(listObjectsResponse.getObjectSummaries()).hasSize(3);
assertEquals(bucketName, listObjectsResponse.getBucketName());
assertEquals(listObjectsResponse.getObjectSummaries().stream()
.map(S3ObjectSummary::getKey).collect(Collectors.toList()),
keyNames.subList(2, keyNames.size()));
assertEquals(keyNames.get(2), listObjectsResponse.getObjectSummaries().get(0).getKey());
assertEquals(keyNamesWithoutETag.get(0), listObjectsResponse.getObjectSummaries().get(1).getKey());
assertEquals(keyNamesWithoutETag.get(1), listObjectsResponse.getObjectSummaries().get(2).getKey());
for (S3ObjectSummary objectSummary : listObjectsResponse.getObjectSummaries()) {
assertEquals(keyToEtag.get(objectSummary.getKey()), objectSummary.getETag());
}
assertFalse(listObjectsResponse.isTruncated());
}

@Test
public void testListObjectsManyV2() {
public void testListObjectsManyV2() throws Exception {
final String bucketName = getBucketName();
s3Client.createBucket(bucketName);
final List<String> keyNames = Arrays.asList(
getKeyName("1"),
getKeyName("2"),
getKeyName("3")
);
final List<String> keyNamesWithoutETag = Arrays.asList(
getKeyName("4"),
getKeyName("5")
);

final Map<String, String> keyToEtag = new HashMap<>();
for (String keyName: keyNames) {
s3Client.putObject(bucketName, keyName, RandomStringUtils.secure().nextAlphanumeric(5));
PutObjectResult putObjectResult = s3Client.putObject(bucketName, keyName,
RandomStringUtils.secure().nextAlphanumeric(5));
keyToEtag.put(keyName, putObjectResult.getETag());
}
try (OzoneClient ozoneClient = OzoneClientFactory.getRpcClient(cluster.getConf())) {
Comment thread
ivandika3 marked this conversation as resolved.
Outdated
ObjectStore store = ozoneClient.getObjectStore();

OzoneVolume volume = store.getS3Volume();
OzoneBucket bucket = volume.getBucket(bucketName);

for (String keyNameWithoutETag : keyNamesWithoutETag) {
byte[] valueBytes = RandomStringUtils.secure().nextAlphanumeric(5).getBytes(StandardCharsets.UTF_8);
try (OzoneOutputStream out = bucket.createKey(keyNameWithoutETag,
valueBytes.length,
ReplicationConfig.fromTypeAndFactor(ReplicationType.RATIS, ReplicationFactor.ONE),
Collections.emptyMap())) {
out.write(valueBytes);
}
}
}

ListObjectsV2Request listObjectsRequest = new ListObjectsV2Request()
Expand All @@ -593,19 +646,27 @@ public void testListObjectsManyV2() {
assertEquals(listObjectsResponse.getObjectSummaries().stream()
.map(S3ObjectSummary::getKey).collect(Collectors.toList()),
keyNames.subList(0, 2));
for (S3ObjectSummary objectSummary : listObjectsResponse.getObjectSummaries()) {
assertEquals(keyToEtag.get(objectSummary.getKey()), objectSummary.getETag());
}
assertTrue(listObjectsResponse.isTruncated());


// Include both keys with and without ETag
listObjectsRequest = new ListObjectsV2Request()
.withBucketName(bucketName)
.withMaxKeys(2)
.withMaxKeys(5)
.withContinuationToken(listObjectsResponse.getNextContinuationToken());
listObjectsResponse = s3Client.listObjectsV2(listObjectsRequest);
assertThat(listObjectsResponse.getObjectSummaries()).hasSize(1);
assertThat(listObjectsResponse.getObjectSummaries()).hasSize(3);
assertEquals(bucketName, listObjectsResponse.getBucketName());
assertEquals(listObjectsResponse.getObjectSummaries().stream()
.map(S3ObjectSummary::getKey).collect(Collectors.toList()),
keyNames.subList(2, keyNames.size()));
assertEquals(bucketName, listObjectsResponse.getBucketName());
Comment thread
ivandika3 marked this conversation as resolved.
Outdated
assertEquals(keyNames.get(2), listObjectsResponse.getObjectSummaries().get(0).getKey());
assertEquals(keyNamesWithoutETag.get(0), listObjectsResponse.getObjectSummaries().get(1).getKey());
assertEquals(keyNamesWithoutETag.get(1), listObjectsResponse.getObjectSummaries().get(2).getKey());
for (S3ObjectSummary objectSummary : listObjectsResponse.getObjectSummaries()) {
assertEquals(keyToEtag.get(objectSummary.getKey()), objectSummary.getETag());
}
assertFalse(listObjectsResponse.isTruncated());
}

Expand Down