[prev in list] [next in list] [prev in thread] [next in thread]
List: hadoop-commits
Subject: [hadoop] branch trunk updated: HDDS-1856. Make required changes for Non-HA to use new HA code in OM.
From: bharat () apache ! org
Date: 2019-07-31 5:39:11
Message-ID: 156455155167.26142.15900460258567386204 () gitbox ! apache ! org
[Download RAW message or body]
This is an automated email from the ASF dual-hosted git repository.
bharat pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/trunk by this push:
new e5c4131 HDDS-1856. Make required changes for Non-HA to use new HA code in \
OM. (#1174) e5c4131 is described below
commit e5c41314859169d826fc04f9b95a710120428566
Author: Bharat Viswanadham <bharat@apache.org>
AuthorDate: Tue Jul 30 22:39:03 2019 -0700
HDDS-1856. Make required changes for Non-HA to use new HA code in OM. (#1174)
---
.../org/apache/hadoop/ozone/om/OzoneManager.java | 6 +-
.../ozone/om/ratis/OzoneManagerDoubleBuffer.java | 60 +++++++++++++++-
.../utils/OzoneManagerDoubleBufferHelper.java | 15 ++++
.../hadoop/ozone/om/request/OMClientRequest.java | 5 +-
.../om/request/bucket/OMBucketCreateRequest.java | 53 +++++++-------
.../om/request/bucket/OMBucketDeleteRequest.java | 54 +++++++-------
.../request/bucket/OMBucketSetPropertyRequest.java | 50 ++++++-------
.../om/request/file/OMDirectoryCreateRequest.java | 29 +++++---
.../ozone/om/request/file/OMFileCreateRequest.java | 26 +++++--
.../om/request/key/OMAllocateBlockRequest.java | 51 +++++--------
.../ozone/om/request/key/OMKeyCommitRequest.java | 62 ++++++++--------
.../ozone/om/request/key/OMKeyCreateRequest.java | 26 ++++---
.../ozone/om/request/key/OMKeyDeleteRequest.java | 60 ++++++++--------
.../ozone/om/request/key/OMKeyPurgeRequest.java | 11 ++-
.../ozone/om/request/key/OMKeyRenameRequest.java | 55 +++++++-------
.../request/s3/bucket/S3BucketCreateRequest.java | 49 ++++++++-----
.../request/s3/bucket/S3BucketDeleteRequest.java | 27 +++++--
.../S3InitiateMultipartUploadRequest.java | 43 +++++++----
.../multipart/S3MultipartUploadAbortRequest.java | 35 +++++----
.../S3MultipartUploadCommitPartRequest.java | 69 +++++++++++-------
.../om/request/volume/OMVolumeCreateRequest.java | 77 ++++++++++----------
.../om/request/volume/OMVolumeDeleteRequest.java | 65 ++++++++---------
.../om/request/volume/OMVolumeSetOwnerRequest.java | 68 ++++++++++--------
.../om/request/volume/OMVolumeSetQuotaRequest.java | 52 ++++++++------
.../hadoop/ozone/om/response/OMClientResponse.java | 10 +++
.../OzoneManagerHARequestHandlerImpl.java | 9 +--
...OzoneManagerProtocolServerSideTranslatorPB.java | 14 ++++
.../ozone/om/request/bucket/TestBucketRequest.java | 83 ++++++++++++++++++++++
.../request/bucket/TestOMBucketCreateRequest.java | 58 +++------------
.../request/bucket/TestOMBucketDeleteRequest.java | 54 ++------------
.../bucket/TestOMBucketSetPropertyRequest.java | 54 ++------------
.../request/file/TestOMDirectoryCreateRequest.java | 22 ++++--
.../om/request/file/TestOMFileCreateRequest.java | 9 ++-
.../om/request/key/TestOMAllocateBlockRequest.java | 12 ++--
.../om/request/key/TestOMKeyCommitRequest.java | 8 +--
.../om/request/key/TestOMKeyCreateRequest.java | 12 ++--
.../om/request/key/TestOMKeyDeleteRequest.java | 6 +-
.../key/TestOMKeyPurgeRequestAndResponse.java | 3 +-
.../om/request/key/TestOMKeyRenameRequest.java | 15 ++--
.../ozone/om/request/key/TestOMKeyRequest.java | 7 ++
.../s3/bucket/TestS3BucketCreateRequest.java | 58 ++-------------
.../s3/bucket/TestS3BucketDeleteRequest.java | 55 ++------------
.../om/request/s3/bucket/TestS3BucketRequest.java | 82 +++++++++++++++++++++
.../TestS3InitiateMultipartUploadRequest.java | 6 +-
.../s3/multipart/TestS3MultipartRequest.java | 9 ++-
.../TestS3MultipartUploadAbortRequest.java | 14 ++--
.../TestS3MultipartUploadCommitPartRequest.java | 10 +--
.../request/volume/TestOMVolumeCreateRequest.java | 58 +++------------
.../request/volume/TestOMVolumeDeleteRequest.java | 60 +++-------------
.../om/request/volume/TestOMVolumeRequest.java | 80 +++++++++++++++++++++
.../volume/TestOMVolumeSetOwnerRequest.java | 59 +++------------
.../volume/TestOMVolumeSetQuotaRequest.java | 57 +++------------
52 files changed, 1055 insertions(+), 917 deletions(-)
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java \
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
index 84e1781..b1e2dd9 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
@@ -1378,7 +1378,6 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
OZONE_OM_HANDLER_COUNT_DEFAULT);
RPC.setProtocolEngine(configuration, OzoneManagerProtocolPB.class,
ProtobufRpcEngine.class);
-
this.omServerProtocol = new OzoneManagerProtocolServerSideTranslatorPB(
this, omRatisServer, isRatisEnabled);
@@ -1461,6 +1460,11 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
scheduleOMMetricsWriteTask = null;
}
omRpcServer.stop();
+ // When ratis is not enabled, we need to call stop() to stop
+ // OzoneManageDoubleBuffer in OM server protocol.
+ if (!isRatisEnabled) {
+ omServerProtocol.stop();
+ }
if (omRatisServer != null) {
omRatisServer.stop();
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerDoubleBuffer.java \
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerDoubleBuffer.java
index e329d5a..e546316 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerDoubleBuffer.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerDoubleBuffer.java
@@ -20,6 +20,7 @@ package org.apache.hadoop.ozone.om.ratis;
import java.io.IOException;
import java.util.Queue;
+import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
@@ -61,6 +62,15 @@ public class OzoneManagerDoubleBuffer {
private Queue<DoubleBufferEntry<OMClientResponse>> currentBuffer;
private Queue<DoubleBufferEntry<OMClientResponse>> readyBuffer;
+
+ // future objects which hold the future returned by add method.
+ private volatile Queue<CompletableFuture<Void>> currentFutureQueue;
+
+ // Once we have an entry in current buffer, we swap the currentFutureQueue
+ // with readyFutureQueue. After flush is completed in flushTransaction
+ // daemon thread, we complete the futures in readyFutureQueue and clear them.
+ private volatile Queue<CompletableFuture<Void>> readyFutureQueue;
+
private Daemon daemon;
private final OMMetadataManager omMetadataManager;
private final AtomicLong flushedTransactionCount = new AtomicLong(0);
@@ -71,10 +81,29 @@ public class OzoneManagerDoubleBuffer {
private final OzoneManagerRatisSnapshot ozoneManagerRatisSnapShot;
+ private final boolean isRatisEnabled;
+
public OzoneManagerDoubleBuffer(OMMetadataManager omMetadataManager,
OzoneManagerRatisSnapshot ozoneManagerRatisSnapShot) {
+ this(omMetadataManager, ozoneManagerRatisSnapShot, true);
+ }
+
+ public OzoneManagerDoubleBuffer(OMMetadataManager omMetadataManager,
+ OzoneManagerRatisSnapshot ozoneManagerRatisSnapShot,
+ boolean isRatisEnabled) {
this.currentBuffer = new ConcurrentLinkedQueue<>();
this.readyBuffer = new ConcurrentLinkedQueue<>();
+
+ this.isRatisEnabled = isRatisEnabled;
+
+ if (!isRatisEnabled) {
+ this.currentFutureQueue = new ConcurrentLinkedQueue<>();
+ this.readyFutureQueue = new ConcurrentLinkedQueue<>();
+ } else {
+ this.currentFutureQueue = null;
+ this.readyFutureQueue = null;
+ }
+
this.omMetadataManager = omMetadataManager;
this.ozoneManagerRatisSnapShot = ozoneManagerRatisSnapShot;
this.ozoneManagerDoubleBufferMetrics =
@@ -88,6 +117,9 @@ public class OzoneManagerDoubleBuffer {
}
+
+
+
/**
* Runs in a background thread and batches the transaction in currentBuffer
* and commit to DB.
@@ -138,6 +170,15 @@ public class OzoneManagerDoubleBuffer {
// set metrics.
updateMetrics(flushedTransactionsSize);
+
+ if (!isRatisEnabled) {
+ // Once all entries are flushed, we can complete their future.
+ readyFutureQueue.iterator().forEachRemaining((entry) -> {
+ entry.complete(null);
+ });
+
+ readyFutureQueue.clear();
+ }
}
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
@@ -248,10 +289,20 @@ public class OzoneManagerDoubleBuffer {
* @param response
* @param transactionIndex
*/
- public synchronized void add(OMClientResponse response,
+ public synchronized CompletableFuture<Void> add(OMClientResponse response,
long transactionIndex) {
currentBuffer.add(new DoubleBufferEntry<>(transactionIndex, response));
notify();
+
+ if (!isRatisEnabled) {
+ CompletableFuture<Void> future = new CompletableFuture<>();
+ currentFutureQueue.add(future);
+ return future;
+ } else {
+ // In Non-HA case we don't need future to be returned, and this return
+ // status is not used.
+ return null;
+ }
}
/**
@@ -279,6 +330,13 @@ public class OzoneManagerDoubleBuffer {
Queue<DoubleBufferEntry<OMClientResponse>> temp = currentBuffer;
currentBuffer = readyBuffer;
readyBuffer = temp;
+
+ if (!isRatisEnabled) {
+ // Swap future queue.
+ Queue<CompletableFuture<Void>> tempFuture = currentFutureQueue;
+ currentFutureQueue = readyFutureQueue;
+ readyFutureQueue = tempFuture;
+ }
}
@VisibleForTesting
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/utils/OzoneManagerDoubleBufferHelper.java \
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/utils/OzoneManagerDoubleBufferHelper.java
new file mode 100644
index 0000000..98cca76
--- /dev/null
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/utils/OzoneManagerDoubleBufferHelper.java
@@ -0,0 +1,15 @@
+package org.apache.hadoop.ozone.om.ratis.utils;
+
+import org.apache.hadoop.ozone.om.response.OMClientResponse;
+
+import java.util.concurrent.CompletableFuture;
+
+/**
+ * Helper interface for OzoneManagerDoubleBuffer.
+ *
+ */
+public interface OzoneManagerDoubleBufferHelper {
+
+ CompletableFuture<Void> add(OMClientResponse response,
+ long transactionIndex);
+}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMClientRequest.java \
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMClientRequest.java
index e1f8e41..d4c9edd 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMClientRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMClientRequest.java
@@ -33,6 +33,7 @@ import org.apache.hadoop.ozone.audit.AuditEventStatus;
import org.apache.hadoop.ozone.audit.AuditLogger;
import org.apache.hadoop.ozone.audit.AuditMessage;
import org.apache.hadoop.ozone.om.OzoneManager;
+import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerRatisUtils;
import org.apache.hadoop.ozone.om.response.OMClientResponse;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
@@ -85,7 +86,8 @@ public abstract class OMClientRequest implements RequestAuditor {
* @return the response that will be returned to the client.
*/
public abstract OMClientResponse validateAndUpdateCache(
- OzoneManager ozoneManager, long transactionLogIndex);
+ OzoneManager ozoneManager, long transactionLogIndex,
+ OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper);
@VisibleForTesting
public OMRequest getOmRequest() {
@@ -213,5 +215,4 @@ public abstract class OMClientRequest implements RequestAuditor {
auditMap.put(OzoneConsts.VOLUME, volume);
return auditMap;
}
-
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketCreateRequest.java \
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketCreateRequest.java
index 9001068..ea2210d 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketCreateRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketCreateRequest.java
@@ -21,6 +21,7 @@ package org.apache.hadoop.ozone.om.request.bucket;
import java.io.IOException;
import com.google.common.base.Optional;
+import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -106,7 +107,8 @@ public class OMBucketCreateRequest extends OMClientRequest {
@Override
public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager,
- long transactionLogIndex) {
+ long transactionLogIndex,
+ OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper) {
OMMetrics omMetrics = ozoneManager.getMetrics();
omMetrics.incNumBucketCreates();
@@ -125,6 +127,13 @@ public class OMBucketCreateRequest extends OMClientRequest {
AuditLogger auditLogger = ozoneManager.getAuditLogger();
OzoneManagerProtocolProtos.UserInfo userInfo = getOmRequest().getUserInfo();
+ String volumeKey = metadataManager.getVolumeKey(volumeName);
+ String bucketKey = metadataManager.getBucketKey(volumeName, bucketName);
+ IOException exception = null;
+ boolean acquiredBucketLock = false;
+ boolean acquiredVolumeLock = false;
+ OMClientResponse omClientResponse = null;
+
try {
// check Acl
if (ozoneManager.getAclsEnabled()) {
@@ -132,24 +141,9 @@ public class OMBucketCreateRequest extends OMClientRequest {
OzoneObj.StoreType.OZONE, IAccessAuthorizer.ACLType.CREATE,
volumeName, bucketName, null);
}
- } catch (IOException ex) {
- LOG.error("Bucket creation failed for bucket:{} in volume:{}",
- bucketName, volumeName, ex);
- omMetrics.incNumBucketCreateFails();
- auditLog(auditLogger, buildAuditMessage(OMAction.CREATE_BUCKET,
- omBucketInfo.toAuditMap(), ex, userInfo));
- return new OMBucketCreateResponse(omBucketInfo,
- createErrorOMResponse(omResponse, ex));
- }
-
- String volumeKey = metadataManager.getVolumeKey(volumeName);
- String bucketKey = metadataManager.getBucketKey(volumeName, bucketName);
- IOException exception = null;
- boolean acquiredBucketLock = false;
- metadataManager.getLock().acquireLock(VOLUME_LOCK, volumeName);
-
- try {
+ acquiredVolumeLock = metadataManager.getLock().acquireLock(VOLUME_LOCK,
+ volumeName);
acquiredBucketLock = metadataManager.getLock().acquireLock(BUCKET_LOCK,
volumeName, bucketName);
//Check if the volume exists
@@ -169,15 +163,27 @@ public class OMBucketCreateRequest extends OMClientRequest {
metadataManager.getBucketTable().addCacheEntry(new CacheKey<>(bucketKey),
new CacheValue<>(Optional.of(omBucketInfo), transactionLogIndex));
-
+ omResponse.setCreateBucketResponse(
+ CreateBucketResponse.newBuilder().build());
+ omClientResponse = new OMBucketCreateResponse(omBucketInfo,
+ omResponse.build());
} catch (IOException ex) {
exception = ex;
+ omClientResponse = new OMBucketCreateResponse(omBucketInfo,
+ createErrorOMResponse(omResponse, exception));
} finally {
+ if (omClientResponse != null) {
+ omClientResponse.setFlushFuture(
+ ozoneManagerDoubleBufferHelper.add(omClientResponse,
+ transactionLogIndex));
+ }
if (acquiredBucketLock) {
metadataManager.getLock().releaseLock(BUCKET_LOCK, volumeName,
bucketName);
}
- metadataManager.getLock().releaseLock(VOLUME_LOCK, volumeName);
+ if (acquiredVolumeLock) {
+ metadataManager.getLock().releaseLock(VOLUME_LOCK, volumeName);
+ }
}
// Performing audit logging outside of the lock.
@@ -188,15 +194,12 @@ public class OMBucketCreateRequest extends OMClientRequest {
if (exception == null) {
LOG.debug("created bucket: {} in volume: {}", bucketName, volumeName);
omMetrics.incNumBuckets();
- omResponse.setCreateBucketResponse(
- CreateBucketResponse.newBuilder().build());
- return new OMBucketCreateResponse(omBucketInfo, omResponse.build());
+ return omClientResponse;
} else {
omMetrics.incNumBucketCreateFails();
LOG.error("Bucket creation failed for bucket:{} in volume:{}",
bucketName, volumeName, exception);
- return new OMBucketCreateResponse(omBucketInfo,
- createErrorOMResponse(omResponse, exception));
+ return omClientResponse;
}
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketDeleteRequest.java \
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketDeleteRequest.java
index 2ead69e..35599aa 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketDeleteRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketDeleteRequest.java
@@ -22,6 +22,7 @@ import java.io.IOException;
import java.util.Map;
import com.google.common.base.Optional;
+import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -63,7 +64,8 @@ public class OMBucketDeleteRequest extends OMClientRequest {
@Override
public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager,
- long transactionLogIndex) {
+ long transactionLogIndex,
+ OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper) {
OMMetrics omMetrics = ozoneManager.getMetrics();
omMetrics.incNumBucketDeletes();
OMMetadataManager omMetadataManager = ozoneManager.getMetadataManager();
@@ -83,8 +85,10 @@ public class OMBucketDeleteRequest extends OMClientRequest {
auditMap.put(OzoneConsts.BUCKET, bucketName);
OzoneManagerProtocolProtos.UserInfo userInfo = getOmRequest().getUserInfo();
+ IOException exception = null;
-
+ boolean acquiredLock = false;
+ OMClientResponse omClientResponse = null;
try {
// check Acl
if (ozoneManager.getAclsEnabled()) {
@@ -92,21 +96,12 @@ public class OMBucketDeleteRequest extends OMClientRequest {
OzoneObj.StoreType.OZONE, IAccessAuthorizer.ACLType.WRITE,
volumeName, bucketName, null);
}
- } catch (IOException ex) {
- omMetrics.incNumBucketDeleteFails();
- LOG.error("Delete bucket failed for bucket:{} in volume:{}", bucketName,
- volumeName, ex);
- auditLog(auditLogger, buildAuditMessage(OMAction.DELETE_BUCKET,
- auditMap, ex, userInfo));
- return new OMBucketDeleteResponse(volumeName, bucketName,
- createErrorOMResponse(omResponse, ex));
- }
- IOException exception = null;
- // acquire lock
- omMetadataManager.getLock().acquireLock(BUCKET_LOCK, volumeName,
- bucketName);
- try {
+
+ // acquire lock
+ acquiredLock = omMetadataManager.getLock().acquireLock(BUCKET_LOCK,
+ volumeName, bucketName);
+
// No need to check volume exists here, as bucket cannot be created
// with out volume creation.
//Check if bucket exists
@@ -131,11 +126,26 @@ public class OMBucketDeleteRequest extends OMClientRequest {
new CacheKey<>(bucketKey),
new CacheValue<>(Optional.absent(), transactionLogIndex));
+ omResponse.setDeleteBucketResponse(
+ DeleteBucketResponse.newBuilder().build());
+
+ // Add to double buffer.
+ omClientResponse = new OMBucketDeleteResponse(volumeName, bucketName,
+ omResponse.build());
} catch (IOException ex) {
exception = ex;
+ omClientResponse = new OMBucketDeleteResponse(volumeName, bucketName,
+ createErrorOMResponse(omResponse, exception));
} finally {
- omMetadataManager.getLock().releaseLock(BUCKET_LOCK, volumeName,
- bucketName);
+ if (omClientResponse != null) {
+ omClientResponse.setFlushFuture(
+ ozoneManagerDoubleBufferHelper.add(omClientResponse,
+ transactionLogIndex));
+ }
+ if (acquiredLock) {
+ omMetadataManager.getLock().releaseLock(BUCKET_LOCK, volumeName,
+ bucketName);
+ }
}
// Performing audit logging outside of the lock.
@@ -145,16 +155,12 @@ public class OMBucketDeleteRequest extends OMClientRequest {
// return response.
if (exception == null) {
LOG.debug("Deleted bucket:{} in volume:{}", bucketName, volumeName);
- omResponse.setDeleteBucketResponse(
- DeleteBucketResponse.newBuilder().build());
- return new OMBucketDeleteResponse(volumeName, bucketName,
- omResponse.build());
+ return omClientResponse;
} else {
omMetrics.incNumBucketDeleteFails();
LOG.error("Delete bucket failed for bucket:{} in volume:{}", bucketName,
volumeName, exception);
- return new OMBucketDeleteResponse(volumeName, bucketName,
- createErrorOMResponse(omResponse, exception));
+ return omClientResponse;
}
}
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketSetPropertyRequest.java \
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketSetPropertyRequest.java
index 55f55c4..ada5c04 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketSetPropertyRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketSetPropertyRequest.java
@@ -25,6 +25,7 @@ import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import org.apache.hadoop.ozone.audit.AuditLogger;
import org.apache.hadoop.ozone.audit.OMAction;
+import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -73,7 +74,8 @@ public class OMBucketSetPropertyRequest extends OMClientRequest {
@Override
public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager,
- long transactionLogIndex) {
+ long transactionLogIndex,
+ OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper) {
SetBucketPropertyRequest setBucketPropertyRequest =
@@ -101,7 +103,9 @@ public class OMBucketSetPropertyRequest extends OMClientRequest {
AuditLogger auditLogger = ozoneManager.getAuditLogger();
OzoneManagerProtocolProtos.UserInfo userInfo = getOmRequest().getUserInfo();
-
+ IOException exception = null;
+ boolean acquiredLock = false;
+ OMClientResponse omClientResponse = null;
try {
// check Acl
if (ozoneManager.getAclsEnabled()) {
@@ -109,23 +113,11 @@ public class OMBucketSetPropertyRequest extends OMClientRequest \
{ OzoneObj.StoreType.OZONE, IAccessAuthorizer.ACLType.WRITE,
volumeName, bucketName, null);
}
- } catch (IOException ex) {
- LOG.error("Setting bucket property failed for bucket:{} in volume:{}",
- bucketName, volumeName, ex);
- omMetrics.incNumBucketUpdateFails();
- auditLog(auditLogger, buildAuditMessage(OMAction.UPDATE_BUCKET,
- omBucketArgs.toAuditMap(), ex, userInfo));
- return new OMBucketSetPropertyResponse(omBucketInfo,
- createErrorOMResponse(omResponse, ex));
- }
-
- IOException exception = null;
- // acquire lock
- omMetadataManager.getLock().acquireLock(BUCKET_LOCK, volumeName,
- bucketName);
- try {
+ // acquire lock
+ acquiredLock = omMetadataManager.getLock().acquireLock(BUCKET_LOCK,
+ volumeName, bucketName);
String bucketKey = omMetadataManager.getBucketKey(volumeName, bucketName);
OmBucketInfo oldBucketInfo =
@@ -182,11 +174,24 @@ public class OMBucketSetPropertyRequest extends OMClientRequest \
{ new CacheKey<>(bucketKey),
new CacheValue<>(Optional.of(omBucketInfo), transactionLogIndex));
+ omResponse.setSetBucketPropertyResponse(
+ SetBucketPropertyResponse.newBuilder().build());
+ omClientResponse = new OMBucketSetPropertyResponse(omBucketInfo,
+ omResponse.build());
} catch (IOException ex) {
exception = ex;
+ omClientResponse = new OMBucketSetPropertyResponse(omBucketInfo,
+ createErrorOMResponse(omResponse, exception));
} finally {
- omMetadataManager.getLock().releaseLock(BUCKET_LOCK, volumeName,
- bucketName);
+ if (omClientResponse != null) {
+ omClientResponse.setFlushFuture(
+ ozoneManagerDoubleBufferHelper.add(omClientResponse,
+ transactionLogIndex));
+ }
+ if (acquiredLock) {
+ omMetadataManager.getLock().releaseLock(BUCKET_LOCK, volumeName,
+ bucketName);
+ }
}
// Performing audit logging outside of the lock.
@@ -197,15 +202,12 @@ public class OMBucketSetPropertyRequest extends OMClientRequest \
{ if (exception == null) {
LOG.debug("Setting bucket property for bucket:{} in volume:{}",
bucketName, volumeName);
- omResponse.setSetBucketPropertyResponse(
- SetBucketPropertyResponse.newBuilder().build());
- return new OMBucketSetPropertyResponse(omBucketInfo, omResponse.build());
+ return omClientResponse;
} else {
LOG.error("Setting bucket property failed for bucket:{} in volume:{}",
bucketName, volumeName, exception);
omMetrics.incNumBucketUpdateFails();
- return new OMBucketSetPropertyResponse(omBucketInfo,
- createErrorOMResponse(omResponse, exception));
+ return omClientResponse;
}
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMDirectoryCreateRequest.java \
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMDirectoryCreateRequest.java
index 72fdee0..beafeab 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMDirectoryCreateRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMDirectoryCreateRequest.java
@@ -26,6 +26,7 @@ import java.util.Map;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
+import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -100,7 +101,8 @@ public class OMDirectoryCreateRequest extends OMKeyRequest {
@Override
public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager,
- long transactionLogIndex) {
+ long transactionLogIndex,
+ OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper) {
KeyArgs keyArgs = getOmRequest().getCreateDirectoryRequest().getKeyArgs();
@@ -123,8 +125,7 @@ public class OMDirectoryCreateRequest extends OMKeyRequest {
OMMetadataManager omMetadataManager = ozoneManager.getMetadataManager();
boolean acquiredLock = false;
IOException exception = null;
- OmKeyInfo dirKeyInfo = null;
-
+ OMClientResponse omClientResponse = null;
try {
// check Acl
if (ozoneManager.getAclsEnabled()) {
@@ -154,13 +155,13 @@ public class OMDirectoryCreateRequest extends OMKeyRequest {
BUCKET_NOT_FOUND);
}
-
// Need to check if any files exist in the given path, if they exist we
// cannot create a directory with the given key.
OMFileRequest.OMDirectoryResult omDirectoryResult =
OMFileRequest.verifyFilesInPath(omMetadataManager,
volumeName, bucketName, keyName, Paths.get(keyName));
+ OmKeyInfo dirKeyInfo = null;
if (omDirectoryResult == FILE_EXISTS ||
omDirectoryResult == FILE_EXISTS_IN_GIVENPATH) {
throw new OMException("Unable to create directory: " +keyName
@@ -180,9 +181,21 @@ public class OMDirectoryCreateRequest extends OMKeyRequest {
// exception? Current KeyManagerImpl code does just return, following
// similar approach.
+ omResponse.setCreateDirectoryResponse(
+ CreateDirectoryResponse.newBuilder());
+ omClientResponse = new OMDirectoryCreateResponse(dirKeyInfo,
+ omResponse.build());
+
} catch (IOException ex) {
exception = ex;
+ omClientResponse = new OMDirectoryCreateResponse(null,
+ createErrorOMResponse(omResponse, exception));
} finally {
+ if (omClientResponse != null) {
+ omClientResponse.setFlushFuture(
+ ozoneManagerDoubleBufferHelper.add(omClientResponse,
+ transactionLogIndex));
+ }
if (acquiredLock) {
omMetadataManager.getLock().releaseLock(BUCKET_LOCK, volumeName,
bucketName);
@@ -195,16 +208,12 @@ public class OMDirectoryCreateRequest extends OMKeyRequest {
if (exception == null) {
LOG.debug("Directory is successfully created for Key: {} in " +
"volume/bucket:{}/{}", keyName, volumeName, bucketName);
- omResponse.setCreateDirectoryResponse(
- CreateDirectoryResponse.newBuilder());
- return new OMDirectoryCreateResponse(dirKeyInfo,
- omResponse.build());
+ return omClientResponse;
} else {
LOG.error("CreateDirectory failed for Key: {} in volume/bucket:{}/{}",
keyName, volumeName, bucketName, exception);
omMetrics.incNumCreateDirectoryFails();
- return new OMDirectoryCreateResponse(null,
- createErrorOMResponse(omResponse, exception));
+ return omClientResponse;
}
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMFileCreateRequest.java \
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMFileCreateRequest.java
index 1c89015..c63bada 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMFileCreateRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMFileCreateRequest.java
@@ -30,6 +30,7 @@ import javax.annotation.Nonnull;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
+import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -147,7 +148,8 @@ public class OMFileCreateRequest extends OMKeyRequest {
@Override
public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager,
- long transactionLogIndex) {
+ long transactionLogIndex,
+ OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper) {
CreateFileRequest createFileRequest = getOmRequest().getCreateFileRequest();
KeyArgs keyArgs = createFileRequest.getKeyArgs();
@@ -174,7 +176,7 @@ public class OMFileCreateRequest extends OMKeyRequest {
OmKeyInfo omKeyInfo = null;
final List<OmKeyLocationInfo> locations = new ArrayList<>();
-
+ OMClientResponse omClientResponse = null;
try {
// check Acl
if (ozoneManager.getAclsEnabled()) {
@@ -265,19 +267,31 @@ public class OMFileCreateRequest extends OMKeyRequest {
keyName), keyArgs.getDataSize(), locations,
encryptionInfo.orNull());
+ omClientResponse = prepareCreateKeyResponse(keyArgs, omKeyInfo,
+ locations, encryptionInfo.orNull(), exception,
+ createFileRequest.getClientID(), transactionLogIndex, volumeName,
+ bucketName, keyName, ozoneManager,
+ OMAction.CREATE_FILE);
} catch (IOException ex) {
exception = ex;
+ omClientResponse = prepareCreateKeyResponse(keyArgs, omKeyInfo,
+ locations, encryptionInfo.orNull(), exception,
+ createFileRequest.getClientID(), transactionLogIndex,
+ volumeName, bucketName, keyName, ozoneManager,
+ OMAction.CREATE_FILE);
} finally {
+ if (omClientResponse != null) {
+ omClientResponse.setFlushFuture(
+ ozoneManagerDoubleBufferHelper.add(omClientResponse,
+ transactionLogIndex));
+ }
if (acquiredLock) {
omMetadataManager.getLock().releaseLock(BUCKET_LOCK, volumeName,
bucketName);
}
}
- return prepareCreateKeyResponse(keyArgs, omKeyInfo, locations,
- encryptionInfo.orNull(), exception, createFileRequest.getClientID(),
- transactionLogIndex, volumeName, bucketName, keyName, ozoneManager,
- OMAction.CREATE_FILE);
+ return omClientResponse;
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMAllocateBlockRequest.java \
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMAllocateBlockRequest.java
index df59d5f..b1392dc 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMAllocateBlockRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMAllocateBlockRequest.java
@@ -25,6 +25,7 @@ import java.util.Map;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
+import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
import org.apache.hadoop.util.Time;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -136,7 +137,8 @@ public class OMAllocateBlockRequest extends OMKeyRequest {
@Override
public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager,
- long transactionLogIndex) {
+ long transactionLogIndex,
+ OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper) {
OzoneManagerProtocolProtos.AllocateBlockRequest allocateBlockRequest =
getOmRequest().getAllocateBlockRequest();
@@ -165,6 +167,8 @@ public class OMAllocateBlockRequest extends OMKeyRequest {
OzoneManagerProtocolProtos.Type.AllocateBlock).setStatus(
OzoneManagerProtocolProtos.Status.OK).setSuccess(true);
+ IOException exception = null;
+ OmKeyInfo omKeyInfo = null;
try {
// check Acl
if (ozoneManager.getAclsEnabled()) {
@@ -172,39 +176,17 @@ public class OMAllocateBlockRequest extends OMKeyRequest {
OzoneObj.StoreType.OZONE, IAccessAuthorizer.ACLType.WRITE,
volumeName, bucketName, keyName);
}
- } catch (IOException ex) {
- LOG.error("AllocateBlock failed for Key: {} in volume/bucket:{}/{}",
- keyName, bucketName, volumeName, ex);
- omMetrics.incNumBlockAllocateCallFails();
- auditLog(auditLogger, buildAuditMessage(OMAction.ALLOCATE_BLOCK, auditMap,
- ex, getOmRequest().getUserInfo()));
- return new OMAllocateBlockResponse(null, -1L,
- createErrorOMResponse(omResponse, ex));
- }
- OMMetadataManager omMetadataManager = ozoneManager.getMetadataManager();
- try {
+ OMMetadataManager omMetadataManager = ozoneManager.getMetadataManager();
validateBucketAndVolume(omMetadataManager, volumeName,
bucketName);
- } catch (IOException ex) {
- LOG.error("AllocateBlock failed for Key: {} in volume/bucket:{}/{}",
- keyName, bucketName, volumeName, ex);
- omMetrics.incNumBlockAllocateCallFails();
- auditLog(auditLogger, buildAuditMessage(OMAction.ALLOCATE_BLOCK, auditMap,
- ex, getOmRequest().getUserInfo()));
- return new OMAllocateBlockResponse(null, -1L,
- createErrorOMResponse(omResponse, ex));
- }
- String openKey = omMetadataManager.getOpenKey(
- volumeName, bucketName, keyName, clientID);
+ String openKey = omMetadataManager.getOpenKey(
+ volumeName, bucketName, keyName, clientID);
- IOException exception = null;
- OmKeyInfo omKeyInfo = null;
+ // Here we don't acquire bucket/volume lock because for a single client
+ // allocateBlock is called in serial fashion.
- // Here we don't acquire bucket/volume lock because for a single client
- // allocateBlock is called in serial fashion.
- try {
omKeyInfo = omMetadataManager.getOpenKeyTable().get(openKey);
if (omKeyInfo == null) {
throw new OMException("Open Key not found " + openKey, KEY_NOT_FOUND);
@@ -229,18 +211,23 @@ public class OMAllocateBlockRequest extends OMKeyRequest {
auditLog(auditLogger, buildAuditMessage(OMAction.ALLOCATE_BLOCK, auditMap,
exception, getOmRequest().getUserInfo()));
-
+ OMClientResponse omClientResponse = null;
if (exception == null) {
omResponse.setAllocateBlockResponse(AllocateBlockResponse.newBuilder()
.setKeyLocation(blockLocation).build());
- return new OMAllocateBlockResponse(omKeyInfo, clientID,
- omResponse.build());
+ omClientResponse = new OMAllocateBlockResponse(omKeyInfo,
+ clientID, omResponse.build());
} else {
omMetrics.incNumBlockAllocateCallFails();
- return new OMAllocateBlockResponse(null, -1L,
+ omClientResponse = new OMAllocateBlockResponse(null, -1L,
createErrorOMResponse(omResponse, exception));
}
+ omClientResponse.setFlushFuture(
+ ozoneManagerDoubleBufferHelper.add(omClientResponse,
+ transactionLogIndex));
+ return omClientResponse;
+
}
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequest.java \
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequest.java
index a98a9fa..f5f07e1 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequest.java
@@ -25,6 +25,7 @@ import java.util.stream.Collectors;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
+import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -38,7 +39,6 @@ import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
import org.apache.hadoop.ozone.om.helpers.OmKeyLocationInfo;
import org.apache.hadoop.ozone.om.response.OMClientResponse;
import org.apache.hadoop.ozone.om.response.key.OMKeyCommitResponse;
-import org.apache.hadoop.ozone.om.response.key.OMKeyCreateResponse;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos
.CommitKeyRequest;
@@ -87,7 +87,8 @@ public class OMKeyCommitRequest extends OMKeyRequest {
@Override
public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager,
- long transactionLogIndex) {
+ long transactionLogIndex,
+ OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper) {
CommitKeyRequest commitKeyRequest = getOmRequest().getCommitKeyRequest();
@@ -109,6 +110,11 @@ public class OMKeyCommitRequest extends OMKeyRequest {
OzoneManagerProtocolProtos.Type.CommitKey).setStatus(
OzoneManagerProtocolProtos.Status.OK).setSuccess(true);
+ IOException exception = null;
+ OmKeyInfo omKeyInfo = null;
+ OMClientResponse omClientResponse = null;
+
+ OMMetadataManager omMetadataManager = ozoneManager.getMetadataManager();
try {
// check Acl
if (ozoneManager.getAclsEnabled()) {
@@ -116,32 +122,20 @@ public class OMKeyCommitRequest extends OMKeyRequest {
OzoneObj.StoreType.OZONE, IAccessAuthorizer.ACLType.WRITE,
volumeName, bucketName, keyName);
}
- } catch (IOException ex) {
- LOG.error("CommitKey failed for Key: {} in volume/bucket:{}/{}",
- keyName, bucketName, volumeName, ex);
- omMetrics.incNumKeyCommitFails();
- auditLog(auditLogger, buildAuditMessage(OMAction.COMMIT_KEY, auditMap,
- ex, getOmRequest().getUserInfo()));
- return new OMKeyCreateResponse(null, -1L,
- createErrorOMResponse(omResponse, ex));
- }
- List<OmKeyLocationInfo> locationInfoList = commitKeyArgs
- .getKeyLocationsList().stream().map(OmKeyLocationInfo::getFromProtobuf)
- .collect(Collectors.toList());
+ List<OmKeyLocationInfo> locationInfoList = commitKeyArgs
+ .getKeyLocationsList().stream()
+ .map(OmKeyLocationInfo::getFromProtobuf)
+ .collect(Collectors.toList());
- OMMetadataManager omMetadataManager = ozoneManager.getMetadataManager();
- String dbOzoneKey = omMetadataManager.getOzoneKey(volumeName, bucketName,
- keyName);
- String dbOpenKey = omMetadataManager.getOpenKey(volumeName, bucketName,
- keyName, commitKeyRequest.getClientID());
+ String dbOzoneKey = omMetadataManager.getOzoneKey(volumeName, bucketName,
+ keyName);
+ String dbOpenKey = omMetadataManager.getOpenKey(volumeName, bucketName,
+ keyName, commitKeyRequest.getClientID());
- omMetadataManager.getLock().acquireLock(BUCKET_LOCK, volumeName,
- bucketName);
+ omMetadataManager.getLock().acquireLock(BUCKET_LOCK, volumeName,
+ bucketName);
- IOException exception = null;
- OmKeyInfo omKeyInfo = null;
- try {
validateBucketAndVolume(omMetadataManager, volumeName, bucketName);
omKeyInfo = omMetadataManager.getOpenKeyTable().get(dbOpenKey);
if (omKeyInfo == null) {
@@ -164,9 +158,20 @@ public class OMKeyCommitRequest extends OMKeyRequest {
new CacheKey<>(dbOzoneKey),
new CacheValue<>(Optional.of(omKeyInfo), transactionLogIndex));
+ omResponse.setCommitKeyResponse(CommitKeyResponse.newBuilder().build());
+ omClientResponse =
+ new OMKeyCommitResponse(omKeyInfo, commitKeyRequest.getClientID(),
+ omResponse.build());
} catch (IOException ex) {
exception = ex;
+ omClientResponse = new OMKeyCommitResponse(null, -1L,
+ createErrorOMResponse(omResponse, exception));
} finally {
+ if (omClientResponse != null) {
+ omClientResponse.setFlushFuture(
+ ozoneManagerDoubleBufferHelper.add(omClientResponse,
+ transactionLogIndex));
+ }
omMetadataManager.getLock().releaseLock(BUCKET_LOCK, volumeName,
bucketName);
}
@@ -188,13 +193,12 @@ public class OMKeyCommitRequest extends OMKeyRequest {
if (omKeyInfo.getKeyLocationVersions().size() == 1) {
omMetrics.incNumKeys();
}
-
- return new OMKeyCommitResponse(omKeyInfo, commitKeyRequest.getClientID(),
- omResponse.build());
+ return omClientResponse;
} else {
+ LOG.error("CommitKey failed for Key: {} in volume/bucket:{}/{}",
+ keyName, bucketName, volumeName, exception);
omMetrics.incNumKeyCommitFails();
- return new OMKeyCommitResponse(null, -1L,
- createErrorOMResponse(omResponse, exception));
+ return omClientResponse;
}
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCreateRequest.java \
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCreateRequest.java
index 3af0359..2a0c601 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCreateRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCreateRequest.java
@@ -25,6 +25,7 @@ import java.util.stream.Collectors;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
+import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -140,7 +141,8 @@ public class OMKeyCreateRequest extends OMKeyRequest {
@Override
public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager,
- long transactionLogIndex) {
+ long transactionLogIndex,
+ OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper) {
CreateKeyRequest createKeyRequest = getOmRequest().getCreateKeyRequest();
@@ -159,6 +161,7 @@ public class OMKeyCreateRequest extends OMKeyRequest {
Optional<FileEncryptionInfo> encryptionInfo = Optional.absent();
IOException exception = null;
boolean acquireLock = false;
+ OMClientResponse omClientResponse = null;
try {
// check Acl
if (ozoneManager.getAclsEnabled()) {
@@ -182,22 +185,29 @@ public class OMKeyCreateRequest extends OMKeyRequest {
omKeyInfo = prepareKeyInfo(omMetadataManager, keyArgs,
omMetadataManager.getOzoneKey(volumeName, bucketName, keyName),
keyArgs.getDataSize(), locations, encryptionInfo.orNull());
-
+ omClientResponse = prepareCreateKeyResponse(keyArgs, omKeyInfo,
+ locations, encryptionInfo.orNull(), exception,
+ createKeyRequest.getClientID(), transactionLogIndex, volumeName,
+ bucketName, keyName, ozoneManager, OMAction.ALLOCATE_KEY);
} catch (IOException ex) {
- LOG.error("Key open failed for volume:{} bucket:{} key:{}",
- volumeName, bucketName, keyName, ex);
exception = ex;
+ omClientResponse = prepareCreateKeyResponse(keyArgs, omKeyInfo, locations,
+ encryptionInfo.orNull(), exception, createKeyRequest.getClientID(),
+ transactionLogIndex, volumeName, bucketName, keyName, ozoneManager,
+ OMAction.ALLOCATE_KEY);
} finally {
+ if (omClientResponse != null) {
+ omClientResponse.setFlushFuture(
+ ozoneManagerDoubleBufferHelper.add(omClientResponse,
+ transactionLogIndex));
+ }
if (acquireLock) {
omMetadataManager.getLock().releaseLock(BUCKET_LOCK, volumeName,
bucketName);
}
}
- return prepareCreateKeyResponse(keyArgs, omKeyInfo, locations,
- encryptionInfo.orNull(), exception, createKeyRequest.getClientID(),
- transactionLogIndex, volumeName, bucketName, keyName, ozoneManager,
- OMAction.ALLOCATE_KEY);
+ return omClientResponse;
}
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequest.java \
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequest.java
index f79187e..772c427 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequest.java
@@ -22,6 +22,7 @@ import java.io.IOException;
import java.util.Map;
import com.google.common.base.Optional;
+import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -34,7 +35,6 @@ import org.apache.hadoop.ozone.om.OzoneManager;
import org.apache.hadoop.ozone.om.exceptions.OMException;
import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
import org.apache.hadoop.ozone.om.response.OMClientResponse;
-import org.apache.hadoop.ozone.om.response.key.OMKeyCreateResponse;
import org.apache.hadoop.ozone.om.response.key.OMKeyDeleteResponse;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos
@@ -82,7 +82,8 @@ public class OMKeyDeleteRequest extends OMKeyRequest {
@Override
public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager,
- long transactionLogIndex) {
+ long transactionLogIndex,
+ OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper) {
DeleteKeyRequest deleteKeyRequest = getOmRequest().getDeleteKeyRequest();
OzoneManagerProtocolProtos.KeyArgs deleteKeyArgs =
@@ -104,7 +105,10 @@ public class OMKeyDeleteRequest extends OMKeyRequest {
OzoneManagerProtocolProtos.OMResponse.newBuilder().setCmdType(
OzoneManagerProtocolProtos.Type.DeleteKey).setStatus(
OzoneManagerProtocolProtos.Status.OK).setSuccess(true);
-
+ OMMetadataManager omMetadataManager = ozoneManager.getMetadataManager();
+ IOException exception = null;
+ boolean acquiredLock = false;
+ OMClientResponse omClientResponse = null;
try {
// check Acl
if (ozoneManager.getAclsEnabled()) {
@@ -112,32 +116,18 @@ public class OMKeyDeleteRequest extends OMKeyRequest {
OzoneObj.StoreType.OZONE, IAccessAuthorizer.ACLType.DELETE,
volumeName, bucketName, keyName);
}
- } catch (IOException ex) {
- LOG.error("Delete failed for Key: {} in volume/bucket:{}/{}",
- keyName, bucketName, volumeName, ex);
- omMetrics.incNumKeyDeleteFails();
- auditLog(auditLogger, buildAuditMessage(OMAction.DELETE_KEY, auditMap,
- ex, userInfo));
- return new OMKeyCreateResponse(null, -1L,
- createErrorOMResponse(omResponse, ex));
- }
-
- OMMetadataManager omMetadataManager = ozoneManager.getMetadataManager();
- String objectKey = omMetadataManager.getOzoneKey(
- volumeName, bucketName, keyName);
+ String objectKey = omMetadataManager.getOzoneKey(
+ volumeName, bucketName, keyName);
- omMetadataManager.getLock().acquireLock(BUCKET_LOCK, volumeName,
- bucketName);
- IOException exception = null;
- OmKeyInfo omKeyInfo = null;
- try {
+ acquiredLock = omMetadataManager.getLock().acquireLock(BUCKET_LOCK,
+ volumeName, bucketName);
// Not doing bucket/volume checks here. In this way we can avoid db
// checks for them.
// TODO: Once we have volume/bucket full cache, we can add
// them back, as these checks will be inexpensive at that time.
- omKeyInfo = omMetadataManager.getKeyTable().get(objectKey);
+ OmKeyInfo omKeyInfo = omMetadataManager.getKeyTable().get(objectKey);
if (omKeyInfo == null) {
throw new OMException("Key not found", KEY_NOT_FOUND);
@@ -154,11 +144,25 @@ public class OMKeyDeleteRequest extends OMKeyRequest {
// validation, so we don't need to add to cache.
// TODO: Revisit if we need it later.
+ omClientResponse = new OMKeyDeleteResponse(omKeyInfo,
+ deleteKeyArgs.getModificationTime(),
+ omResponse.setDeleteKeyResponse(
+ DeleteKeyResponse.newBuilder()).build());
+
} catch (IOException ex) {
exception = ex;
+ omClientResponse = new OMKeyDeleteResponse(null, 0,
+ createErrorOMResponse(omResponse, exception));
} finally {
- omMetadataManager.getLock().releaseLock(BUCKET_LOCK, volumeName,
- bucketName);
+ if (omClientResponse != null) {
+ omClientResponse.setFlushFuture(
+ ozoneManagerDoubleBufferHelper.add(omClientResponse,
+ transactionLogIndex));
+ }
+ if (acquiredLock) {
+ omMetadataManager.getLock().releaseLock(BUCKET_LOCK, volumeName,
+ bucketName);
+ }
}
// Performing audit logging outside of the lock.
@@ -168,14 +172,10 @@ public class OMKeyDeleteRequest extends OMKeyRequest {
// return response.
if (exception == null) {
omMetrics.decNumKeys();
- return new OMKeyDeleteResponse(
- omKeyInfo, deleteKeyArgs.getModificationTime(),
- omResponse.setDeleteKeyResponse(
- DeleteKeyResponse.newBuilder()).build());
+ return omClientResponse;
} else {
omMetrics.incNumKeyDeleteFails();
- return new OMKeyDeleteResponse(null, 0,
- createErrorOMResponse(omResponse, exception));
+ return omClientResponse;
}
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyPurgeRequest.java \
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyPurgeRequest.java
index 5eda676..e511399 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyPurgeRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyPurgeRequest.java
@@ -1,6 +1,7 @@
package org.apache.hadoop.ozone.om.request.key;
import org.apache.hadoop.ozone.om.OzoneManager;
+import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
import org.apache.hadoop.ozone.om.response.OMClientResponse;
import org.apache.hadoop.ozone.om.response.key.OMKeyPurgeResponse;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
@@ -28,7 +29,8 @@ public class OMKeyPurgeRequest extends OMKeyRequest {
@Override
public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager,
- long transactionLogIndex) {
+ long transactionLogIndex,
+ OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper) {
PurgeKeysRequest purgeKeysRequest = getOmRequest().getPurgeKeysRequest();
List<String> purgeKeysList = purgeKeysRequest.getKeysList();
@@ -43,6 +45,11 @@ public class OMKeyPurgeRequest extends OMKeyRequest {
.setSuccess(true)
.build();
- return new OMKeyPurgeResponse(purgeKeysList, omResponse);
+ OMClientResponse omClientResponse = new OMKeyPurgeResponse(purgeKeysList,
+ omResponse);
+ omClientResponse.setFlushFuture(
+ ozoneManagerDoubleBufferHelper.add(omClientResponse,
+ transactionLogIndex));
+ return omClientResponse;
}
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequest.java \
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequest.java
index 7d53b36..da0129d 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequest.java
@@ -23,6 +23,7 @@ import java.util.Map;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
+import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -83,7 +84,8 @@ public class OMKeyRenameRequest extends OMKeyRequest {
@Override
public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager,
- long transactionLogIndex) {
+ long transactionLogIndex,
+ OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper) {
RenameKeyRequest renameKeyRequest = getOmRequest().getRenameKeyRequest();
@@ -107,6 +109,11 @@ public class OMKeyRenameRequest extends OMKeyRequest {
OzoneManagerProtocolProtos.Type.CommitKey).setStatus(
OzoneManagerProtocolProtos.Status.OK).setSuccess(true);
+ OMMetadataManager omMetadataManager = ozoneManager.getMetadataManager();
+ boolean acquiredLock = false;
+ OMClientResponse omClientResponse = null;
+ IOException exception = null;
+ OmKeyInfo fromKeyValue = null;
try {
if (toKeyName.length() == 0 || fromKeyName.length() == 0) {
throw new OMException("Key name is empty",
@@ -118,25 +125,9 @@ public class OMKeyRenameRequest extends OMKeyRequest {
OzoneObj.StoreType.OZONE, IAccessAuthorizer.ACLType.WRITE,
volumeName, bucketName, fromKeyName);
}
- } catch (IOException ex) {
- LOG.error(
- "Rename key failed for volume:{} bucket:{} fromKey:{} toKey:{}. "
- + "Key: {} not found.", volumeName, bucketName, fromKeyName,
- toKeyName, fromKeyName);
- omMetrics.incNumKeyRenameFails();
- auditLog(auditLogger, buildAuditMessage(OMAction.RENAME_KEY, auditMap,
- ex, getOmRequest().getUserInfo()));
- return new OMKeyRenameResponse(null, null, null,
- createErrorOMResponse(omResponse, ex));
- }
- OMMetadataManager omMetadataManager = ozoneManager.getMetadataManager();
- omMetadataManager.getLock().acquireLock(BUCKET_LOCK, volumeName,
- bucketName);
-
- IOException exception = null;
- OmKeyInfo fromKeyValue = null;
- try {
+ acquiredLock = omMetadataManager.getLock().acquireLock(BUCKET_LOCK,
+ volumeName, bucketName);
// Not doing bucket/volume checks here. In this way we can avoid db
// checks for them.
@@ -177,11 +168,23 @@ public class OMKeyRenameRequest extends OMKeyRequest {
keyTable.addCacheEntry(new CacheKey<>(toKey),
new CacheValue<>(Optional.of(fromKeyValue), transactionLogIndex));
+ omClientResponse = new OMKeyRenameResponse(fromKeyValue, toKeyName,
+ fromKeyName, omResponse.setRenameKeyResponse(
+ RenameKeyResponse.newBuilder()).build());
} catch (IOException ex) {
exception = ex;
+ omClientResponse = new OMKeyRenameResponse(null, null, null,
+ createErrorOMResponse(omResponse, exception));
} finally {
- omMetadataManager.getLock().releaseLock(BUCKET_LOCK, volumeName,
- bucketName);
+ if (omClientResponse != null) {
+ omClientResponse.setFlushFuture(
+ ozoneManagerDoubleBufferHelper.add(omClientResponse,
+ transactionLogIndex));
+ }
+ if (acquiredLock) {
+ omMetadataManager.getLock().releaseLock(BUCKET_LOCK, volumeName,
+ bucketName);
+ }
}
@@ -189,16 +192,16 @@ public class OMKeyRenameRequest extends OMKeyRequest {
exception, getOmRequest().getUserInfo()));
if (exception == null) {
- return new OMKeyRenameResponse(fromKeyValue, toKeyName, fromKeyName,
- omResponse.setRenameKeyResponse(
- RenameKeyResponse.newBuilder()).build());
+ LOG.debug("Rename Key is successfully completed for volume:{} bucket:{}" +
+ " fromKey:{} toKey:{}. ", volumeName, bucketName, fromKeyName,
+ toKeyName);
+ return omClientResponse;
} else {
LOG.error(
"Rename key failed for volume:{} bucket:{} fromKey:{} toKey:{}. "
+ "Key: {} not found.", volumeName, bucketName, fromKeyName,
toKeyName, fromKeyName);
- return new OMKeyRenameResponse(null, null, null,
- createErrorOMResponse(omResponse, exception));
+ return omClientResponse;
}
}
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/bucket/S3BucketCreateRequest.java \
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/bucket/S3BucketCreateRequest.java
index eff6e4f..1976a3d 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/bucket/S3BucketCreateRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/bucket/S3BucketCreateRequest.java
@@ -25,6 +25,7 @@ import java.util.Map;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
+import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -113,7 +114,8 @@ public class S3BucketCreateRequest extends OMVolumeRequest {
@Override
public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager,
- long transactionLogIndex) {
+ long transactionLogIndex,
+ OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper) {
S3CreateBucketRequest s3CreateBucketRequest =
getOmRequest().getCreateS3BucketRequest();
@@ -141,15 +143,13 @@ public class S3BucketCreateRequest extends OMVolumeRequest {
// ahead and create a bucket.
OMMetadataManager omMetadataManager = ozoneManager.getMetadataManager();
IOException exception = null;
- VolumeList volumeList = null;
- OmVolumeArgs omVolumeArgs = null;
- OmBucketInfo omBucketInfo = null;
boolean volumeCreated = false;
boolean acquiredVolumeLock = false;
boolean acquiredUserLock = false;
boolean acquiredS3Lock = false;
String volumeName = formatOzoneVolumeName(userName);
+ OMClientResponse omClientResponse = null;
try {
// check Acl
if (ozoneManager.getAclsEnabled()) {
@@ -167,6 +167,7 @@ public class S3BucketCreateRequest extends OMVolumeRequest {
OMException.ResultCodes.S3_BUCKET_ALREADY_EXISTS);
}
+ OMVolumeCreateResponse omVolumeCreateResponse = null;
try {
acquiredVolumeLock =
omMetadataManager.getLock().acquireLock(VOLUME_LOCK, volumeName);
@@ -176,16 +177,18 @@ public class S3BucketCreateRequest extends OMVolumeRequest {
// ozone volume.
String volumeKey = omMetadataManager.getVolumeKey(volumeName);
if (!omMetadataManager.getVolumeTable().isExist(volumeKey)) {
- omVolumeArgs = createOmVolumeArgs(volumeName, userName,
+ OmVolumeArgs omVolumeArgs = createOmVolumeArgs(volumeName, userName,
s3CreateBucketRequest.getS3CreateVolumeInfo()
.getCreationTime());
- volumeList = omMetadataManager.getUserTable().get(
+ VolumeList volumeList = omMetadataManager.getUserTable().get(
omMetadataManager.getUserKey(userName));
volumeList = addVolumeToOwnerList(volumeList,
volumeName, userName, ozoneManager.getMaxUserVolumeCount());
createVolume(omMetadataManager, omVolumeArgs, volumeList, volumeKey,
omMetadataManager.getUserKey(userName), transactionLogIndex);
volumeCreated = true;
+ omVolumeCreateResponse = new OMVolumeCreateResponse(omVolumeArgs,
+ volumeList, omResponse.build());
}
} finally {
if (acquiredUserLock) {
@@ -198,7 +201,8 @@ public class S3BucketCreateRequest extends OMVolumeRequest {
// check if ozone bucket exists, if it does not exist create ozone
// bucket
- omBucketInfo = createBucket(omMetadataManager, volumeName, s3BucketName,
+ OmBucketInfo omBucketInfo = createBucket(omMetadataManager, volumeName,
+ s3BucketName,
s3CreateBucketRequest.getS3CreateVolumeInfo().getCreationTime(),
transactionLogIndex);
@@ -207,9 +211,25 @@ public class S3BucketCreateRequest extends OMVolumeRequest {
new CacheKey<>(s3BucketName), new CacheValue<>(
Optional.of(formatS3MappingName(volumeName, s3BucketName)),
transactionLogIndex));
+
+ OMBucketCreateResponse omBucketCreateResponse =
+ new OMBucketCreateResponse(omBucketInfo, omResponse.build());
+
+ omClientResponse = new S3BucketCreateResponse(omVolumeCreateResponse,
+ omBucketCreateResponse, s3BucketName,
+ formatS3MappingName(volumeName, s3BucketName),
+ omResponse.setCreateS3BucketResponse(
+ S3CreateBucketResponse.newBuilder()).build());
} catch (IOException ex) {
exception = ex;
+ omClientResponse = new S3BucketCreateResponse(null, null, null, null,
+ createErrorOMResponse(omResponse, exception));
} finally {
+ if (omClientResponse != null) {
+ omClientResponse.setFlushFuture(
+ ozoneManagerDoubleBufferHelper.add(omClientResponse,
+ transactionLogIndex));
+ }
if (acquiredS3Lock) {
omMetadataManager.getLock().releaseLock(S3_BUCKET_LOCK, s3BucketName);
}
@@ -227,25 +247,16 @@ public class S3BucketCreateRequest extends OMVolumeRequest {
OMVolumeCreateResponse omVolumeCreateResponse = null;
if (volumeCreated) {
omMetrics.incNumVolumes();
- omVolumeCreateResponse = new OMVolumeCreateResponse(omVolumeArgs,
- volumeList, omResponse.build());
}
-
omMetrics.incNumBuckets();
- OMBucketCreateResponse omBucketCreateResponse =
- new OMBucketCreateResponse(omBucketInfo, omResponse.build());
omMetrics.incNumS3Buckets();
- return new S3BucketCreateResponse(omVolumeCreateResponse,
- omBucketCreateResponse, s3BucketName,
- formatS3MappingName(volumeName, s3BucketName),
- omResponse.setCreateS3BucketResponse(
- S3CreateBucketResponse.newBuilder()).build());
+
+ return omClientResponse;
} else {
LOG.error("S3Bucket Creation Failed for userName: {}, s3BucketName {}, " +
"VolumeName {}", userName, s3BucketName, volumeName);
omMetrics.incNumS3BucketCreateFails();
- return new S3BucketCreateResponse(null, null, null, null,
- createErrorOMResponse(omResponse, exception));
+ return omClientResponse;
}
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/bucket/S3BucketDeleteRequest.java \
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/bucket/S3BucketDeleteRequest.java
index 51d299a..8e75a66 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/bucket/S3BucketDeleteRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/bucket/S3BucketDeleteRequest.java
@@ -23,6 +23,7 @@ import java.util.HashMap;
import java.util.Map;
import com.google.common.base.Optional;
+import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -86,7 +87,8 @@ public class S3BucketDeleteRequest extends OMVolumeRequest {
@Override
public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager,
- long transactionLogIndex) {
+ long transactionLogIndex,
+ OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper) {
S3DeleteBucketRequest s3DeleteBucketRequest =
getOmRequest().getDeleteS3BucketRequest();
@@ -103,6 +105,7 @@ public class S3BucketDeleteRequest extends OMVolumeRequest {
boolean acquiredBucketLock = false;
String volumeName = null;
OMMetadataManager omMetadataManager = ozoneManager.getMetadataManager();
+ OMClientResponse omClientResponse = null;
try {
// check Acl
if (ozoneManager.getAclsEnabled()) {
@@ -137,9 +140,22 @@ public class S3BucketDeleteRequest extends OMVolumeRequest {
new CacheKey<>(s3BucketName),
new CacheValue<>(Optional.absent(), transactionLogIndex));
}
+
+ omResponse.setDeleteS3BucketResponse(
+ OzoneManagerProtocolProtos.S3DeleteBucketResponse.newBuilder());
+
+ omClientResponse = new S3BucketDeleteResponse(s3BucketName, volumeName,
+ omResponse.build());
} catch (IOException ex) {
exception = ex;
+ omClientResponse = new S3BucketDeleteResponse(null, null,
+ createErrorOMResponse(omResponse, exception));
} finally {
+ if (omClientResponse != null) {
+ omClientResponse.setFlushFuture(
+ ozoneManagerDoubleBufferHelper.add(omClientResponse,
+ transactionLogIndex));
+ }
if (acquiredBucketLock) {
omMetadataManager.getLock().releaseLock(BUCKET_LOCK, volumeName,
s3BucketName);
@@ -161,16 +177,13 @@ public class S3BucketDeleteRequest extends OMVolumeRequest {
LOG.debug("S3Bucket {} successfully deleted", s3BucketName);
omMetrics.decNumS3Buckets();
omMetrics.decNumBuckets();
- omResponse.setDeleteS3BucketResponse(
- OzoneManagerProtocolProtos.S3DeleteBucketResponse.newBuilder());
- return new S3BucketDeleteResponse(s3BucketName, volumeName,
- omResponse.build());
+
+ return omClientResponse;
} else {
LOG.error("S3Bucket Deletion failed for S3Bucket:{}", s3BucketName,
exception);
omMetrics.incNumS3BucketDeleteFails();
- return new S3BucketDeleteResponse(null, null,
- createErrorOMResponse(omResponse, exception));
+ return omClientResponse;
}
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3InitiateMultipartUploadRequest.java \
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3InitiateMultipartUploadRequest.java
index 3ae080b..94637be 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3InitiateMultipartUploadRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3InitiateMultipartUploadRequest.java
@@ -26,6 +26,7 @@ import org.apache.hadoop.ozone.om.OzoneManager;
import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
import org.apache.hadoop.ozone.om.helpers.OmKeyLocationInfoGroup;
import org.apache.hadoop.ozone.om.helpers.OmMultipartKeyInfo;
+import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
import org.apache.hadoop.ozone.om.request.key.OMKeyRequest;
import org.apache.hadoop.ozone.om.response.OMClientResponse;
import org.apache.hadoop.ozone.om.response.s3.multipart.S3InitiateMultipartUploadResponse;
@@ -84,7 +85,8 @@ public class S3InitiateMultipartUploadRequest extends OMKeyRequest \
{
@Override
public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager,
- long transactionLogIndex) {
+ long transactionLogIndex,
+ OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper) {
MultipartInfoInitiateRequest multipartInfoInitiateRequest =
getOmRequest().getInitiateMultiPartUploadRequest();
@@ -104,6 +106,12 @@ public class S3InitiateMultipartUploadRequest extends \
OMKeyRequest { IOException exception = null;
OmMultipartKeyInfo multipartKeyInfo = null;
OmKeyInfo omKeyInfo = null;
+
+ OMResponse.Builder omResponse = OMResponse.newBuilder()
+ .setCmdType(OzoneManagerProtocolProtos.Type.InitiateMultiPartUpload)
+ .setStatus(OzoneManagerProtocolProtos.Status.OK)
+ .setSuccess(true);
+ OMClientResponse omClientResponse = null;
try {
// check Acl
if (ozoneManager.getAclsEnabled()) {
@@ -167,9 +175,26 @@ public class S3InitiateMultipartUploadRequest extends \
OMKeyRequest { new CacheKey<>(multipartKey),
new CacheValue<>(Optional.of(multipartKeyInfo), transactionLogIndex));
+
+ omClientResponse =
+ new S3InitiateMultipartUploadResponse(multipartKeyInfo, omKeyInfo,
+ omResponse.setInitiateMultiPartUploadResponse(
+ MultipartInfoInitiateResponse.newBuilder()
+ .setVolumeName(volumeName)
+ .setBucketName(bucketName)
+ .setKeyName(keyName)
+ .setMultipartUploadID(keyArgs.getMultipartUploadID()))
+ .build());
} catch (IOException ex) {
exception = ex;
+ omClientResponse = new S3InitiateMultipartUploadResponse(null, null,
+ createErrorOMResponse(omResponse, exception));
} finally {
+ if (omClientResponse != null) {
+ omClientResponse.setFlushFuture(
+ ozoneManagerDoubleBufferHelper.add(omClientResponse,
+ transactionLogIndex));
+ }
if (acquiredBucketLock) {
omMetadataManager.getLock().releaseLock(BUCKET_LOCK, volumeName,
bucketName);
@@ -177,10 +202,6 @@ public class S3InitiateMultipartUploadRequest extends \
OMKeyRequest { }
- OMResponse.Builder omResponse = OMResponse.newBuilder()
- .setCmdType(OzoneManagerProtocolProtos.Type.InitiateMultiPartUpload)
- .setStatus(OzoneManagerProtocolProtos.Status.OK)
- .setSuccess(true);
// audit log
auditLog(ozoneManager.getAuditLogger(), buildAuditMessage(
@@ -192,22 +213,14 @@ public class S3InitiateMultipartUploadRequest extends \
OMKeyRequest { "Volume/Bucket {}/{} is successfully completed", keyName,
volumeName, bucketName);
- return new S3InitiateMultipartUploadResponse(multipartKeyInfo, omKeyInfo,
- omResponse.setInitiateMultiPartUploadResponse(
- MultipartInfoInitiateResponse.newBuilder()
- .setVolumeName(volumeName)
- .setBucketName(bucketName)
- .setKeyName(keyName)
- .setMultipartUploadID(keyArgs.getMultipartUploadID()))
- .build());
+ return omClientResponse;
} else {
ozoneManager.getMetrics().incNumInitiateMultipartUploadFails();
LOG.error("S3 InitiateMultipart Upload request for Key {} in " +
"Volume/Bucket {}/{} is failed", keyName, volumeName, bucketName,
exception);
- return new S3InitiateMultipartUploadResponse(null, null,
- createErrorOMResponse(omResponse, exception));
+ return omClientResponse;
}
}
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadAbortRequest.java \
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadAbortRequest.java
index cb98132..1f5c963 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadAbortRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadAbortRequest.java
@@ -21,6 +21,7 @@ package org.apache.hadoop.ozone.om.request.s3.multipart;
import java.io.IOException;
import com.google.common.base.Optional;
+import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -77,7 +78,8 @@ public class S3MultipartUploadAbortRequest extends OMKeyRequest {
@Override
public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager,
- long transactionLogIndex) {
+ long transactionLogIndex,
+ OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper) {
OzoneManagerProtocolProtos.KeyArgs keyArgs =
getOmRequest().getAbortMultiPartUploadRequest().getKeyArgs();
@@ -90,6 +92,11 @@ public class S3MultipartUploadAbortRequest extends OMKeyRequest {
IOException exception = null;
OmMultipartKeyInfo multipartKeyInfo = null;
String multipartKey = null;
+ OMResponse.Builder omResponse = OMResponse.newBuilder()
+ .setCmdType(OzoneManagerProtocolProtos.Type.AbortMultiPartUpload)
+ .setStatus(OzoneManagerProtocolProtos.Status.OK)
+ .setSuccess(true);
+ OMClientResponse omClientResponse = null;
try {
// check Acl
if (ozoneManager.getAclsEnabled()) {
@@ -132,9 +139,21 @@ public class S3MultipartUploadAbortRequest extends OMKeyRequest \
{ new CacheValue<>(Optional.absent(), transactionLogIndex));
}
+ omClientResponse = new S3MultipartUploadAbortResponse(multipartKey,
+ keyArgs.getModificationTime(), multipartKeyInfo,
+ omResponse.setAbortMultiPartUploadResponse(
+ MultipartUploadAbortResponse.newBuilder()).build());
} catch (IOException ex) {
exception = ex;
+ omClientResponse = new S3MultipartUploadAbortResponse(multipartKey,
+ keyArgs.getModificationTime(), multipartKeyInfo,
+ createErrorOMResponse(omResponse, exception));
} finally {
+ if (omClientResponse != null) {
+ omClientResponse.setFlushFuture(
+ ozoneManagerDoubleBufferHelper.add(omClientResponse,
+ transactionLogIndex));
+ }
if (acquiredLock) {
omMetadataManager.getLock().releaseLock(BUCKET_LOCK, volumeName,
bucketName);
@@ -146,28 +165,18 @@ public class S3MultipartUploadAbortRequest extends OMKeyRequest \
{ OMAction.ABORT_MULTIPART_UPLOAD, buildKeyArgsAuditMap(keyArgs),
exception, getOmRequest().getUserInfo()));
- OMResponse.Builder omResponse = OMResponse.newBuilder()
- .setCmdType(OzoneManagerProtocolProtos.Type.AbortMultiPartUpload)
- .setStatus(OzoneManagerProtocolProtos.Status.OK)
- .setSuccess(true);
-
if (exception == null) {
LOG.debug("Abort Multipart request is successfully completed for " +
"KeyName {} in VolumeName/Bucket {}/{}", keyName, volumeName,
bucketName);
- return new S3MultipartUploadAbortResponse(multipartKey,
- keyArgs.getModificationTime(), multipartKeyInfo,
- omResponse.setAbortMultiPartUploadResponse(
- MultipartUploadAbortResponse.newBuilder()).build());
} else {
+ ozoneManager.getMetrics().incNumAbortMultipartUploadFails();
LOG.error("Abort Multipart request is failed for " +
"KeyName {} in VolumeName/Bucket {}/{}", keyName, volumeName,
bucketName, exception);
- return new S3MultipartUploadAbortResponse(multipartKey,
- keyArgs.getModificationTime(), multipartKeyInfo,
- createErrorOMResponse(omResponse, exception));
}
+ return omClientResponse;
}
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCommitPartRequest.java \
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCommitPartRequest.java
index fc3daec..8bc4e5e 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCommitPartRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCommitPartRequest.java
@@ -26,6 +26,7 @@ import org.apache.hadoop.ozone.om.exceptions.OMException;
import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
import org.apache.hadoop.ozone.om.helpers.OmKeyLocationInfo;
import org.apache.hadoop.ozone.om.helpers.OmMultipartKeyInfo;
+import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
import org.apache.hadoop.ozone.om.request.key.OMKeyRequest;
import org.apache.hadoop.ozone.om.response.OMClientResponse;
import org.apache.hadoop.ozone.om.response.s3.multipart
@@ -44,6 +45,8 @@ import org.apache.hadoop.ozone.security.acl.OzoneObj;
import org.apache.hadoop.util.Time;
import org.apache.hadoop.utils.db.cache.CacheKey;
import org.apache.hadoop.utils.db.cache.CacheValue;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.stream.Collectors;
@@ -56,6 +59,10 @@ import static \
org.apache.hadoop.ozone.om.lock.OzoneManagerLock.Resource.BUCKET_L
*/
public class S3MultipartUploadCommitPartRequest extends OMKeyRequest {
+
+ private static final Logger LOG =
+ LoggerFactory.getLogger(S3MultipartUploadCommitPartRequest.class);
+
public S3MultipartUploadCommitPartRequest(OMRequest omRequest) {
super(omRequest);
}
@@ -74,7 +81,8 @@ public class S3MultipartUploadCommitPartRequest extends \
OMKeyRequest {
@Override
public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager,
- long transactionLogIndex) {
+ long transactionLogIndex,
+ OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper) {
MultipartCommitUploadPartRequest multipartCommitUploadPartRequest =
getOmRequest().getCommitMultiPartUploadRequest();
@@ -89,13 +97,19 @@ public class S3MultipartUploadCommitPartRequest extends \
OMKeyRequest { ozoneManager.getMetrics().incNumCommitMultipartUploadParts();
boolean acquiredLock = false;
- OmMultipartKeyInfo multipartKeyInfo = null;
- OmKeyInfo omKeyInfo = null;
- String openKey = null;
- String multipartKey = null;
- OzoneManagerProtocolProtos.PartKeyInfo oldPartKeyInfo = null;
+
IOException exception = null;
String partName = null;
+ OMResponse.Builder omResponse = OMResponse.newBuilder()
+ .setCmdType(OzoneManagerProtocolProtos.Type.CommitMultiPartUpload)
+ .setStatus(OzoneManagerProtocolProtos.Status.OK)
+ .setSuccess(true);
+ OMClientResponse omClientResponse = null;
+ OzoneManagerProtocolProtos.PartKeyInfo oldPartKeyInfo = null;
+ String openKey = null;
+ OmKeyInfo omKeyInfo = null;
+ String multipartKey = null;
+ OmMultipartKeyInfo multipartKeyInfo = null;
try {
// check Acl
if (ozoneManager.getAclsEnabled()) {
@@ -111,11 +125,11 @@ public class S3MultipartUploadCommitPartRequest extends \
OMKeyRequest { validateBucketAndVolume(omMetadataManager, volumeName, bucketName);
String uploadID = keyArgs.getMultipartUploadID();
- multipartKey = omMetadataManager.getMultipartKey(volumeName, bucketName,
- keyName, uploadID);
+ multipartKey = omMetadataManager.getMultipartKey(volumeName,
+ bucketName, keyName, uploadID);
- multipartKeyInfo = omMetadataManager
- .getMultipartInfoTable().get(multipartKey);
+ multipartKeyInfo =
+ omMetadataManager.getMultipartInfoTable().get(multipartKey);
long clientID = multipartCommitUploadPartRequest.getClientID();
@@ -124,7 +138,6 @@ public class S3MultipartUploadCommitPartRequest extends \
OMKeyRequest {
omKeyInfo = omMetadataManager.getOpenKeyTable().get(openKey);
-
if (omKeyInfo == null) {
throw new OMException("Failed to commit Multipart Upload key, as " +
openKey + "entry is not found in the openKey table", KEY_NOT_FOUND);
@@ -180,9 +193,23 @@ public class S3MultipartUploadCommitPartRequest extends \
OMKeyRequest { new CacheValue<>(Optional.absent(), transactionLogIndex));
}
+ omResponse.setCommitMultiPartUploadResponse(
+ MultipartCommitUploadPartResponse.newBuilder().setPartName(partName));
+ omClientResponse = new S3MultipartUploadCommitPartResponse(multipartKey,
+ openKey, keyArgs.getModificationTime(), omKeyInfo, multipartKeyInfo,
+ oldPartKeyInfo, omResponse.build());
+
} catch (IOException ex) {
exception = ex;
+ omClientResponse = new S3MultipartUploadCommitPartResponse(multipartKey,
+ openKey, keyArgs.getModificationTime(), omKeyInfo, multipartKeyInfo,
+ oldPartKeyInfo, createErrorOMResponse(omResponse, exception));
} finally {
+ if (omClientResponse != null) {
+ omClientResponse.setFlushFuture(
+ ozoneManagerDoubleBufferHelper.add(omClientResponse,
+ transactionLogIndex));
+ }
if (acquiredLock) {
omMetadataManager.getLock().releaseLock(BUCKET_LOCK, volumeName,
bucketName);
@@ -194,24 +221,16 @@ public class S3MultipartUploadCommitPartRequest extends \
OMKeyRequest {
OMAction.COMMIT_MULTIPART_UPLOAD_PARTKEY, buildKeyArgsAuditMap(keyArgs),
exception, getOmRequest().getUserInfo()));
- OMResponse.Builder omResponse = OMResponse.newBuilder()
- .setCmdType(OzoneManagerProtocolProtos.Type.CommitMultiPartUpload)
- .setStatus(OzoneManagerProtocolProtos.Status.OK)
- .setSuccess(true);
-
if (exception == null) {
- omResponse.setCommitMultiPartUploadResponse(
- MultipartCommitUploadPartResponse.newBuilder().setPartName(partName));
- return new S3MultipartUploadCommitPartResponse(multipartKey, openKey,
- keyArgs.getModificationTime(), omKeyInfo, multipartKeyInfo,
- oldPartKeyInfo, omResponse.build());
+ LOG.debug("MultipartUpload Commit is successfully for Key:{} in " +
+ "Volume/Bucket {}/{}", keyName, volumeName, bucketName);
+
} else {
+ LOG.error("MultipartUpload Commit is failed for Key:{} in " +
+ "Volume/Bucket {}/{}", keyName, volumeName, bucketName, exception);
ozoneManager.getMetrics().incNumCommitMultipartUploadPartFails();
- return new S3MultipartUploadCommitPartResponse(multipartKey, openKey,
- keyArgs.getModificationTime(), omKeyInfo, multipartKeyInfo,
- oldPartKeyInfo, createErrorOMResponse(omResponse, exception));
-
}
+ return omClientResponse;
}
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeCreateRequest.java \
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeCreateRequest.java
index 470d6aa..8135ebd 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeCreateRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeCreateRequest.java
@@ -19,12 +19,14 @@
package org.apache.hadoop.ozone.om.request.volume;
import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
import com.google.common.base.Preconditions;
+import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.apache.hadoop.ozone.audit.AuditLogger;
import org.apache.hadoop.ozone.audit.OMAction;
import org.apache.hadoop.ozone.om.response.volume.OMVolumeCreateResponse;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
@@ -84,7 +86,8 @@ public class OMVolumeCreateRequest extends OMVolumeRequest {
@Override
public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager,
- long transactionLogIndex) {
+ long transactionLogIndex,
+ OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper) {
CreateVolumeRequest createVolumeRequest =
getOmRequest().getCreateVolumeRequest();
@@ -101,41 +104,34 @@ public class OMVolumeCreateRequest extends OMVolumeRequest {
OzoneManagerProtocolProtos.Type.CreateVolume).setStatus(
OzoneManagerProtocolProtos.Status.OK).setSuccess(true);
- OmVolumeArgs omVolumeArgs = null;
-
OMMetadataManager omMetadataManager = ozoneManager.getMetadataManager();
- AuditLogger auditLogger = ozoneManager.getAuditLogger();
- OzoneManagerProtocolProtos.UserInfo userInfo = getOmRequest().getUserInfo();
-
// Doing this here, so we can do protobuf conversion outside of lock.
+ boolean acquiredVolumeLock = false;
+ boolean acquiredUserLock = false;
+ IOException exception = null;
+ OMClientResponse omClientResponse = null;
+ OmVolumeArgs omVolumeArgs = null;
+ Map<String, String> auditMap = new HashMap<>();
try {
omVolumeArgs = OmVolumeArgs.getFromProtobuf(volumeInfo);
+ auditMap = omVolumeArgs.toAuditMap();
// check Acl
if (ozoneManager.getAclsEnabled()) {
checkAcls(ozoneManager, OzoneObj.ResourceType.VOLUME,
OzoneObj.StoreType.OZONE, IAccessAuthorizer.ACLType.CREATE, volume,
null, null);
}
- } catch (IOException ex) {
- omMetrics.incNumVolumeCreateFails();
- auditLog(auditLogger, buildAuditMessage(OMAction.CREATE_VOLUME,
- buildVolumeAuditMap(volume), ex, userInfo));
- LOG.error("Volume creation failed for user:{} volume:{}", owner, volume,
- ex);
- return new OMVolumeCreateResponse(omVolumeArgs, null,
- createErrorOMResponse(omResponse, ex));
- }
- VolumeList volumeList = null;
- boolean acquiredUserLock = false;
- IOException exception = null;
+ VolumeList volumeList = null;
+
+ // acquire lock.
+ acquiredVolumeLock = omMetadataManager.getLock().acquireLock(VOLUME_LOCK,
+ volume);
- // acquire lock.
- omMetadataManager.getLock().acquireLock(VOLUME_LOCK, volume);
- try {
acquiredUserLock = omMetadataManager.getLock().acquireLock(USER_LOCK,
owner);
+
String dbVolumeKey = omMetadataManager.getVolumeKey(volume);
OmVolumeArgs dbVolumeArgs =
@@ -147,7 +143,12 @@ public class OMVolumeCreateRequest extends OMVolumeRequest {
volumeList = addVolumeToOwnerList(volumeList, volume, owner,
ozoneManager.getMaxUserVolumeCount());
createVolume(omMetadataManager, omVolumeArgs, volumeList, dbVolumeKey,
- dbUserKey, transactionLogIndex);
+ dbUserKey, transactionLogIndex);
+
+ omResponse.setCreateVolumeResponse(CreateVolumeResponse.newBuilder()
+ .build());
+ omClientResponse = new OMVolumeCreateResponse(omVolumeArgs, volumeList,
+ omResponse.build());
LOG.debug("volume:{} successfully created", omVolumeArgs.getVolume());
} else {
LOG.debug("volume:{} already exists", omVolumeArgs.getVolume());
@@ -157,34 +158,38 @@ public class OMVolumeCreateRequest extends OMVolumeRequest {
} catch (IOException ex) {
exception = ex;
+ omClientResponse = new OMVolumeCreateResponse(null, null,
+ createErrorOMResponse(omResponse, exception));
} finally {
+ if (omClientResponse != null) {
+ omClientResponse.setFlushFuture(
+ ozoneManagerDoubleBufferHelper.add(omClientResponse,
+ transactionLogIndex));
+ }
if (acquiredUserLock) {
omMetadataManager.getLock().releaseLock(USER_LOCK, owner);
}
- omMetadataManager.getLock().releaseLock(VOLUME_LOCK, volume);
+ if (acquiredVolumeLock) {
+ omMetadataManager.getLock().releaseLock(VOLUME_LOCK, volume);
+ }
}
// Performing audit logging outside of the lock.
- auditLog(auditLogger, buildAuditMessage(OMAction.CREATE_VOLUME,
- omVolumeArgs.toAuditMap(), exception, userInfo));
+ auditLog(ozoneManager.getAuditLogger(),
+ buildAuditMessage(OMAction.CREATE_VOLUME, auditMap, exception,
+ getOmRequest().getUserInfo()));
// return response after releasing lock.
if (exception == null) {
- LOG.debug("created volume:{} for user:{}", omVolumeArgs.getVolume(),
- owner);
+ LOG.debug("created volume:{} for user:{}", volume, owner);
omMetrics.incNumVolumes();
- omResponse.setCreateVolumeResponse(CreateVolumeResponse.newBuilder()
- .build());
- return new OMVolumeCreateResponse(omVolumeArgs, volumeList,
- omResponse.build());
} else {
LOG.error("Volume creation failed for user:{} volume:{}", owner,
- volumeInfo.getVolume(), exception);
+ volume, exception);
omMetrics.incNumVolumeCreateFails();
- return new OMVolumeCreateResponse(omVolumeArgs, volumeList,
- createErrorOMResponse(omResponse, exception));
}
+ return omClientResponse;
}
+}
-}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeDeleteRequest.java \
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeDeleteRequest.java
index b117b1e..64de729 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeDeleteRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeDeleteRequest.java
@@ -22,17 +22,16 @@ import java.io.IOException;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
+import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.apache.hadoop.ozone.audit.AuditLogger;
import org.apache.hadoop.ozone.audit.OMAction;
import org.apache.hadoop.ozone.om.OMMetadataManager;
import org.apache.hadoop.ozone.om.OzoneManager;
import org.apache.hadoop.ozone.om.exceptions.OMException;
import org.apache.hadoop.ozone.om.helpers.OmVolumeArgs;
import org.apache.hadoop.ozone.om.OMMetrics;
-import org.apache.hadoop.ozone.om.response.volume.OMVolumeCreateResponse;
import org.apache.hadoop.ozone.security.acl.IAccessAuthorizer;
import org.apache.hadoop.ozone.security.acl.OzoneObj;
import org.apache.hadoop.ozone.om.response.OMClientResponse;
@@ -65,7 +64,8 @@ public class OMVolumeDeleteRequest extends OMVolumeRequest {
@Override
public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager,
- long transactionLogIndex) {
+ long transactionLogIndex,
+ OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper) {
DeleteVolumeRequest deleteVolumeRequest =
getOmRequest().getDeleteVolumeRequest();
@@ -80,9 +80,12 @@ public class OMVolumeDeleteRequest extends OMVolumeRequest {
OzoneManagerProtocolProtos.Type.DeleteVolume).setStatus(
OzoneManagerProtocolProtos.Status.OK).setSuccess(true);
- AuditLogger auditLogger = ozoneManager.getAuditLogger();
- OzoneManagerProtocolProtos.UserInfo userInfo = getOmRequest().getUserInfo();
-
+ OMMetadataManager omMetadataManager = ozoneManager.getMetadataManager();
+ boolean acquiredUserLock = false;
+ boolean acquiredVolumeLock = false;
+ IOException exception = null;
+ String owner = null;
+ OMClientResponse omClientResponse = null;
try {
// check Acl
if (ozoneManager.getAclsEnabled()) {
@@ -90,25 +93,12 @@ public class OMVolumeDeleteRequest extends OMVolumeRequest {
OzoneObj.StoreType.OZONE, IAccessAuthorizer.ACLType.DELETE, volume,
null, null);
}
- } catch (IOException ex) {
- LOG.error("Volume deletion failed for volume:{}", volume, ex);
- omMetrics.incNumVolumeDeleteFails();
- auditLog(auditLogger, buildAuditMessage(OMAction.DELETE_VOLUME,
- buildVolumeAuditMap(volume), ex, userInfo));
- return new OMVolumeCreateResponse(null, null,
- createErrorOMResponse(omResponse, ex));
- }
-
- OMMetadataManager omMetadataManager = ozoneManager.getMetadataManager();
- OmVolumeArgs omVolumeArgs = null;
- String owner = null;
- boolean acquiredUserLock = false;
- IOException exception = null;
- OzoneManagerProtocolProtos.VolumeList newVolumeList = null;
+ OmVolumeArgs omVolumeArgs = null;
+ OzoneManagerProtocolProtos.VolumeList newVolumeList = null;
- omMetadataManager.getLock().acquireLock(VOLUME_LOCK, volume);
- try {
+ acquiredVolumeLock = omMetadataManager.getLock().acquireLock(VOLUME_LOCK,
+ volume);
owner = getVolumeInfo(omMetadataManager, volume).getOwnerName();
acquiredUserLock = omMetadataManager.getLock().acquireLock(USER_LOCK,
owner);
@@ -134,34 +124,44 @@ public class OMVolumeDeleteRequest extends OMVolumeRequest {
new CacheKey<>(dbVolumeKey), new CacheValue<>(Optional.absent(),
transactionLogIndex));
+ omResponse.setDeleteVolumeResponse(
+ DeleteVolumeResponse.newBuilder().build());
+ omClientResponse = new OMVolumeDeleteResponse(volume, owner,
+ newVolumeList, omResponse.build());
+
} catch (IOException ex) {
exception = ex;
+ omClientResponse = new OMVolumeDeleteResponse(null, null, null,
+ createErrorOMResponse(omResponse, exception));
} finally {
+ if (omClientResponse != null) {
+ omClientResponse.setFlushFuture(
+ ozoneManagerDoubleBufferHelper.add(omClientResponse,
+ transactionLogIndex));
+ }
if (acquiredUserLock) {
omMetadataManager.getLock().releaseLock(USER_LOCK, owner);
}
- omMetadataManager.getLock().releaseLock(VOLUME_LOCK, volume);
+ if (acquiredVolumeLock) {
+ omMetadataManager.getLock().releaseLock(VOLUME_LOCK, volume);
+ }
}
// Performing audit logging outside of the lock.
- auditLog(auditLogger, buildAuditMessage(OMAction.DELETE_VOLUME,
- buildVolumeAuditMap(volume), exception, userInfo));
+ auditLog(ozoneManager.getAuditLogger(),
+ buildAuditMessage(OMAction.DELETE_VOLUME, buildVolumeAuditMap(volume),
+ exception, getOmRequest().getUserInfo()));
// return response after releasing lock.
if (exception == null) {
LOG.debug("Volume deleted for user:{} volume:{}", owner, volume);
omMetrics.decNumVolumes();
- omResponse.setDeleteVolumeResponse(
- DeleteVolumeResponse.newBuilder().build());
- return new OMVolumeDeleteResponse(volume, owner, newVolumeList,
- omResponse.build());
} else {
LOG.error("Volume deletion failed for user:{} volume:{}",
owner, volume, exception);
omMetrics.incNumVolumeDeleteFails();
- return new OMVolumeDeleteResponse(null, null, null,
- createErrorOMResponse(omResponse, exception));
}
+ return omClientResponse;
}
@@ -187,3 +187,4 @@ public class OMVolumeDeleteRequest extends OMVolumeRequest {
}
}
+
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeSetOwnerRequest.java \
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeSetOwnerRequest.java
index 413f55d..f675d8f 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeSetOwnerRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeSetOwnerRequest.java
@@ -21,6 +21,7 @@ package org.apache.hadoop.ozone.om.request.volume;
import java.io.IOException;
import java.util.Map;
+import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.base.Optional;
@@ -65,7 +66,8 @@ public class OMVolumeSetOwnerRequest extends OMVolumeRequest {
@Override
public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager,
- long transactionLogIndex) {
+ long transactionLogIndex,
+ OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper) {
SetVolumePropertyRequest setVolumePropertyRequest =
getOmRequest().getSetVolumePropertyRequest();
@@ -95,6 +97,13 @@ public class OMVolumeSetOwnerRequest extends OMVolumeRequest {
Map<String, String> auditMap = buildVolumeAuditMap(volume);
auditMap.put(OzoneConsts.OWNER, newOwner);
+
+ boolean acquiredUserLocks = false;
+ boolean acquiredVolumeLock = false;
+ IOException exception = null;
+ OMMetadataManager omMetadataManager = ozoneManager.getMetadataManager();
+ String oldOwner = null;
+ OMClientResponse omClientResponse = null;
try {
// check Acl
if (ozoneManager.getAclsEnabled()) {
@@ -102,29 +111,21 @@ public class OMVolumeSetOwnerRequest extends OMVolumeRequest {
OzoneObj.StoreType.OZONE, IAccessAuthorizer.ACLType.WRITE_ACL,
volume, null, null);
}
- } catch (IOException ex) {
- LOG.error("Changing volume ownership failed for user:{} volume:{}",
- newOwner, volume);
- omMetrics.incNumVolumeUpdateFails();
- auditLog(auditLogger, buildAuditMessage(OMAction.SET_OWNER, auditMap,
- ex, userInfo));
- return new OMVolumeSetOwnerResponse(null, null, null, null,
- createErrorOMResponse(omResponse, ex));
- }
- long maxUserVolumeCount = ozoneManager.getMaxUserVolumeCount();
- OMMetadataManager omMetadataManager = ozoneManager.getMetadataManager();
- String dbVolumeKey = omMetadataManager.getVolumeKey(volume);
- String oldOwner = null;
- OzoneManagerProtocolProtos.VolumeList oldOwnerVolumeList = null;
- OzoneManagerProtocolProtos.VolumeList newOwnerVolumeList = null;
- OmVolumeArgs omVolumeArgs = null;
- IOException exception = null;
- boolean acquiredUserLocks = false;
+ long maxUserVolumeCount = ozoneManager.getMaxUserVolumeCount();
+
+ String dbVolumeKey = omMetadataManager.getVolumeKey(volume);
+
+ OzoneManagerProtocolProtos.VolumeList oldOwnerVolumeList = null;
+ OzoneManagerProtocolProtos.VolumeList newOwnerVolumeList = null;
+ OmVolumeArgs omVolumeArgs = null;
+
+
+
+ acquiredVolumeLock = omMetadataManager.getLock().acquireLock(VOLUME_LOCK,
+ volume);
- omMetadataManager.getLock().acquireLock(VOLUME_LOCK, volume);
- try {
omVolumeArgs = omMetadataManager.getVolumeTable().get(dbVolumeKey);
if (omVolumeArgs == null) {
@@ -165,13 +166,28 @@ public class OMVolumeSetOwnerRequest extends OMVolumeRequest {
new CacheKey<>(dbVolumeKey),
new CacheValue<>(Optional.of(omVolumeArgs), transactionLogIndex));
+ omResponse.setSetVolumePropertyResponse(
+ SetVolumePropertyResponse.newBuilder().build());
+ omClientResponse = new OMVolumeSetOwnerResponse(oldOwner,
+ oldOwnerVolumeList, newOwnerVolumeList, omVolumeArgs,
+ omResponse.build());
+
} catch (IOException ex) {
exception = ex;
+ omClientResponse = new OMVolumeSetOwnerResponse(null, null, null, null,
+ createErrorOMResponse(omResponse, exception));
} finally {
+ if (omClientResponse != null) {
+ omClientResponse.setFlushFuture(
+ ozoneManagerDoubleBufferHelper.add(omClientResponse,
+ transactionLogIndex));
+ }
if (acquiredUserLocks) {
omMetadataManager.getLock().releaseMultiUserLock(newOwner, oldOwner);
}
- omMetadataManager.getLock().acquireLock(VOLUME_LOCK, volume);
+ if (acquiredVolumeLock) {
+ omMetadataManager.getLock().acquireLock(VOLUME_LOCK, volume);
+ }
}
// Performing audit logging outside of the lock.
@@ -182,16 +198,12 @@ public class OMVolumeSetOwnerRequest extends OMVolumeRequest {
if (exception == null) {
LOG.debug("Successfully changed Owner of Volume {} from {} -> {}", volume,
oldOwner, newOwner);
- omResponse.setSetVolumePropertyResponse(
- SetVolumePropertyResponse.newBuilder().build());
- return new OMVolumeSetOwnerResponse(oldOwner, oldOwnerVolumeList,
- newOwnerVolumeList, omVolumeArgs, omResponse.build());
} else {
LOG.error("Changing volume ownership failed for user:{} volume:{}",
newOwner, volume, exception);
omMetrics.incNumVolumeUpdateFails();
- return new OMVolumeSetOwnerResponse(null, null, null, null,
- createErrorOMResponse(omResponse, exception));
}
+ return omClientResponse;
}
}
+
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeSetQuotaRequest.java \
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeSetQuotaRequest.java
index f276b99..d705388 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeSetQuotaRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeSetQuotaRequest.java
@@ -23,6 +23,7 @@ import java.util.Map;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
+import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -66,7 +67,8 @@ public class OMVolumeSetQuotaRequest extends OMVolumeRequest {
@Override
public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager,
- long transactionLogIndex) {
+ long transactionLogIndex,
+ OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper) {
SetVolumePropertyRequest setVolumePropertyRequest =
getOmRequest().getSetVolumePropertyRequest();
@@ -98,6 +100,10 @@ public class OMVolumeSetQuotaRequest extends OMVolumeRequest {
auditMap.put(OzoneConsts.QUOTA,
String.valueOf(setVolumePropertyRequest.getQuotaInBytes()));
+ OMMetadataManager omMetadataManager = ozoneManager.getMetadataManager();
+ IOException exception = null;
+ boolean acquireVolumeLock = false;
+ OMClientResponse omClientResponse = null;
try {
// check Acl
if (ozoneManager.getAclsEnabled()) {
@@ -105,24 +111,11 @@ public class OMVolumeSetQuotaRequest extends OMVolumeRequest {
OzoneObj.StoreType.OZONE, IAccessAuthorizer.ACLType.WRITE, volume,
null, null);
}
- } catch (IOException ex) {
- LOG.error("Changing volume quota failed for volume:{} quota:{}", volume,
- setVolumePropertyRequest.getQuotaInBytes(), ex);
- omMetrics.incNumVolumeUpdateFails();
- auditLog(auditLogger, buildAuditMessage(OMAction.SET_QUOTA, auditMap,
- ex, userInfo));
- return new OMVolumeSetQuotaResponse(null,
- createErrorOMResponse(omResponse, ex));
- }
-
-
- OMMetadataManager omMetadataManager = ozoneManager.getMetadataManager();
- IOException exception = null;
- OmVolumeArgs omVolumeArgs = null;
+ OmVolumeArgs omVolumeArgs = null;
- omMetadataManager.getLock().acquireLock(VOLUME_LOCK, volume);
- try {
+ acquireVolumeLock = omMetadataManager.getLock().acquireLock(VOLUME_LOCK,
+ volume);
String dbVolumeKey = omMetadataManager.getVolumeKey(volume);
omVolumeArgs = omMetadataManager.getVolumeTable().get(dbVolumeKey);
@@ -138,10 +131,23 @@ public class OMVolumeSetQuotaRequest extends OMVolumeRequest {
new CacheKey<>(dbVolumeKey),
new CacheValue<>(Optional.of(omVolumeArgs), transactionLogIndex));
+ omResponse.setSetVolumePropertyResponse(
+ SetVolumePropertyResponse.newBuilder().build());
+ omClientResponse = new OMVolumeSetQuotaResponse(omVolumeArgs,
+ omResponse.build());
} catch (IOException ex) {
exception = ex;
+ omClientResponse = new OMVolumeSetQuotaResponse(null,
+ createErrorOMResponse(omResponse, exception));
} finally {
- omMetadataManager.getLock().releaseLock(VOLUME_LOCK, volume);
+ if (omClientResponse != null) {
+ omClientResponse.setFlushFuture(
+ ozoneManagerDoubleBufferHelper.add(omClientResponse,
+ transactionLogIndex));
+ }
+ if (acquireVolumeLock) {
+ omMetadataManager.getLock().releaseLock(VOLUME_LOCK, volume);
+ }
}
// Performing audit logging outside of the lock.
@@ -150,17 +156,17 @@ public class OMVolumeSetQuotaRequest extends OMVolumeRequest {
// return response after releasing lock.
if (exception == null) {
- omResponse.setSetVolumePropertyResponse(
- SetVolumePropertyResponse.newBuilder().build());
- return new OMVolumeSetQuotaResponse(omVolumeArgs, omResponse.build());
+ LOG.debug("Changing volume quota is successfully completed for volume: " +
+ "{} quota:{}", volume, setVolumePropertyRequest.getQuotaInBytes());
} else {
omMetrics.incNumVolumeUpdateFails();
LOG.error("Changing volume quota failed for volume:{} quota:{}", volume,
setVolumePropertyRequest.getQuotaInBytes(), exception);
- return new OMVolumeSetQuotaResponse(null,
- createErrorOMResponse(omResponse, exception));
}
+ return omClientResponse;
}
}
+
+
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/OMClientResponse.java \
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/OMClientResponse.java
index f09d906..74cd601 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/OMClientResponse.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/OMClientResponse.java
@@ -19,6 +19,7 @@
package org.apache.hadoop.ozone.om.response;
import java.io.IOException;
+import java.util.concurrent.CompletableFuture;
import com.google.common.base.Preconditions;
import org.apache.hadoop.ozone.om.OMMetadataManager;
@@ -32,6 +33,7 @@ import org.apache.hadoop.utils.db.BatchOperation;
public abstract class OMClientResponse {
private OMResponse omResponse;
+ private CompletableFuture<Void> flushFuture = null;
public OMClientResponse(OMResponse omResponse) {
Preconditions.checkNotNull(omResponse);
@@ -55,5 +57,13 @@ public abstract class OMClientResponse {
return omResponse;
}
+ public void setFlushFuture(CompletableFuture<Void> flushFuture) {
+ this.flushFuture = flushFuture;
+ }
+
+ public CompletableFuture<Void> getFlushFuture() {
+ return flushFuture;
+ }
+
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerHARequestHandlerImpl.java \
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerHARequestHandlerImpl.java
index 7bb7afc..cceff56 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerHARequestHandlerImpl.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerHARequestHandlerImpl.java
@@ -79,14 +79,7 @@ public class OzoneManagerHARequestHandlerImpl
OzoneManagerRatisUtils.createClientRequest(omRequest);
OMClientResponse omClientResponse =
omClientRequest.validateAndUpdateCache(getOzoneManager(),
- transactionLogIndex);
-
-
- // Add OMClient Response to double buffer.
- // Each OMClient Response should handle what needs to be done in error
- // case.
- ozoneManagerDoubleBuffer.add(omClientResponse, transactionLogIndex);
-
+ transactionLogIndex, ozoneManagerDoubleBuffer::add);
return omClientResponse.getOMResponse();
default:
// As all request types are not changed so we need to call handle
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerProtocolServerSideTranslatorPB.java \
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerProtocolServerSideTranslatorPB.java
index 56522b7..303c994 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerProtocolServerSideTranslatorPB.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/protocolPB/OzoneManagerProtocolServerSideTranslatorPB.java
@@ -22,6 +22,7 @@ import org.apache.hadoop.ozone.OmUtils;
import org.apache.hadoop.ozone.om.OzoneManager;
import org.apache.hadoop.ozone.om.exceptions.NotLeaderException;
import org.apache.hadoop.ozone.om.protocolPB.OzoneManagerProtocolPB;
+import org.apache.hadoop.ozone.om.ratis.OzoneManagerDoubleBuffer;
import org.apache.hadoop.ozone.om.ratis.OzoneManagerRatisServer;
import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerRatisUtils;
import org.apache.hadoop.ozone.om.request.OMClientRequest;
@@ -52,6 +53,7 @@ public class OzoneManagerProtocolServerSideTranslatorPB implements
private final RequestHandler handler;
private final boolean isRatisEnabled;
private final OzoneManager ozoneManager;
+ private final OzoneManagerDoubleBuffer ozoneManagerDoubleBuffer;
/**
* Constructs an instance of the server handler.
@@ -65,6 +67,12 @@ public class OzoneManagerProtocolServerSideTranslatorPB implements
handler = new OzoneManagerRequestHandler(impl);
this.omRatisServer = ratisServer;
this.isRatisEnabled = enableRatis;
+ this.ozoneManagerDoubleBuffer =
+ new OzoneManagerDoubleBuffer(ozoneManager.getMetadataManager(), (i) -> {
+ // Do nothing.
+ // For OM NON-HA code, there is no need to save transaction index.
+ // As we wait until the double buffer flushes DB to disk.
+ }, isRatisEnabled);
}
@@ -191,4 +199,10 @@ public class OzoneManagerProtocolServerSideTranslatorPB \
implements private OMResponse submitRequestDirectlyToOM(OMRequest request) {
return handler.handle(request);
}
+
+ public void stop() {
+ if (!isRatisEnabled) {
+ ozoneManagerDoubleBuffer.stop();
+ }
+ }
}
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestBucketRequest.java \
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestBucketRequest.java
new file mode 100644
index 0000000..1ddd753
--- /dev/null
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestBucketRequest.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.hadoop.ozone.om.request.bucket;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.rules.TemporaryFolder;
+import org.mockito.Mockito;
+
+import org.apache.hadoop.hdds.conf.OzoneConfiguration;
+import org.apache.hadoop.ozone.audit.AuditLogger;
+import org.apache.hadoop.ozone.audit.AuditMessage;
+import org.apache.hadoop.ozone.om.OMConfigKeys;
+import org.apache.hadoop.ozone.om.OMMetadataManager;
+import org.apache.hadoop.ozone.om.OMMetrics;
+import org.apache.hadoop.ozone.om.OmMetadataManagerImpl;
+import org.apache.hadoop.ozone.om.OzoneManager;
+import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
+
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+
+/**
+ * Base test class for Bucket request.
+ */
+@SuppressWarnings("visibilityModifier")
+public class TestBucketRequest {
+ @Rule
+ public TemporaryFolder folder = new TemporaryFolder();
+
+ protected OzoneManager ozoneManager;
+ protected OMMetrics omMetrics;
+ protected OMMetadataManager omMetadataManager;
+ protected AuditLogger auditLogger;
+
+ // Just setting ozoneManagerDoubleBuffer which does nothing.
+ protected OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper =
+ ((response, transactionIndex) -> {
+ return null;
+ });
+
+
+ @Before
+ public void setup() throws Exception {
+
+ ozoneManager = Mockito.mock(OzoneManager.class);
+ omMetrics = OMMetrics.create();
+ OzoneConfiguration ozoneConfiguration = new OzoneConfiguration();
+ ozoneConfiguration.set(OMConfigKeys.OZONE_OM_DB_DIRS,
+ folder.newFolder().getAbsolutePath());
+ omMetadataManager = new OmMetadataManagerImpl(ozoneConfiguration);
+ when(ozoneManager.getMetrics()).thenReturn(omMetrics);
+ when(ozoneManager.getMetadataManager()).thenReturn(omMetadataManager);
+ auditLogger = Mockito.mock(AuditLogger.class);
+ when(ozoneManager.getAuditLogger()).thenReturn(auditLogger);
+ Mockito.doNothing().when(auditLogger).logWrite(any(AuditMessage.class));
+ }
+
+ @After
+ public void stop() {
+ omMetrics.unRegister();
+ Mockito.framework().clearInlineMocks();
+ }
+}
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketCreateRequest.java \
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketCreateRequest.java
index 485ceee..1faed8c 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketCreateRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketCreateRequest.java
@@ -21,22 +21,11 @@ package org.apache.hadoop.ozone.om.request.bucket;
import java.util.UUID;
-import org.junit.After;
+
import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.mockito.Mockito;
-import org.apache.hadoop.hdds.conf.OzoneConfiguration;
-import org.apache.hadoop.ozone.audit.AuditLogger;
-import org.apache.hadoop.ozone.audit.AuditMessage;
-import org.apache.hadoop.ozone.om.OMConfigKeys;
import org.apache.hadoop.ozone.om.OMMetadataManager;
-import org.apache.hadoop.ozone.om.OMMetrics;
-import org.apache.hadoop.ozone.om.OmMetadataManagerImpl;
-import org.apache.hadoop.ozone.om.OzoneManager;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos
.OMRequest;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos
@@ -50,44 +39,10 @@ import org.apache.hadoop.ozone.om.response.OMClientResponse;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
import org.apache.hadoop.util.Time;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.when;
-
/**
* Tests OMBucketCreateRequest class, which handles CreateBucket request.
*/
-public class TestOMBucketCreateRequest {
-
- @Rule
- public TemporaryFolder folder = new TemporaryFolder();
-
- private OzoneManager ozoneManager;
- private OMMetrics omMetrics;
- private OMMetadataManager omMetadataManager;
- private AuditLogger auditLogger;
-
-
- @Before
- public void setup() throws Exception {
-
- ozoneManager = Mockito.mock(OzoneManager.class);
- omMetrics = OMMetrics.create();
- OzoneConfiguration ozoneConfiguration = new OzoneConfiguration();
- ozoneConfiguration.set(OMConfigKeys.OZONE_OM_DB_DIRS,
- folder.newFolder().getAbsolutePath());
- omMetadataManager = new OmMetadataManagerImpl(ozoneConfiguration);
- when(ozoneManager.getMetrics()).thenReturn(omMetrics);
- when(ozoneManager.getMetadataManager()).thenReturn(omMetadataManager);
- auditLogger = Mockito.mock(AuditLogger.class);
- when(ozoneManager.getAuditLogger()).thenReturn(auditLogger);
- Mockito.doNothing().when(auditLogger).logWrite(any(AuditMessage.class));
- }
-
- @After
- public void stop() {
- omMetrics.unRegister();
- }
-
+public class TestOMBucketCreateRequest extends TestBucketRequest {
@Test
public void testPreExecute() throws Exception {
@@ -129,7 +84,8 @@ public class TestOMBucketCreateRequest {
Assert.assertNull(omMetadataManager.getBucketTable().get(bucketKey));
OMClientResponse omClientResponse =
- omBucketCreateRequest.validateAndUpdateCache(ozoneManager, 1);
+ omBucketCreateRequest.validateAndUpdateCache(ozoneManager, 1,
+ ozoneManagerDoubleBufferHelper);
OMResponse omResponse = omClientResponse.getOMResponse();
Assert.assertNotNull(omResponse.getCreateBucketResponse());
@@ -155,7 +111,8 @@ public class TestOMBucketCreateRequest {
// Try create same bucket again
OMClientResponse omClientResponse =
- omBucketCreateRequest.validateAndUpdateCache(ozoneManager, 2);
+ omBucketCreateRequest.validateAndUpdateCache(ozoneManager, 2,
+ ozoneManagerDoubleBufferHelper);
OMResponse omResponse = omClientResponse.getOMResponse();
Assert.assertNotNull(omResponse.getCreateBucketResponse());
@@ -192,7 +149,8 @@ public class TestOMBucketCreateRequest {
OMClientResponse omClientResponse =
- omBucketCreateRequest.validateAndUpdateCache(ozoneManager, 1);
+ omBucketCreateRequest.validateAndUpdateCache(ozoneManager, 1,
+ ozoneManagerDoubleBufferHelper);
// As now after validateAndUpdateCache it should add entry to cache, get
// should return non null value.
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketDeleteRequest.java \
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketDeleteRequest.java
index 8e0b1a8..6b4bf7a 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketDeleteRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketDeleteRequest.java
@@ -21,22 +21,8 @@ package org.apache.hadoop.ozone.om.request.bucket;
import java.util.UUID;
-import org.junit.After;
import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.mockito.Mockito;
-
-import org.apache.hadoop.hdds.conf.OzoneConfiguration;
-import org.apache.hadoop.ozone.audit.AuditLogger;
-import org.apache.hadoop.ozone.audit.AuditMessage;
-import org.apache.hadoop.ozone.om.OMConfigKeys;
-import org.apache.hadoop.ozone.om.OMMetadataManager;
-import org.apache.hadoop.ozone.om.OMMetrics;
-import org.apache.hadoop.ozone.om.OmMetadataManagerImpl;
-import org.apache.hadoop.ozone.om.OzoneManager;
import org.apache.hadoop.ozone.om.request.TestOMRequestUtils;
import org.apache.hadoop.ozone.om.response.OMClientResponse;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
@@ -45,42 +31,10 @@ import \
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos import \
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos
.OMRequest;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.when;
-
/**
* Tests OMBucketDeleteRequest class which handles DeleteBucket request.
*/
-public class TestOMBucketDeleteRequest {
-
- @Rule
- public TemporaryFolder folder = new TemporaryFolder();
-
- private OzoneManager ozoneManager;
- private OMMetrics omMetrics;
- private OMMetadataManager omMetadataManager;
- private AuditLogger auditLogger;
-
-
- @Before
- public void setup() throws Exception {
- ozoneManager = Mockito.mock(OzoneManager.class);
- omMetrics = OMMetrics.create();
- OzoneConfiguration ozoneConfiguration = new OzoneConfiguration();
- ozoneConfiguration.set(OMConfigKeys.OZONE_OM_DB_DIRS,
- folder.newFolder().getAbsolutePath());
- omMetadataManager = new OmMetadataManagerImpl(ozoneConfiguration);
- when(ozoneManager.getMetrics()).thenReturn(omMetrics);
- when(ozoneManager.getMetadataManager()).thenReturn(omMetadataManager);
- auditLogger = Mockito.mock(AuditLogger.class);
- when(ozoneManager.getAuditLogger()).thenReturn(auditLogger);
- Mockito.doNothing().when(auditLogger).logWrite(any(AuditMessage.class));
- }
-
- @After
- public void stop() {
- omMetrics.unRegister();
- }
+public class TestOMBucketDeleteRequest extends TestBucketRequest {
@Test
public void testPreExecute() throws Exception {
@@ -111,7 +65,8 @@ public class TestOMBucketDeleteRequest {
TestOMRequestUtils.addVolumeAndBucketToDB(volumeName, bucketName,
omMetadataManager);
- omBucketDeleteRequest.validateAndUpdateCache(ozoneManager, 1);
+ omBucketDeleteRequest.validateAndUpdateCache(ozoneManager, 1,
+ ozoneManagerDoubleBufferHelper);
Assert.assertNull(omMetadataManager.getBucketTable().get(
omMetadataManager.getBucketKey(volumeName, bucketName)));
@@ -131,7 +86,8 @@ public class TestOMBucketDeleteRequest {
OMClientResponse omClientResponse =
- omBucketDeleteRequest.validateAndUpdateCache(ozoneManager, 1);
+ omBucketDeleteRequest.validateAndUpdateCache(ozoneManager, 1,
+ ozoneManagerDoubleBufferHelper);
Assert.assertNull(omMetadataManager.getBucketTable().get(
omMetadataManager.getBucketKey(volumeName, bucketName)));
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketSetPropertyRequest.java \
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketSetPropertyRequest.java
index 2f9612a..7df0667 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketSetPropertyRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketSetPropertyRequest.java
@@ -21,22 +21,9 @@ package org.apache.hadoop.ozone.om.request.bucket;
import java.util.UUID;
-import org.junit.After;
import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.mockito.Mockito;
-
-import org.apache.hadoop.hdds.conf.OzoneConfiguration;
-import org.apache.hadoop.ozone.audit.AuditLogger;
-import org.apache.hadoop.ozone.audit.AuditMessage;
-import org.apache.hadoop.ozone.om.OMConfigKeys;
-import org.apache.hadoop.ozone.om.OMMetadataManager;
-import org.apache.hadoop.ozone.om.OMMetrics;
-import org.apache.hadoop.ozone.om.OmMetadataManagerImpl;
-import org.apache.hadoop.ozone.om.OzoneManager;
+
import org.apache.hadoop.ozone.om.request.TestOMRequestUtils;
import org.apache.hadoop.ozone.om.response.OMClientResponse;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
@@ -47,42 +34,11 @@ import \
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos import \
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos
.SetBucketPropertyRequest;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.when;
-
/**
* Tests OMBucketSetPropertyRequest class which handles OMSetBucketProperty
* request.
*/
-public class TestOMBucketSetPropertyRequest {
-
- @Rule
- public TemporaryFolder folder = new TemporaryFolder();
-
- private OzoneManager ozoneManager;
- private OMMetrics omMetrics;
- private OMMetadataManager omMetadataManager;
- private AuditLogger auditLogger;
-
- @Before
- public void setup() throws Exception {
- ozoneManager = Mockito.mock(OzoneManager.class);
- omMetrics = OMMetrics.create();
- OzoneConfiguration ozoneConfiguration = new OzoneConfiguration();
- ozoneConfiguration.set(OMConfigKeys.OZONE_OM_DB_DIRS,
- folder.newFolder().getAbsolutePath());
- omMetadataManager = new OmMetadataManagerImpl(ozoneConfiguration);
- when(ozoneManager.getMetrics()).thenReturn(omMetrics);
- when(ozoneManager.getMetadataManager()).thenReturn(omMetadataManager);
- auditLogger = Mockito.mock(AuditLogger.class);
- when(ozoneManager.getAuditLogger()).thenReturn(auditLogger);
- Mockito.doNothing().when(auditLogger).logWrite(any(AuditMessage.class));
- }
-
- @After
- public void stop() {
- omMetrics.unRegister();
- }
+public class TestOMBucketSetPropertyRequest extends TestBucketRequest {
@Test
public void testPreExecute() throws Exception {
@@ -119,7 +75,8 @@ public class TestOMBucketSetPropertyRequest {
new OMBucketSetPropertyRequest(omRequest);
OMClientResponse omClientResponse =
- omBucketSetPropertyRequest.validateAndUpdateCache(ozoneManager, 1);
+ omBucketSetPropertyRequest.validateAndUpdateCache(ozoneManager, 1,
+ ozoneManagerDoubleBufferHelper);
Assert.assertEquals(true,
omMetadataManager.getBucketTable().get(
@@ -146,7 +103,8 @@ public class TestOMBucketSetPropertyRequest {
new OMBucketSetPropertyRequest(omRequest);
OMClientResponse omClientResponse =
- omBucketSetPropertyRequest.validateAndUpdateCache(ozoneManager, 1);
+ omBucketSetPropertyRequest.validateAndUpdateCache(ozoneManager, 1,
+ ozoneManagerDoubleBufferHelper);
Assert.assertEquals(OzoneManagerProtocolProtos.Status.BUCKET_NOT_FOUND,
omClientResponse.getOMResponse().getStatus());
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMDirectoryCreateRequest.java \
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMDirectoryCreateRequest.java
index 20cb96e..93638ae 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMDirectoryCreateRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMDirectoryCreateRequest.java
@@ -23,6 +23,7 @@ import java.util.UUID;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
import org.apache.hadoop.ozone.om.helpers.OzoneFSUtils;
+import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
import org.apache.hadoop.ozone.om.response.OMClientResponse;
import org.apache.hadoop.utils.db.cache.CacheKey;
import org.junit.After;
@@ -65,7 +66,11 @@ public class TestOMDirectoryCreateRequest {
private OMMetrics omMetrics;
private OMMetadataManager omMetadataManager;
private AuditLogger auditLogger;
-
+ // Just setting ozoneManagerDoubleBuffer which does nothing.
+ private OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper =
+ ((response, transactionIndex) -> {
+ return null;
+ });
@Before
public void setup() throws Exception {
@@ -136,7 +141,8 @@ public class TestOMDirectoryCreateRequest {
omDirectoryCreateRequest = new OMDirectoryCreateRequest(modifiedOmRequest);
OMClientResponse omClientResponse =
- omDirectoryCreateRequest.validateAndUpdateCache(ozoneManager, 100L);
+ omDirectoryCreateRequest.validateAndUpdateCache(ozoneManager, 100L,
+ ozoneManagerDoubleBufferHelper);
Assert.assertTrue(omClientResponse.getOMResponse().getStatus()
== OzoneManagerProtocolProtos.Status.OK);
@@ -167,7 +173,8 @@ public class TestOMDirectoryCreateRequest {
omDirectoryCreateRequest = new OMDirectoryCreateRequest(modifiedOmRequest);
OMClientResponse omClientResponse =
- omDirectoryCreateRequest.validateAndUpdateCache(ozoneManager, 100L);
+ omDirectoryCreateRequest.validateAndUpdateCache(ozoneManager, 100L,
+ ozoneManagerDoubleBufferHelper);
Assert.assertTrue(omClientResponse.getOMResponse().getStatus()
== OzoneManagerProtocolProtos.Status.BUCKET_NOT_FOUND);
@@ -207,7 +214,8 @@ public class TestOMDirectoryCreateRequest {
omDirectoryCreateRequest = new OMDirectoryCreateRequest(modifiedOmRequest);
OMClientResponse omClientResponse =
- omDirectoryCreateRequest.validateAndUpdateCache(ozoneManager, 100L);
+ omDirectoryCreateRequest.validateAndUpdateCache(ozoneManager, 100L,
+ ozoneManagerDoubleBufferHelper);
Assert.assertTrue(omClientResponse.getOMResponse().getStatus()
== OzoneManagerProtocolProtos.Status.OK);
@@ -251,7 +259,8 @@ public class TestOMDirectoryCreateRequest {
omDirectoryCreateRequest = new OMDirectoryCreateRequest(modifiedOmRequest);
OMClientResponse omClientResponse =
- omDirectoryCreateRequest.validateAndUpdateCache(ozoneManager, 100L);
+ omDirectoryCreateRequest.validateAndUpdateCache(ozoneManager, 100L,
+ ozoneManagerDoubleBufferHelper);
Assert.assertTrue(omClientResponse.getOMResponse().getStatus()
== OzoneManagerProtocolProtos.Status.OK);
@@ -295,7 +304,8 @@ public class TestOMDirectoryCreateRequest {
omDirectoryCreateRequest = new OMDirectoryCreateRequest(modifiedOmRequest);
OMClientResponse omClientResponse =
- omDirectoryCreateRequest.validateAndUpdateCache(ozoneManager, 100L);
+ omDirectoryCreateRequest.validateAndUpdateCache(ozoneManager, 100L,
+ ozoneManagerDoubleBufferHelper);
Assert.assertTrue(omClientResponse.getOMResponse().getStatus()
== OzoneManagerProtocolProtos.Status.FILE_ALREADY_EXISTS);
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMFileCreateRequest.java \
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMFileCreateRequest.java
index f17216c..9639af0 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMFileCreateRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMFileCreateRequest.java
@@ -140,7 +140,8 @@ public class TestOMFileCreateRequest extends TestOMKeyRequest {
omFileCreateRequest = new OMFileCreateRequest(modifiedOmRequest);
OMClientResponse omFileCreateResponse =
- omFileCreateRequest.validateAndUpdateCache(ozoneManager, 100L);
+ omFileCreateRequest.validateAndUpdateCache(ozoneManager, 100L,
+ ozoneManagerDoubleBufferHelper);
Assert.assertEquals(OzoneManagerProtocolProtos.Status.OK,
omFileCreateResponse.getOMResponse().getStatus());
@@ -193,7 +194,8 @@ public class TestOMFileCreateRequest extends TestOMKeyRequest {
OMClientResponse omFileCreateResponse =
- omFileCreateRequest.validateAndUpdateCache(ozoneManager, 100L);
+ omFileCreateRequest.validateAndUpdateCache(ozoneManager, 100L,
+ ozoneManagerDoubleBufferHelper);
Assert.assertEquals(BUCKET_NOT_FOUND,
omFileCreateResponse.getOMResponse().getStatus());
@@ -299,7 +301,8 @@ public class TestOMFileCreateRequest extends TestOMKeyRequest {
omFileCreateRequest = new OMFileCreateRequest(modifiedOmRequest);
OMClientResponse omFileCreateResponse =
- omFileCreateRequest.validateAndUpdateCache(ozoneManager, 100L);
+ omFileCreateRequest.validateAndUpdateCache(ozoneManager, 100L,
+ ozoneManagerDoubleBufferHelper);
if (fail) {
Assert.assertTrue(omFileCreateResponse.getOMResponse()
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMAllocateBlockRequest.java \
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMAllocateBlockRequest.java
index 96dfe6e..be3e4a7 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMAllocateBlockRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMAllocateBlockRequest.java
@@ -80,7 +80,8 @@ public class TestOMAllocateBlockRequest extends TestOMKeyRequest {
Assert.assertTrue(omKeyLocationInfo.size() == 0);
OMClientResponse omAllocateBlockResponse =
- omAllocateBlockRequest.validateAndUpdateCache(ozoneManager, 100L);
+ omAllocateBlockRequest.validateAndUpdateCache(ozoneManager, 100L,
+ ozoneManagerDoubleBufferHelper);
Assert.assertEquals(OzoneManagerProtocolProtos.Status.OK,
omAllocateBlockResponse.getOMResponse().getStatus());
@@ -126,7 +127,8 @@ public class TestOMAllocateBlockRequest extends TestOMKeyRequest \
{
OMClientResponse omAllocateBlockResponse =
- omAllocateBlockRequest.validateAndUpdateCache(ozoneManager, 100L);
+ omAllocateBlockRequest.validateAndUpdateCache(ozoneManager, 100L,
+ ozoneManagerDoubleBufferHelper);
Assert.assertTrue(omAllocateBlockResponse.getOMResponse().getStatus()
== OzoneManagerProtocolProtos.Status.VOLUME_NOT_FOUND);
@@ -147,7 +149,8 @@ public class TestOMAllocateBlockRequest extends TestOMKeyRequest \
{
TestOMRequestUtils.addVolumeToDB(volumeName, "ozone", omMetadataManager);
OMClientResponse omAllocateBlockResponse =
- omAllocateBlockRequest.validateAndUpdateCache(ozoneManager, 100L);
+ omAllocateBlockRequest.validateAndUpdateCache(ozoneManager, 100L,
+ ozoneManagerDoubleBufferHelper);
Assert.assertTrue(omAllocateBlockResponse.getOMResponse().getStatus()
== OzoneManagerProtocolProtos.Status.BUCKET_NOT_FOUND);
@@ -169,7 +172,8 @@ public class TestOMAllocateBlockRequest extends TestOMKeyRequest \
{
OMClientResponse omAllocateBlockResponse =
- omAllocateBlockRequest.validateAndUpdateCache(ozoneManager, 100L);
+ omAllocateBlockRequest.validateAndUpdateCache(ozoneManager, 100L,
+ ozoneManagerDoubleBufferHelper);
Assert.assertTrue(omAllocateBlockResponse.getOMResponse().getStatus()
== OzoneManagerProtocolProtos.Status.KEY_NOT_FOUND);
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCommitRequest.java \
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCommitRequest.java
index e7cb3ef..9bfac6c 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCommitRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCommitRequest.java
@@ -81,7 +81,7 @@ public class TestOMKeyCommitRequest extends TestOMKeyRequest {
OMClientResponse omClientResponse =
omKeyCommitRequest.validateAndUpdateCache(ozoneManager,
- 100L);
+ 100L, ozoneManagerDoubleBufferHelper);
Assert.assertEquals(OzoneManagerProtocolProtos.Status.OK,
omClientResponse.getOMResponse().getStatus());
@@ -134,7 +134,7 @@ public class TestOMKeyCommitRequest extends TestOMKeyRequest {
OMClientResponse omClientResponse =
omKeyCommitRequest.validateAndUpdateCache(ozoneManager,
- 100L);
+ 100L, ozoneManagerDoubleBufferHelper);
Assert.assertEquals(OzoneManagerProtocolProtos.Status.VOLUME_NOT_FOUND,
omClientResponse.getOMResponse().getStatus());
@@ -166,7 +166,7 @@ public class TestOMKeyCommitRequest extends TestOMKeyRequest {
OMClientResponse omClientResponse =
omKeyCommitRequest.validateAndUpdateCache(ozoneManager,
- 100L);
+ 100L, ozoneManagerDoubleBufferHelper);
Assert.assertEquals(OzoneManagerProtocolProtos.Status.BUCKET_NOT_FOUND,
omClientResponse.getOMResponse().getStatus());
@@ -200,7 +200,7 @@ public class TestOMKeyCommitRequest extends TestOMKeyRequest {
OMClientResponse omClientResponse =
omKeyCommitRequest.validateAndUpdateCache(ozoneManager,
- 100L);
+ 100L, ozoneManagerDoubleBufferHelper);
Assert.assertEquals(OzoneManagerProtocolProtos.Status.KEY_NOT_FOUND,
omClientResponse.getOMResponse().getStatus());
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java \
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java
index c49b32a..340cc04 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java
@@ -76,7 +76,8 @@ public class TestOMKeyCreateRequest extends TestOMKeyRequest {
Assert.assertNull(omKeyInfo);
OMClientResponse omKeyCreateResponse =
- omKeyCreateRequest.validateAndUpdateCache(ozoneManager, 100L);
+ omKeyCreateRequest.validateAndUpdateCache(ozoneManager, 100L,
+ ozoneManagerDoubleBufferHelper);
Assert.assertEquals(OzoneManagerProtocolProtos.Status.OK,
omKeyCreateResponse.getOMResponse().getStatus());
@@ -139,7 +140,8 @@ public class TestOMKeyCreateRequest extends TestOMKeyRequest {
Assert.assertNull(omKeyInfo);
OMClientResponse omKeyCreateResponse =
- omKeyCreateRequest.validateAndUpdateCache(ozoneManager, 100L);
+ omKeyCreateRequest.validateAndUpdateCache(ozoneManager, 100L,
+ ozoneManagerDoubleBufferHelper);
Assert.assertEquals(
OzoneManagerProtocolProtos.Status.NO_SUCH_MULTIPART_UPLOAD_ERROR,
@@ -176,7 +178,8 @@ public class TestOMKeyCreateRequest extends TestOMKeyRequest {
Assert.assertNull(omKeyInfo);
OMClientResponse omKeyCreateResponse =
- omKeyCreateRequest.validateAndUpdateCache(ozoneManager, 100L);
+ omKeyCreateRequest.validateAndUpdateCache(ozoneManager, 100L,
+ ozoneManagerDoubleBufferHelper);
Assert.assertEquals(OzoneManagerProtocolProtos.Status.VOLUME_NOT_FOUND,
omKeyCreateResponse.getOMResponse().getStatus());
@@ -215,7 +218,8 @@ public class TestOMKeyCreateRequest extends TestOMKeyRequest {
Assert.assertNull(omKeyInfo);
OMClientResponse omKeyCreateResponse =
- omKeyCreateRequest.validateAndUpdateCache(ozoneManager, 100L);
+ omKeyCreateRequest.validateAndUpdateCache(ozoneManager, 100L,
+ ozoneManagerDoubleBufferHelper);
Assert.assertEquals(OzoneManagerProtocolProtos.Status.BUCKET_NOT_FOUND,
omKeyCreateResponse.getOMResponse().getStatus());
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyDeleteRequest.java \
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyDeleteRequest.java
index 29535b0..e95ecd5 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyDeleteRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyDeleteRequest.java
@@ -71,7 +71,7 @@ public class TestOMKeyDeleteRequest extends TestOMKeyRequest {
OMClientResponse omClientResponse =
omKeyDeleteRequest.validateAndUpdateCache(ozoneManager,
- 100L);
+ 100L, ozoneManagerDoubleBufferHelper);
Assert.assertEquals(OzoneManagerProtocolProtos.Status.OK,
omClientResponse.getOMResponse().getStatus());
@@ -101,7 +101,7 @@ public class TestOMKeyDeleteRequest extends TestOMKeyRequest {
OMClientResponse omClientResponse =
omKeyDeleteRequest.validateAndUpdateCache(ozoneManager,
- 100L);
+ 100L, ozoneManagerDoubleBufferHelper);
Assert.assertEquals(OzoneManagerProtocolProtos.Status.KEY_NOT_FOUND,
omClientResponse.getOMResponse().getStatus());
@@ -121,7 +121,7 @@ public class TestOMKeyDeleteRequest extends TestOMKeyRequest {
OMClientResponse omClientResponse =
omKeyDeleteRequest.validateAndUpdateCache(ozoneManager,
- 100L);
+ 100L, ozoneManagerDoubleBufferHelper);
Assert.assertEquals(OzoneManagerProtocolProtos.Status.KEY_NOT_FOUND,
omClientResponse.getOMResponse().getStatus());
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyPurgeRequestAndResponse.java \
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyPurgeRequestAndResponse.java
index 5737307..fbc3a5c 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyPurgeRequestAndResponse.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyPurgeRequestAndResponse.java
@@ -107,7 +107,8 @@ public class TestOMKeyPurgeRequestAndResponse extends \
TestOMKeyRequest { new OMKeyPurgeRequest(preExecutedRequest);
OMClientResponse omClientResponse =
- omKeyPurgeRequest.validateAndUpdateCache(ozoneManager, 100L);
+ omKeyPurgeRequest.validateAndUpdateCache(ozoneManager, 100L,
+ ozoneManagerDoubleBufferHelper);
OMResponse omResponse = OMResponse.newBuilder()
.setPurgeKeysResponse(PurgeKeysResponse.getDefaultInstance())
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRenameRequest.java \
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRenameRequest.java
index 1cffd1b..864ba06 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRenameRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRenameRequest.java
@@ -56,7 +56,8 @@ public class TestOMKeyRenameRequest extends TestOMKeyRequest {
new OMKeyRenameRequest(modifiedOmRequest);
OMClientResponse omKeyRenameResponse =
- omKeyRenameRequest.validateAndUpdateCache(ozoneManager, 100L);
+ omKeyRenameRequest.validateAndUpdateCache(ozoneManager, 100L,
+ ozoneManagerDoubleBufferHelper);
Assert.assertEquals(OzoneManagerProtocolProtos.Status.OK,
omKeyRenameResponse.getOMResponse().getStatus());
@@ -103,7 +104,8 @@ public class TestOMKeyRenameRequest extends TestOMKeyRequest {
new OMKeyRenameRequest(modifiedOmRequest);
OMClientResponse omKeyRenameResponse =
- omKeyRenameRequest.validateAndUpdateCache(ozoneManager, 100L);
+ omKeyRenameRequest.validateAndUpdateCache(ozoneManager, 100L,
+ ozoneManagerDoubleBufferHelper);
Assert.assertEquals(OzoneManagerProtocolProtos.Status.KEY_NOT_FOUND,
omKeyRenameResponse.getOMResponse().getStatus());
@@ -125,7 +127,8 @@ public class TestOMKeyRenameRequest extends TestOMKeyRequest {
new OMKeyRenameRequest(modifiedOmRequest);
OMClientResponse omKeyRenameResponse =
- omKeyRenameRequest.validateAndUpdateCache(ozoneManager, 100L);
+ omKeyRenameRequest.validateAndUpdateCache(ozoneManager, 100L,
+ ozoneManagerDoubleBufferHelper);
Assert.assertEquals(OzoneManagerProtocolProtos.Status.KEY_NOT_FOUND,
omKeyRenameResponse.getOMResponse().getStatus());
@@ -149,7 +152,8 @@ public class TestOMKeyRenameRequest extends TestOMKeyRequest {
new OMKeyRenameRequest(modifiedOmRequest);
OMClientResponse omKeyRenameResponse =
- omKeyRenameRequest.validateAndUpdateCache(ozoneManager, 100L);
+ omKeyRenameRequest.validateAndUpdateCache(ozoneManager, 100L,
+ ozoneManagerDoubleBufferHelper);
Assert.assertEquals(OzoneManagerProtocolProtos.Status.INVALID_KEY_NAME,
omKeyRenameResponse.getOMResponse().getStatus());
@@ -174,7 +178,8 @@ public class TestOMKeyRenameRequest extends TestOMKeyRequest {
new OMKeyRenameRequest(modifiedOmRequest);
OMClientResponse omKeyRenameResponse =
- omKeyRenameRequest.validateAndUpdateCache(ozoneManager, 100L);
+ omKeyRenameRequest.validateAndUpdateCache(ozoneManager, 100L,
+ ozoneManagerDoubleBufferHelper);
Assert.assertEquals(OzoneManagerProtocolProtos.Status.INVALID_KEY_NAME,
omKeyRenameResponse.getOMResponse().getStatus());
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRequest.java \
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRequest.java
index c2df36b..92d6cdb 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRequest.java
@@ -22,6 +22,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
+import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
@@ -82,6 +83,12 @@ public class TestOMKeyRequest {
protected long scmBlockSize = 1000L;
protected long dataSize;
+ // Just setting ozoneManagerDoubleBuffer which does nothing.
+ protected OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper =
+ ((response, transactionIndex) -> {
+ return null;
+ });
+
@Before
public void setup() throws Exception {
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/bucket/TestS3BucketCreateRequest.java \
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/bucket/TestS3BucketCreateRequest.java
index d5bc9eb..cd42ec6 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/bucket/TestS3BucketCreateRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/bucket/TestS3BucketCreateRequest.java
@@ -22,24 +22,11 @@ package org.apache.hadoop.ozone.om.request.s3.bucket;
import java.util.UUID;
import org.apache.commons.lang.RandomStringUtils;
-import org.junit.After;
import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.mockito.Mockito;
import org.apache.hadoop.ozone.om.exceptions.OMException;
import org.apache.hadoop.test.GenericTestUtils;
-import org.apache.hadoop.hdds.conf.OzoneConfiguration;
-import org.apache.hadoop.ozone.audit.AuditLogger;
-import org.apache.hadoop.ozone.audit.AuditMessage;
-import org.apache.hadoop.ozone.om.OMConfigKeys;
-import org.apache.hadoop.ozone.om.OMMetadataManager;
-import org.apache.hadoop.ozone.om.OMMetrics;
-import org.apache.hadoop.ozone.om.OmMetadataManagerImpl;
-import org.apache.hadoop.ozone.om.OzoneManager;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos
.OMRequest;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos
@@ -49,45 +36,11 @@ import org.apache.hadoop.ozone.om.response.OMClientResponse;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
import static org.junit.Assert.fail;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.when;
/**
* Tests S3BucketCreateRequest class, which handles S3 CreateBucket request.
*/
-public class TestS3BucketCreateRequest {
-
- @Rule
- public TemporaryFolder folder = new TemporaryFolder();
-
- private OzoneManager ozoneManager;
- private OMMetrics omMetrics;
- private OMMetadataManager omMetadataManager;
- private AuditLogger auditLogger;
-
-
- @Before
- public void setup() throws Exception {
-
- ozoneManager = Mockito.mock(OzoneManager.class);
- omMetrics = OMMetrics.create();
- OzoneConfiguration ozoneConfiguration = new OzoneConfiguration();
- ozoneConfiguration.set(OMConfigKeys.OZONE_OM_DB_DIRS,
- folder.newFolder().getAbsolutePath());
- omMetadataManager = new OmMetadataManagerImpl(ozoneConfiguration);
- when(ozoneManager.getMetrics()).thenReturn(omMetrics);
- when(ozoneManager.getMetadataManager()).thenReturn(omMetadataManager);
- auditLogger = Mockito.mock(AuditLogger.class);
- when(ozoneManager.getAuditLogger()).thenReturn(auditLogger);
- Mockito.doNothing().when(auditLogger).logWrite(any(AuditMessage.class));
- }
-
- @After
- public void stop() {
- omMetrics.unRegister();
- Mockito.framework().clearInlineMocks();
- }
-
+public class TestS3BucketCreateRequest extends TestS3BucketRequest {
@Test
public void testPreExecute() throws Exception {
@@ -152,7 +105,8 @@ public class TestS3BucketCreateRequest {
// Try create same bucket again
OMClientResponse omClientResponse =
- s3BucketCreateRequest.validateAndUpdateCache(ozoneManager, 2);
+ s3BucketCreateRequest.validateAndUpdateCache(ozoneManager, 2,
+ ozoneManagerDoubleBufferHelper);
OMResponse omResponse = omClientResponse.getOMResponse();
Assert.assertNotNull(omResponse.getCreateBucketResponse());
@@ -177,7 +131,8 @@ public class TestS3BucketCreateRequest {
// Try create same bucket again
OMClientResponse omClientResponse =
- s3BucketCreateRequest.validateAndUpdateCache(ozoneManager, 2);
+ s3BucketCreateRequest.validateAndUpdateCache(ozoneManager, 2,
+ ozoneManagerDoubleBufferHelper);
OMResponse omResponse = omClientResponse.getOMResponse();
Assert.assertNotNull(omResponse.getCreateBucketResponse());
@@ -213,7 +168,8 @@ public class TestS3BucketCreateRequest {
OMClientResponse omClientResponse =
- s3BucketCreateRequest.validateAndUpdateCache(ozoneManager, 1);
+ s3BucketCreateRequest.validateAndUpdateCache(ozoneManager, 1,
+ ozoneManagerDoubleBufferHelper);
// As now after validateAndUpdateCache it should add entry to cache, get
// should return non null value.
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/bucket/TestS3BucketDeleteRequest.java \
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/bucket/TestS3BucketDeleteRequest.java
index 7b9416e..f542268 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/bucket/TestS3BucketDeleteRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/bucket/TestS3BucketDeleteRequest.java
@@ -22,22 +22,9 @@ package org.apache.hadoop.ozone.om.request.s3.bucket;
import java.util.UUID;
import org.apache.commons.lang.RandomStringUtils;
-import org.junit.After;
import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.mockito.Mockito;
-
-import org.apache.hadoop.hdds.conf.OzoneConfiguration;
-import org.apache.hadoop.ozone.audit.AuditLogger;
-import org.apache.hadoop.ozone.audit.AuditMessage;
-import org.apache.hadoop.ozone.om.OMConfigKeys;
-import org.apache.hadoop.ozone.om.OMMetadataManager;
-import org.apache.hadoop.ozone.om.OMMetrics;
-import org.apache.hadoop.ozone.om.OmMetadataManagerImpl;
-import org.apache.hadoop.ozone.om.OzoneManager;
+
import org.apache.hadoop.ozone.om.exceptions.OMException;
import org.apache.hadoop.ozone.om.request.TestOMRequestUtils;
import org.apache.hadoop.ozone.om.response.OMClientResponse;
@@ -47,43 +34,11 @@ import \
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos import \
org.apache.hadoop.test.GenericTestUtils;
import static org.junit.Assert.fail;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.when;
/**
* Tests S3BucketDelete Request.
*/
-public class TestS3BucketDeleteRequest {
- @Rule
- public TemporaryFolder folder = new TemporaryFolder();
-
- private OzoneManager ozoneManager;
- private OMMetrics omMetrics;
- private OMMetadataManager omMetadataManager;
- private AuditLogger auditLogger;
-
-
- @Before
- public void setup() throws Exception {
-
- ozoneManager = Mockito.mock(OzoneManager.class);
- omMetrics = OMMetrics.create();
- OzoneConfiguration ozoneConfiguration = new OzoneConfiguration();
- ozoneConfiguration.set(OMConfigKeys.OZONE_OM_DB_DIRS,
- folder.newFolder().getAbsolutePath());
- omMetadataManager = new OmMetadataManagerImpl(ozoneConfiguration);
- when(ozoneManager.getMetrics()).thenReturn(omMetrics);
- when(ozoneManager.getMetadataManager()).thenReturn(omMetadataManager);
- auditLogger = Mockito.mock(AuditLogger.class);
- when(ozoneManager.getAuditLogger()).thenReturn(auditLogger);
- Mockito.doNothing().when(auditLogger).logWrite(any(AuditMessage.class));
- }
-
- @After
- public void stop() {
- omMetrics.unRegister();
- Mockito.framework().clearInlineMocks();
- }
+public class TestS3BucketDeleteRequest extends TestS3BucketRequest {
@Test
public void testPreExecute() throws Exception {
@@ -104,7 +59,8 @@ public class TestS3BucketDeleteRequest {
new S3BucketDeleteRequest(omRequest);
OMClientResponse s3BucketDeleteResponse =
- s3BucketDeleteRequest.validateAndUpdateCache(ozoneManager, 1L);
+ s3BucketDeleteRequest.validateAndUpdateCache(ozoneManager, 1L,
+ ozoneManagerDoubleBufferHelper);
Assert.assertEquals(OzoneManagerProtocolProtos.Status.OK,
s3BucketDeleteResponse.getOMResponse().getStatus());
@@ -120,7 +76,8 @@ public class TestS3BucketDeleteRequest {
new S3BucketDeleteRequest(omRequest);
OMClientResponse s3BucketDeleteResponse =
- s3BucketDeleteRequest.validateAndUpdateCache(ozoneManager, 1L);
+ s3BucketDeleteRequest.validateAndUpdateCache(ozoneManager, 1L,
+ ozoneManagerDoubleBufferHelper);
Assert.assertEquals(OzoneManagerProtocolProtos.Status.S3_BUCKET_NOT_FOUND,
s3BucketDeleteResponse.getOMResponse().getStatus());
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/bucket/TestS3BucketRequest.java \
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/bucket/TestS3BucketRequest.java
new file mode 100644
index 0000000..747efb0
--- /dev/null
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/bucket/TestS3BucketRequest.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.hadoop.ozone.om.request.s3.bucket;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.rules.TemporaryFolder;
+import org.mockito.Mockito;
+
+import org.apache.hadoop.hdds.conf.OzoneConfiguration;
+import org.apache.hadoop.ozone.audit.AuditLogger;
+import org.apache.hadoop.ozone.audit.AuditMessage;
+import org.apache.hadoop.ozone.om.OMConfigKeys;
+import org.apache.hadoop.ozone.om.OMMetadataManager;
+import org.apache.hadoop.ozone.om.OMMetrics;
+import org.apache.hadoop.ozone.om.OmMetadataManagerImpl;
+import org.apache.hadoop.ozone.om.OzoneManager;
+import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+
+/**
+ * Base test class for S3 Bucket request.
+ */
+@SuppressWarnings("visibilityModifier")
+public class TestS3BucketRequest {
+ @Rule
+ public TemporaryFolder folder = new TemporaryFolder();
+
+ protected OzoneManager ozoneManager;
+ protected OMMetrics omMetrics;
+ protected OMMetadataManager omMetadataManager;
+ protected AuditLogger auditLogger;
+
+ // Just setting ozoneManagerDoubleBuffer which does nothing.
+ protected OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper =
+ ((response, transactionIndex) -> {
+ return null;
+ });
+
+
+ @Before
+ public void setup() throws Exception {
+
+ ozoneManager = Mockito.mock(OzoneManager.class);
+ omMetrics = OMMetrics.create();
+ OzoneConfiguration ozoneConfiguration = new OzoneConfiguration();
+ ozoneConfiguration.set(OMConfigKeys.OZONE_OM_DB_DIRS,
+ folder.newFolder().getAbsolutePath());
+ omMetadataManager = new OmMetadataManagerImpl(ozoneConfiguration);
+ when(ozoneManager.getMetrics()).thenReturn(omMetrics);
+ when(ozoneManager.getMetadataManager()).thenReturn(omMetadataManager);
+ auditLogger = Mockito.mock(AuditLogger.class);
+ when(ozoneManager.getAuditLogger()).thenReturn(auditLogger);
+ Mockito.doNothing().when(auditLogger).logWrite(any(AuditMessage.class));
+ }
+
+ @After
+ public void stop() {
+ omMetrics.unRegister();
+ Mockito.framework().clearInlineMocks();
+ }
+}
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3InitiateMultipartUploadRequest.java \
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3InitiateMultipartUploadRequest.java
index 619293e..1d78560 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3InitiateMultipartUploadRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3InitiateMultipartUploadRequest.java
@@ -60,7 +60,7 @@ public class TestS3InitiateMultipartUploadRequest
OMClientResponse omClientResponse =
s3InitiateMultipartUploadRequest.validateAndUpdateCache(ozoneManager,
- 100L);
+ 100L, ozoneManagerDoubleBufferHelper);
Assert.assertEquals(OzoneManagerProtocolProtos.Status.OK,
omClientResponse.getOMResponse().getStatus());
@@ -106,7 +106,7 @@ public class TestS3InitiateMultipartUploadRequest
OMClientResponse omClientResponse =
s3InitiateMultipartUploadRequest.validateAndUpdateCache(ozoneManager,
- 100L);
+ 100L, ozoneManagerDoubleBufferHelper);
Assert.assertEquals(OzoneManagerProtocolProtos.Status.BUCKET_NOT_FOUND,
omClientResponse.getOMResponse().getStatus());
@@ -136,7 +136,7 @@ public class TestS3InitiateMultipartUploadRequest
OMClientResponse omClientResponse =
s3InitiateMultipartUploadRequest.validateAndUpdateCache(ozoneManager,
- 100L);
+ 100L, ozoneManagerDoubleBufferHelper);
Assert.assertEquals(OzoneManagerProtocolProtos.Status.VOLUME_NOT_FOUND,
omClientResponse.getOMResponse().getStatus());
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartRequest.java \
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartRequest.java
index bf9a524..69335cf 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartRequest.java
@@ -36,9 +36,10 @@ import org.apache.hadoop.ozone.om.OMMetadataManager;
import org.apache.hadoop.ozone.om.OMMetrics;
import org.apache.hadoop.ozone.om.OmMetadataManagerImpl;
import org.apache.hadoop.ozone.om.OzoneManager;
-import org.apache.hadoop.ozone.om.request.TestOMRequestUtils;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos
.OMRequest;
+import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
+import org.apache.hadoop.ozone.om.request.TestOMRequestUtils;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
@@ -56,6 +57,12 @@ public class TestS3MultipartRequest {
protected OMMetadataManager omMetadataManager;
protected AuditLogger auditLogger;
+ // Just setting ozoneManagerDoubleBuffer which does nothing.
+ protected OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper =
+ ((response, transactionIndex) -> {
+ return null;
+ });
+
@Before
public void setup() throws Exception {
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadAbortRequest.java \
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadAbortRequest.java
index 7f5f752..2b72cae 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadAbortRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadAbortRequest.java
@@ -45,7 +45,7 @@ public class TestS3MultipartUploadAbortRequest extends \
TestS3MultipartRequest {
OMClientResponse omClientResponse =
s3InitiateMultipartUploadRequest.validateAndUpdateCache(ozoneManager,
- 1L);
+ 1L, ozoneManagerDoubleBufferHelper);
String multipartUploadID = omClientResponse.getOMResponse()
.getInitiateMultiPartUploadResponse().getMultipartUploadID();
@@ -58,7 +58,8 @@ public class TestS3MultipartUploadAbortRequest extends \
TestS3MultipartRequest { new S3MultipartUploadAbortRequest(abortMPURequest);
omClientResponse =
- s3MultipartUploadAbortRequest.validateAndUpdateCache(ozoneManager, 2L);
+ s3MultipartUploadAbortRequest.validateAndUpdateCache(ozoneManager, 2L,
+ ozoneManagerDoubleBufferHelper);
String multipartKey = omMetadataManager.getMultipartKey(volumeName,
@@ -92,7 +93,8 @@ public class TestS3MultipartUploadAbortRequest extends \
TestS3MultipartRequest { new S3MultipartUploadAbortRequest(abortMPURequest);
OMClientResponse omClientResponse =
- s3MultipartUploadAbortRequest.validateAndUpdateCache(ozoneManager, 2L);
+ s3MultipartUploadAbortRequest.validateAndUpdateCache(ozoneManager, 2L,
+ ozoneManagerDoubleBufferHelper);
// Check table and response.
Assert.assertEquals(
@@ -119,7 +121,8 @@ public class TestS3MultipartUploadAbortRequest extends \
TestS3MultipartRequest { new S3MultipartUploadAbortRequest(abortMPURequest);
OMClientResponse omClientResponse =
- s3MultipartUploadAbortRequest.validateAndUpdateCache(ozoneManager, 2L);
+ s3MultipartUploadAbortRequest.validateAndUpdateCache(ozoneManager, 2L,
+ ozoneManagerDoubleBufferHelper);
// Check table and response.
Assert.assertEquals(
@@ -147,7 +150,8 @@ public class TestS3MultipartUploadAbortRequest extends \
TestS3MultipartRequest { new S3MultipartUploadAbortRequest(abortMPURequest);
OMClientResponse omClientResponse =
- s3MultipartUploadAbortRequest.validateAndUpdateCache(ozoneManager, 2L);
+ s3MultipartUploadAbortRequest.validateAndUpdateCache(ozoneManager, 2L,
+ ozoneManagerDoubleBufferHelper);
// Check table and response.
Assert.assertEquals(
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadCommitPartRequest.java \
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadCommitPartRequest.java
index 19d985d..5b220bf 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadCommitPartRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadCommitPartRequest.java
@@ -65,7 +65,7 @@ public class TestS3MultipartUploadCommitPartRequest
OMClientResponse omClientResponse =
s3InitiateMultipartUploadRequest.validateAndUpdateCache(ozoneManager,
- 1L);
+ 1L, ozoneManagerDoubleBufferHelper);
long clientID = Time.now();
String multipartUploadID = omClientResponse.getOMResponse()
@@ -84,7 +84,7 @@ public class TestS3MultipartUploadCommitPartRequest
omClientResponse =
s3MultipartUploadCommitPartRequest.validateAndUpdateCache(ozoneManager,
- 2L);
+ 2L, ozoneManagerDoubleBufferHelper);
Assert.assertTrue(omClientResponse.getOMResponse().getStatus()
@@ -129,7 +129,7 @@ public class TestS3MultipartUploadCommitPartRequest
OMClientResponse omClientResponse =
s3MultipartUploadCommitPartRequest.validateAndUpdateCache(ozoneManager,
- 2L);
+ 2L, ozoneManagerDoubleBufferHelper);
Assert.assertTrue(omClientResponse.getOMResponse().getStatus()
@@ -168,7 +168,7 @@ public class TestS3MultipartUploadCommitPartRequest
OMClientResponse omClientResponse =
s3MultipartUploadCommitPartRequest.validateAndUpdateCache(ozoneManager,
- 2L);
+ 2L, ozoneManagerDoubleBufferHelper);
Assert.assertTrue(omClientResponse.getOMResponse().getStatus()
== OzoneManagerProtocolProtos.Status.KEY_NOT_FOUND);
@@ -200,7 +200,7 @@ public class TestS3MultipartUploadCommitPartRequest
OMClientResponse omClientResponse =
s3MultipartUploadCommitPartRequest.validateAndUpdateCache(ozoneManager,
- 2L);
+ 2L, ozoneManagerDoubleBufferHelper);
Assert.assertTrue(omClientResponse.getOMResponse().getStatus()
== OzoneManagerProtocolProtos.Status.BUCKET_NOT_FOUND);
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeCreateRequest.java \
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeCreateRequest.java
index fa9384d..61e12f8 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeCreateRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeCreateRequest.java
@@ -21,25 +21,12 @@ package org.apache.hadoop.ozone.om.request.volume;
import java.util.UUID;
import org.apache.hadoop.test.GenericTestUtils;
-import org.junit.After;
import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.mockito.Mockito;
-import org.apache.hadoop.hdds.conf.OzoneConfiguration;
-import org.apache.hadoop.ozone.audit.AuditMessage;
-import org.apache.hadoop.ozone.audit.AuditLogger;
import org.apache.hadoop.ozone.om.helpers.OmVolumeArgs;
import org.apache.hadoop.ozone.om.request.TestOMRequestUtils;
import org.apache.hadoop.ozone.om.response.OMClientResponse;
-import org.apache.hadoop.ozone.om.OMConfigKeys;
-import org.apache.hadoop.ozone.om.OMMetadataManager;
-import org.apache.hadoop.ozone.om.OMMetrics;
-import org.apache.hadoop.ozone.om.OmMetadataManagerImpl;
-import org.apache.hadoop.ozone.om.OzoneManager;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos
.CreateVolumeRequest;
@@ -48,43 +35,14 @@ import \
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos import \
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos
.VolumeInfo;
-import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
/**
* Tests create volume request.
*/
-public class TestOMVolumeCreateRequest {
- @Rule
- public TemporaryFolder folder = new TemporaryFolder();
-
- private OzoneManager ozoneManager;
- private OMMetrics omMetrics;
- private OMMetadataManager omMetadataManager;
- private AuditLogger auditLogger;
-
-
- @Before
- public void setup() throws Exception {
- ozoneManager = Mockito.mock(OzoneManager.class);
- omMetrics = OMMetrics.create();
- OzoneConfiguration ozoneConfiguration = new OzoneConfiguration();
- ozoneConfiguration.set(OMConfigKeys.OZONE_OM_DB_DIRS,
- folder.newFolder().getAbsolutePath());
- omMetadataManager = new OmMetadataManagerImpl(ozoneConfiguration);
- when(ozoneManager.getMetrics()).thenReturn(omMetrics);
- when(ozoneManager.getMetadataManager()).thenReturn(omMetadataManager);
- when(ozoneManager.getMaxUserVolumeCount()).thenReturn(10L);
- auditLogger = Mockito.mock(AuditLogger.class);
- when(ozoneManager.getAuditLogger()).thenReturn(auditLogger);
- Mockito.doNothing().when(auditLogger).logWrite(any(AuditMessage.class));
- }
- @After
- public void stop() {
- omMetrics.unRegister();
- Mockito.framework().clearInlineMocks();
- }
+public class TestOMVolumeCreateRequest extends TestOMVolumeRequest {
+
@Test
public void testPreExecute() throws Exception {
@@ -113,7 +71,8 @@ public class TestOMVolumeCreateRequest {
try {
OMClientResponse omClientResponse =
- omVolumeCreateRequest.validateAndUpdateCache(ozoneManager, 1);
+ omVolumeCreateRequest.validateAndUpdateCache(ozoneManager, 1,
+ ozoneManagerDoubleBufferHelper);
} catch (IllegalArgumentException ex){
GenericTestUtils.assertExceptionContains("should be greater than zero",
ex);
@@ -147,7 +106,8 @@ public class TestOMVolumeCreateRequest {
omVolumeCreateRequest = new OMVolumeCreateRequest(modifiedRequest);
OMClientResponse omClientResponse =
- omVolumeCreateRequest.validateAndUpdateCache(ozoneManager, 1);
+ omVolumeCreateRequest.validateAndUpdateCache(ozoneManager, 1,
+ ozoneManagerDoubleBufferHelper);
OzoneManagerProtocolProtos.OMResponse omResponse =
omClientResponse.getOMResponse();
@@ -187,7 +147,8 @@ public class TestOMVolumeCreateRequest {
modifiedRequest = omVolumeCreateRequest.preExecute(ozoneManager);
omClientResponse =
- omVolumeCreateRequest.validateAndUpdateCache(ozoneManager, 2L);
+ omVolumeCreateRequest.validateAndUpdateCache(ozoneManager, 2L,
+ ozoneManagerDoubleBufferHelper);
Assert.assertEquals(OzoneManagerProtocolProtos.Status.OK,
omClientResponse.getOMResponse().getStatus());
@@ -219,7 +180,8 @@ public class TestOMVolumeCreateRequest {
omVolumeCreateRequest = new OMVolumeCreateRequest(modifiedRequest);
OMClientResponse omClientResponse =
- omVolumeCreateRequest.validateAndUpdateCache(ozoneManager, 1);
+ omVolumeCreateRequest.validateAndUpdateCache(ozoneManager, 1,
+ ozoneManagerDoubleBufferHelper);
OzoneManagerProtocolProtos.OMResponse omResponse =
omClientResponse.getOMResponse();
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeDeleteRequest.java \
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeDeleteRequest.java
index 1a97a0f..7303f26 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeDeleteRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeDeleteRequest.java
@@ -21,71 +21,24 @@ package org.apache.hadoop.ozone.om.request.volume;
import java.util.UUID;
import com.google.common.base.Optional;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
+import org.junit.Assert;;
import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.mockito.Mockito;
-import org.apache.hadoop.ozone.audit.AuditLogger;
-import org.apache.hadoop.ozone.audit.AuditMessage;
import org.apache.hadoop.ozone.om.helpers.OmBucketInfo;
import org.apache.hadoop.ozone.om.request.TestOMRequestUtils;
import org.apache.hadoop.ozone.om.response.OMClientResponse;
import org.apache.hadoop.utils.db.cache.CacheKey;
import org.apache.hadoop.utils.db.cache.CacheValue;
-import org.apache.hadoop.hdds.conf.OzoneConfiguration;
-import org.apache.hadoop.ozone.om.OMConfigKeys;
-import org.apache.hadoop.ozone.om.OMMetadataManager;
-import org.apache.hadoop.ozone.om.OMMetrics;
-import org.apache.hadoop.ozone.om.OmMetadataManagerImpl;
-import org.apache.hadoop.ozone.om.OzoneManager;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos
.DeleteVolumeRequest;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos
.OMRequest;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
/**
* Tests delete volume request.
*/
-public class TestOMVolumeDeleteRequest {
- @Rule
- public TemporaryFolder folder = new TemporaryFolder();
-
- private OzoneManager ozoneManager;
- private OMMetrics omMetrics;
- private OMMetadataManager omMetadataManager;
- private AuditLogger auditLogger;
-
-
- @Before
- public void setup() throws Exception {
- ozoneManager = mock(OzoneManager.class);
- omMetrics = OMMetrics.create();
- OzoneConfiguration ozoneConfiguration = new OzoneConfiguration();
- ozoneConfiguration.set(OMConfigKeys.OZONE_OM_DB_DIRS,
- folder.newFolder().getAbsolutePath());
- omMetadataManager = new OmMetadataManagerImpl(ozoneConfiguration);
- when(ozoneManager.getMetadataManager()).thenReturn(omMetadataManager);
- when(ozoneManager.getMetrics()).thenReturn(omMetrics);
- auditLogger = Mockito.mock(AuditLogger.class);
- when(ozoneManager.getAuditLogger()).thenReturn(auditLogger);
- Mockito.doNothing().when(auditLogger).logWrite(any(AuditMessage.class));
-
- }
-
- @After
- public void stop() {
- omMetrics.unRegister();
- Mockito.framework().clearInlineMocks();
- }
+public class TestOMVolumeDeleteRequest extends TestOMVolumeRequest {
@Test
public void testPreExecute() throws Exception {
@@ -124,7 +77,8 @@ public class TestOMVolumeDeleteRequest {
Assert.assertNotNull(omMetadataManager.getUserTable().get(ownerKey));
OMClientResponse omClientResponse =
- omVolumeDeleteRequest.validateAndUpdateCache(ozoneManager, 1);
+ omVolumeDeleteRequest.validateAndUpdateCache(ozoneManager, 1,
+ ozoneManagerDoubleBufferHelper);
OzoneManagerProtocolProtos.OMResponse omResponse =
omClientResponse.getOMResponse();
@@ -154,7 +108,8 @@ public class TestOMVolumeDeleteRequest {
omVolumeDeleteRequest.preExecute(ozoneManager);
OMClientResponse omClientResponse =
- omVolumeDeleteRequest.validateAndUpdateCache(ozoneManager, 1);
+ omVolumeDeleteRequest.validateAndUpdateCache(ozoneManager, 1,
+ ozoneManagerDoubleBufferHelper);
OzoneManagerProtocolProtos.OMResponse omResponse =
omClientResponse.getOMResponse();
@@ -191,7 +146,8 @@ public class TestOMVolumeDeleteRequest {
TestOMRequestUtils.addVolumeToDB(volumeName, ownerName, omMetadataManager);
OMClientResponse omClientResponse =
- omVolumeDeleteRequest.validateAndUpdateCache(ozoneManager, 1L);
+ omVolumeDeleteRequest.validateAndUpdateCache(ozoneManager, 1L,
+ ozoneManagerDoubleBufferHelper);
OzoneManagerProtocolProtos.OMResponse omResponse =
omClientResponse.getOMResponse();
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeRequest.java \
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeRequest.java
new file mode 100644
index 0000000..cfcdcb7
--- /dev/null
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeRequest.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.hadoop.ozone.om.request.volume;
+
+import org.apache.hadoop.hdds.conf.OzoneConfiguration;
+import org.apache.hadoop.ozone.audit.AuditLogger;
+import org.apache.hadoop.ozone.audit.AuditMessage;
+import org.apache.hadoop.ozone.om.OMConfigKeys;
+import org.apache.hadoop.ozone.om.OMMetadataManager;
+import org.apache.hadoop.ozone.om.OMMetrics;
+import org.apache.hadoop.ozone.om.OmMetadataManagerImpl;
+import org.apache.hadoop.ozone.om.OzoneManager;
+import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.rules.TemporaryFolder;
+import org.mockito.Mockito;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+
+/**
+ * Base test class for Volume request.
+ */
+@SuppressWarnings("visibilitymodifier")
+public class TestOMVolumeRequest {
+
+ @Rule
+ public TemporaryFolder folder = new TemporaryFolder();
+
+ protected OzoneManager ozoneManager;
+ protected OMMetrics omMetrics;
+ protected OMMetadataManager omMetadataManager;
+ protected AuditLogger auditLogger;
+ // Just setting ozoneManagerDoubleBuffer which does nothing.
+ protected OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper =
+ ((response, transactionIndex) -> {
+ return null;
+ });
+
+ @Before
+ public void setup() throws Exception {
+ ozoneManager = Mockito.mock(OzoneManager.class);
+ omMetrics = OMMetrics.create();
+ OzoneConfiguration ozoneConfiguration = new OzoneConfiguration();
+ ozoneConfiguration.set(OMConfigKeys.OZONE_OM_DB_DIRS,
+ folder.newFolder().getAbsolutePath());
+ omMetadataManager = new OmMetadataManagerImpl(ozoneConfiguration);
+ when(ozoneManager.getMetrics()).thenReturn(omMetrics);
+ when(ozoneManager.getMetadataManager()).thenReturn(omMetadataManager);
+ when(ozoneManager.getMaxUserVolumeCount()).thenReturn(10L);
+ auditLogger = Mockito.mock(AuditLogger.class);
+ when(ozoneManager.getAuditLogger()).thenReturn(auditLogger);
+ Mockito.doNothing().when(auditLogger).logWrite(any(AuditMessage.class));
+ }
+
+ @After
+ public void stop() {
+ omMetrics.unRegister();
+ Mockito.framework().clearInlineMocks();
+ }
+}
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeSetOwnerRequest.java \
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeSetOwnerRequest.java
index bd464d8..d67ac08 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeSetOwnerRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeSetOwnerRequest.java
@@ -20,65 +20,19 @@ package org.apache.hadoop.ozone.om.request.volume;
import java.util.UUID;
-import org.junit.After;
import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.mockito.Mockito;
-
-import org.apache.hadoop.ozone.audit.AuditLogger;
-import org.apache.hadoop.ozone.audit.AuditMessage;
-import org.apache.hadoop.hdds.conf.OzoneConfiguration;
-import org.apache.hadoop.ozone.om.OMConfigKeys;
-import org.apache.hadoop.ozone.om.OMMetadataManager;
-import org.apache.hadoop.ozone.om.OMMetrics;
-import org.apache.hadoop.ozone.om.OmMetadataManagerImpl;
-import org.apache.hadoop.ozone.om.OzoneManager;
+
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos
.OMRequest;
import org.apache.hadoop.ozone.om.request.TestOMRequestUtils;
import org.apache.hadoop.ozone.om.response.OMClientResponse;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.when;
-
/**
* Tests set volume property request.
*/
-public class TestOMVolumeSetOwnerRequest {
- @Rule
- public TemporaryFolder folder = new TemporaryFolder();
-
- private OzoneManager ozoneManager;
- private OMMetrics omMetrics;
- private OMMetadataManager omMetadataManager;
- private AuditLogger auditLogger;
-
-
- @Before
- public void setup() throws Exception {
- ozoneManager = Mockito.mock(OzoneManager.class);
- omMetrics = OMMetrics.create();
- OzoneConfiguration ozoneConfiguration = new OzoneConfiguration();
- ozoneConfiguration.set(OMConfigKeys.OZONE_OM_DB_DIRS,
- folder.newFolder().getAbsolutePath());
- omMetadataManager = new OmMetadataManagerImpl(ozoneConfiguration);
- when(ozoneManager.getMetrics()).thenReturn(omMetrics);
- when(ozoneManager.getMetadataManager()).thenReturn(omMetadataManager);
- when(ozoneManager.getMaxUserVolumeCount()).thenReturn(10L);
- auditLogger = Mockito.mock(AuditLogger.class);
- when(ozoneManager.getAuditLogger()).thenReturn(auditLogger);
- Mockito.doNothing().when(auditLogger).logWrite(any(AuditMessage.class));
- }
-
- @After
- public void stop() {
- omMetrics.unRegister();
- Mockito.framework().clearInlineMocks();
- }
+public class TestOMVolumeSetOwnerRequest extends TestOMVolumeRequest {
@Test
public void testPreExecute() throws Exception {
@@ -121,7 +75,8 @@ public class TestOMVolumeSetOwnerRequest {
OMClientResponse omClientResponse =
- omVolumeSetOwnerRequest.validateAndUpdateCache(ozoneManager, 1);
+ omVolumeSetOwnerRequest.validateAndUpdateCache(ozoneManager, 1,
+ ozoneManagerDoubleBufferHelper);
OzoneManagerProtocolProtos.OMResponse omResponse =
omClientResponse.getOMResponse();
@@ -168,7 +123,8 @@ public class TestOMVolumeSetOwnerRequest {
omVolumeSetOwnerRequest.preExecute(ozoneManager);
OMClientResponse omClientResponse =
- omVolumeSetOwnerRequest.validateAndUpdateCache(ozoneManager, 1);
+ omVolumeSetOwnerRequest.validateAndUpdateCache(ozoneManager, 1,
+ ozoneManagerDoubleBufferHelper);
OzoneManagerProtocolProtos.OMResponse omResponse =
omClientResponse.getOMResponse();
@@ -193,7 +149,8 @@ public class TestOMVolumeSetOwnerRequest {
omVolumeSetOwnerRequest.preExecute(ozoneManager);
OMClientResponse omClientResponse =
- omVolumeSetOwnerRequest.validateAndUpdateCache(ozoneManager, 1);
+ omVolumeSetOwnerRequest.validateAndUpdateCache(ozoneManager, 1,
+ ozoneManagerDoubleBufferHelper);
OzoneManagerProtocolProtos.OMResponse omResponse =
omClientResponse.getOMResponse();
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeSetQuotaRequest.java \
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeSetQuotaRequest.java
index 9e9a1ef..963fc33 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeSetQuotaRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeSetQuotaRequest.java
@@ -20,64 +20,20 @@ package org.apache.hadoop.ozone.om.request.volume;
import java.util.UUID;
-import org.apache.hadoop.ozone.audit.AuditLogger;
-import org.apache.hadoop.ozone.audit.AuditMessage;
import org.apache.hadoop.ozone.om.helpers.OmVolumeArgs;
import org.apache.hadoop.ozone.om.request.TestOMRequestUtils;
import org.apache.hadoop.ozone.om.response.OMClientResponse;
-import org.junit.After;
import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.mockito.Mockito;
-
-import org.apache.hadoop.hdds.conf.OzoneConfiguration;
-import org.apache.hadoop.ozone.om.OMConfigKeys;
-import org.apache.hadoop.ozone.om.OMMetadataManager;
-import org.apache.hadoop.ozone.om.OMMetrics;
-import org.apache.hadoop.ozone.om.OmMetadataManagerImpl;
-import org.apache.hadoop.ozone.om.OzoneManager;
+
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos
.OMRequest;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.when;
-
/**
* Tests set volume property request.
*/
-public class TestOMVolumeSetQuotaRequest {
- @Rule
- public TemporaryFolder folder = new TemporaryFolder();
-
- private OzoneManager ozoneManager;
- private OMMetrics omMetrics;
- private OMMetadataManager omMetadataManager;
- private AuditLogger auditLogger;
-
- @Before
- public void setup() throws Exception {
- ozoneManager = Mockito.mock(OzoneManager.class);
- omMetrics = OMMetrics.create();
- OzoneConfiguration ozoneConfiguration = new OzoneConfiguration();
- ozoneConfiguration.set(OMConfigKeys.OZONE_OM_DB_DIRS,
- folder.newFolder().getAbsolutePath());
- omMetadataManager = new OmMetadataManagerImpl(ozoneConfiguration);
- when(ozoneManager.getMetrics()).thenReturn(omMetrics);
- when(ozoneManager.getMetadataManager()).thenReturn(omMetadataManager);
- auditLogger = Mockito.mock(AuditLogger.class);
- when(ozoneManager.getAuditLogger()).thenReturn(auditLogger);
- Mockito.doNothing().when(auditLogger).logWrite(any(AuditMessage.class));
- }
-
- @After
- public void stop() {
- omMetrics.unRegister();
- Mockito.framework().clearInlineMocks();
- }
+public class TestOMVolumeSetQuotaRequest extends TestOMVolumeRequest {
@Test
public void testPreExecute() throws Exception {
@@ -125,7 +81,8 @@ public class TestOMVolumeSetQuotaRequest {
OMClientResponse omClientResponse =
- omVolumeSetQuotaRequest.validateAndUpdateCache(ozoneManager, 1);
+ omVolumeSetQuotaRequest.validateAndUpdateCache(ozoneManager, 1,
+ ozoneManagerDoubleBufferHelper);
OzoneManagerProtocolProtos.OMResponse omResponse =
omClientResponse.getOMResponse();
@@ -158,7 +115,8 @@ public class TestOMVolumeSetQuotaRequest {
omVolumeSetQuotaRequest.preExecute(ozoneManager);
OMClientResponse omClientResponse =
- omVolumeSetQuotaRequest.validateAndUpdateCache(ozoneManager, 1);
+ omVolumeSetQuotaRequest.validateAndUpdateCache(ozoneManager, 1,
+ ozoneManagerDoubleBufferHelper);
OzoneManagerProtocolProtos.OMResponse omResponse =
omClientResponse.getOMResponse();
@@ -184,7 +142,8 @@ public class TestOMVolumeSetQuotaRequest {
omVolumeSetQuotaRequest.preExecute(ozoneManager);
OMClientResponse omClientResponse =
- omVolumeSetQuotaRequest.validateAndUpdateCache(ozoneManager, 1);
+ omVolumeSetQuotaRequest.validateAndUpdateCache(ozoneManager, 1,
+ ozoneManagerDoubleBufferHelper);
OzoneManagerProtocolProtos.OMResponse omResponse =
omClientResponse.getOMResponse();
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic