|
@@ -16,35 +16,30 @@
|
|
|
*/
|
|
|
package org.apache.hadoop.ozone.om;
|
|
|
|
|
|
-import com.google.common.base.Preconditions;
|
|
|
-import org.apache.hadoop.ozone.om.helpers.OmVolumeArgs;
|
|
|
+import java.io.IOException;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
|
|
|
-import org.apache.hadoop.ozone.om.exceptions.OMException;
|
|
|
-import org.apache.hadoop.ozone.protocol.proto
|
|
|
- .OzoneManagerProtocolProtos.OzoneAclInfo;
|
|
|
-import org.apache.hadoop.ozone.protocol.proto
|
|
|
- .OzoneManagerProtocolProtos.VolumeList;
|
|
|
-import org.apache.hadoop.ozone.protocol.proto
|
|
|
- .OzoneManagerProtocolProtos.VolumeInfo;
|
|
|
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
|
|
|
+import org.apache.hadoop.ozone.om.exceptions.OMException;
|
|
|
+import org.apache.hadoop.ozone.om.helpers.OmVolumeArgs;
|
|
|
+import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OzoneAclInfo;
|
|
|
+import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.VolumeInfo;
|
|
|
+import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.VolumeList;
|
|
|
import org.apache.hadoop.util.Time;
|
|
|
import org.apache.hadoop.utils.RocksDBStore;
|
|
|
+import org.apache.hadoop.utils.db.BatchOperation;
|
|
|
+
|
|
|
+import com.google.common.base.Preconditions;
|
|
|
+import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_USER_MAX_VOLUME;
|
|
|
+import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_USER_MAX_VOLUME_DEFAULT;
|
|
|
+import static org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes;
|
|
|
import org.rocksdb.RocksDBException;
|
|
|
-import org.rocksdb.WriteBatch;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
-import java.io.IOException;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
-
|
|
|
-import static org.apache.hadoop.ozone.om.OMConfigKeys
|
|
|
- .OZONE_OM_USER_MAX_VOLUME_DEFAULT;
|
|
|
-import static org.apache.hadoop.ozone.om.OMConfigKeys
|
|
|
- .OZONE_OM_USER_MAX_VOLUME;
|
|
|
-import static org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes;
|
|
|
-
|
|
|
/**
|
|
|
* OM volume management code.
|
|
|
*/
|
|
@@ -69,7 +64,7 @@ public class VolumeManagerImpl implements VolumeManager {
|
|
|
|
|
|
// Helpers to add and delete volume from user list
|
|
|
private void addVolumeToOwnerList(String volume, String owner,
|
|
|
- WriteBatch batchOperation) throws RocksDBException, IOException {
|
|
|
+ BatchOperation batchOperation) throws IOException {
|
|
|
// Get the volume list
|
|
|
byte[] dbUserKey = metadataManager.getUserKey(owner);
|
|
|
byte[] volumeList = metadataManager.getUserTable().get(dbUserKey);
|
|
@@ -89,12 +84,12 @@ public class VolumeManagerImpl implements VolumeManager {
|
|
|
prevVolList.add(volume);
|
|
|
VolumeList newVolList = VolumeList.newBuilder()
|
|
|
.addAllVolumeNames(prevVolList).build();
|
|
|
- batchOperation.put(metadataManager.getUserTable().getHandle(),
|
|
|
+ metadataManager.getUserTable().putWithBatch(batchOperation,
|
|
|
dbUserKey, newVolList.toByteArray());
|
|
|
}
|
|
|
|
|
|
private void delVolumeFromOwnerList(String volume, String owner,
|
|
|
- WriteBatch batch) throws RocksDBException, IOException {
|
|
|
+ BatchOperation batch) throws RocksDBException, IOException {
|
|
|
// Get the volume list
|
|
|
byte[] dbUserKey = metadataManager.getUserKey(owner);
|
|
|
byte[] volumeList = metadataManager.getUserTable().get(dbUserKey);
|
|
@@ -110,11 +105,11 @@ public class VolumeManagerImpl implements VolumeManager {
|
|
|
// Remove the volume from the list
|
|
|
prevVolList.remove(volume);
|
|
|
if (prevVolList.size() == 0) {
|
|
|
- batch.delete(metadataManager.getUserTable().getHandle(), dbUserKey);
|
|
|
+ metadataManager.getUserTable().deleteWithBatch(batch, dbUserKey);
|
|
|
} else {
|
|
|
VolumeList newVolList = VolumeList.newBuilder()
|
|
|
.addAllVolumeNames(prevVolList).build();
|
|
|
- batch.put(metadataManager.getUserTable().getHandle(),
|
|
|
+ metadataManager.getUserTable().putWithBatch(batch,
|
|
|
dbUserKey, newVolList.toByteArray());
|
|
|
}
|
|
|
}
|
|
@@ -138,7 +133,8 @@ public class VolumeManagerImpl implements VolumeManager {
|
|
|
throw new OMException(ResultCodes.FAILED_VOLUME_ALREADY_EXISTS);
|
|
|
}
|
|
|
|
|
|
- try(WriteBatch batch = new WriteBatch()) {
|
|
|
+ try (BatchOperation batch = metadataManager.getStore()
|
|
|
+ .initBatchOperation()) {
|
|
|
// Write the vol info
|
|
|
List<HddsProtos.KeyValue> metadataList = new ArrayList<>();
|
|
|
for (Map.Entry<String, String> entry :
|
|
@@ -157,23 +153,19 @@ public class VolumeManagerImpl implements VolumeManager {
|
|
|
.addAllVolumeAcls(aclList)
|
|
|
.setCreationTime(Time.now())
|
|
|
.build();
|
|
|
- batch.put(metadataManager.getVolumeTable().getHandle(),
|
|
|
+ metadataManager.getVolumeTable().putWithBatch(batch,
|
|
|
dbVolumeKey, newVolumeInfo.toByteArray());
|
|
|
|
|
|
// Add volume to user list
|
|
|
addVolumeToOwnerList(args.getVolume(), args.getOwnerName(), batch);
|
|
|
- metadataManager.getStore().write(batch);
|
|
|
+ metadataManager.getStore().commitBatchOperation(batch);
|
|
|
}
|
|
|
LOG.debug("created volume:{} user:{}", args.getVolume(),
|
|
|
args.getOwnerName());
|
|
|
- } catch (RocksDBException | IOException ex) {
|
|
|
+ } catch (IOException ex) {
|
|
|
if (!(ex instanceof OMException)) {
|
|
|
LOG.error("Volume creation failed for user:{} volume:{}",
|
|
|
args.getOwnerName(), args.getVolume(), ex);
|
|
|
- }
|
|
|
- if(ex instanceof RocksDBException) {
|
|
|
- throw RocksDBStore.toIOException("Volume creation failed.",
|
|
|
- (RocksDBException) ex);
|
|
|
} else {
|
|
|
throw (IOException) ex;
|
|
|
}
|
|
@@ -209,7 +201,8 @@ public class VolumeManagerImpl implements VolumeManager {
|
|
|
OmVolumeArgs volumeArgs = OmVolumeArgs.getFromProtobuf(volumeInfo);
|
|
|
Preconditions.checkState(volume.equals(volumeInfo.getVolume()));
|
|
|
|
|
|
- try(WriteBatch batch = new WriteBatch()) {
|
|
|
+ try (BatchOperation batch = metadataManager.getStore()
|
|
|
+ .initBatchOperation()) {
|
|
|
delVolumeFromOwnerList(volume, volumeArgs.getOwnerName(), batch);
|
|
|
addVolumeToOwnerList(volume, owner, batch);
|
|
|
|
|
@@ -222,9 +215,9 @@ public class VolumeManagerImpl implements VolumeManager {
|
|
|
.build();
|
|
|
|
|
|
VolumeInfo newVolumeInfo = newVolumeArgs.getProtobuf();
|
|
|
- batch.put(metadataManager.getVolumeTable().getHandle(),
|
|
|
+ metadataManager.getVolumeTable().putWithBatch(batch,
|
|
|
dbVolumeKey, newVolumeInfo.toByteArray());
|
|
|
- metadataManager.getStore().write(batch);
|
|
|
+ metadataManager.getStore().commitBatchOperation(batch);
|
|
|
}
|
|
|
} catch (RocksDBException | IOException ex) {
|
|
|
if (!(ex instanceof OMException)) {
|
|
@@ -356,11 +349,11 @@ public class VolumeManagerImpl implements VolumeManager {
|
|
|
Preconditions.checkState(volume.equals(volumeInfo.getVolume()));
|
|
|
// delete the volume from the owner list
|
|
|
// as well as delete the volume entry
|
|
|
- try(WriteBatch batch = new WriteBatch()) {
|
|
|
+ try (BatchOperation batch = metadataManager.getStore()
|
|
|
+ .initBatchOperation()) {
|
|
|
delVolumeFromOwnerList(volume, volumeInfo.getOwnerName(), batch);
|
|
|
- batch.delete(metadataManager.getVolumeTable().getHandle(),
|
|
|
- dbVolumeKey);
|
|
|
- metadataManager.getStore().write(batch);
|
|
|
+ metadataManager.getVolumeTable().deleteWithBatch(batch, dbVolumeKey);
|
|
|
+ metadataManager.getStore().commitBatchOperation(batch);
|
|
|
}
|
|
|
} catch (RocksDBException| IOException ex) {
|
|
|
if (!(ex instanceof OMException)) {
|