/*
* The Alluxio Open Foundation licenses this work under the Apache License, version 2.0
* (the "License"). You may not use this work except in compliance with the License, which is
* available at www.apache.org/licenses/LICENSE-2.0
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied, as more fully set forth in the License.
*
* See the NOTICE file distributed with this work for information regarding copyright ownership.
*/
package alluxio.underfs.gcs;
import alluxio.exception.PreconditionMessage;
import alluxio.underfs.UnderFileSystem;
import alluxio.underfs.UnderFileSystemCluster;
import alluxio.underfs.options.DeleteOptions;
import alluxio.util.io.PathUtils;
import com.google.common.base.Preconditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.UUID;
/**
* This class will use Google Cloud Storage as the backing store. The integration properties should
* be specified in the module's pom file. Each instance of the cluster will run with a separate base
* directory (user prefix + uuid). Each test will attempt to clean up their test directories, but
* in cases of complete failure (ie. jvm crashed) the directory will need to be cleaned up through
* manual means.
*/
public class GCSUnderStorageCluster extends UnderFileSystemCluster {
private static final Logger LOG = LoggerFactory.getLogger(GCSUnderStorageCluster.class);
private static final String INTEGRATION_GCS_BUCKET = "gcsBucket";
private boolean mStarted;
private String mGCSBucket;
public GCSUnderStorageCluster(String baseDir) {
super(baseDir);
mGCSBucket =
PathUtils.concatPath(System.getProperty(INTEGRATION_GCS_BUCKET), UUID.randomUUID());
Preconditions.checkState(mGCSBucket != null && !mGCSBucket.equals(""),
PreconditionMessage.GCS_BUCKET_MUST_BE_SET.toString(), INTEGRATION_GCS_BUCKET);
mBaseDir = PathUtils.concatPath(mGCSBucket, UUID.randomUUID());
mStarted = false;
}
@Override
public void cleanup() throws IOException {
mBaseDir = PathUtils.concatPath(mGCSBucket, UUID.randomUUID());
}
@Override
public String getUnderFilesystemAddress() {
return mBaseDir;
}
@Override
public boolean isStarted() {
return mStarted;
}
@Override
public void shutdown() throws IOException {
LOG.info("Shutting down GCS testing cluster, deleting bucket contents in: " + mGCSBucket);
UnderFileSystem ufs = UnderFileSystem.Factory.create(mGCSBucket);
ufs.deleteDirectory(mGCSBucket, DeleteOptions.defaults().setRecursive(true));
}
@Override
public void start() throws IOException {
mStarted = true;
}
}