Repository: oozie Updated Branches: refs/heads/master f0bceb0bc -> a3606f203
OOZIE-2051 Allows multiple default action configuration files per action (venkatnrangan via bzhang) Project: http://git-wip-us.apache.org/repos/asf/oozie/repo Commit: http://git-wip-us.apache.org/repos/asf/oozie/commit/a3606f20 Tree: http://git-wip-us.apache.org/repos/asf/oozie/tree/a3606f20 Diff: http://git-wip-us.apache.org/repos/asf/oozie/diff/a3606f20 Branch: refs/heads/master Commit: a3606f2035b11d8e396fcde8b771b22cd4e6dd1a Parents: f0bceb0 Author: Bowen Zhang <[email protected]> Authored: Mon Apr 13 14:09:26 2015 -0700 Committer: Bowen Zhang <[email protected]> Committed: Mon Apr 13 14:10:38 2015 -0700 ---------------------------------------------------------------------- .../oozie/service/HadoopAccessorService.java | 91 ++++++++++++++++---- .../service/TestHadoopAccessorService.java | 67 +++++++++++++- .../src/test/resources/test-action-config-1.xml | 31 +++++++ .../src/test/resources/test-action-config-2.xml | 37 ++++++++ .../src/test/resources/test-action-config-3.xml | 36 ++++++++ core/src/test/resources/test-action-config.xml | 4 + .../test/resources/test-default-config-1.xml | 42 +++++++++ core/src/test/resources/test-default-config.xml | 36 ++++++++ .../src/site/twiki/AG_ActionConfiguration.twiki | 55 ++++++++++++ docs/src/site/twiki/index.twiki | 1 + release-log.txt | 1 + 11 files changed, 383 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/oozie/blob/a3606f20/core/src/main/java/org/apache/oozie/service/HadoopAccessorService.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/oozie/service/HadoopAccessorService.java b/core/src/main/java/org/apache/oozie/service/HadoopAccessorService.java index 47d44cd..102699b 100644 --- a/core/src/main/java/org/apache/oozie/service/HadoopAccessorService.java +++ b/core/src/main/java/org/apache/oozie/service/HadoopAccessorService.java @@ -39,12 +39,15 @@ import org.apache.oozie.util.JobUtils; import java.io.File; import java.io.FileInputStream; +import java.io.FilenameFilter; import java.io.IOException; import java.io.InputStream; import java.net.InetAddress; import java.net.URI; import java.net.URISyntaxException; import java.security.PrivilegedExceptionAction; +import java.util.Arrays; +import java.util.Comparator; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -80,6 +83,8 @@ public class HadoopAccessorService implements Service { protected static final String HADOOP_YARN_RM = "yarn.resourcemanager.address"; private static final Map<String, Text> mrTokenRenewers = new HashMap<String, Text>(); + private static final String DEFAULT_ACTIONNAME = "default"; + private Set<String> jobTrackerWhitelist = new HashSet<String>(); private Set<String> nameNodeWhitelist = new HashSet<String>(); private Map<String, Configuration> hadoopConfigs = new HashMap<String, Configuration>(); @@ -109,7 +114,7 @@ public class HadoopAccessorService implements Service { } jobTrackerWhitelist.add(tmp); } - XLog.getLog(getClass()).info( + LOG.info( "JOB_TRACKER_WHITELIST :" + jobTrackerWhitelist.toString() + ", Total entries :" + jobTrackerWhitelist.size()); for (String name : ConfigurationService.getStrings(conf, NAME_NODE_WHITELIST)) { @@ -119,12 +124,12 @@ public class HadoopAccessorService implements Service { } nameNodeWhitelist.add(tmp); } - XLog.getLog(getClass()).info( + LOG.info( "NAME_NODE_WHITELIST :" + nameNodeWhitelist.toString() + ", Total entries :" + nameNodeWhitelist.size()); boolean kerberosAuthOn = ConfigurationService.getBoolean(conf, KERBEROS_AUTH_ENABLED); - XLog.getLog(getClass()).info("Oozie Kerberos Authentication [{0}]", (kerberosAuthOn) ? "enabled" : "disabled"); + LOG.info("Oozie Kerberos Authentication [{0}]", (kerberosAuthOn) ? "enabled" : "disabled"); if (kerberosAuthOn) { kerberosInit(conf); } @@ -175,8 +180,8 @@ public class HadoopAccessorService implements Service { conf.set("hadoop.security.authentication", "kerberos"); UserGroupInformation.setConfiguration(conf); UserGroupInformation.loginUserFromKeytab(principal, keytabFile); - XLog.getLog(getClass()).info("Got Kerberos ticket, keytab [{0}], Oozie principal principal [{1}]", - keytabFile, principal); + LOG.info("Got Kerberos ticket, keytab [{0}], Oozie principal principal [{1}]", + keytabFile, principal); } catch (ServiceException ex) { throw ex; @@ -298,17 +303,63 @@ public class HadoopAccessorService implements Service { File dir = actionConfigDirs.get(hostPort); XConfiguration actionConf = new XConfiguration(); if (dir != null) { - File actionConfFile = new File(dir, action + ".xml"); - if (actionConfFile.exists()) { - try { - actionConf = new XConfiguration(new FileInputStream(actionConfFile)); - } - catch (IOException ex) { - XLog.getLog(getClass()).warn("Could not read file [{0}] for action [{1}] configuration for hostPort [{2}]", - actionConfFile.getAbsolutePath(), action, hostPort); + // See if a dir with the action name exists. If so, load all the xml files in the dir + File actionConfDir = new File(dir, action); + + if (actionConfDir.exists() && actionConfDir.isDirectory()) { + LOG.info("Processing configuration files under [{0}]" + + " for action [{1}] and hostPort [{2}]", + actionConfDir.getAbsolutePath(), action, hostPort); + File[] xmlFiles = actionConfDir.listFiles( + new FilenameFilter() { + @Override + public boolean accept(File dir, String name) { + return name.endsWith(".xml"); + }}); + Arrays.sort(xmlFiles, new Comparator<File>() { + @Override + public int compare(File o1, File o2) { + return o1.getName().compareTo(o2.getName()); + } + }); + for (File f : xmlFiles) { + if (f.isFile() && f.canRead()) { + LOG.info("Processing configuration file [{0}]", f.getName()); + FileInputStream fis = null; + try { + fis = new FileInputStream(f); + XConfiguration conf = new XConfiguration(fis); + XConfiguration.copy(conf, actionConf); + } + catch (IOException ex) { + LOG + .warn("Could not read file [{0}] for action [{1}] configuration and hostPort [{2}]", + f.getAbsolutePath(), action, hostPort); + } + finally { + if (fis != null) { + try { fis.close(); } catch(IOException ioe) { } + } + } + } } } } + + // Now check for <action.xml> This way <action.xml> has priority over <action-dir>/*.xml + + File actionConfFile = new File(dir, action + ".xml"); + if (actionConfFile.exists()) { + try { + XConfiguration conf = new XConfiguration(new FileInputStream(actionConfFile)); + XConfiguration.copy(conf, actionConf); + } + catch (IOException ex) { + LOG.warn("Could not read file [{0}] for action [{1}] configuration for hostPort [{2}]", + actionConfFile.getAbsolutePath(), action, hostPort); + } + } + return actionConf; } @@ -334,7 +385,17 @@ public class HadoopAccessorService implements Service { // doing lazy loading as we don't know upfront all actions, no need to synchronize // as it is a read operation an in case of a race condition loading and inserting // into the Map is idempotent and the action-config Map is a ConcurrentHashMap - actionConf = loadActionConf(hostPort, action); + + // We first load a action of type default + // This allows for global configuration for all actions - for example + // all launchers in one queue and actions in another queue + // Are some configuration that applies to multiple actions - like + // config libraries path etc + actionConf = loadActionConf(hostPort, DEFAULT_ACTIONNAME); + + // Action specific default configuration will override the default action config + + XConfiguration.copy(loadActionConf(hostPort, action), actionConf); hostPortActionConfigs.put(action, actionConf); } return new XConfiguration(actionConf.toProperties()); @@ -535,7 +596,7 @@ public class HadoopAccessorService implements Service { String uriScheme = uri.getScheme(); if (uriScheme != null) { // skip the check if no scheme is given if(!supportedSchemes.isEmpty()) { - XLog.getLog(this.getClass()).debug("Checking if filesystem " + uriScheme + " is supported"); + LOG.debug("Checking if filesystem " + uriScheme + " is supported"); if (!supportedSchemes.contains(uriScheme)) { throw new HadoopAccessorException(ErrorCode.E0904, uriScheme, uri.toString()); } http://git-wip-us.apache.org/repos/asf/oozie/blob/a3606f20/core/src/test/java/org/apache/oozie/service/TestHadoopAccessorService.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/oozie/service/TestHadoopAccessorService.java b/core/src/test/java/org/apache/oozie/service/TestHadoopAccessorService.java index aa65065..bbe2594 100644 --- a/core/src/test/java/org/apache/oozie/service/TestHadoopAccessorService.java +++ b/core/src/test/java/org/apache/oozie/service/TestHadoopAccessorService.java @@ -32,19 +32,45 @@ import java.io.OutputStream; import java.net.URI; import org.apache.hadoop.conf.Configuration; import org.apache.oozie.ErrorCode; +import org.apache.oozie.util.XConfiguration; public class TestHadoopAccessorService extends XTestCase { protected void setUp() throws Exception { super.setUp(); new File(getTestCaseConfDir(), "hadoop-confx").mkdir(); - new File(getTestCaseConfDir(), "action-confx").mkdir(); + File actConfXDir = new File(getTestCaseConfDir(), "action-confx"); + actConfXDir.mkdir(); + new File(actConfXDir, "action").mkdir(); + // Create the default action dir + new File(actConfXDir, "default").mkdir(); InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("test-hadoop-config.xml"); OutputStream os = new FileOutputStream(new File(getTestCaseConfDir() + "/hadoop-confx", "core-site.xml")); IOUtils.copyStream(is, os); is = Thread.currentThread().getContextClassLoader().getResourceAsStream("test-action-config.xml"); - os = new FileOutputStream(new File(getTestCaseConfDir() + "/action-confx", "action.xml")); + os = new FileOutputStream(new File(actConfXDir, "action.xml")); IOUtils.copyStream(is, os); + + is = Thread.currentThread().getContextClassLoader().getResourceAsStream("test-default-config.xml"); + os = new FileOutputStream(new File(actConfXDir, "default.xml")); + IOUtils.copyStream(is, os); + + is = Thread.currentThread().getContextClassLoader().getResourceAsStream("test-action-config-1.xml"); + os = new FileOutputStream(new File(actConfXDir + "/action", "a-conf.xml")); + IOUtils.copyStream(is, os); + + is = Thread.currentThread().getContextClassLoader().getResourceAsStream("test-action-config-2.xml"); + os = new FileOutputStream(new File(actConfXDir + "/action", "b-conf.xml")); + IOUtils.copyStream(is, os); + + is = Thread.currentThread().getContextClassLoader().getResourceAsStream("test-action-config-3.xml"); + os = new FileOutputStream(new File(actConfXDir + "/action", "c-conf-3.xml")); + IOUtils.copyStream(is, os); + + is = Thread.currentThread().getContextClassLoader().getResourceAsStream("test-default-config-1.xml"); + os = new FileOutputStream(new File(actConfXDir + "/default", "z-conf.xml")); + IOUtils.copyStream(is, os); + setSystemProperty("oozie.service.HadoopAccessorService.hadoop.configurations", "*=hadoop-conf,jt=hadoop-confx"); setSystemProperty("oozie.service.HadoopAccessorService.action.configurations", @@ -74,10 +100,45 @@ public class TestHadoopAccessorService extends XTestCase { assertNotNull(has.createActionDefaultConf("jt", "action")); assertNotNull(has.createActionDefaultConf("jt", "actionx")); assertNotNull(has.createActionDefaultConf("jtx", "action")); - assertEquals("action.bar", has.createActionDefaultConf("jt", "action").get("action.foo")); assertNull(has.createActionDefaultConf("*", "action").get("action.foo")); } + public void testActionConfigurations() throws Exception { + Services services = Services.get(); + HadoopAccessorService has = services.get(HadoopAccessorService.class); + assertNotNull(has); + XConfiguration conf = has.createActionDefaultConf("jt", "action"); + assertNotNull(conf); + + // Check that the param only in default.xml is still present + assertEquals("default.bar", conf.get("default.foo")); + + // And a property that is present in one of the conf files in default dir + assertEquals("default.bus", conf.get("default.car")); + + // Check that a default param is overridden by one of the action config files + assertEquals("action.bar", conf.get("action.foo")); + + // Check that params from <action-dir>/action/conf files is still present + assertEquals("action.car", conf.get("action.boo")); + assertEquals("action.carcar", conf.get("oozie.launcher.action.booboo")); + + /* + Check precedence - Order of precedence - 0 is the lowest. Parameters in files of + lower precedence will be overridden by redefinitions in higher precedence files. + + 0 - All files in defaultdir/*.xml (sorted by lexical name) + Files with names lexically lower have lesser precedence than the following ones. + 1 - default.xml + 2 - All files in actiondir/*.xml (sort by lexical name) + Files with names lexically lower have lesser precedence than the following ones + 3 - action.xml + */ + assertEquals("100", conf.get("action.testprop")); + assertEquals("1", conf.get("default.testprop")); + + } + public void testAccessor() throws Exception { Services services = Services.get(); HadoopAccessorService has = services.get(HadoopAccessorService.class); http://git-wip-us.apache.org/repos/asf/oozie/blob/a3606f20/core/src/test/resources/test-action-config-1.xml ---------------------------------------------------------------------- diff --git a/core/src/test/resources/test-action-config-1.xml b/core/src/test/resources/test-action-config-1.xml new file mode 100644 index 0000000..028ad18 --- /dev/null +++ b/core/src/test/resources/test-action-config-1.xml @@ -0,0 +1,31 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> +<!-- + 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. +--> +<configuration> + + <property> + <name>default.param</name> + <value>default.value</value> + </property> + + <property> + <name>action.testprop</name> + <value>1</value> + </property> +</configuration> http://git-wip-us.apache.org/repos/asf/oozie/blob/a3606f20/core/src/test/resources/test-action-config-2.xml ---------------------------------------------------------------------- diff --git a/core/src/test/resources/test-action-config-2.xml b/core/src/test/resources/test-action-config-2.xml new file mode 100644 index 0000000..0376cdc --- /dev/null +++ b/core/src/test/resources/test-action-config-2.xml @@ -0,0 +1,37 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> +<!-- + 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. +--> +<configuration> + + <property> + <name>action.boo</name> + <value>action.car</value> + </property> + + <property> + <name>oozie.launcher.action.booboo</name> + <value>action.carcar</value> + </property> + + <property> + <name>action.testprop</name> + <value>2</value> + </property> + +</configuration> http://git-wip-us.apache.org/repos/asf/oozie/blob/a3606f20/core/src/test/resources/test-action-config-3.xml ---------------------------------------------------------------------- diff --git a/core/src/test/resources/test-action-config-3.xml b/core/src/test/resources/test-action-config-3.xml new file mode 100644 index 0000000..d47796b --- /dev/null +++ b/core/src/test/resources/test-action-config-3.xml @@ -0,0 +1,36 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> +<!-- + 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. +--> +<configuration> + + <property> + <name>default.param</name> + <value>default.value</value> + </property> + + <property> + <name>action.testprop</name> + <value>3</value> + </property> + + <property> + <name>action.testprop</name> + <value>1</value> + </property> +</configuration> http://git-wip-us.apache.org/repos/asf/oozie/blob/a3606f20/core/src/test/resources/test-action-config.xml ---------------------------------------------------------------------- diff --git a/core/src/test/resources/test-action-config.xml b/core/src/test/resources/test-action-config.xml index 59db9b5..6817432 100644 --- a/core/src/test/resources/test-action-config.xml +++ b/core/src/test/resources/test-action-config.xml @@ -29,4 +29,8 @@ <value>action.barbar</value> </property> + <property> + <name>action.testprop</name> + <value>100</value> + </property> </configuration> http://git-wip-us.apache.org/repos/asf/oozie/blob/a3606f20/core/src/test/resources/test-default-config-1.xml ---------------------------------------------------------------------- diff --git a/core/src/test/resources/test-default-config-1.xml b/core/src/test/resources/test-default-config-1.xml new file mode 100644 index 0000000..367755a --- /dev/null +++ b/core/src/test/resources/test-default-config-1.xml @@ -0,0 +1,42 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> +<!-- + 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. +--> +<configuration> + + <property> + <name>action.boo</name> + <value>action.car</value> + </property> + + <property> + <name>default.car</name> + <value>default.bus</value> + </property> + + <property> + <name>oozie.launcher.action.booboo</name> + <value>action.carcar</value> + </property> + + <property> + <name>default.testprop</name> + <value>0</value> + </property> + +</configuration> http://git-wip-us.apache.org/repos/asf/oozie/blob/a3606f20/core/src/test/resources/test-default-config.xml ---------------------------------------------------------------------- diff --git a/core/src/test/resources/test-default-config.xml b/core/src/test/resources/test-default-config.xml new file mode 100644 index 0000000..a9232bf --- /dev/null +++ b/core/src/test/resources/test-default-config.xml @@ -0,0 +1,36 @@ +<?xml version="1.0"?> +<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> +<!-- + 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. +--> +<configuration> + + <property> + <name>default.foo</name> + <value>default.bar</value> + </property> + + <property> + <name>action.foo</name> + <value>action.default</value> + </property> + + <property> + <name>default.testprop</name> + <value>1</value> + </property> +</configuration> http://git-wip-us.apache.org/repos/asf/oozie/blob/a3606f20/docs/src/site/twiki/AG_ActionConfiguration.twiki ---------------------------------------------------------------------- diff --git a/docs/src/site/twiki/AG_ActionConfiguration.twiki b/docs/src/site/twiki/AG_ActionConfiguration.twiki new file mode 100644 index 0000000..f8e6edc --- /dev/null +++ b/docs/src/site/twiki/AG_ActionConfiguration.twiki @@ -0,0 +1,55 @@ +<noautolink> + +[[index][::Go back to Oozie Documentation Index::]] + +---+!! Action Configuration + +Oozie supports providing default configuration for actions of a particular +action type and default configuration for all actions + +---++ Hadoop Default Configuration Values + +Oozie supports action configuration equivalent to the component's =*-site.xml= files. + +The configuration property in the =oozie-site.xml= is =oozie.service.HadoopAccessorService.action.configurations= +and its value must follow the pattern _[AUTHORITY=ACTION-CONF-DIR_,]*. Where _AUTHORITY_ is the _HOST:PORT_ of +the Hadoop service (JobTracker/ResourceManager or HDFS). The _ACTION-CONF-DIR_ is the action configuration directory. If the specified directory is a relative path, it will be looked under the Oozie configuration directory. An absolute path can +also be specified. Oozie will load and process the action configuration files in the following order. + + 1. All files in _default_/*.xml (sorted by lexical name, files with names lexically lower have lesser precedence than the following ones), if present. + 1. _default_.xml, if present. + 1. All files in _actionname_/*.xml (sorted by lexical name, files with names lexically lower have lesser precedence than the following ones), if present. + 1. _actionname_.xml, if present. + + +For example, for _Hive_ action (which has the _actionname_ defined as _hive_ ), the list of files (under relevant _ACTION-CONF-DIR_ ) processed would be, + + 1. All files in _default_/*.xml, if present + 1. _default_.xml, if present. + 1. All files in _hive_/*.xml, if present + 1. _hive_.xml, if present. + + +Files processed earlier for an action have the lowest precedence and can have the configuration parameters redefined. All files and directories are relative to the _ACTION-CONF-DIR_ directory. + +In addition to explicit authorities, a '*' wildcard is supported. The configuration file associated with the wildcard +will be used as default if there is no action configuration for the requested Hadoop service. + +For example, the configuration in the =oozie-site.xml= would look like: + +<verbatim> +... + <property> + <name>oozie.service.HadoopAccessorService.action.configurations</name> + <value>*=hadoop-conf,jt-bar:8021=bar-cluster,nn-bar:8020=bar-cluster</value> + </property> +... +</verbatim> + +The action configuration files use the Hadoop configuration syntax. + +By default Oozie does not define any default action configurations. + +[[index][::Go back to Oozie Documentation Index::]] + +</noautolink> http://git-wip-us.apache.org/repos/asf/oozie/blob/a3606f20/docs/src/site/twiki/index.twiki ---------------------------------------------------------------------- diff --git a/docs/src/site/twiki/index.twiki b/docs/src/site/twiki/index.twiki index 50c6213..8591530 100644 --- a/docs/src/site/twiki/index.twiki +++ b/docs/src/site/twiki/index.twiki @@ -73,6 +73,7 @@ Enough reading already? Follow the steps in [[DG_QuickStart][Oozie Quick Start]] * [[AG_Install][Oozie Install]] * [[AG_OozieLogging][Oozie Logging]] * [[AG_HadoopConfiguration][Hadoop Configuration]] + * [[AG_ActionConfiguration][Action Configuration]] * [[AG_Monitoring][Oozie Monitoring]] * [[DG_CommandLineTool][Command Line Tool]] * [[AG_OozieUpgrade][Oozie Upgrade]] http://git-wip-us.apache.org/repos/asf/oozie/blob/a3606f20/release-log.txt ---------------------------------------------------------------------- diff --git a/release-log.txt b/release-log.txt index bfa9fdd..74fbd57 100644 --- a/release-log.txt +++ b/release-log.txt @@ -1,5 +1,6 @@ -- Oozie 4.2.0 release (trunk - unreleased) +OOZIE-2051 Allows multiple default action configuration files per action (venkatnrangan via bzhang) OOZIE-2170 Oozie should automatically set configs to make Spark jobs show up in the Spark History Server (rkanter) OOZIE-2140 Audit Log should be shown in Oozie UI (puru) OOZIE-2139 Coord update doesn't work for job which is submitted by bundle (puru)
