Skip to content

Commit d2419cb

Browse files
authored
Merge pull request #559 from RachelTucker/jsdk-285
JSDK-285: Updating get job transfer methods to add version id when getting object
2 parents 700308a + 0edafb6 commit d2419cb

File tree

4 files changed

+75
-4
lines changed

4 files changed

+75
-4
lines changed

ds3-sdk-integration/src/main/java/com/spectralogic/ds3client/integration/Util.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,11 @@
1818
import com.google.common.collect.ImmutableList;
1919
import com.spectralogic.ds3client.Ds3Client;
2020
import com.spectralogic.ds3client.Ds3ClientBuilder;
21-
import com.spectralogic.ds3client.commands.spectrads3.CancelJobSpectraS3Request;
22-
import com.spectralogic.ds3client.commands.spectrads3.GetJobsSpectraS3Request;
23-
import com.spectralogic.ds3client.commands.spectrads3.GetJobsSpectraS3Response;
24-
import com.spectralogic.ds3client.commands.spectrads3.GetSystemInformationSpectraS3Request;
21+
import com.spectralogic.ds3client.commands.spectrads3.*;
2522
import com.spectralogic.ds3client.helpers.DeleteBucket;
2623
import com.spectralogic.ds3client.helpers.Ds3ClientHelpers;
2724
import com.spectralogic.ds3client.helpers.channelbuilders.PrefixAdderObjectChannelBuilder;
25+
import com.spectralogic.ds3client.models.Bucket;
2826
import com.spectralogic.ds3client.models.Job;
2927
import com.spectralogic.ds3client.models.JobStatus;
3028
import com.spectralogic.ds3client.models.bulk.Ds3Object;
@@ -65,6 +63,22 @@ public static Ds3Client insecureFromEnv() {
6563
return builder.build();
6664
}
6765

66+
/**
67+
* Goes through all buckets on a BP and attempts to delete them and all their contents. It cancels all active jobs
68+
* associated with this bucket. Created for cleaning up after cascade failures in functional tests.
69+
*
70+
* USE ONLY WHEN DELETING ALL BUCKETS AND ALL CONTENT IS YOUR GOAL.
71+
*/
72+
public static void forceCleanupBucketsOnBP(final Ds3Client client) throws IOException {
73+
final GetBucketsSpectraS3Request request = new GetBucketsSpectraS3Request();
74+
final GetBucketsSpectraS3Response response = client.getBucketsSpectraS3(request);
75+
76+
for (final Bucket bucket : response.getBucketListResult().getBuckets()) {
77+
cancelAllJobsForBucket(client, bucket.getName());
78+
client.deleteBucketSpectraS3(new DeleteBucketSpectraS3Request(bucket.getName()).withForce(true));
79+
}
80+
}
81+
6882
public static void assumeVersion1_2(final Ds3Client client) throws IOException {
6983
final int majorVersion = Integer.parseInt(client.getSystemInformationSpectraS3(
7084
new GetSystemInformationSpectraS3Request()).getSystemInformationResult().getBuildInformation().getVersion().split("\\.")[0]);

ds3-sdk-integration/src/test/java/com/spectralogic/ds3client/integration/VersionedObject_Test.java

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,26 +22,34 @@
2222
import com.spectralogic.ds3client.commands.spectrads3.GetBulkJobSpectraS3Request;
2323
import com.spectralogic.ds3client.commands.spectrads3.StageObjectsJobSpectraS3Request;
2424
import com.spectralogic.ds3client.helpers.Ds3ClientHelpers;
25+
import com.spectralogic.ds3client.helpers.FileObjectGetter;
2526
import com.spectralogic.ds3client.integration.test.helpers.TempStorageIds;
2627
import com.spectralogic.ds3client.integration.test.helpers.TempStorageUtil;
2728
import com.spectralogic.ds3client.models.ChecksumType;
2829
import com.spectralogic.ds3client.models.VersioningLevel;
2930
import com.spectralogic.ds3client.models.bulk.Ds3Object;
31+
import com.spectralogic.ds3client.utils.ResourceUtils;
32+
import org.apache.commons.io.FileUtils;
3033
import org.junit.AfterClass;
3134
import org.junit.BeforeClass;
3235
import org.junit.Test;
3336
import org.slf4j.Logger;
3437
import org.slf4j.LoggerFactory;
3538

39+
import java.io.File;
3640
import java.io.IOException;
3741
import java.net.URISyntaxException;
42+
import java.nio.file.Files;
43+
import java.nio.file.Path;
44+
import java.nio.file.Paths;
3845
import java.util.List;
3946
import java.util.UUID;
4047
import java.util.stream.Collectors;
4148

4249
import static com.spectralogic.ds3client.integration.Util.*;
4350
import static org.hamcrest.Matchers.is;
4451
import static org.junit.Assert.assertThat;
52+
import static org.junit.Assert.assertTrue;
4553

4654
public class VersionedObject_Test {
4755

@@ -138,4 +146,46 @@ public void stageObjectsWithVersioning() throws IOException, URISyntaxException
138146
CLIENT.deleteBucketSpectraS3(new DeleteBucketSpectraS3Request(TEST_ENV_NAME).withForce(true));
139147
}
140148
}
149+
150+
@Test
151+
public void getObjectsWithVersioningUsingHelpers() throws IOException, URISyntaxException, InterruptedException {
152+
// Create temp directory for files we will retrieve from bp
153+
final Path tempDirectory = Files.createTempDirectory(Paths.get("."), null);
154+
155+
try {
156+
HELPERS.ensureBucketExists(TEST_ENV_NAME, envDataPolicyId);
157+
final String objectName = "object_with_versions";
158+
159+
// Put different content for object twice
160+
loadTestBook(CLIENT, BOOKS[0], objectName, TEST_ENV_NAME); // putting beowulf as content
161+
loadTestBook(CLIENT, BOOKS[1], objectName, TEST_ENV_NAME); // putting sherlock holmes as content
162+
163+
// Get the version of the objects
164+
final GetBucketRequest getBucketRequest = new GetBucketRequest(TEST_ENV_NAME).withVersions(true);
165+
final GetBucketResponse getBucketResponse = CLIENT.getBucket(getBucketRequest);
166+
167+
assertThat(getBucketResponse.getListBucketResult().getObjects().size(), is(0));
168+
assertThat(getBucketResponse.getListBucketResult().getVersionedObjects().size(), is(2));
169+
170+
// Create bulk get job with the oldest version of the object
171+
final List<Ds3Object> objects = getBucketResponse.getListBucketResult().getVersionedObjects().stream()
172+
.filter(obj -> !obj.getIsLatest()) // filters out the latest version of the object
173+
.map(obj -> new Ds3Object(obj.getKey(), obj.getVersionId()))
174+
.collect(Collectors.toList());
175+
176+
final Ds3ClientHelpers.Job readJob = HELPERS.startReadJob(TEST_ENV_NAME, objects);
177+
178+
readJob.transfer(new FileObjectGetter(tempDirectory));
179+
180+
// Check content is beowulf, which was the first version of content
181+
final File originalFile = ResourceUtils.loadFileResource(RESOURCE_BASE_NAME + BOOKS[0]).toFile();
182+
final File fileCopiedFromBP = Paths.get(tempDirectory.toString(), objectName).toFile();
183+
assertTrue(FileUtils.contentEquals(originalFile, fileCopiedFromBP));
184+
185+
} finally {
186+
cancelAllJobsForBucket(CLIENT, TEST_ENV_NAME);
187+
deleteAllContents(CLIENT, TEST_ENV_NAME);
188+
FileUtils.deleteDirectory(tempDirectory.toFile());
189+
}
190+
}
141191
}

ds3-sdk/src/main/java/com/spectralogic/ds3client/helpers/strategy/transferstrategy/GetJobPartialBlobTransferMethod.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,9 @@ private GetObjectRequest makeGetObjectRequest(final SeekableByteChannel seekable
9292
jobId,
9393
blob.getOffset());
9494

95+
if (blob.getVersionId() != null) {
96+
getObjectRequest.withVersionId(blob.getVersionId());
97+
}
9598
getObjectRequest.withByteRanges(blobRanges);
9699

97100
return getObjectRequest;

ds3-sdk/src/main/java/com/spectralogic/ds3client/helpers/strategy/transferstrategy/GetJobTransferMethod.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,10 @@ private GetObjectRequest makeGetObjectRequest(final SeekableByteChannel seekable
8686
jobId,
8787
blob.getOffset());
8888

89+
if (jobPart.getBlob().getVersionId() != null) {
90+
getObjectRequest.withVersionId(jobPart.getBlob().getVersionId());
91+
}
92+
8993
final ImmutableCollection<Range> rangesForBlob = StrategyUtils.getRangesForBlob(rangesForBlobs, blob);
9094

9195
if (rangesForBlob != null) {

0 commit comments

Comments
 (0)