Repository: hadoop
Updated Branches:
  refs/heads/HDFS-7240 04b39066d -> f6ed18633


HDFS-12170. Ozone: OzoneFileSystem: KSM should maintain key creation time and 
modification time. Contributed by Mukul Kumar Singh.


Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/f6ed1863
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/f6ed1863
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/f6ed1863

Branch: refs/heads/HDFS-7240
Commit: f6ed186330fbc0d58374e1f167e73c0de870fdde
Parents: 04b3906
Author: Yiqun Lin <yq...@apache.org>
Authored: Thu Jul 27 11:43:01 2017 +0800
Committer: Yiqun Lin <yq...@apache.org>
Committed: Thu Jul 27 11:43:01 2017 +0800

----------------------------------------------------------------------
 .../main/java/org/apache/hadoop/util/Time.java  |  9 +++++
 .../apache/hadoop/ksm/helpers/KsmKeyInfo.java   | 35 ++++++++++++++++++--
 .../main/proto/KeySpaceManagerProtocol.proto    |  2 ++
 .../apache/hadoop/ozone/ksm/KeyManagerImpl.java |  4 +++
 .../hadoop/ozone/web/handlers/KeyHandler.java   |  2 +-
 .../hadoop/ozone/web/response/KeyInfo.java      | 19 +++++++++++
 .../web/storage/DistributedStorageHandler.java  |  4 ++-
 .../hadoop/ozone/ksm/TestKeySpaceManager.java   |  8 ++++-
 8 files changed, 77 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hadoop/blob/f6ed1863/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/Time.java
----------------------------------------------------------------------
diff --git 
a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/Time.java
 
b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/Time.java
index db5a567..e099c8f 100644
--- 
a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/Time.java
+++ 
b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/Time.java
@@ -17,6 +17,7 @@
  */
 package org.apache.hadoop.util;
 
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 
 import org.apache.hadoop.classification.InterfaceAudience;
@@ -82,4 +83,12 @@ public final class Time {
   public static String formatTime(long millis) {
     return DATE_FORMAT.get().format(millis);
   }
+
+  /**
+   * Convert time in human readable format to millisecond.
+   * @return time in milliseconds
+   */
+  public static long formatDate(String date) throws ParseException {
+    return DATE_FORMAT.get().parse(date).getTime();
+  }
 }

http://git-wip-us.apache.org/repos/asf/hadoop/blob/f6ed1863/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/ksm/helpers/KsmKeyInfo.java
----------------------------------------------------------------------
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/ksm/helpers/KsmKeyInfo.java
 
b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/ksm/helpers/KsmKeyInfo.java
index 76d22be..05748e8 100644
--- 
a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/ksm/helpers/KsmKeyInfo.java
+++ 
b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/ksm/helpers/KsmKeyInfo.java
@@ -35,10 +35,13 @@ public final class KsmKeyInfo {
   private final String blockID;
   private final long dataSize;
   private final boolean shouldCreateContainer;
+  private final long creationTime;
+  private final long modificationTime;
 
   private KsmKeyInfo(String volumeName, String bucketName, String keyName,
       long dataSize, String blockID, String containerName,
-      boolean shouldCreateContainer) {
+      boolean shouldCreateContainer, long creationTime,
+      long modificationTime) {
     this.volumeName = volumeName;
     this.bucketName = bucketName;
     this.keyName = keyName;
@@ -46,6 +49,8 @@ public final class KsmKeyInfo {
     this.blockID = blockID;
     this.dataSize = dataSize;
     this.shouldCreateContainer = shouldCreateContainer;
+    this.creationTime = creationTime;
+    this.modificationTime = modificationTime;
   }
 
   public String getVolumeName() {
@@ -76,6 +81,14 @@ public final class KsmKeyInfo {
     return shouldCreateContainer;
   }
 
+  public long getCreationTime() {
+    return creationTime;
+  }
+
+  public long getModificationTime() {
+    return modificationTime;
+  }
+
   /**
    * Builder of KsmKeyInfo.
    */
@@ -87,6 +100,8 @@ public final class KsmKeyInfo {
     private String blockID;
     private long dataSize;
     private boolean shouldCreateContainer;
+    private long creationTime;
+    private long modificationTime;
 
     public Builder setVolumeName(String volume) {
       this.volumeName = volume;
@@ -123,10 +138,20 @@ public final class KsmKeyInfo {
       return this;
     }
 
+    public Builder setCreationTime(long creationTime) {
+      this.creationTime = creationTime;
+      return this;
+    }
+
+    public Builder setModificationTime(long modificationTime) {
+      this.modificationTime = modificationTime;
+      return this;
+    }
+
     public KsmKeyInfo build() {
       return new KsmKeyInfo(
           volumeName, bucketName, keyName, dataSize, blockID, containerName,
-          shouldCreateContainer);
+          shouldCreateContainer, creationTime, modificationTime);
     }
   }
 
@@ -139,6 +164,8 @@ public final class KsmKeyInfo {
         .setBlockKey(blockID)
         .setContainerName(containerName)
         .setShouldCreateContainer(shouldCreateContainer)
+        .setCreationTime(creationTime)
+        .setModificationTime(modificationTime)
         .build();
   }
 
@@ -150,7 +177,9 @@ public final class KsmKeyInfo {
         keyInfo.getDataSize(),
         keyInfo.getBlockKey(),
         keyInfo.getContainerName(),
-        keyInfo.getShouldCreateContainer());
+        keyInfo.getShouldCreateContainer(),
+        keyInfo.getCreationTime(),
+        keyInfo.getModificationTime());
   }
 
 }

http://git-wip-us.apache.org/repos/asf/hadoop/blob/f6ed1863/hadoop-hdfs-project/hadoop-hdfs-client/src/main/proto/KeySpaceManagerProtocol.proto
----------------------------------------------------------------------
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/proto/KeySpaceManagerProtocol.proto
 
b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/proto/KeySpaceManagerProtocol.proto
index b8dbafc..f641898 100644
--- 
a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/proto/KeySpaceManagerProtocol.proto
+++ 
b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/proto/KeySpaceManagerProtocol.proto
@@ -233,6 +233,8 @@ message KeyInfo {
     required string blockKey = 5;
     required string containerName = 6;
     required bool shouldCreateContainer = 7;
+    required uint64 creationTime = 8;
+    required uint64 modificationTime = 9;
 }
 
 message LocateKeyRequest {

http://git-wip-us.apache.org/repos/asf/hadoop/blob/f6ed1863/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/ksm/KeyManagerImpl.java
----------------------------------------------------------------------
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/ksm/KeyManagerImpl.java
 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/ksm/KeyManagerImpl.java
index aee3f7c..70e687b 100644
--- 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/ksm/KeyManagerImpl.java
+++ 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/ksm/KeyManagerImpl.java
@@ -26,6 +26,7 @@ import 
org.apache.hadoop.ozone.protocol.proto.ScmBlockLocationProtocolProtos.Del
 import org.apache.hadoop.scm.container.common.helpers.AllocatedBlock;
 import org.apache.hadoop.scm.container.common.helpers.DeleteBlockResult;
 import org.apache.hadoop.scm.protocol.ScmBlockLocationProtocol;
+import org.apache.hadoop.util.Time;
 import org.iq80.leveldb.DBException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -95,6 +96,7 @@ public class KeyManagerImpl implements KeyManager {
       // metadata entry in case of 0 length key.
       AllocatedBlock allocatedBlock =
           scmBlockClient.allocateBlock(Math.max(args.getDataSize(), 1));
+      long currentTime = Time.now();
       KsmKeyInfo keyBlock = new KsmKeyInfo.Builder()
           .setVolumeName(args.getVolumeName())
           .setBucketName(args.getBucketName())
@@ -103,6 +105,8 @@ public class KeyManagerImpl implements KeyManager {
           .setBlockID(allocatedBlock.getKey())
           .setContainerName(allocatedBlock.getPipeline().getContainerName())
           .setShouldCreateContainer(allocatedBlock.getCreateContainer())
+          .setCreationTime(currentTime)
+          .setModificationTime(currentTime)
           .build();
       metadataManager.put(keyKey, keyBlock.getProtobuf().toByteArray());
       LOG.debug("Key {} allocated in volume {} bucket {}",

http://git-wip-us.apache.org/repos/asf/hadoop/blob/f6ed1863/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/web/handlers/KeyHandler.java
----------------------------------------------------------------------
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/web/handlers/KeyHandler.java
 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/web/handlers/KeyHandler.java
index 10528e0..0655a0f 100644
--- 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/web/handlers/KeyHandler.java
+++ 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/web/handlers/KeyHandler.java
@@ -73,7 +73,7 @@ public class KeyHandler implements Keys {
        * @param input - The body as an Input Stream
        * @param request - Http request
        * @param headers - Parsed http Headers.
-       * @param info - UriInfo
+       * @param uriInfo - UriInfo
        *
        * @return Response
        *

http://git-wip-us.apache.org/repos/asf/hadoop/blob/f6ed1863/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/web/response/KeyInfo.java
----------------------------------------------------------------------
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/web/response/KeyInfo.java
 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/web/response/KeyInfo.java
index e5cfd21..34885f6 100644
--- 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/web/response/KeyInfo.java
+++ 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/web/response/KeyInfo.java
@@ -69,6 +69,7 @@ public class KeyInfo implements Comparable<KeyInfo> {
   private long version;
   private String md5hash;
   private String createdOn;
+  private String modifiedOn;
   private long size;
   private String keyName;
 
@@ -84,6 +85,15 @@ public class KeyInfo implements Comparable<KeyInfo> {
   }
 
   /**
+   * When this key was modified.
+   *
+   * @return Date String
+   */
+  public String getModifiedOn() {
+    return modifiedOn;
+  }
+
+  /**
    * When this key was created.
    *
    * @param createdOn - Date String
@@ -93,6 +103,15 @@ public class KeyInfo implements Comparable<KeyInfo> {
   }
 
   /**
+   * When this key was modified.
+   *
+   * @param modifiedOn - Date String
+   */
+  public void setModifiedOn(String modifiedOn) {
+    this.modifiedOn = modifiedOn;
+  }
+
+  /**
    * Full path to where the actual data for this key is stored.
    *
    * @return String

http://git-wip-us.apache.org/repos/asf/hadoop/blob/f6ed1863/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/web/storage/DistributedStorageHandler.java
----------------------------------------------------------------------
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/web/storage/DistributedStorageHandler.java
 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/web/storage/DistributedStorageHandler.java
index 57dcc32..1bf5b11 100644
--- 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/web/storage/DistributedStorageHandler.java
+++ 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/web/storage/DistributedStorageHandler.java
@@ -66,6 +66,7 @@ import org.apache.hadoop.scm.storage.ChunkInputStream;
 import org.apache.hadoop.scm.storage.ChunkOutputStream;
 import org.apache.hadoop.scm.storage.ContainerProtocolCalls;
 import org.apache.hadoop.util.StringUtils;
+import org.apache.hadoop.util.Time;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -482,7 +483,8 @@ public final class DistributedStorageHandler implements 
StorageHandler {
     keyInfo.setVersion(0);
     keyInfo.setKeyName(ksmKeyInfo.getKeyName());
     keyInfo.setSize(ksmKeyInfo.getDataSize());
-
+    keyInfo.setCreatedOn(Time.formatTime(ksmKeyInfo.getCreationTime()));
+    keyInfo.setModifiedOn(Time.formatTime(ksmKeyInfo.getModificationTime()));
     return keyInfo;
   }
 

http://git-wip-us.apache.org/repos/asf/hadoop/blob/f6ed1863/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/ozone/ksm/TestKeySpaceManager.java
----------------------------------------------------------------------
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/ozone/ksm/TestKeySpaceManager.java
 
b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/ozone/ksm/TestKeySpaceManager.java
index 18a5114..5936ccd 100644
--- 
a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/ozone/ksm/TestKeySpaceManager.java
+++ 
b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/ozone/ksm/TestKeySpaceManager.java
@@ -44,6 +44,7 @@ import org.apache.hadoop.ozone.web.handlers.ListArgs;
 import org.apache.hadoop.ozone.web.response.ListBuckets;
 import org.apache.hadoop.ozone.web.response.ListKeys;
 import org.apache.hadoop.ozone.web.response.ListVolumes;
+import org.apache.hadoop.util.Time;
 import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.BeforeClass;
@@ -55,6 +56,7 @@ import org.junit.rules.ExpectedException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.text.ParseException;
 import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.Random;
@@ -941,11 +943,13 @@ public class TestKeySpaceManager {
    * @throws OzoneException
    */
   @Test
-  public void testGetKeyInfo() throws IOException, OzoneException {
+  public void testGetKeyInfo() throws IOException,
+                          OzoneException, ParseException {
     String userName = "user" + RandomStringUtils.randomNumeric(5);
     String adminName = "admin" + RandomStringUtils.randomNumeric(5);
     String volumeName = "volume" + RandomStringUtils.randomNumeric(5);
     String bucketName = "bucket" + RandomStringUtils.randomNumeric(5);
+    long currentTime = Time.monotonicNow();
 
     VolumeArgs createVolumeArgs = new VolumeArgs(volumeName, userArgs);
     createVolumeArgs.setUserName(userName);
@@ -966,6 +970,8 @@ public class TestKeySpaceManager {
     stream.close();
 
     KeyInfo keyInfo = storageHandler.getKeyInfo(keyArgs);
+    Assert.assertTrue(Time.formatDate(keyInfo.getCreatedOn()) >= currentTime);
+    Assert.assertTrue(Time.formatDate(keyInfo.getModifiedOn()) >= currentTime);
     Assert.assertEquals(keyName, keyInfo.getKeyName());
     Assert.assertEquals(4096, keyInfo.getSize());
   }


---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org
For additional commands, e-mail: common-commits-h...@hadoop.apache.org

Reply via email to