Oracle® Fusion Middleware

Release Notes for Oracle Traffic Director

12c (12.2.1)

E52353-03

December 2015

This document contains information about the new features and known issues for Oracle Traffic Director 12.2.1. It contains:

1 What's New in This Release?

The following are the new features in Oracle Traffic Director 12.2.1. For more information, see Administering Oracle Traffic Director:

2 Known Issues

This section provides information about the known issues for Oracle Traffic Director 12.2.1 along with possible workarounds:

2.1 FIPS Mode Support for OTD 12.2.1 on AIX.PPC64

When FIPS mode is enabled in an OTD Instance on AIX, OTD instance startup fails with the following error:

nzos_SetFipsMode is returning NZ error 29231 which is NZERROR_TK_CE_INIT = 29231 
/* Crypto engine failed to initialize */

The OTD server does not start because of FIPS initialization failure due to RSA third party issues.

The solution to this issue is to take the following actions:

  1. Create short symlinks from a short write-protected directory to library folders inside ${MW_HOME} as shown in this example:

    ln -s /usr/otd_user/12cOTD/mw_home/otd/lib /usr/lib1 
    ln -s /usr/otd_user/12cOTD/mw_home/oracle_common/lib /usr/lib2 
    ln -s /usr/otd_user/12cOTD/mw_home/lib/ /usr/lib3
    

    Where: MW_HOME is - /usr/otd_user/12cOTD/mw_home and /usr is the shortest secure folder

  2. In this example in which the OTD instance is named "test", edit the script in

    ${DOMAIN_HOME}/config/fmwconfig/components/OTD/instances/otd_test_Machine-0/bin/startserv
    

    Change SERVER_LIB_PATH from

    SERVER_LIB_PATH="${SERVER_LIB_DIR}:${ORACLE_HOME}/lib:${ORACLE_HOME}/oracle_common/lib"
    

    to

    SERVER_LIB_PATH=/usr/lib1:/usr/lib2:/usr/lib3
    

2.2 Configuration update fails after starting failover

On Linux, if the otd_startFailover command has been succesfully issued at least once, all further configuration updates would fail. This is because the otd_startFailover command would create a keepalived.conf file under the config directory of the corresponding instance. Since the otd_startFailover command has to be executed as a privileged user (using sudo), the keepalived.conf created by it is owned by the privileged user and therefore the node manager is not able to update the instance whenever configuration updates are activated.

You can solve the issue by the following steps:

  1. Once the otd_startFailover command has been issued, you have to modify the file permissions of the keepalived.conf for the corresponding instance to the same owner as one of the other configuration files under the config directory of that instance.

  2. Alternatively, it can be automated using a WLST script which can invoked instead of the otd_startFailover WLST command. Check the sample script below.

    # Starts failover for an instance and changes ownership on keepaloved.conf
    # This script can only be run with root privileges 
    # Usage:
    # sudo wlst.sh start_failover.py --domain-home=<wls_domain_dir> --instance=<instance_name>"
    # Mandatory options - domain-home, instance
    import os
    import os.path
    import getopt
    
    from java.nio.file import Files
    from java.io import File
    
    # Constants
    DOMAIN_HOME = "domain-home"
    INSTANCE_NAME = "instance"
    
    valid_props = [DOMAIN_HOME, INSTANCE_NAME]
    
    def main():
        args = process_args(valid_props, usage)
        try:
            try:
                otd_startFailover(args)
            except Exception, ex :
                handleError(ex)
        finally:
            change_keepalived_conf_ownership(args[DOMAIN_HOME], args[INSTANCE_NAME])
    
    def change_keepalived_conf_ownership(domain_home, instance_name):    instance_root = domain_home + "/config/fmwconfig/components/OTD/instances/"    instance_config_dir = instance_root + instance_name + "/config/"    keepalived_conf = instance_config_dir + "keepalived.conf"    if os.path.exists(keepalived_conf):        server_xml = instance_config_dir + "server.xml"         owner = Files.getOwner(File(server_xml).toPath(), [])        Files.setOwner(File(keepalived_conf).toPath(), owner)
    
    def usage():
        print "Usage: sudo wlst.sh start_failover.py --help|-h"
        print "    or sudo wlst.sh start_failover.py --domain-home=<wls_domain_dir> --instance=<instance_name>"
    
    def process_args(all_props, usage):
        try:
            prop_names = ["help"]
            for prop_name in all_props:
                prop_names.append(prop_name + "=")
    
            # Parse the command line arguments using getopt.getopt which will return options (--option)
            # and arguments (any arguments).
            # It also validates whether any irrelavant options/arguments are specified apart from the ones
            # that are specified in getopt and throws the error appropriately
            # For more information on getopt look at http://docs.python.org/2/library/getopt.html
            opts, args = getopt.getopt(sys.argv[1:], "h", prop_names)
    
        except getopt.GetoptError, err:
            # This occurs when invalid options/arguments are specified. So print the help information and exit
            if (usage != None):
                usage()
                handle_error(err)
            sys.exit(1)
    
        props = {}
    
        # Take the appropriate action based on the options specified and also override the default props with user specified props    for key, value in opts: 
           if key in ["--help", "-h"]:
                usage()
                sys.exit(1)
            else:
                # Override the instance properties with the user specified properties.
                # Note that key contains values with "--" prefix, for example --option.
                # So we need to remove the prefix using key[2:]            props[key[2:]] = value    return props
    
    # If the function argument is a java.lang.Exception then print the exception stack trace and exit
    # else just print the error message to stderr and exitdef handle_error(error):
        if isinstance(error, JavaException):
            error.printStackTrace()
        else :
            sys.stderr.write(str(error) + "\n")
        sys.exit(1)
    
    # Execution starts here ...
    if __name__ == "main":
        main()
    

Note:

The script can be saved anywhere with the name start_failover.py. The script should be invoked as follows:
wlst.sh <Path to start_failover.py> --domain-home=<wls_domain_dir> --instance=<instance_name>.

3 Documentation Accessibility

For information about Oracle's commitment to accessibility, visit the Oracle Accessibility Program website at http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc.

Access to Oracle Support

Oracle customers that have purchased support have access to electronic support through My Oracle Support. For information, visit http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info or visit http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs if you are hearing impaired.


Oracle Fusion Middleware Release Notes for Oracle Traffic Director, 12c (12.2.1)

E52353-03

Copyright © 2014, 2015, Oracle and/or its affiliates. All rights reserved.

This software and related documentation are provided under a license agreement containing restrictions on use and disclosure and are protected by intellectual property laws. Except as expressly permitted in your license agreement or allowed by law, you may not use, copy, reproduce, translate, broadcast, modify, license, transmit, distribute, exhibit, perform, publish, or display any part, in any form, or by any means. Reverse engineering, disassembly, or decompilation of this software, unless required by law for interoperability, is prohibited.

The information contained herein is subject to change without notice and is not warranted to be error-free. If you find any errors, please report them to us in writing.

If this is software or related documentation that is delivered to the U.S. Government or anyone licensing it on behalf of the U.S. Government, then the following notice is applicable:

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

This software or hardware is developed for general use in a variety of information management applications. It is not developed or intended for use in any inherently dangerous applications, including applications that may create a risk of personal injury. If you use this software or hardware in dangerous applications, then you shall be responsible to take all appropriate fail-safe, backup, redundancy, and other measures to ensure its safe use. Oracle Corporation and its affiliates disclaim any liability for any damages caused by use of this software or hardware in dangerous applications.

Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.

Intel and Intel Xeon are trademarks or registered trademarks of Intel Corporation. All SPARC trademarks are used under license and are trademarks or registered trademarks of SPARC International, Inc. AMD, Opteron, the AMD logo, and the AMD Opteron logo are trademarks or registered trademarks of Advanced Micro Devices. UNIX is a registered trademark of The Open Group.

This software or hardware and documentation may provide access to or information about content, products, and services from third parties. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to third-party content, products, and services unless otherwise set forth in an applicable agreement between you and Oracle. Oracle Corporation and its affiliates will not be responsible for any loss, costs, or damages incurred due to your access to or use of third-party content, products, or services, except as set forth in an applicable agreement between you and Oracle.

The information contained in this document is for informational sharing purposes only and should be considered in your capacity as a customer advisory board member or pursuant to your beta trial agreement only. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described in this document remains at the sole discretion of Oracle.

This document in any form, software or printed matter, contains proprietary information that is the exclusive property of Oracle. Your access to and use of this confidential material is subject to the terms and conditions of your Oracle Master Agreement, Oracle License and Services Agreement, Oracle PartnerNetwork Agreement, Oracle distribution agreement, or other license agreement which has been executed by you and Oracle and with which you agree to comply. This document and information contained herein may not be disclosed, copied, reproduced, or distributed to anyone outside Oracle without prior written consent of Oracle. This document is not part of your license agreement nor can it be incorporated into any contractual agreement with Oracle or its subsidiaries or affiliates.