HDFS-12490. Ozone: OzoneClient: Add creation/modification time information in OzoneVolume/OzoneBucket/OzoneKey. Contributed by Mukul Kumar Singh.
This commit is contained in:
parent
8881309002
commit
9bb516118d
|
@ -72,6 +72,11 @@ public class OzoneBucket {
|
||||||
*/
|
*/
|
||||||
private int listCacheSize;
|
private int listCacheSize;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creation time of the bucket.
|
||||||
|
*/
|
||||||
|
private long creationTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs OzoneBucket instance.
|
* Constructs OzoneBucket instance.
|
||||||
* @param conf Configuration object.
|
* @param conf Configuration object.
|
||||||
|
@ -81,11 +86,12 @@ public class OzoneBucket {
|
||||||
* @param acls ACLs associated with the bucket.
|
* @param acls ACLs associated with the bucket.
|
||||||
* @param storageType StorageType of the bucket.
|
* @param storageType StorageType of the bucket.
|
||||||
* @param versioning versioning status of the bucket.
|
* @param versioning versioning status of the bucket.
|
||||||
|
* @param creationTime creation time of the bucket.
|
||||||
*/
|
*/
|
||||||
public OzoneBucket(Configuration conf, ClientProtocol proxy,
|
public OzoneBucket(Configuration conf, ClientProtocol proxy,
|
||||||
String volumeName, String bucketName,
|
String volumeName, String bucketName,
|
||||||
List<OzoneAcl> acls, StorageType storageType,
|
List<OzoneAcl> acls, StorageType storageType,
|
||||||
Boolean versioning) {
|
Boolean versioning, long creationTime) {
|
||||||
this.proxy = proxy;
|
this.proxy = proxy;
|
||||||
this.volumeName = volumeName;
|
this.volumeName = volumeName;
|
||||||
this.name = bucketName;
|
this.name = bucketName;
|
||||||
|
@ -93,6 +99,7 @@ public class OzoneBucket {
|
||||||
this.storageType = storageType;
|
this.storageType = storageType;
|
||||||
this.versioning = versioning;
|
this.versioning = versioning;
|
||||||
this.listCacheSize = OzoneClientUtils.getListCacheSize(conf);
|
this.listCacheSize = OzoneClientUtils.getListCacheSize(conf);
|
||||||
|
this.creationTime = creationTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -140,6 +147,15 @@ public class OzoneBucket {
|
||||||
return versioning;
|
return versioning;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns creation time of the Bucket.
|
||||||
|
*
|
||||||
|
* @return creation time of the bucket
|
||||||
|
*/
|
||||||
|
public long getCreationTime() {
|
||||||
|
return creationTime;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds ACLs to the Bucket.
|
* Adds ACLs to the Bucket.
|
||||||
* @param addAcls ACLs to be added
|
* @param addAcls ACLs to be added
|
||||||
|
|
|
@ -39,17 +39,28 @@ public class OzoneKey {
|
||||||
* Size of the data.
|
* Size of the data.
|
||||||
*/
|
*/
|
||||||
private final long dataSize;
|
private final long dataSize;
|
||||||
|
/**
|
||||||
|
* Creation time of the key.
|
||||||
|
*/
|
||||||
|
private long creationTime;
|
||||||
|
/**
|
||||||
|
* Modification time of the key.
|
||||||
|
*/
|
||||||
|
private long modificationTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs OzoneKey from KsmKeyInfo.
|
* Constructs OzoneKey from KsmKeyInfo.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public OzoneKey(String volumeName, String bucketName,
|
public OzoneKey(String volumeName, String bucketName,
|
||||||
String keyName, long size) {
|
String keyName, long size, long creationTime,
|
||||||
|
long modificationTime) {
|
||||||
this.volumeName = volumeName;
|
this.volumeName = volumeName;
|
||||||
this.bucketName = bucketName;
|
this.bucketName = bucketName;
|
||||||
this.name = keyName;
|
this.name = keyName;
|
||||||
this.dataSize = size;
|
this.dataSize = size;
|
||||||
|
this.creationTime = creationTime;
|
||||||
|
this.modificationTime = modificationTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -88,4 +99,21 @@ public class OzoneKey {
|
||||||
return dataSize;
|
return dataSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the creation time of the key.
|
||||||
|
*
|
||||||
|
* @return creation time
|
||||||
|
*/
|
||||||
|
public long getCreationTime() {
|
||||||
|
return creationTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the modification time of the key.
|
||||||
|
*
|
||||||
|
* @return modification time
|
||||||
|
*/
|
||||||
|
public long getModificationTime() {
|
||||||
|
return modificationTime;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,6 +56,10 @@ public class OzoneVolume {
|
||||||
* Quota allocated for the Volume.
|
* Quota allocated for the Volume.
|
||||||
*/
|
*/
|
||||||
private long quotaInBytes;
|
private long quotaInBytes;
|
||||||
|
/**
|
||||||
|
* Creation time of the volume.
|
||||||
|
*/
|
||||||
|
private long creationTime;
|
||||||
/**
|
/**
|
||||||
* Volume ACLs.
|
* Volume ACLs.
|
||||||
*/
|
*/
|
||||||
|
@ -71,16 +75,18 @@ public class OzoneVolume {
|
||||||
* @param admin Volume admin.
|
* @param admin Volume admin.
|
||||||
* @param owner Volume owner.
|
* @param owner Volume owner.
|
||||||
* @param quotaInBytes Volume quota in bytes.
|
* @param quotaInBytes Volume quota in bytes.
|
||||||
|
* @param creationTime creation time of the volume
|
||||||
* @param acls ACLs associated with the volume.
|
* @param acls ACLs associated with the volume.
|
||||||
*/
|
*/
|
||||||
public OzoneVolume(Configuration conf, ClientProtocol proxy, String name,
|
public OzoneVolume(Configuration conf, ClientProtocol proxy, String name,
|
||||||
String admin, String owner, long quotaInBytes,
|
String admin, String owner, long quotaInBytes,
|
||||||
List<OzoneAcl> acls) {
|
long creationTime, List<OzoneAcl> acls) {
|
||||||
this.proxy = proxy;
|
this.proxy = proxy;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.admin = admin;
|
this.admin = admin;
|
||||||
this.owner = owner;
|
this.owner = owner;
|
||||||
this.quotaInBytes = quotaInBytes;
|
this.quotaInBytes = quotaInBytes;
|
||||||
|
this.creationTime = creationTime;
|
||||||
this.acls = acls;
|
this.acls = acls;
|
||||||
this.listCacheSize = OzoneClientUtils.getListCacheSize(conf);
|
this.listCacheSize = OzoneClientUtils.getListCacheSize(conf);
|
||||||
}
|
}
|
||||||
|
@ -121,6 +127,15 @@ public class OzoneVolume {
|
||||||
return quotaInBytes;
|
return quotaInBytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns creation time of the volume.
|
||||||
|
*
|
||||||
|
* @return creation time.
|
||||||
|
*/
|
||||||
|
public long getCreationTime() {
|
||||||
|
return creationTime;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns OzoneAcl list associated with the Volume.
|
* Returns OzoneAcl list associated with the Volume.
|
||||||
*
|
*
|
||||||
|
|
|
@ -226,6 +226,7 @@ public class RpcClient implements ClientProtocol {
|
||||||
volume.getAdminName(),
|
volume.getAdminName(),
|
||||||
volume.getOwnerName(),
|
volume.getOwnerName(),
|
||||||
volume.getQuotaInBytes(),
|
volume.getQuotaInBytes(),
|
||||||
|
volume.getCreationTime(),
|
||||||
volume.getAclMap().ozoneAclGetProtobuf().stream().
|
volume.getAclMap().ozoneAclGetProtobuf().stream().
|
||||||
map(KSMPBHelper::convertOzoneAcl).collect(Collectors.toList()));
|
map(KSMPBHelper::convertOzoneAcl).collect(Collectors.toList()));
|
||||||
}
|
}
|
||||||
|
@ -256,6 +257,7 @@ public class RpcClient implements ClientProtocol {
|
||||||
volume.getAdminName(),
|
volume.getAdminName(),
|
||||||
volume.getOwnerName(),
|
volume.getOwnerName(),
|
||||||
volume.getQuotaInBytes(),
|
volume.getQuotaInBytes(),
|
||||||
|
volume.getCreationTime(),
|
||||||
volume.getAclMap().ozoneAclGetProtobuf().stream().
|
volume.getAclMap().ozoneAclGetProtobuf().stream().
|
||||||
map(KSMPBHelper::convertOzoneAcl).collect(Collectors.toList())))
|
map(KSMPBHelper::convertOzoneAcl).collect(Collectors.toList())))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
@ -275,6 +277,7 @@ public class RpcClient implements ClientProtocol {
|
||||||
volume.getAdminName(),
|
volume.getAdminName(),
|
||||||
volume.getOwnerName(),
|
volume.getOwnerName(),
|
||||||
volume.getQuotaInBytes(),
|
volume.getQuotaInBytes(),
|
||||||
|
volume.getCreationTime(),
|
||||||
volume.getAclMap().ozoneAclGetProtobuf().stream().
|
volume.getAclMap().ozoneAclGetProtobuf().stream().
|
||||||
map(KSMPBHelper::convertOzoneAcl).collect(Collectors.toList())))
|
map(KSMPBHelper::convertOzoneAcl).collect(Collectors.toList())))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
@ -409,7 +412,8 @@ public class RpcClient implements ClientProtocol {
|
||||||
bucketArgs.getBucketName(),
|
bucketArgs.getBucketName(),
|
||||||
bucketArgs.getAcls(),
|
bucketArgs.getAcls(),
|
||||||
bucketArgs.getStorageType(),
|
bucketArgs.getStorageType(),
|
||||||
bucketArgs.getIsVersionEnabled());
|
bucketArgs.getIsVersionEnabled(),
|
||||||
|
bucketArgs.getCreationTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -426,7 +430,8 @@ public class RpcClient implements ClientProtocol {
|
||||||
bucket.getBucketName(),
|
bucket.getBucketName(),
|
||||||
bucket.getAcls(),
|
bucket.getAcls(),
|
||||||
bucket.getStorageType(),
|
bucket.getStorageType(),
|
||||||
bucket.getIsVersionEnabled()))
|
bucket.getIsVersionEnabled(),
|
||||||
|
bucket.getCreationTime()))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -507,7 +512,9 @@ public class RpcClient implements ClientProtocol {
|
||||||
key.getVolumeName(),
|
key.getVolumeName(),
|
||||||
key.getBucketName(),
|
key.getBucketName(),
|
||||||
key.getKeyName(),
|
key.getKeyName(),
|
||||||
key.getDataSize()))
|
key.getDataSize(),
|
||||||
|
key.getCreationTime(),
|
||||||
|
key.getModificationTime()))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -527,7 +534,9 @@ public class RpcClient implements ClientProtocol {
|
||||||
return new OzoneKey(keyInfo.getVolumeName(),
|
return new OzoneKey(keyInfo.getVolumeName(),
|
||||||
keyInfo.getBucketName(),
|
keyInfo.getBucketName(),
|
||||||
keyInfo.getKeyName(),
|
keyInfo.getKeyName(),
|
||||||
keyInfo.getDataSize());
|
keyInfo.getDataSize(),
|
||||||
|
keyInfo.getCreationTime(),
|
||||||
|
keyInfo.getModificationTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -35,7 +35,7 @@ public final class KsmKeyInfo {
|
||||||
private long dataSize;
|
private long dataSize;
|
||||||
private List<KsmKeyLocationInfo> keyLocationList;
|
private List<KsmKeyLocationInfo> keyLocationList;
|
||||||
private final long creationTime;
|
private final long creationTime;
|
||||||
private final long modificationTime;
|
private long modificationTime;
|
||||||
|
|
||||||
private KsmKeyInfo(String volumeName, String bucketName, String keyName,
|
private KsmKeyInfo(String volumeName, String bucketName, String keyName,
|
||||||
List<KsmKeyLocationInfo> locationInfos, long dataSize, long creationTime,
|
List<KsmKeyLocationInfo> locationInfos, long dataSize, long creationTime,
|
||||||
|
@ -85,6 +85,10 @@ public final class KsmKeyInfo {
|
||||||
return modificationTime;
|
return modificationTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setModificationTime(long modificationTime) {
|
||||||
|
this.modificationTime = modificationTime;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Builder of KsmKeyInfo.
|
* Builder of KsmKeyInfo.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -24,6 +24,7 @@ import org.apache.hadoop.ozone.ksm.exceptions.KSMException;
|
||||||
import org.apache.hadoop.ozone.protocol.proto
|
import org.apache.hadoop.ozone.protocol.proto
|
||||||
.KeySpaceManagerProtocolProtos.BucketInfo;
|
.KeySpaceManagerProtocolProtos.BucketInfo;
|
||||||
import org.apache.hadoop.ozone.OzoneAcl;
|
import org.apache.hadoop.ozone.OzoneAcl;
|
||||||
|
import org.apache.hadoop.util.Time;
|
||||||
import org.iq80.leveldb.DBException;
|
import org.iq80.leveldb.DBException;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
@ -96,7 +97,16 @@ public class BucketManagerImpl implements BucketManager {
|
||||||
throw new KSMException("Bucket already exist",
|
throw new KSMException("Bucket already exist",
|
||||||
KSMException.ResultCodes.FAILED_BUCKET_ALREADY_EXISTS);
|
KSMException.ResultCodes.FAILED_BUCKET_ALREADY_EXISTS);
|
||||||
}
|
}
|
||||||
metadataManager.put(bucketKey, bucketInfo.getProtobuf().toByteArray());
|
|
||||||
|
KsmBucketInfo ksmBucketInfo = KsmBucketInfo.newBuilder()
|
||||||
|
.setVolumeName(bucketInfo.getVolumeName())
|
||||||
|
.setBucketName(bucketInfo.getBucketName())
|
||||||
|
.setAcls(bucketInfo.getAcls())
|
||||||
|
.setStorageType(bucketInfo.getStorageType())
|
||||||
|
.setIsVersionEnabled(bucketInfo.getIsVersionEnabled())
|
||||||
|
.setCreationTime(Time.now())
|
||||||
|
.build();
|
||||||
|
metadataManager.put(bucketKey, ksmBucketInfo.getProtobuf().toByteArray());
|
||||||
|
|
||||||
LOG.debug("created bucket: {} in volume: {}", bucketName, volumeName);
|
LOG.debug("created bucket: {} in volume: {}", bucketName, volumeName);
|
||||||
} catch (IOException | DBException ex) {
|
} catch (IOException | DBException ex) {
|
||||||
|
|
|
@ -27,7 +27,8 @@ import org.apache.hadoop.conf.OzoneConfiguration;
|
||||||
import org.apache.hadoop.ozone.ksm.exceptions.KSMException;
|
import org.apache.hadoop.ozone.ksm.exceptions.KSMException;
|
||||||
import org.apache.hadoop.ozone.ksm.exceptions.KSMException.ResultCodes;
|
import org.apache.hadoop.ozone.ksm.exceptions.KSMException.ResultCodes;
|
||||||
import org.apache.hadoop.ozone.ksm.helpers.OpenKeySession;
|
import org.apache.hadoop.ozone.ksm.helpers.OpenKeySession;
|
||||||
import org.apache.hadoop.ozone.protocol.proto.KeySpaceManagerProtocolProtos.KeyInfo;
|
import org.apache.hadoop.ozone.protocol.proto
|
||||||
|
.KeySpaceManagerProtocolProtos.KeyInfo;
|
||||||
import org.apache.hadoop.scm.container.common.helpers.AllocatedBlock;
|
import org.apache.hadoop.scm.container.common.helpers.AllocatedBlock;
|
||||||
import org.apache.hadoop.scm.protocol.ScmBlockLocationProtocol;
|
import org.apache.hadoop.scm.protocol.ScmBlockLocationProtocol;
|
||||||
import org.apache.hadoop.util.Time;
|
import org.apache.hadoop.util.Time;
|
||||||
|
@ -43,18 +44,30 @@ import java.util.List;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import static org.apache.hadoop.ozone.OzoneConfigKeys.DFS_CONTAINER_RATIS_ENABLED_DEFAULT;
|
import static org.apache.hadoop.ozone
|
||||||
import static org.apache.hadoop.ozone.OzoneConfigKeys.DFS_CONTAINER_RATIS_ENABLED_KEY;
|
.OzoneConfigKeys.DFS_CONTAINER_RATIS_ENABLED_DEFAULT;
|
||||||
import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_BLOCK_DELETING_SERVICE_INTERVAL_MS;
|
import static org.apache.hadoop.ozone
|
||||||
import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_BLOCK_DELETING_SERVICE_INTERVAL_MS_DEFAULT;
|
.OzoneConfigKeys.DFS_CONTAINER_RATIS_ENABLED_KEY;
|
||||||
import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_BLOCK_DELETING_SERVICE_TIMEOUT;
|
import static org.apache.hadoop.ozone
|
||||||
import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_BLOCK_DELETING_SERVICE_TIMEOUT_DEFAULT;
|
.OzoneConfigKeys.OZONE_BLOCK_DELETING_SERVICE_INTERVAL_MS;
|
||||||
import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_KEY_PREALLOCATION_MAXSIZE;
|
import static org.apache.hadoop.ozone
|
||||||
import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_KEY_PREALLOCATION_MAXSIZE_DEFAULT;
|
.OzoneConfigKeys.OZONE_BLOCK_DELETING_SERVICE_INTERVAL_MS_DEFAULT;
|
||||||
import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_SCM_BLOCK_SIZE_DEFAULT;
|
import static org.apache.hadoop.ozone
|
||||||
import static org.apache.hadoop.ozone.OzoneConfigKeys.OZONE_SCM_BLOCK_SIZE_IN_MB;
|
.OzoneConfigKeys.OZONE_BLOCK_DELETING_SERVICE_TIMEOUT;
|
||||||
import org.apache.hadoop.ozone.protocol.proto.OzoneProtos.ReplicationType;
|
import static org.apache.hadoop.ozone
|
||||||
import org.apache.hadoop.ozone.protocol.proto.OzoneProtos.ReplicationFactor;
|
.OzoneConfigKeys.OZONE_BLOCK_DELETING_SERVICE_TIMEOUT_DEFAULT;
|
||||||
|
import static org.apache.hadoop.ozone
|
||||||
|
.OzoneConfigKeys.OZONE_KEY_PREALLOCATION_MAXSIZE;
|
||||||
|
import static org.apache.hadoop.ozone
|
||||||
|
.OzoneConfigKeys.OZONE_KEY_PREALLOCATION_MAXSIZE_DEFAULT;
|
||||||
|
import static org.apache.hadoop.ozone
|
||||||
|
.OzoneConfigKeys.OZONE_SCM_BLOCK_SIZE_DEFAULT;
|
||||||
|
import static org.apache.hadoop.ozone
|
||||||
|
.OzoneConfigKeys.OZONE_SCM_BLOCK_SIZE_IN_MB;
|
||||||
|
import org.apache.hadoop.ozone.protocol
|
||||||
|
.proto.OzoneProtos.ReplicationType;
|
||||||
|
import org.apache.hadoop.ozone.protocol
|
||||||
|
.proto.OzoneProtos.ReplicationFactor;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -296,6 +309,7 @@ public class KeyManagerImpl implements KeyManager {
|
||||||
KsmKeyInfo keyInfo =
|
KsmKeyInfo keyInfo =
|
||||||
KsmKeyInfo.getFromProtobuf(KeyInfo.parseFrom(openKeyData));
|
KsmKeyInfo.getFromProtobuf(KeyInfo.parseFrom(openKeyData));
|
||||||
keyInfo.setDataSize(args.getDataSize());
|
keyInfo.setDataSize(args.getDataSize());
|
||||||
|
keyInfo.setModificationTime(Time.now());
|
||||||
BatchOperation batch = new BatchOperation();
|
BatchOperation batch = new BatchOperation();
|
||||||
batch.delete(openKey);
|
batch.delete(openKey);
|
||||||
batch.put(objectKeyBytes, keyInfo.getProtobuf().toByteArray());
|
batch.put(objectKeyBytes, keyInfo.getProtobuf().toByteArray());
|
||||||
|
|
|
@ -26,6 +26,8 @@ import org.apache.hadoop.ozone.protocol.proto
|
||||||
.KeySpaceManagerProtocolProtos.VolumeList;
|
.KeySpaceManagerProtocolProtos.VolumeList;
|
||||||
import org.apache.hadoop.ozone.protocol.proto
|
import org.apache.hadoop.ozone.protocol.proto
|
||||||
.KeySpaceManagerProtocolProtos.VolumeInfo;
|
.KeySpaceManagerProtocolProtos.VolumeInfo;
|
||||||
|
import org.apache.hadoop.ozone.protocol.proto.OzoneProtos;
|
||||||
|
import org.apache.hadoop.util.Time;
|
||||||
import org.apache.hadoop.utils.BatchOperation;
|
import org.apache.hadoop.utils.BatchOperation;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
@ -33,9 +35,12 @@ import org.slf4j.LoggerFactory;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import static org.apache.hadoop.ozone.ksm.KSMConfigKeys.OZONE_KSM_USER_MAX_VOLUME_DEFAULT;
|
import static org.apache.hadoop.ozone.ksm.KSMConfigKeys
|
||||||
import static org.apache.hadoop.ozone.ksm.KSMConfigKeys.OZONE_KSM_USER_MAX_VOLUME;
|
.OZONE_KSM_USER_MAX_VOLUME_DEFAULT;
|
||||||
|
import static org.apache.hadoop.ozone.ksm.KSMConfigKeys
|
||||||
|
.OZONE_KSM_USER_MAX_VOLUME;
|
||||||
import static org.apache.hadoop.ozone.ksm.exceptions
|
import static org.apache.hadoop.ozone.ksm.exceptions
|
||||||
.KSMException.ResultCodes;
|
.KSMException.ResultCodes;
|
||||||
|
|
||||||
|
@ -132,7 +137,22 @@ public class VolumeManagerImpl implements VolumeManager {
|
||||||
|
|
||||||
BatchOperation batch = new BatchOperation();
|
BatchOperation batch = new BatchOperation();
|
||||||
// Write the vol info
|
// Write the vol info
|
||||||
VolumeInfo newVolumeInfo = args.getProtobuf();
|
List<OzoneProtos.KeyValue> metadataList = new LinkedList<>();
|
||||||
|
for (Map.Entry<String, String> entry : args.getKeyValueMap().entrySet()) {
|
||||||
|
metadataList.add(OzoneProtos.KeyValue.newBuilder()
|
||||||
|
.setKey(entry.getKey()).setValue(entry.getValue()).build());
|
||||||
|
}
|
||||||
|
List<OzoneAclInfo> aclList = args.getAclMap().ozoneAclGetProtobuf();
|
||||||
|
|
||||||
|
VolumeInfo newVolumeInfo = VolumeInfo.newBuilder()
|
||||||
|
.setAdminName(args.getAdminName())
|
||||||
|
.setOwnerName(args.getOwnerName())
|
||||||
|
.setVolume(args.getVolume())
|
||||||
|
.setQuotaInBytes(args.getQuotaInBytes())
|
||||||
|
.addAllMetadata(metadataList)
|
||||||
|
.addAllVolumeAcls(aclList)
|
||||||
|
.setCreationTime(Time.now())
|
||||||
|
.build();
|
||||||
batch.put(dbVolumeKey, newVolumeInfo.toByteArray());
|
batch.put(dbVolumeKey, newVolumeInfo.toByteArray());
|
||||||
|
|
||||||
// Add volume to user list
|
// Add volume to user list
|
||||||
|
|
|
@ -45,7 +45,6 @@ import org.apache.hadoop.scm.ScmConfigKeys;
|
||||||
import org.apache.hadoop.scm.XceiverClientManager;
|
import org.apache.hadoop.scm.XceiverClientManager;
|
||||||
import org.apache.hadoop.scm.protocolPB
|
import org.apache.hadoop.scm.protocolPB
|
||||||
.StorageContainerLocationProtocolClientSideTranslatorPB;
|
.StorageContainerLocationProtocolClientSideTranslatorPB;
|
||||||
import org.apache.hadoop.util.Time;
|
|
||||||
import org.apache.hadoop.ozone.web.exceptions.OzoneException;
|
import org.apache.hadoop.ozone.web.exceptions.OzoneException;
|
||||||
import org.apache.hadoop.ozone.web.handlers.BucketArgs;
|
import org.apache.hadoop.ozone.web.handlers.BucketArgs;
|
||||||
import org.apache.hadoop.ozone.web.handlers.KeyArgs;
|
import org.apache.hadoop.ozone.web.handlers.KeyArgs;
|
||||||
|
@ -142,8 +141,7 @@ public final class DistributedStorageHandler implements StorageHandler {
|
||||||
.setOwnerName(args.getUserName())
|
.setOwnerName(args.getUserName())
|
||||||
.setVolume(args.getVolumeName())
|
.setVolume(args.getVolumeName())
|
||||||
.setQuotaInBytes(quota)
|
.setQuotaInBytes(quota)
|
||||||
.addOzoneAcls(KSMPBHelper.convertOzoneAcl(userAcl))
|
.addOzoneAcls(KSMPBHelper.convertOzoneAcl(userAcl));
|
||||||
.setCreationTime(Time.now());
|
|
||||||
if (args.getGroups() != null) {
|
if (args.getGroups() != null) {
|
||||||
for (String group : args.getGroups()) {
|
for (String group : args.getGroups()) {
|
||||||
OzoneAcl groupAcl =
|
OzoneAcl groupAcl =
|
||||||
|
@ -255,7 +253,6 @@ public final class DistributedStorageHandler implements StorageHandler {
|
||||||
builder.setIsVersionEnabled(getBucketVersioningProtobuf(
|
builder.setIsVersionEnabled(getBucketVersioningProtobuf(
|
||||||
args.getVersioning()));
|
args.getVersioning()));
|
||||||
}
|
}
|
||||||
builder.setCreationTime(Time.now());
|
|
||||||
keySpaceManagerClient.createBucket(builder.build());
|
keySpaceManagerClient.createBucket(builder.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,7 @@ import org.apache.hadoop.ozone.client.io.OzoneInputStream;
|
||||||
import org.apache.hadoop.ozone.client.io.OzoneOutputStream;
|
import org.apache.hadoop.ozone.client.io.OzoneOutputStream;
|
||||||
import org.apache.hadoop.ozone.protocol.proto.OzoneProtos;
|
import org.apache.hadoop.ozone.protocol.proto.OzoneProtos;
|
||||||
import org.apache.hadoop.ozone.web.exceptions.OzoneException;
|
import org.apache.hadoop.ozone.web.exceptions.OzoneException;
|
||||||
|
import org.apache.hadoop.util.Time;
|
||||||
import org.junit.AfterClass;
|
import org.junit.AfterClass;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.BeforeClass;
|
import org.junit.BeforeClass;
|
||||||
|
@ -177,6 +178,7 @@ public class TestOzoneRpcClient {
|
||||||
@Test
|
@Test
|
||||||
public void testCreateBucket()
|
public void testCreateBucket()
|
||||||
throws IOException, OzoneException {
|
throws IOException, OzoneException {
|
||||||
|
long currentTime = Time.now();
|
||||||
String volumeName = UUID.randomUUID().toString();
|
String volumeName = UUID.randomUUID().toString();
|
||||||
String bucketName = UUID.randomUUID().toString();
|
String bucketName = UUID.randomUUID().toString();
|
||||||
store.createVolume(volumeName);
|
store.createVolume(volumeName);
|
||||||
|
@ -184,6 +186,8 @@ public class TestOzoneRpcClient {
|
||||||
volume.createBucket(bucketName);
|
volume.createBucket(bucketName);
|
||||||
OzoneBucket bucket = volume.getBucket(bucketName);
|
OzoneBucket bucket = volume.getBucket(bucketName);
|
||||||
Assert.assertEquals(bucketName, bucket.getName());
|
Assert.assertEquals(bucketName, bucket.getName());
|
||||||
|
Assert.assertTrue(bucket.getCreationTime() >= currentTime);
|
||||||
|
Assert.assertTrue(volume.getCreationTime() >= currentTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -361,6 +365,7 @@ public class TestOzoneRpcClient {
|
||||||
throws IOException, OzoneException {
|
throws IOException, OzoneException {
|
||||||
String volumeName = UUID.randomUUID().toString();
|
String volumeName = UUID.randomUUID().toString();
|
||||||
String bucketName = UUID.randomUUID().toString();
|
String bucketName = UUID.randomUUID().toString();
|
||||||
|
long currentTime = Time.now();
|
||||||
|
|
||||||
String value = "sample value";
|
String value = "sample value";
|
||||||
store.createVolume(volumeName);
|
store.createVolume(volumeName);
|
||||||
|
@ -382,6 +387,8 @@ public class TestOzoneRpcClient {
|
||||||
byte[] fileContent = new byte[value.getBytes().length];
|
byte[] fileContent = new byte[value.getBytes().length];
|
||||||
is.read(fileContent);
|
is.read(fileContent);
|
||||||
Assert.assertEquals(value, new String(fileContent));
|
Assert.assertEquals(value, new String(fileContent));
|
||||||
|
Assert.assertTrue(key.getCreationTime() >= currentTime);
|
||||||
|
Assert.assertTrue(key.getModificationTime() >= currentTime);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue