Repository: oozie
Updated Branches:
  refs/heads/master a5c839a3a -> 72bce837d


OOZIE-2769 Extend FS action to allow setrep on a file (Artem Ervits via 
gezapeti)


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

Branch: refs/heads/master
Commit: 72bce837d038e0c61435c77c56fadd81dcd05cbb
Parents: a5c839a
Author: Gezapeti Cseh <gezap...@gmail.com>
Authored: Tue Jun 20 09:25:01 2017 +0200
Committer: Gezapeti Cseh <gezap...@gmail.com>
Committed: Tue Jun 20 09:25:01 2017 +0200

----------------------------------------------------------------------
 .../src/main/resources/oozie-workflow-0.5.xsd   |  6 +++++
 .../oozie/action/hadoop/FsActionExecutor.java   | 24 ++++++++++++++++++++
 .../action/hadoop/TestFsActionExecutor.java     | 13 +++++++++++
 core/src/test/resources/wf-schema-valid.xml     |  5 +++-
 .../src/site/twiki/WorkflowFunctionalSpec.twiki |  8 ++++++-
 release-log.txt                                 |  1 +
 6 files changed, 55 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/oozie/blob/72bce837/client/src/main/resources/oozie-workflow-0.5.xsd
----------------------------------------------------------------------
diff --git a/client/src/main/resources/oozie-workflow-0.5.xsd 
b/client/src/main/resources/oozie-workflow-0.5.xsd
index 8fe2b47..87f38a3 100644
--- a/client/src/main/resources/oozie-workflow-0.5.xsd
+++ b/client/src/main/resources/oozie-workflow-0.5.xsd
@@ -215,6 +215,7 @@
                 <xs:element name="chmod" type="workflow:CHMOD"/>
                 <xs:element name="touchz" type="workflow:TOUCHZ"/>
                 <xs:element name="chgrp" type="workflow:CHGRP"/>
+                <xs:element name="setrep" type="workflow:SETREP"/>
             </xs:choice>
         </xs:sequence>
     </xs:complexType>
@@ -305,6 +306,11 @@
         <xs:attribute name="dir-files" type="xs:string"/>
     </xs:complexType>
 
+    <xs:complexType name="SETREP">
+        <xs:attribute name="path" type="xs:string" use="required"/>
+        <xs:attribute name="replication-factor" type="xs:short" 
use="required"/>
+    </xs:complexType>
+
     <xs:complexType name="TOUCHZ">
         <xs:attribute name="path" type="xs:string" use="required"/>
     </xs:complexType>

http://git-wip-us.apache.org/repos/asf/oozie/blob/72bce837/core/src/main/java/org/apache/oozie/action/hadoop/FsActionExecutor.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/oozie/action/hadoop/FsActionExecutor.java 
b/core/src/main/java/org/apache/oozie/action/hadoop/FsActionExecutor.java
index e1150f7..85d3efa 100644
--- a/core/src/main/java/org/apache/oozie/action/hadoop/FsActionExecutor.java
+++ b/core/src/main/java/org/apache/oozie/action/hadoop/FsActionExecutor.java
@@ -223,6 +223,16 @@ public class FsActionExecutor extends ActionExecutor {
                                         chgrp(context, fsConf, nameNodePath, 
path, context.getWorkflow().getUser(),
                                                 group, dirFiles, recursive);
                                     }
+                                    else {
+                                        if (command.equals("setrep")) {
+                                            Path path = 
getPath(commandElement, "path");
+                                            String replicationFactor =
+                                            
commandElement.getAttributeValue("replication-factor");
+                                            if 
(commandElement.getAttributeValue("replication-factor") != null) {
+                                                setrep(context, path, 
Short.parseShort(replicationFactor));
+                                            }
+                                        }
+                                    }
                                 }
                             }
                         }
@@ -654,6 +664,20 @@ public class FsActionExecutor extends ActionExecutor {
         }
     }
 
+    void setrep(Context context, Path path, short replicationFactor)
+            throws ActionExecutorException, HadoopAccessorException {
+        try {
+            path = resolveToFullPath(null, path, true);
+            FileSystem fs = getFileSystemFor(path, context, null);
+
+            if (fs.isFile(path)) {
+                fs.setReplication(path, replicationFactor);
+            }
+        } catch (IOException ex) {
+            convertException(ex);
+        }
+    }
+
     public boolean supportsConfigurationJobXML() {
         return true;
     }

http://git-wip-us.apache.org/repos/asf/oozie/blob/72bce837/core/src/test/java/org/apache/oozie/action/hadoop/TestFsActionExecutor.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/oozie/action/hadoop/TestFsActionExecutor.java 
b/core/src/test/java/org/apache/oozie/action/hadoop/TestFsActionExecutor.java
index 99e4d91..6939b57 100644
--- 
a/core/src/test/java/org/apache/oozie/action/hadoop/TestFsActionExecutor.java
+++ 
b/core/src/test/java/org/apache/oozie/action/hadoop/TestFsActionExecutor.java
@@ -1214,4 +1214,17 @@ public void testChmodRecursive() throws Exception {
             assertEquals(ActionExecutorException.ErrorType.ERROR, 
((ActionExecutorException) e).getErrorType());
         }
     }
+
+    public void testSetRep() throws Exception {
+        FsActionExecutor ae = new FsActionExecutor();
+        FileSystem fs = getFileSystem();
+        Path path = new Path(getFsTestCaseDir(), "dir1");
+        Context context = createContext("<fs/>");
+        fs.mkdirs(path);
+        Path file = new Path(path + "/file");
+        fs.createNewFile(file);
+        final short replicationFactor = (short) 2;
+        ae.setrep(context, path, replicationFactor);
+        assertEquals(replicationFactor, 
fs.getFileStatus(file).getReplication());
+    }
 }

http://git-wip-us.apache.org/repos/asf/oozie/blob/72bce837/core/src/test/resources/wf-schema-valid.xml
----------------------------------------------------------------------
diff --git a/core/src/test/resources/wf-schema-valid.xml 
b/core/src/test/resources/wf-schema-valid.xml
index 71bbcc8..085634f 100644
--- a/core/src/test/resources/wf-schema-valid.xml
+++ b/core/src/test/resources/wf-schema-valid.xml
@@ -15,7 +15,7 @@
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
-<workflow-app xmlns="uri:oozie:workflow:0.1" name="test-wf">
+<workflow-app xmlns="uri:oozie:workflow:0.5" name="test-wf">
     <start to="a"/>
     <decision name="a">
         <switch>
@@ -100,6 +100,9 @@
             <delete path='/tmp2'/>
             <mkdir path='/tmp3'/>
             <delete path='/tmp3'/>
+            <mkdir path='/tmp4'/>
+            <touchz path='/tmp4/file'/>
+            <setrep path='/tmp4/file' replication-factor='2'/>
         </fs>
         <ok to="z"/>
         <error to="b"/>

http://git-wip-us.apache.org/repos/asf/oozie/blob/72bce837/docs/src/site/twiki/WorkflowFunctionalSpec.twiki
----------------------------------------------------------------------
diff --git a/docs/src/site/twiki/WorkflowFunctionalSpec.twiki 
b/docs/src/site/twiki/WorkflowFunctionalSpec.twiki
index 6655696..5a75b99 100644
--- a/docs/src/site/twiki/WorkflowFunctionalSpec.twiki
+++ b/docs/src/site/twiki/WorkflowFunctionalSpec.twiki
@@ -1139,7 +1139,7 @@ All the above elements can be parameterized (templatized) 
using EL expressions.
 ---++++ 3.2.4 Fs (HDFS) action
 
 The =fs= action allows to manipulate files and directories in HDFS from a 
workflow application. The supported commands
-are =move=, =delete=, =mkdir=, =chmod=, =touchz= and =chgrp=.
+are =move=, =delete=, =mkdir=, =chmod=, =touchz=, =setrep= and =chgrp=.
 
 The FS commands are executed synchronously from within the FS action, the 
workflow job will wait until the specified
 file commands are completed before continuing to the next action.
@@ -1174,6 +1174,8 @@ executed. Thus there is less chance of an error occurring 
while the =fs= action
             <touchz path='[PATH]' />
             ...
             <chgrp path='[PATH]' group='[GROUP]' dir-files='false' />
+            ...
+            <setrep path='[PATH]' replication-factor='2'/>
         </fs>
         <ok to="[NODE-NAME]"/>
         <error to="[NODE-NAME]"/>
@@ -1218,6 +1220,9 @@ within the directory. To apply the =chgrp= command to the 
directory, without aff
 the =dir-files= attribute must be set to =false=.
 To apply the =chgrp= command recursively to all levels within a directory, put 
a =recursive= element inside the <chgrp> element.
 
+The =setrep= command changes replication factor of an hdfs file(s). Changing 
RF of directories or symlinks is not
+supported; this action requires an argument for RF.
+
 *Example:*
 
 <verbatim>
@@ -1230,6 +1235,7 @@ To apply the =chgrp= command recursively to all levels 
within a directory, put a
             <move source='${jobInput}' 
target='archives/${wf:id()}/processed-input'/>
             <chmod path='${jobOutput}' permissions='-rwxrw-rw-' 
dir-files='true'><recursive/></chmod>
             <chgrp path='${jobOutput}' group='testgroup' 
dir-files='true'><recursive/></chgrp>
+            <setrep path='archives/${wf:id()/filename(s)}' 
replication-factor='2'/>
         </fs>
         <ok to="myotherjob"/>
         <error to="errorcleanup"/>

http://git-wip-us.apache.org/repos/asf/oozie/blob/72bce837/release-log.txt
----------------------------------------------------------------------
diff --git a/release-log.txt b/release-log.txt
index 10c3d56..05ed49c 100644
--- a/release-log.txt
+++ b/release-log.txt
@@ -1,5 +1,6 @@
 -- Oozie 5.0.0 release (trunk - unreleased)
 
+OOZIE-2769 Extend FS action to allow setrep on a file (Artem Ervits via 
gezapeti)
 OOZIE-2815 amend - Oozie not always display job log (andras.piros via gezapeti)
 OOZIE-2946 Include find-sec-bugs plugin (Jan Hentschel via rkanter)
 OOZIE-2950 TestOozieCLI.testSlaEvents is not testing SLAServlet. (gezapeti)

Reply via email to