add restore in StorageAPI.java(cosbench-api/com.intel.cosbench.api.storage)
/**
* Restore an object from a container.
*
* @param container - the name of a container.
* @param object - the name of an object to be restored.
* @param config - the configuration used for this operation.
*/
public void restoreObjectV2(String container, String object, Config config);
add restore in NoneStorage.java(cosbench-api/com.intel/cosbench.api.storage)
@Override
public void restoreObjectV2(String container, String object, Config config) {
if (logging)
logger.info("performing RESTORE at /{}/{}", container, object);
}
add Restore.java in cosbench-driver(com.intel.cosbench.driver.operator)
The same to Deleter.java
/**
* @Title: Restorer.java
* @Package com.intel.cosbench.driver.operator
* @Description: Restore class
* @author sine
* @date 2021-7-12
* @version V1.0
*/
package com.intel.cosbench.driver.operator;
import java.util.Date;
import com.intel.cosbench.bench.*;
import com.intel.cosbench.config.Config;
import com.intel.cosbench.driver.util.ObjectPicker;
import com.intel.cosbench.service.AbortedException;
import com.intel.cosbench.api.storage.StorageException;
import com.intel.cosbench.api.storage.StorageInterruptedException;
/**
* This class represents primitive RESTORE operation.
*
* @author sine
*
*/
class Restorer extends AbstractOperator {
public static final String OP_TYPE = "restore";
private ObjectPicker objPicker = new ObjectPicker();
public Restorer() {
/* empty */
}
@Override
protected void init(String id, int ratio, String division, Config config) {
super.init(id, ratio, division, config);
objPicker.init(division, config);
}
@Override
public String getOpType() {
return OP_TYPE;
}
@Override
protected void operate(int idx, int all, Session session) {
String[] path = objPicker.pickObjPath(session.getRandom(), idx, all);
Sample sample = doRestoreV2(path[0], path[1], config, session, this);
session.getListener().onSampleCreated(sample);
Date now = sample.getTimestamp();
Result result = new Result(now, getId(), getOpType(), getSampleType(), getName(), sample.isSucc());
session.getListener().onOperationCompleted(result);
}
public static Sample doRestoreV2(String conName, String objName, Config config, Session session, Operator op) {
if (Thread.interrupted())
throw new AbortedException();
long start = System.nanoTime();
try {
session.getApi().restoreObjectV2(conName, objName, config); // 2021.7.13
} catch (StorageInterruptedException sie) {
doLogErr(session.getLogger(), sie.getMessage(), sie);
throw new AbortedException();
} catch (StorageException se) {
String msg = "Error restoring object " + conName + ": " + objName + se.getMessage();
doLogWarn(session.getLogger(), msg);
} catch (Exception e) {
isUnauthorizedException(e, session);
errorStatisticsHandle(e, session, conName + "/" + objName);
return new Sample(new Date(), op.getId(), op.getOpType(), op.getSampleType(), op.getName(), false);
}
long end = System.nanoTime();
return new Sample(new Date(), op.getId(), op.getOpType(), op.getSampleType(), op.getName(), true,
(end - start) / 1000000, 0L, 0L);
}
}
if (StringUtils.equals(type, Deleter.OP_TYPE))
return new Deleter();
// 2021.7.12 ADD
if (StringUtils.equals(type, Restorer.OP_TYPE))
return new Restorer();
Add restoreObject in S3Storage.java(cosbench-s3/com.intel.cosbench.api.S3Stor)
@Override
public void restoreObjectV2(String container, String object, Config config) {
super.restoreObjectV2(container, object, config);
try {
// Create and submit a request to restore an object from Glacier/Deep Archive
// for some days.
RestoreObjectRequest requestRestore = new RestoreObjectRequest(container, object, 1);
restoreClient.restoreObjectV2(requestRestore);
ObjectMetadata response = client.getObjectMetadata(container, object);
Boolean restoreFlag = response.getOngoingRestore();
} catch (AmazonServiceException ase) {
logger.warn("AmazonServiceException, Status code is: " + ase.getStatusCode() +
", and below exception encountered when restore object " + object + " at bucket " + container + ": "
+ ase.getMessage());
ase.printStackTrace();
} catch (SdkClientException sce) { // recreate the AmazonS3 client connection if it is broken.
logger.warn("SdkClientException, and below exception encountered when restore object " + object + " at bucket " + container + ": "
+ sce.getMessage());
sce.printStackTrace();
initRestoreClient();
}
}
That's all.
Have fun.
Notice:
If you want to send restore request, you must set withSignerOverride to AWSS3V4SignerType.
IDE: Eclipse aws-java-sdk version: 1.12.x
modify Operators.java(com.intel.cosbench.driver.operator)
Add restoreObject in S3Storage.java(cosbench-s3/com.intel.cosbench.api.S3Stor)
That's all. Have fun.
Notice: If you want to send restore request, you must set withSignerOverride to AWSS3V4SignerType.