<html>
  <!--
   ***************************************************************
   * 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.
   ***************************************************************
   -->
<head>
  <title>Apache Distributed UIMA Cluster Computing (DUCC) 2.2.2 Release Notes</title>
</head>
<body>
<h1>Apache UIMA-DUCC (Unstructured Information Management Architecture - Distributed UIMA Cluster Computing ) v.2.2.2 Release Notes</h1>

<h2>Contents</h2>
<p>
<a href="#what.is.uima-ducc">1. What is UIMA-DUCC?</a><br/>
<a href="#major.changes">2. Major Changes in this Release</a><br/>
<a href="#migration">3. Migration from a Prior Release</a><br/>  
<a href="#migration">4. Limitations</a><br/></p>  
   
<h2><a name="what.is.uima-ducc">1. What is UIMA-DUCC?</a></h2>
<p>
  			DUCC stands for Distributed UIMA Cluster Computing. DUCC is a cluster management system providing tooling,
management, and scheduling facilities to automate the scale-out of applications written to the UIMA framework.
Core UIMA provides a generalized framework for applications that process unstructured information such as human
language, but does not provide a scale-out mechanism. UIMA-AS provides a scale-out mechanism to distribute UIMA
pipelines over a cluster of computing resources, but does not provide job or cluster management of the resources.
DUCC defines a formal job model that closely maps to a standard UIMA pipeline. Around this job model DUCC
provides cluster management services to automate the scale-out of UIMA pipelines over computing clusters.
</p>
      
<h2><a name="major.changes">2. Major Changes in this Release</a></h2>
<p>
Apache UIMA DUCC 2.2.2 is a maintenance release containing new features and bug fixes. What's new:<br>

<ul>
<li>Upgraded UIMA (2.10.2), UIMA-AS (2.10.2), ActiveMQ (5.15.2), Spring Framework (4.3.9), Camel (2.19.3), XStream (1.4.10)</li>
<li>Requires java 8 for builds and runtime. User jobs and services must use java 8.</li>
<li>Fixed rogue process detector to prevent truncation of user names</li>
<li>Reduced size of publications between the PM and Agents</li>
<li>Improved Agent's detection of defunct processes</li>
<li>Improved logging of system events</li>
<li>ducc_watcher improvements</li>
<li>Job & managed reservation specs now saved in DB</li>
<li>DUCC Web Server (WS) queries DB too often</li>
<li>DUCC Web Server (WS) should use Resource Manager (RM) calculated value for machine's memory available</li>
</ul>

<br><br>

For a complete list of issues fixed and up-to-date information on UIMA-DUCC issues, see our issue tracker: 
<a href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20UIMA%20AND%20fixVersion%20%3D%20%222.2.2-Ducc%22%20">https://issues.apache.org/jira/issues/?jql=project%20%3D%20UIMA%20AND%20fixVersion%20%3D%20%222.2.2-Ducc%22%20</a>
</p> 
      
<h2><a name="migration">3. Migration from a Prior Release</a></h2>

When upgrading from an existing installation the ducc_update script may be used to replace the system files while leaving the site-specific configuration files in place. For more information see <strong>ducc_update</strong> in the Administrative Commands section of the DuccBook. 

<p>
</p>
<h2><a name="limitations">4. Limitations</a></h2>
On some systems cgroups swap accounting is not enabled and duccmon will show N/A for swap. To 
confirm, please check memory.stat file in <cgroups base dir>/ducc/ folder. If swap accounting is 
enabled there should be "swap" property defined. If it's missing, you need to add a kernel parameter 
swapaccount=1. Details of how to do this can be found <a href="http://unix.stackexchange.com/questions/147158/how-to-enable-swap-accounting-for-memory-cgroup-in-archlinux">here</a>.
<p>
Due to a bug in uima sdk, the uima AnalysisEngineProcessException cannot be serialized as a Java object. If your
analysis engine throws an exception in process(), the ducc framework will stringify it and wrap it in
java RuntimeException. If you have a custom error handler plugged in into a job driver you will not be
able to test for AnalysisEngineProcessException in a stack trace with a code like this:

   if ( error instanceof AnalysisEngineProcessException ) ...
</p>
<p>
To use OS-based login with the WebServer while running DUCC with IBM java, the minimum JDK version is 
Java 8 SR4 FP5 (8.0.4.5).
</p>
<p>
Due to a bug in uima-as v.2.10.2 (see <a href="https://issues.apache.org/jira/browse/UIMA-5747">https://issues.apache.org/jira/browse/UIMA-5747</a>), job processes which use uima-as Jms Service Descriptor may fail with javax.jms.InvalidClientIDException. The fix for this is to use uima-as 2.9.0.  
</p>
</body>
</html>
