Apache Airavata Release Notes

See http://issues.apache.org/jira/browse/AIRAVATA-* (where * is the number of the issue below)


Release Notes - Airavata - Version 0.17

** Epic
    * [AIRAVATA-1601] - Support multi tenancy inside airavata

** Story
    * [AIRAVATA-439] - GFAC/Orchestrator exception handling and notifications
    * [AIRAVATA-1603] - Support multi-tenant in GFac
    * [AIRAVATA-2117] - User Compute Resource Preference

** New Feature
    * [AIRAVATA-609] - There should be a way to stop workflow running in the interpreter service
    * [AIRAVATA-1322] - Implement simple role scheme for Application Catalog
    * [AIRAVATA-1716] - Enable Email based monitor for PSC Blacklight
    * [AIRAVATA-1792] - Implement ability for admin to search for experiments using the created user as well
    * [AIRAVATA-2185] - Add OWNER ResourcePermissionType to sharing API
    * [AIRAVATA-2250] - Implement user preference usage in desktop client
    * [AIRAVATA-2291] - Database Migration Dev to Master
    * [AIRAVATA-2312] - Avoid manually adding user roles to gateway users on gateway PI request
    * [AIRAVATA-2370] - Cannot create a new gateway request

** Improvement
    * [AIRAVATA-268] - Make XBaya error window size smaller
    * [AIRAVATA-402] - Optional outputs from a application
    * [AIRAVATA-461] - Allow users skip the workflow Nodes which already ran and invoke the rest of the Nodes
    * [AIRAVATA-518] - XBaya needs a "get version number" feature in the UI
    * [AIRAVATA-800] - Remove copy-dependencies maven plugin from modules/xbaya-gui
    * [AIRAVATA-819] - Support the workflows with ForEach inputs to get inputs from file
    * [AIRAVATA-866] - Automatically updating the user context (XBaya)
    * [AIRAVATA-940] - To see the result by clicking Xbaya's output component view button.
    * [AIRAVATA-973] - Improving XBays.java '-workflow' option to accept URL as well
    * [AIRAVATA-1081] - Airavata README is obsolete
    * [AIRAVATA-1118] - Adding Permission attribute to XBaya main jar to follow recent JAVA security update guide line
    * [AIRAVATA-1397] - PGA gateway needs to gracefully handle attempts to upload files that are too large.
    * [AIRAVATA-1639] - Fixing warnings and errors during airavata start up
    * [AIRAVATA-1880] - In Application Interface ability to make inputs unchangeable by the end user.
    * [AIRAVATA-2124] - Replace XSLT base script generation with Groovy Template Engine.
    * [AIRAVATA-2163] - optimize credential store data models
    * [AIRAVATA-2184] - Get project/experiment ownership from sharing service
    * [AIRAVATA-2225] - Can we hide 'Enable Auto Scheduling' in create, clone and edit experiment unless Gateway request it?
    * [AIRAVATA-2258] - Implement the notifications display in the SEAGrid Rich Client
    * [AIRAVATA-2620] - Force post processing functionality

** Wish
    * [AIRAVATA-482] - color change between pending and active state of a task

** Task
    * [AIRAVATA-558] - Save workflow notifications from XBaya
    * [AIRAVATA-793] - Add Cloud-Bursting configurability support for XBaya
    * [AIRAVATA-1324] - Add per-community account support to gateway profile
    * [AIRAVATA-1325] - Improve and modify Airavata start up script with reference to zookeeper start up script.
    * [AIRAVATA-1677] - Refactor XBaya
    * [AIRAVATA-2002] - Update License and Notice files for 0.17 release
    * [AIRAVATA-2283] - Write integration test suit

** Question
    * [AIRAVATA-1984] - What is 'Update Priority' in job submission interface and data movement interface used for?
    * [AIRAVATA-2139] - What was intended to achieve by 'Is the Input required?' in application interface

** Documentation
    * [AIRAVATA-1086] - INSTALL is out of date

** Sub-task
    * [AIRAVATA-794] - Create unit tests and/or tutorial to show cloud bursting feature in Airavata using XBaya
    * [AIRAVATA-1233] - Deprecate Workflow Execution Context
    * [AIRAVATA-1361] - Search for experiments created, launched within a given time frame
    * [AIRAVATA-1679] - Setup amqp monitoring configuration using XBaya GUI
    * [AIRAVATA-1871] - Currently gateway admins see all the roles in PGA; Some meaningless at gateway level for gateway admins. Exists due to IS requirements.
    * [AIRAVATA-2001] - When an experiment shared with a user, he cannot view the experiment.
    * [AIRAVATA-2178] - GFAC changes for user specific compute resource preferences
    * [AIRAVATA-2292] - Generate Delta SQL Scripts for addressing immediate migration from Dev to Master
    * [AIRAVATA-2576] - Modify PGA to fetch customized dashboard attributes from profile service


** Bug
    * [AIRAVATA-511] - String inputs are accepted only till the first occurrence of space while running workflows
    * [AIRAVATA-542] - Can't run workflows which have Memo Components in Xbaya.
    * [AIRAVATA-779] - Xbaya: handling of StringArray is not consistent with URIArray
    * [AIRAVATA-943] - Xbaya output component's notification bug.
    * [AIRAVATA-959] - Provenance Aware workflow processing is not working
    * [AIRAVATA-971] - XBaya run workflow window does not render correctly for a workflow which has lot of inputs
    * [AIRAVATA-976] - Same INSTALL, README, NOTICE files are duplicated in many places
    * [AIRAVATA-1012] - Exception thrown at Edit > WorkFlow Properties and Edit > Parameter Properties when WorkFlow is not opened
    * [AIRAVATA-1705] - In PGA when Project name, description updated and saved, modified information does not get saved
    * [AIRAVATA-1765] - In PGA users can create user account entering same email.
    * [AIRAVATA-1841] - Display a proper message in PGA when Airavata server is down; currently page crashes with an error
    * [AIRAVATA-1863] - Please validate existence of defined application inputs at Create and Launch Experiment level in Airavata
    * [AIRAVATA-1864] - GFAC-core - fix to NPE when no DataMovementInterfaces defined
    * [AIRAVATA-1868] - When modified and saved the changes are not applied to application interface
    * [AIRAVATA-1873] - Once the user is logged in should not prompt the login screen again
    * [AIRAVATA-1878] - Adding App Module and Deployment pages closes if user clicks outside background page
    * [AIRAVATA-1885] - Cannot add data movement interface for a new storage resource as scigap admin. Page crashes in PGA
    * [AIRAVATA-1887] - Fixes to 'Detailed Experiment Information' in Admin Dashboard
    * [AIRAVATA-1890] - the gateway preference fails with a nullpointer error when no uncelectedCRs are in the database..
    * [AIRAVATA-1910] - Button to add input files in Create Experiment is not clickable when opened in Chrome
    * [AIRAVATA-1936] - When a compute resource is deleted related other entries are not getting deleted from the database
    * [AIRAVATA-1940] - When Unicore experiments are cloned US3INPUTTARG and UserDN are not cloned
    * [AIRAVATA-1944] - When adding 'Local' job submission protocol do we need, Select resource manager type, Parallelism Prefixes, etc?
    * [AIRAVATA-1957] - When experiments are cloned there are two data directories getting created in the Storage
    * [AIRAVATA-1961] - Creating a project name including '&' gives attached error
    * [AIRAVATA-1971] - 'Launch Selected' and 'Delete Selected' buttons are not working in SEAGrid desktop client
    * [AIRAVATA-1990] - Adding seperate reservations in slurm script for multiple resources
    * [AIRAVATA-1997] - Gateway ID saved as project name. Default Project not existing for new users.
    * [AIRAVATA-1999] - Exception thrown when updated the Default Project name and description
    * [AIRAVATA-2003] - When SciGaP admin click 'APPROVE' for a new gateway page crashes.
    * [AIRAVATA-2004] - Once a gateway request is APPROVED or DENIED a status should get updated
    * [AIRAVATA-2009] - Wrong Canonical ASF git repo URL for Airavata web site
    * [AIRAVATA-2032] - In PGA --> Admin Dashboard --> Experiment Statistics page cannot close the tabs opened due to searching experiments
    * [AIRAVATA-2041] - Provide proper error message when searched non existing experiment ID in Experiment Statistics page
    * [AIRAVATA-2062] - When added multiple QOS for a single resource in Gateway Profile Experiment job submission fails.
    * [AIRAVATA-2063] - When QOS added in one gateway (seagrid) it is also taken as the qos of the other gateway (testdrive) linked with airavata
    * [AIRAVATA-2096] - Experiment in EXECUTING state even when the cluster initialization fails and job cannot be launched at the resource.
    * [AIRAVATA-2112] - Email monitoring not working on Jetstream Torque cluster when running Quantum Espresso
    * [AIRAVATA-2142] - Experiment name having period character '.' creates issue for experiment status updates
    * [AIRAVATA-2146] - Improve Credential store token and key generation
    * [AIRAVATA-2165] - In Firefox, portal pages are loaded twice more, with errors
    * [AIRAVATA-2176] - Error submitting Phasta job: "Undefined index: Input Configuration"
    * [AIRAVATA-2180] - Experiment status is not getting updated to FAILED when SSH connection couldnt be established
    * [AIRAVATA-2181] - Cannot view the experiment outputs from PGA. Getting exception: The file "/var/www/portals/gateway-user-data/dev-seagrid/" does not exist
    * [AIRAVATA-2182] - Updated an experiment with notification email but upon saving it does not appear in Experiment Summary
    * [AIRAVATA-2186] - Abaqus experiment on Comet is in EXECUTING. Not moving further and no errors in logs as well
    * [AIRAVATA-2190] - User A shared a single experiment with User B, read access. Project is also shared now with User B.
    * [AIRAVATA-2191] - Experiment of User A got automatically shared with User B when User A shares another experiment with user C
    * [AIRAVATA-2192] - user A shared a project which has two experiments with user B. Exception thrown, User B cannot view the experiment summary
    * [AIRAVATA-2193] - When projects of other users are available for experiment creation cannot figure out to whom it belongs
    * [AIRAVATA-2194] - In Experiment the sharing window cannot be closed. The heading of the window also need to change.
    * [AIRAVATA-2196] - Both users with 'Read' access and 'Write' access should NOT have the same set of privileges in PGA
    * [AIRAVATA-2200] - Allow user to select their own compute resource account when creating experiment
    * [AIRAVATA-2201] - Application working directory is not getting archived. ARCHIVE directory is empty in PGA
    * [AIRAVATA-2207] - Gateway admins cannot view experiments launched by gateway users in Experiment Statistics
    * [AIRAVATA-2211] - Improve User Resource Profile Management UIs
    * [AIRAVATA-2212] - Experiment Auto Refresh may try to reload the page while reloading the page
    * [AIRAVATA-2216] - Sharing button doesn't work on Create Project when page hasn't finished loading
    * [AIRAVATA-2217] - Sharing service should prevent removing sharing of experiments from the project's owner
    * [AIRAVATA-2218] - Cannot change name of project
    * [AIRAVATA-2219] - With groovey scripts some of the post job commands with special characters are failing
    * [AIRAVATA-2223] - Support for data sharing disabled
    * [AIRAVATA-2228] - Improvements to Experiment Actions
    * [AIRAVATA-2230] - getQueueView: Error while retrieving compute resource
    * [AIRAVATA-2231] - UserResourceProfileResource.save() looks up existing UserResourceProfile by user_id instead of by (user_id, gateway_id)
    * [AIRAVATA-2241] - Experiments are not getting launched. Just states in CREATED state after launched.
    * [AIRAVATA-2242] - SQL migration script for 0.17 release
    * [AIRAVATA-2252] - personal resource specific submission fails with Jsch error
    * [AIRAVATA-2261] - When User B clones User A's experiment notification email is of the original user A and cannot change.
    * [AIRAVATA-2266] - When tried to create tenant it asked to enter the auth key and the secret
    * [AIRAVATA-2269] - The gateway admin cannot get access to the gateway even with 'admin' role
    * [AIRAVATA-2270] - When experiment ID consists '<' character cannot view the experiment details in experiment statistics.
    * [AIRAVATA-2273] - When the Total Physical Memory is given in create experiment UI it is not appearing in job script as MBs
    * [AIRAVATA-2274] - Cannot upload multiple optional files in a cloned experiment. Exception thrown
    * [AIRAVATA-2275] - In automated tenant creation for gateway requests have adding and publishing policy
    * [AIRAVATA-2278] - Hide Roles UI from Admin dashboard.
    * [AIRAVATA-2282] - Notifications are not displaying in reverse creation date order
    * [AIRAVATA-2284] - Airavata session cacheing Creates issues for job submissions on remote clusters
    * [AIRAVATA-2290] - Experiments at failing at input DATA_STAGING
    * [AIRAVATA-2294] - When invalid credential store token is provided fail the experiment.
    * [AIRAVATA-2295] - Cannot open 'Compute Resource page in User settings; exception thrown
    * [AIRAVATA-2297] - Upgrade PHPMailer to >= 5.2.20 to address CVE-2016-10045
    * [AIRAVATA-2302] - when user accounts confirmed users see 'Airavata servers down' message even when the servers are up and running. also the role change does not trigger changes in gateway privileges
    * [AIRAVATA-2314] - Job notification emails from tandy super computer at OII are not processed by gfac.
    * [AIRAVATA-2319] - When 'Gateway Id for Usage Reporting' is updated in the gateway preferences it is saved in place of 'Allocation Project Number'
    * [AIRAVATA-2329] - file staging seem to hang in dev.seagrid desktop client based job launch
    * [AIRAVATA-2339] - Default ssh key use for individual user accounts failing. Cannot ssh to compute resource
    * [AIRAVATA-2343] - In airavata 0.17 JS deployment cannot browse projects
    * [AIRAVATA-2344] - In airavata 0.17 JS deployment cannot create and save new project
    * [AIRAVATA-2345] - In airavata 0.17 JS deployment gateway admin cannot view other users experiment summary and statistics
    * [AIRAVATA-2346] - In airavata 0.17 JS deployment user who owns a project cannot edit that project and cannot create experiments in that project
    * [AIRAVATA-2348] - Cannot update an existing project after adding a shared user.
    * [AIRAVATA-2349] - Airavata system exception when tried to open Credential Store and Gateway Management pages.
    * [AIRAVATA-2350] - USER_RESOURCE_PROFILE DB Primary Key should include the gateway_id
    * [AIRAVATA-2364] - Keep getting 'Maximum execution time of 30 seconds exceeded' when tried to create a project
    * [AIRAVATA-2376] - Duplicating experiment records in Experiment statistics and Experiment browse
    * [AIRAVATA-2377] - Cannot download the MAC desktop client from https://seagrid.org
    * [AIRAVATA-2437] - Cannot edit or share previous projects or new projects
    * [AIRAVATA-2439] - Cannot create new experiments
    * [AIRAVATA-2440] - With keycloak, my username is changed, results a new data directory creation
    * [AIRAVATA-2447] - When given user-pending role to a user with admin role at re-login exception thrown
    * [AIRAVATA-2771] - Apache Server Foundation is written on home page instead of Apache Software Founation
    * [AIRAVATA-2783] - Gateway output file (.tar.gz) not existing when staging out but in real it exists in the working directory
    * [AIRAVATA-2784] - Airavata unable to connect with the compute resource, comet.sdsc.edu
    * [AIRAVATA-2789] - Experiment failed with unexpected error in opening a session channel
    * [AIRAVATA-2790] - File uploading error due to session channel opening error occurred!

Apache Airavata - Version 0.16 Released on 2016-07-12
=====================================================
Below you will find the detail list of JIRA tasks/issues resolutions incorporated in 0.16.

** New Feature
    * [AIRAVATA-1349] - API method to get Data Transfer details
    * [AIRAVATA-1895] - Report Gateway End users to XSEDE Resources
    * [AIRAVATA-1899] - Email notification to gateway user when his/her account is activated and gateway is ready for use.
    * [AIRAVATA-1945] - Allow API calls to pass ComputeResource Login Name
    * [AIRAVATA-1960] - Ability to mark inputs as 'Optional'. These are not mandatory to be available at create experiment.

** Improvement
    * [AIRAVATA-447] - Optional maven profile to download grid certificate
    * [AIRAVATA-1136] - Distribution module executed in default build profile
    * [AIRAVATA-1265] - Create GridPushMonitorHandler
    * [AIRAVATA-1416] - Validate application exists while creating and launching a experiment
    * [AIRAVATA-1429] - Read SSH keys from credential store in AdvancedSCPInput and Output handlers
    * [AIRAVATA-1730] - Expose input and output variable set for an application as variables
    * [AIRAVATA-1813] - Please display Application interface ID and Application Module ID in PGA Admin Dashboard
    * [AIRAVATA-1851] - 3rd party file transfer with Jcraft jsch
    * [AIRAVATA-1855] - Currently for PgA user signing in we are guided to a new page with third party IS themes; lets remove this and reduce a step to users
    * [AIRAVATA-1907] - Remove 'Continue' button in Create experiment page in PGA.
    * [AIRAVATA-1921] - Display the 'User Friendly Description' for application inputs in Create Experiment in SEAGrid desktop client.
    * [AIRAVATA-1922] - In desktop client experiment is not displayed under the correct project
    * [AIRAVATA-1923] - Folder structure and files are not correctly structured and displayed in Storage in Desktop Client and in web client
    * [AIRAVATA-1925] - In SEAGrid desktop client have a link in the login window to reset password.
    * [AIRAVATA-1926] - In both SEAGrid desktop client and PGA web client make project non-editable when editing and cloning
    * [AIRAVATA-1954] - Ability to tag a queue in compute resource as the default.

** Task
    * [AIRAVATA-1149] - Create a new user using the Airavata API
    * [AIRAVATA-1796] - Enable Process Recovery
    * [AIRAVATA-1829] - Deprecate Credential Store Webapp
    * [AIRAVATA-1853] - New validations to PGA user account password
    * [AIRAVATA-1882] - Organize Thrift APIs and Data Models in source tree
    * [AIRAVATA-1883] - Migrate to Thrift 0.9.3

** Sub-task
    * [AIRAVATA-957] - Add GSISSH production scenario test cases to integration tests
    * [AIRAVATA-1120] - Modularizing existing data models
    * [AIRAVATA-1255] - Quickstart Tutorial is out of date
    * [AIRAVATA-1361] - Search for experiments created, launched within a given time frame
    * [AIRAVATA-1725] - When GFAC is stopped and started while experiments are launched in PGA getting Bad GFAC version error and exp fails
    * [AIRAVATA-1966] - Document upgrading steps for latest Airavata release 

** Technical task
    * [AIRAVATA-1826] - Implementation of OAuth request_code grant flow in pga
    * [AIRAVATA-1827] - Enabling tls communication between PGA and Airavata
    * [AIRAVATA-1828] - Integration of API security components & test the implementation

** Documentation
    * [AIRAVATA-1891] - http://scigap.readthedocs.org/en/latest/Gateway-Configurations/ step 7 missing info

** Epic
    * [AIRAVATA-1271] - Improve end-user documentation

** Bug
    * [AIRAVATA-960] - JSDLGeneratorTest (part of Gfac module) fails due to default trust dir reference  
    * [AIRAVATA-1408] - In Stampede can attach incorrect input files for application and launch the experiment; Experiment and job completes Succesfully.
    * [AIRAVATA-1564] - Experiment can launch twice if these is Zookeeper issue with server.
    * [AIRAVATA-1580] - Amber Sander Experiment on Trestles failing due to scping local file
    * [AIRAVATA-1653] - ProxyMonitorPublisher class not found
    * [AIRAVATA-1698] - Phasta and Phasta_P on Stampede are failing continuously in dev-test PGA
    * [AIRAVATA-1718] - An Experiment with incorrect batch for the resource has gone through to GFAC; ideally this should be failed at orchestrator level
    * [AIRAVATA-1757] - In Create Application Deployment Page please add the Heading for module load commands
    * [AIRAVATA-1760] - In PGA date selection fields;  popped up calendar should disappear when user selects a Date 
    * [AIRAVATA-1769] - For some date combinations Search experiment doesn't work in Admin Dashboard
    * [AIRAVATA-1807] - Cannot edit and update changes to an application interface in PGA
    * [AIRAVATA-1808] - Compute Resource is disabled in Admin dashboard. Still appears in Create Experiment
    * [AIRAVATA-1809] - When a new user account is created the default project does not get created in PGA
    * [AIRAVATA-1810] - When an experiment is created (Saved in Create experiment) cannot launch from Experiment Summary
    * [AIRAVATA-1811] - Cannot modify and launch cloned  new experiments
    * [AIRAVATA-1812] - Experiment status in Project summary is 'EXECUTING' but in experiment summary it shows status CREATED
    * [AIRAVATA-1814] - In Gateway preferences login usernames are not displayed for compute resources.
    * [AIRAVATA-1815] - Experiments failed but no error messages are displayed in the PGA
    * [AIRAVATA-1816] - Link sent to users to reset password is incorrect. The link is just to the home page of PGA
    * [AIRAVATA-1817] - Cannot add SSH job submission interface to a compute resource
    * [AIRAVATA-1818] - Cannot create a new Application Interface
    * [AIRAVATA-1825] - In experiment summary page job status is not displayed
    * [AIRAVATA-1830] - Default Project is not getting created at user account creation
    * [AIRAVATA-1832] - In dev.testdrive Project Summary page job status is not displayed for experiments
    * [AIRAVATA-1833] - Experiment failed at job level due to output value of application interface not been defined
    * [AIRAVATA-1834] - When jobs fail experiment status remains at EXECUTING
    * [AIRAVATA-1835] - Experiment statistics are not retrieved in PGA
    * [AIRAVATA-1836] - Cannot update Application Parallelism Type in App Catalog deployment
    * [AIRAVATA-1840] - When an experiment is cloned the changed name does not get updated
    * [AIRAVATA-1842] - Experiments exists with weird mismatching statuses when Airavata is restored
    * [AIRAVATA-1843] - Experiment failed due to output file staging issue
    * [AIRAVATA-1844] - Experiment summary page crashes with 'TSocket read 0 bytes' 
    * [AIRAVATA-1845] - When clicked Edit button on Experiment summary opens 'Edit Clone Experiment' page
    * [AIRAVATA-1846] - When experiments are launched there are experiments with CREATED (Exp) and QUEUED (Job) statuses
    * [AIRAVATA-1848] - Experiment FAILED and job is COMPLETED with an process status updating error
    * [AIRAVATA-1849] - Experiment FAILED with an environment set up error
    * [AIRAVATA-1850] - PGA home page is empty! Previously we had information and links to Airavata site, scigap, etc...
    * [AIRAVATA-1852] - Validate Experiment input files at experiment job submission level
    * [AIRAVATA-1854] - When signing in fails; please remove the new window which appears with the message
    * [AIRAVATA-1856] - Please make the 'forgot password' link available for the gateway users
    * [AIRAVATA-1857] - Cannot modify and save project name and description modifications
    * [AIRAVATA-1858] - Please provide a meaningful message for invalid login credentials in SEAGrid client
    * [AIRAVATA-1859] - Cannot create user accounts. Password validation error occurs
    * [AIRAVATA-1860] - Display STDERR and STDOUT for experiment in COMPLETED job in FAILED
    * [AIRAVATA-1862] - In Unlaunched Experiments section in SEAGrid client please show more information
    * [AIRAVATA-1884] - Updating Data Movement Interface priority crashes the UI and data not saved in PGA 
    * [AIRAVATA-1886] - SciGaP admin cannot delete an existing Storage Resource. Which are not linked to any preference.
    * [AIRAVATA-1888] - Experiment Cancelation failure in GFAC recovery state
    * [AIRAVATA-1889] - Activation email not sent to account with username as email id
    * [AIRAVATA-1896] - SSH connection timeouts not configured properly
    * [AIRAVATA-1897] - In dev.seagrid.org cannot view storage from main menu or through Experiment summary for normal gateway user role.
    * [AIRAVATA-1900] - Some files inside ARCHIVE folder cannot be open. Gives error page attached
    * [AIRAVATA-1901] - In dev.seagrid newly created user having both admin-read-only and admin roles cannot edit admin dashboard items.
    * [AIRAVATA-1903] - Human verification step is not functioning properly. Can enter any value and proceed.
    * [AIRAVATA-1906] - When a new gateway user is login in to PGA shows 'You need to be an admin to use this service.' This is wrong message
    * [AIRAVATA-1908] - Bottom green boarder of Create Experiment page is shifted when opened from FireFox
    * [AIRAVATA-1909] - Clean up output staging when experimentDataDir is specified
    * [AIRAVATA-1913] - When Storage is OPEN from an experiment summary page navigated to common ARCHIVE folder. Not to the experiment specific folder.
    * [AIRAVATA-1916] - Cloned an experiment which failed at JOB_SUBMISSION. Gives an error but new clone experiment is created as well
    * [AIRAVATA-1917] - Change the message displayed for new users, when logged into PGA to confirm account creation
    * [AIRAVATA-1918] - Link to create a new account through SEAGrid desktop client is not working
    * [AIRAVATA-1919] - When a new user without any launched experiments clicked on 'Storage' from main menu gives error 'AJAX: error'
    * [AIRAVATA-1920] - Implement openning storage from Experiment Summary in SEAGrid desktop client
    * [AIRAVATA-1927] - In SEAGrid desktop client NanoCAD window 'Import Structure' screen is not opening
    * [AIRAVATA-1930] - When experiments are cloned and launched the ARCHIVING does not function as the file path sent by PGA is incorrect
    * [AIRAVATA-1932] - Issue when adding UNICORE job submission protocol
    * [AIRAVATA-1933] - In dev.scigap.org portal getting AJAX Error in Storage
    * [AIRAVATA-1934] - SEAGrid Client Opening page
    * [AIRAVATA-1935] - Storage of same previous experiment can be opened from web client but in desktop client gives the attached error
    * [AIRAVATA-1937] - When adding UNICORE data movement to storage resource gives an error
    * [AIRAVATA-1938] - In gateway preference page when CS token is not set at compute resource preference level still it appears as if it is allocated.
    * [AIRAVATA-1939] - Please add back UserDN filed to Create Experiment page in PGA
    * [AIRAVATA-1942] - Search does not return data in experiment statistics in Admin Dashboard 
    * [AIRAVATA-1943] - Creation time of Projects in PGA is wrong.
    * [AIRAVATA-1946] - Search in gateway preference page to search for gateways is not working in scigap portal
    * [AIRAVATA-1947] - When Comet job submission fails the job submission response is not printed in the gfac log.
    * [AIRAVATA-1951] - When editing an already created experiment prompts it needs input files. When they were already attached and available in create experiment
    * [AIRAVATA-1952] - When a deployment is no longer existing in a certain resource clone experiment launch crashes with error-exception
    * [AIRAVATA-1968] - In Admin Dashboard --> Gateway Profile section Identity Server Configuration is not functioning
    * [AIRAVATA-1969] - 'Register a new Password Credential' not working
    * [AIRAVATA-1970] - Experiments in EXECUTING when there is a 'Remote Cluster initialization error
    * [AIRAVATA-1976] - "Become a Contributror" link in Airavata website footer is broken
    * [AIRAVATA-1977] - Broken "Accepting Contributions" link on Airavata website


Apache Airavata Version 0.15 Released on 2015-12-04
===================================================
Below you will find the detail list of JIRA tasks/issues resolutions incorporated in 0.15.

** Story
    * [AIRAVATA-955] - Improvements to GSI-SSH library
    * [AIRAVATA-1053] - Update Integration-test module
    * [AIRAVATA-1476] - Integrate Unicore-BES provider with master Airavata
    * [AIRAVATA-1544] - Improve InputDataType and OutputDataType models to support more usecases
    * [AIRAVATA-1602] - Multi-tenant support for airavata registry

** Epic
    * [AIRAVATA-766] - Functional tests for GFAC handlers and provider
    * [AIRAVATA-1442] - Implement airavata internal messaging system
    * [AIRAVATA-1559] - To have credential store thrift cpi where clients can talk

** Improvement
    * [AIRAVATA-467] - Allow user to set parameter options like -p <value> -m <value> to run jobs with GFAC
    * [AIRAVATA-1354] - Job monitor for Stampede unknow status
    * [AIRAVATA-1398] - Retry incase GSISSH IN/Out handler not able find the data to transfer
    * [AIRAVATA-1401] - User trying to exists a page without saving the record, should be prompted with a confirmation.
    * [AIRAVATA-1441] - Replacing zookeeper usages with Apache curator library
    * [AIRAVATA-1461] - update log4j properties to daily role the logs.
    * [AIRAVATA-1550] - Change the way we create input and output directories
    * [AIRAVATA-1556] - Retire ws-messenger
    * [AIRAVATA-1557] - Retire workflow-tracking schema
    * [AIRAVATA-1563] - Add notification emails to experiment and task details data models
    * [AIRAVATA-1584] - Adding Unicore functions to Airavata API
    * [AIRAVATA-1589] - Integrate new workflow interpreter design with Orchestrator
    * [AIRAVATA-1594] - Save workflow inputs and outputs in app catalog.
    * [AIRAVATA-1638] - Adding user-dn and other unicore related parameters to user configuration
    * [AIRAVATA-1662] - Remove rabbitMq enabled property from airavata-server properties
    * [AIRAVATA-1663] - Remove getting servers list from airavata-server.sh
    * [AIRAVATA-1672] - Store entire exception in registry from GFac
    * [AIRAVATA-1674] - SSH authentication issue when submitting to trestles
    * [AIRAVATA-1682] - Validate experiment with app catalog
    * [AIRAVATA-1687] - Add gatewayExecutionId to Experiment model and WorkingDir to job details
    * [AIRAVATA-1759] - Add support for search query and wild char file search
    * [AIRAVATA-1763] - When a gateway user initially logs in to PGA have a default project ready
    * [AIRAVATA-1766] - Hide the buttons we currently disable in Experiment Summary page
    * [AIRAVATA-1775] - In Experiment Statistic add new place holder to show running experiments as well. Also change the existing categorization as below
    * [AIRAVATA-1776] - n PGA--> Admin Dashboard when a Page is selected it should be highlighted in the lefthand side menu
    * [AIRAVATA-1777] - In Experiment Summary (For normal user and admin user) change the heading 'Update Time' to ' Last Modified Time'
    * [AIRAVATA-1778] - Display Job ID and Job name for the gateway admin user in Experiment Summary
    * [AIRAVATA-1779] - Same message displayed twice to the user when there are no projects in Creat Experiment Page
    * [AIRAVATA-1794] - Cleanup 0.15 distribution

** New Feature
    * [AIRAVATA-1350] - API method to get Job details like PBS script, Working Directory etc.
    * [AIRAVATA-1553] - Enable job scheduler emails in Airavata


** Task
    * [AIRAVATA-961] - Update API to support Experiment Cancel/Stop, Pause, Resume
    * [AIRAVATA-1146] - Seperate out the Derby Server Startup from the Airavata API Server Startup
    * [AIRAVATA-1568] - Integrate XBAYA with Airavata Workflow Engine/ Workflow Interpreter
    * [AIRAVATA-1592] - Plug RabbitMQ base monitoring implementation to new Workflow design.
    * [AIRAVATA-1593] - Run complex math workflow sample with new Workflow Interpreter
    * [AIRAVATA-1618] - Proper Exception handling in new workflow module.

** Sub-task
    * [AIRAVATA-433] - Providing Airavata API method to cancel a running job
    * [AIRAVATA-956] - Add proper documentation on wiki how to use GSISSH library
    * [AIRAVATA-1226] - airavataAPI does not have delete methods for project
    * [AIRAVATA-1443] - Design thrift base event listeners
    * [AIRAVATA-1445] - Define message format
    * [AIRAVATA-1545] - Add application argument to the GFac Local provider build command
    * [AIRAVATA-1546] - Preserve the input argument order
    * [AIRAVATA-1552] - Use Task object and user defined output name to get outputs
    * [AIRAVATA-1560] - Define credential store cpi
    * [AIRAVATA-1561] - Secured thrift server with SSL
    * [AIRAVATA-1569] - Implementing queue based submission for single instance
    * [AIRAVATA-1571] - Implement new workflow data model
    * [AIRAVATA-1577] - Do a performance test to check the broker
    * [AIRAVATA-1590] - Invoke new workflow interpreter from Orchestrator
    * [AIRAVATA-1591] - Implement producer consumer mechanism with RabbitMQ
    * [AIRAVATA-1604] - Gateway notion for experiment catalog
    * [AIRAVATA-1605] - Gateway notion for app-catalog
    * [AIRAVATA-1606] - Gateway notion for credential store
    * [AIRAVATA-1607] - Pass gateway id or token id for all the airavata API methods
    * [AIRAVATA-1608] - Change Registry CPI and Appcatalog CPI to get gateway id
    * [AIRAVATA-1612] - Enable to plug different parser implementation
    * [AIRAVATA-1616] - Add Credential Store Methods to Airavata API
    * [AIRAVATA-1621] - Generate Credential Store Stubs and Integrate with GFac
    * [AIRAVATA-1623] - Testing multi-tenancy with dev.test-drive
    * [AIRAVATA-1626] - Refactoring registry code
    * [AIRAVATA-1664] - Email Based Job Monitoring
    * [AIRAVATA-1665] - Enable Email based monitoring in Multiple GFac instances environment.
    * [AIRAVATA-1666] - Email monitoring at Compute Resource level
    * [AIRAVATA-1667] - Add registry resources and models to save and retrieve email job notification property
    * [AIRAVATA-1670] - Handle PBS and SLURM wall-time exceed and user delete job notification emails
    * [AIRAVATA-1678] - Remove non-functional operations in XBaya GUI
    * [AIRAVATA-1680] - Remove rabbitmq message publish script from PBS and SLURM xslt
    * [AIRAVATA-1683] - Configure sender email with email monitor property
    * [AIRAVATA-1684] - Improve Email Monitor search term to increase performance
    * [AIRAVATA-1686] - Get email monitoring property from properties file
    * [AIRAVATA-1697] - Create a stand alone API Server Distribution

** Bug
    * [AIRAVATA-714] - Provenance data for Service in For-Each
    * [AIRAVATA-733] - Lack of information on Xbaya dashboard when wrong GSI credentials are setup at airavata-server.properties
    * [AIRAVATA-789] - SSL handshake problem incase of Hadoop and BES providers
    * [AIRAVATA-932] - GSISSH provider error handling
    * [AIRAVATA-1087] - Renaming tools and adding tools in to package naming
    * [AIRAVATA-1240] - minor fixups of logging statements
    * [AIRAVATA-1362] - Terminate /cancel Experiment
    * [AIRAVATA-1417] - Remote command execution can hang
    * [AIRAVATA-1432] - Experiment state problems with slow SSH connections
    * [AIRAVATA-1456] - SSH session not closed for input/output handers
    * [AIRAVATA-1458] - RabbitMQ: java: not found on Lonestar job sometime
    * [AIRAVATA-1460] - HPCPullMonitor  - Error retrieving the job status
    * [AIRAVATA-1465] - Myproxy username was not read right from the credential store and set to PBSCluster
    * [AIRAVATA-1522] - Compute Resource Queue Description does not appear after saving
    * [AIRAVATA-1535] - In edit mode when more GRID FTP end points are added and updated they do not get saved
    * [AIRAVATA-1540] - XBaya GUI froze when an experiment is launched. Killed the XBaya process but didn't work
    * [AIRAVATA-1554] - Getting the credential using token for different gateway name does not work.
    * [AIRAVATA-1555] - Credential store does not work with oa4mp version 1.1.3
    * [AIRAVATA-1562] - Node and CPU count on Stampede is coming in reverse order
    * [AIRAVATA-1565] - Monitoring connection issue on Trestles
    * [AIRAVATA-1566] - Experiments failing due to required outputs missing from jobs
    * [AIRAVATA-1586] - Cannot debug Airavata code as the Zookeeper goes to a Inconsistent state
    * [AIRAVATA-1651] - Zookeeper connection lost error; Experiment failed
    * [AIRAVATA-1676] - Echo output is not visible in PGA in STDOUT
    * [AIRAVATA-1709] - When Project Summary Page in PGA is refreshed the page crashes
    * [AIRAVATA-1714] - When GFAC is stopped and started when experiments are launched through API server at the end RabbitMQ consumer gets disconnected
    * [AIRAVATA-1717] - New line is not coming in application post command job script
    * [AIRAVATA-1737] - 0.15 build throws connection refused while running in a separate docker
    * [AIRAVATA-1740] - Added queue to a compute resource is not displayed; not getting added
    * [AIRAVATA-1750] - Application module list is empty in Create Application Interface Page
    * [AIRAVATA-1751] - Cannot create experiments !!!
    * [AIRAVATA-1752] - In Create Experiment Please have 30 minutes wall time as default
    * [AIRAVATA-1753] - Admin dashboard resource page should be able to switch off and switch on resources
    * [AIRAVATA-1754] - Set Total core count in create experiment to 16
    * [AIRAVATA-1756] - In Experiment Search please remove statuses SUSPENDED and UNKNOWN
    * [AIRAVATA-1761] - In Edit Experiment page maximum queue values for node count, cpu count and wall time are not populated in the field heading
    * [AIRAVATA-1762] - After user account creation direct the user to user login page
    * [AIRAVATA-1764] - In PGA gateway user password recovery does not work
    * [AIRAVATA-1767] - profile Page in PGA is crashed; Error page displays
    * [AIRAVATA-1768] - When creating PGA user account using Safari can enter invalid email and proceed
    * [AIRAVATA-1770] - For Failed Gaussian job cant view gaussian.out; pages crashes
    * [AIRAVATA-1771] - Experiment Summary in Dashboard--> Experiment does not display Creation Time and Update Time
    * [AIRAVATA-1773] - When experiment is cloned the output of the previous gets updated with the latest cloned experiments output
    * [AIRAVATA-1774] - Move Compute Resource and App Catalog Menus to Admin Dashboard
    * [AIRAVATA-1780] - When clicked on Edit icon for a selected Compute Resource Page crashes
    * [AIRAVATA-1781] - In 'Update The Priority Order' Pop-up screen complete protocol name is not displayed
    * [AIRAVATA-1782] - In datamovement protocol adding page remove field 'Select Monitoring Mode'
    * [AIRAVATA-1784] - Sort Application list in Create Experiment in alphabetical order
    * [AIRAVATA-1785] - Have a default queue pre selected for each resource in Create Experiment
    * [AIRAVATA-1786] - In Experiment summary when user clicks Cancel please prompt with a confirmation window
    * [AIRAVATA-1788] - Sometimes when experiments are cloned it get cloned but does not open the Edit Cloned Experiment Page
    * [AIRAVATA-1789] - Remove confirmation pop up message window when clicked Save & Launch in Create Experiment

Apache Airavata Version 0.14 Released on 2014-12-20
===================================================
Below you will find the detail list of JIRA tasks/issues resolutions incorporated in 0.14.

Release Notes - Airavata - Version 0.14

** Tasks
    * [AIRAVATA-1063] - HostAddress in ComputationalResourceScheduling is required.
    * [AIRAVATA-1463] - Remove airavata-client-api dependency from other module
    * [AIRAVATA-1467] - Zookeeper Implementation to Advertise Available/up and running Airavata Services/Components
    * [AIRAVATA-1471] - Modify Airavata Distribution to Enable Separate Distributions for Orchestrator, Gfac and Xbaya.
    * [AIRAVATA-1511] - Replace legacy application descriptors used in gfac with app-catalog

** Sub-tasks
    * [AIRAVATA-468] - Support option with parameters for GramProvider
    * [AIRAVATA-1009] - Craft the Workflow Interpreter CPI
    * [AIRAVATA-1389] - Updated Xbaya to enable execution of a single application through thrift api
    * [AIRAVATA-1427] - Submit real time job count details to zookeeper
    * [AIRAVATA-1428] - Add a inmemory job count map to Orchestrator
    * [AIRAVATA-1438] - Add throtle-resources flag to airavata API
    * [AIRAVATA-1444] - Implement RabbitMQ publisher
    * [AIRAVATA-1446] - Provide a way to enable and disable Job count validation
    * [AIRAVATA-1472] - Cleanup Airavata property file for old service properties
    * [AIRAVATA-1510] - Remove connection to Workflow service from Xbaya

** Story
    * [AIRAVATA-965] - Update Airavata JGLOBUS and Unicore jar

** New Feature
    * [AIRAVATA-1494] - Add ResourceJobManger add, update, get, delete methods to airavata-api

** Improvement
    * [AIRAVATA-473] - Support For-each for Local providers
    * [AIRAVATA-495] - Implement logger in WorkflowInterpreter
    * [AIRAVATA-899] - API need enhancement so user can set a user identifier into Context header
    * [AIRAVATA-1030] - Multiple Security context to run a grid job
    * [AIRAVATA-1036] - ActualParameter and DataObjectType have same objective
    * [AIRAVATA-1333] - Can we have a way of searching for all the projects, experiments in the gateway?
    * [AIRAVATA-1404] - Airavata API function to get Job details
    * [AIRAVATA-1405] - API function to get data transfer details.
    * [AIRAVATA-1410] - Input data transfer details are not updated
    * [AIRAVATA-1419] - Allow multiple client to move the data using same server
    * [AIRAVATA-1449] - Get partial results incase outputs are not produced.
    * [AIRAVATA-1451] - RabbitMQ messaging is not supported for SGE resources
    * [AIRAVATA-1462] - Update log messages to track life cycle of experiments , jobs and tasks.
    * [AIRAVATA-1464] - XBaya doesn't support multi-app workflows with new Thrift API
    * [AIRAVATA-1474] - Remove Registry.wsdl stub autogeneration
    * [AIRAVATA-1479] - Change return type of jobSubmission API methods to string
    * [AIRAVATA-1487] - Add API methods to get job submission information

** Bug
    * [AIRAVATA-723] - Error message not sent to Xbaya as fault
    * [AIRAVATA-767] - Provide GridFTP URL incase of URL and URLArray type
    * [AIRAVATA-911] - Unable to set a different gateway name other than "default"
    * [AIRAVATA-986] - No free ports available to run GRAM provider and GridFTP transfers
    * [AIRAVATA-1091] - PersistenceException while executing BES or Gram Provider
    * [AIRAVATA-1370] - Update Client samples READMEs and INSTALL files
    * [AIRAVATA-1402] - Command for SLURM job cancel need correction
    * [AIRAVATA-1409] - Error details are saved twice which adding two records in the database
    * [AIRAVATA-1413] - Output path is not getting set to output context incase we scan output directory
    * [AIRAVATA-1418] - App catalog database connection timeout issue
    * [AIRAVATA-1423] - Orchestrator context does't set initial GFac instant list correctly in one of it's constructor.
    * [AIRAVATA-1430] - GSISSHAbstractCluster not throwing error if there is issue submitting job
    * [AIRAVATA-1433] - NullPointerException to create a SSH connection
    * [AIRAVATA-1434] - Rewrite CreateLaunchExperiment class in order to work with registerApplication method
    * [AIRAVATA-1435] - Experiment Status is updated to completed on job complete
    * [AIRAVATA-1477] - Host Aliases and IpAddresses not getting saved in Compute Resource Object
    * [AIRAVATA-1488] - AdvancedSCPInputHandler is not working if we need to transfer data to BigRed
    * [AIRAVATA-1495] - Experiment Status is not updated to Complete
    * [AIRAVATA-1520] - SCP to a newer version of Centos VM does not work
    * [AIRAVATA-1521] - SSHInputHandler cluster object is null
    * [AIRAVATA-1542] - Error message when configuring XBaya input parameter configuration


Apache Airavata Version 0.12 Released on 2014-06-27
===================================================
This release is a first iteration of using Apache thrift as a framework to implement Airavata API.
Below you will find the detail list of JIRA tasks/issues resolutions incorporated in 0.12.

Release Notes - Airavata - Version 0.12

** Sub-task
    * [AIRAVATA-762] - Advanced Job scripts based on job manager type
    * [AIRAVATA-982] - Changing registry to support orchestrator registry functionality
    * [AIRAVATA-983] - Creating orchestrator-service and orchestrator-core components
    * [AIRAVATA-984] - Implement the embeddedGFAc job submitter to orchestrator
    * [AIRAVATA-987] - Incorporate orchestrator changes with GFAC to store statuses
    * [AIRAVATA-988] - Implement pulling information and submitting to gfac embedded mode
    * [AIRAVATA-1007] - Craft the Orchestrator CPI
    * [AIRAVATA-1008] - Craft the GFac CPI
    * [AIRAVATA-1018] - Craft monitoring data model
    * [AIRAVATA-1020] - Add database creation at server startup
    * [AIRAVATA-1022] - Implement an AMQP based monitor to use in xsede resources
    * [AIRAVATA-1023] - Implement qstat based monitor to poll the status
    * [AIRAVATA-1025] - Add unit tests for new data models
    * [AIRAVATA-1032] - Change GFAC to use ConfigurationData to replace context header
    * [AIRAVATA-1037] - Create a New Airavata Distribution with the API server and Clients
    * [AIRAVATA-1043] - Update GFAC to save JobDetails for monitoring data
    * [AIRAVATA-1046] - Airavata Standalone Server : Create a class to start Airavata API and CPI servers
    * [AIRAVATA-1047] - Update standalone airavata server startup script
    * [AIRAVATA-1055] - Update integration tests defined in the integration-test module
    * [AIRAVATA-1061] - Test experiment execution using local providers
    * [AIRAVATA-1065] - Create C++ Samples using Airavata Thrift API Client SDKs
    * [AIRAVATA-1094] - Integration Test 1 - Create Experiment
    * [AIRAVATA-1095] - Integration Test 1 - Modify Experiment
    * [AIRAVATA-1096] - Integration Test 1 - Clone Experiment
    * [AIRAVATA-1097] - Integration Test 1 - Delete Experiment
    * [AIRAVATA-1099] - Integration Test 2 - List Experiments
    * [AIRAVATA-1100] - Integration Test 2 - Launch Experiment
    * [AIRAVATA-1101] - Integration Test 2 - Monitor Experiment
    * [AIRAVATA-1102] - Integration Test 2 - List Experiment Intermediate Results
    * [AIRAVATA-1103] - Integration Test 2 - Download Experiment Intermediate Results
    * [AIRAVATA-1104] - Integration Test 2 - Notification when Experiment Completes/Fails
    * [AIRAVATA-1105] - Integration Test 2 - Notifications when Results available for Download
    * [AIRAVATA-1106] - Integration Test 2 - Download Experiment Final Results
    * [AIRAVATA-1107] - Integration Test 2 - View Experiment Errors
    * [AIRAVATA-1129] - GFAC needs a README
    * [AIRAVATA-1170] - User creates a new project
    * [AIRAVATA-1171] - User creates an experiment in a project
    * [AIRAVATA-1173] - Launch experiment
    * [AIRAVATA-1176] - User edits an existing experiment
    * [AIRAVATA-1177] - User clones an experiment
    * [AIRAVATA-1178] - User searches experiments
    * [AIRAVATA-1179] - User selects a previous experiment and gets information.
    * [AIRAVATA-1189] - User creates an experiment in a project
    * [AIRAVATA-1191] - Launch Experiment
    * [AIRAVATA-1195] - User clones an experiment
    * [AIRAVATA-1203] - Define Thrift Data Models for the Application Catalog
    * [AIRAVATA-1236] - Database design for Application Catalog

** Bug
    * [AIRAVATA-637] - Update tomcat deployment script and instruction
    * [AIRAVATA-725] - Some of the messages from EventDataListener are without experimentId
    * [AIRAVATA-825] - Airavata Client error in case workflow scheduling context is not right
    * [AIRAVATA-976] - Same INSTALL, README, NOTICE files are duplicated in many places
    * [AIRAVATA-981] - Download links for current release hashes etc must use main ASF server
    * [AIRAVATA-1001] - Not able to run a Grid job using trunk
    * [AIRAVATA-1010] - Creating a cpi package for gfac
    * [AIRAVATA-1011] - Creating orchestrator cpi
    * [AIRAVATA-1034] - Fixing build error in Xbaya
    * [AIRAVATA-1045] - Update airavata server distribution to support the new architecture
    * [AIRAVATA-1048] - cleaning up multiple configurations in monitor and orchestrator
    * [AIRAVATA-1050] - Making launchExepriment call as non-blocking
    * [AIRAVATA-1051] - Airavata-Client distribution doesn't work with the old API anymore
    * [AIRAVATA-1057] - Implementing support for SLURM for AIRAVATA
    * [AIRAVATA-1066] - GSISSH Monitoring error-Error retrieving the job status
    * [AIRAVATA-1074] - Sample application documents created with staticWorkingDirectory
    * [AIRAVATA-1078] - Supporting advanced input/output handling in gfac
    * [AIRAVATA-1080] - Implementing Advanced Input/Output Handling
    * [AIRAVATA-1088] - Removing registry dependency from job-monitor
    * [AIRAVATA-1089] - Enabling SSH job monitoring
    * [AIRAVATA-1139] - Cannot get all user projects
    * [AIRAVATA-1141] - getAllUserExperiments() ignores input
    * [AIRAVATA-1142] - getAllExperimentsInProject throws exeption instead of empty result
    * [AIRAVATA-1143] - Airavata PHP Thrift Client Distribution
    * [AIRAVATA-1147] - Throw full stack trace to client side in airavata server handler
    * [AIRAVATA-1148] - No documentation in Thrift-generated PHP SDK
    * [AIRAVATA-1161] - Clone experiment does not work properly
    * [AIRAVATA-1163] - CreateLaunchExperiment client launch experiment is not working
    * [AIRAVATA-1164] - AiravataTaskStatusUpdator.updateTaskStatus has java.lang.NullPointerException
    * [AIRAVATA-1182] - createProject doesn't warn that project already exists
    * [AIRAVATA-1185] - Output values are not populated when the experiment finish
    * [AIRAVATA-1227] - Update server handler class to throw error message to client side
    * [AIRAVATA-1264] - When creating Registry instance, instead of updating, add checks to see whether user and gateway exists
    * [AIRAVATA-1266] - Thrift -out of sequence response on validateexperiment
    * [AIRAVATA-1273] - Experiment status was coming as Launched and output value as empty
    * [AIRAVATA-1279] - When server initialize, db scripts are not read from db-scripts folder
    * [AIRAVATA-1283] - local host is hard coded in all the thrift clients
    * [AIRAVATA-1297] - Error while reading cache size from airavata-server.properties
    * [AIRAVATA-1298] - ClassNotFoundException when running CreateLaunchExperiment for local experiments

** Documentation
    * [AIRAVATA-1086] - INSTALL is out of date
    * [AIRAVATA-1122] - Airavata Architecture - Sequence Diagram
    * [AIRAVATA-1138] - Preperation of QA Test cases for Airavata API
    * [AIRAVATA-1262] - CCGrid tutorial documentation preparation for PHP scripts
    * [AIRAVATA-1263] - CCGrid tutorial documentation preparation for PHP reference gateway

** Epic
    * [AIRAVATA-759] - GSISSH-Grid security provider to run remote jobs
    * [AIRAVATA-964] - Add single job support as a first class simple Apache Airavata Execution
    * [AIRAVATA-1039] - Add Airavata Client Samples
    * [AIRAVATA-1158] - Test different API functions in Airavata API using PHP client

** Improvement
    * [AIRAVATA-934] - Update SSHProvider to use Jcraft API
    * [AIRAVATA-942] - GFAC SchedulerTest is obsolete
    * [AIRAVATA-949] - Update release management page step 11
    * [AIRAVATA-1076] - Make input/output data location in GFAC configurable
    * [AIRAVATA-1081] - Airavata README is obsolete
    * [AIRAVATA-1082] - Make SSH provider(Fork jobs) work with JCraft
    * [AIRAVATA-1118] - Adding Permission attribute to XBaya main jar to follow recent JAVA security update guide line
    * [AIRAVATA-1249] - Add search project by name and description
    * [AIRAVATA-1257] - Define experiment summary data model for search experiments
    * [AIRAVATA-1258] - Add API methods to search experiments by name and description
    * [AIRAVATA-1278] - Search experiments with resource id and application id
    * [AIRAVATA-1285] - Enable openJPA caching to improve the performance

** New Feature
    * [AIRAVATA-1033] - Write Airavata Thrift Server Startup Scripts

** Story
    * [AIRAVATA-1019] - Airavata Server distribution with new Thrift server
    * [AIRAVATA-1093] - Integration Test 1 - Manage Unlaunched Experiments
    * [AIRAVATA-1098] - Integration Test 2 - Manage Launched Experiments

** Task
    * [AIRAVATA-905] - Unify SSH Libraries across Airavata
    * [AIRAVATA-1021] - Implementing new Monitoring component which handle different types of monitoring mechanisms
    * [AIRAVATA-1060] - Disable the obsolete modules from the trunk build
    * [AIRAVATA-1124] - Cleaning up unused modules in the trunk for 0.12 release
    * [AIRAVATA-1140] - Create client samples that'll be distributed
    * [AIRAVATA-1144] - Airavata CPP Thrift Client Distribution
    * [AIRAVATA-1145] - Update Experiment Status when Job Status Changes


Apache Airavata Version 0.11 Released on 2013-12-20
==================================================
This release focused on evaluating apache thrift as a framework to implement Airavata API. As the first step, we are adding thrift interfaces to workflow execution API. Feel free to explore the thrift module in Airavata source code, which contains the stand-alone thrift server and a thrift client. Apart from apache thrift integration, this release has bug fixes which related GSISSH library and integration of Airavata Credential Store with Airavata client API. 
Below you will find the detail list of JIRA tasks/issues resolutions incorporated in 0.11. 

** Improvement
     * [AIRAVATA-278] - Improve GFac stdout handling to cover output types
     * [AIRAVATA-941] - JCR properties in GFAC's service.properties are obsolete
     * [AIRAVATA-952] - Add credential store to the Airavata API
     * [AIRAVATA-963] - Refactoring Integration Tests module to allow easy extendability and remove redundancy

** Task
     * [AIRAVATA-953] - Distribute JNLP With Releases

** Sub-task
      * [AIRAVATA-925] - Display status of experiments upfront in experiments list
      * [AIRAVATA-938] - Update XBaya window to support file transfer
      * [AIRAVATA-967] - Update Unicore client version

** Story
     * [AIRAVATA-965] - Update Airavata JGLOBUS and Unicore jar

** Bug
     * [AIRAVATA-922] - Reduce the size of war distributions
     * [AIRAVATA-954] - Evaluating thrift based execution API
     * [AIRAVATA-969] - GSISSH provider not fail on PBS Syntax errors

Known Issues in This Release
============================
    * [AIRAVATA-971] - XBaya run workflow window does not render correctly for a workflow which has lot of inputs

Apache Airavata Version 0.10 Released on 2013-10-29
==================================================
This release focused on bug fixes and GSISSH library/provider for beta testing. GSISSH Library provides connectivity to remote resources using grid security, SSH keys and kerberos authentication. Feel free to explore the library https://svn.apache.org/repos/asf/airavata/trunk/tools/gsissh or work with GSISSHProvider in GFAC. This library is still in testing phase and contributions are welcome like libraries to different job managers and testing with different resources.   
Below you will find detail list of JIRA tasks/issue resolutions incorporated in 0.10.


** Sub-task
    * [AIRAVATA-760] - GSISSH provider to run simple job manager commands provided by the user
    * [AIRAVATA-761] - Input output data transfer using gsiscp or GridFTP
    * [AIRAVATA-763] - Extending GFAC schema to support GSI hosts configurations
    * [AIRAVATA-928] - Prepare release



** Bug
    * [AIRAVATA-744] - Cleanup configurations files
    * [AIRAVATA-756] - Ensure Airavata can renew proxy for long running jobs.
    * [AIRAVATA-882] - Tomcat port configuration accessing problem in certain older tomcat 7 version
    * [AIRAVATA-920] - XBaya initialization fails when it is initialized from another client application
    * [AIRAVATA-931] - GSISSHProviderTest is not working
    * [AIRAVATA-933] - Regex in OutputUtils does not support space in output string
    * [AIRAVATA-939] - When workflow fail it goes to workflow completed mode and not showing the red node



** Improvement
    * [AIRAVATA-870] - Enable CORS support in Airavata server
    * [AIRAVATA-880] - Have a UserRegistry API to support user related operations
    * [AIRAVATA-912] - [GSoC] JSON equivalent of XWF files


Apache Airavata Version 0.9 Released on 2013-09-18
==================================================
This release mainly focused on "Credential Store" functionality within Airavata. This release includes initial version of "Credential Store" and a sample-gateway (within samples) to demonstrate the functionality of "Credential Store". In addition we upgrade JGlobus version to 2.0.6. With the JGlobus upgrade we introduced functionalities such as "Two phase commit", "Job cancellation" etc ... In addition we introduced a new workflow interpreter and also introduced a REST API for workflow execution. JGlobus upgrade is well tested and some of the use cases we tested can be found in https://svn.apache.org/repos/asf/airavata/sandbox/grd-tools. Below you will find detail list of Jira tasks/issue resolutions incoporated in 0.9.


** New Feature
    * [AIRAVATA-828] - Integrate Credential Management service to Airavata Server

** Task
    * [AIRAVATA-919] - Negotiate with Apache Infra and increase the distribution size to 200 MB
    * [AIRAVATA-918] - Prepare release
    
** Improvement
    * [AIRAVATA-252] - Remove invoker caching from Workflow interpreter
    * [AIRAVATA-835] - Airavata API to get JOBID of GramJob based on workflow service node name
    * [AIRAVATA-878] - Upgrade tomcat version used in integration-tests
    * [AIRAVATA-883] - Upgrade JGlobus version to 2.0.6-RC2
    * [AIRAVATA-900] - Handling of URI and URIArray containing different files with the same name should be handled correctly

** Bug
    * [AIRAVATA-620] - Confirming the airavata shutdown is completely graceful
    * [AIRAVATA-659] - Airavata Client Exception handling
    * [AIRAVATA-720] - Error message when I try to delete Application Service from Xbaya dashboard
    * [AIRAVATA-731] - When registering urls in registry, we need to register based on transport protocol
    * [AIRAVATA-738] - Xbaya does not give error messages when connecting to database with wrong credentials
    * [AIRAVATA-753] - Fixing the provided samples
    * [AIRAVATA-754] - Levenshtein distance sample is not working
    * [AIRAVATA-852] - Fix the context root specified in the airavata-server.properties file for Airavata webapp
    * [AIRAVATA-886] - Exception in jpa-registry when building in ubuntu with java 64 bit
    * [AIRAVATA-888] - SSHProvider not working in trunk
    * [AIRAVATA-902] - Scheduling info set from advanced options in client-side is not recovered properly at server-side
    * [AIRAVATA-903] - Erroneous output is set as the input to the next node from the workflow interpreter
    * [AIRAVATA-904] - EmbeddedInvoker is not parsing previous node output to the next node input correctly
    * [AIRAVATA-907] - Experiment Data list return from getAllExperimentMetaInformation() method of provenance manager not sorted according to experiment submitted date

Known Issues in This Release
============================
    * [AIRAVATA-914] - Failed to authenticate when connecting to an existing database.

Apache Airavata Version 0.8 Released on 2013-07-04
==================================================
Key focus of this release is to build upon the 0.7 release changes of GFac Architecture. The EC2 provider now confers to
the new GFac extensible architecture. The EC2 provider is now an advertised feature and users can use the provider in 
production-like deployements. The RC of this release was applied to targeted usage by PMC members and significant 
improvements have been made from errors reported. The Airavata GFac handler configurations have been well tested and 
customization of handlers is facilitated through a configuration file. 

** New Feature
    * [AIRAVATA-862] - Introducing a HostScheduler interface and allow users to write their own HostSchedulers and register them with Airavata

** Task
    * [AIRAVATA-93] - Review gfac-core code 
    
** Improvement
    * [AIRAVATA-450] - Delay in JobSubmissionListener after getting status from Gram
    * [AIRAVATA-827] - Extending Gram RSL parameters to provide Job Name, email options 
    * [AIRAVATA-832] - Provide support to configure a new provider in gfac-config.xml
    * [AIRAVATA-850] - Add a UI component to EC2 menu which allows a user to generate a key for EC2 communication

** Bug
    * [AIRAVATA-304] - WorkflowInterpreter had some memory leak which can be seen when send requests continuously upto 4000 
    * [AIRAVATA-721] - Xbaya attempt connection at a down Airavata Server
    * [AIRAVATA-745] - Levenshtein Distance Sample Needs to be updated
    * [AIRAVATA-746] - Airavata server populates incorrect URLs (GFac, interpretter ...) when HTTPS is enabled in tomcat
    * [AIRAVATA-818] - Set host dynamically per service request
    * [AIRAVATA-824] - EmbeddedGFacInvoker is not reading hostname from application scheduling context
    * [AIRAVATA-826] - Tar data uploading using gridftp cient in GFAC is not complete 
    * [AIRAVATA-829] - In Airavata API, HPCSettings the maxWallTime is not working
    * [AIRAVATA-833] - GridFTPOutputHandler is not able to download outputs from outputData folder incase of URI data type.
    * [AIRAVATA-834] - Add support for GridFTP output file staging
    * [AIRAVATA-836] - In GramRSLGenerator setOutputDataDirectory to context output path is not correct
    * [AIRAVATA-837] - Not able to load property incase of provider properties defined in gfac-config.xml
    * [AIRAVATA-849] - Error messages from Airavata API
    * [AIRAVATA-851] - Use the username specifed in the workflow graph when sshing to the AMI instances
    * [AIRAVATA-856] - Make credential-store specific table scripts lower case
    * [AIRAVATA-857] - Error while trying to query the experiment data after few hours
    * [AIRAVATA-861] - Integration tests are failing
    * [AIRAVATA-865] - Renaming GFac Job related functions in the rest service and the rest client
    * [AIRAVATA-869] - When the application aborts with return value of minus Status of failure is not reported in to registry
    * [AIRAVATA-872] - ws-messenger services come to inconsistent state with a failure scenario    


Apache Airavata Version 0.7 Released on 2013-04-13
==================================================
Key focus on this release is to improve the Airavata Application Factory (GFac) to facilitate integration of new handlers and ease the development of new providers. The following JIRA issues provide details of the changes made. 

Known Issues in This Release
============================
Apache Airavata Version 0.7 is an important step towards a extendable core components and a stable Airavata 1.0 release. This version is not yet recommended for production usage.

** Story
    * [AIRAVATA-530] - Implement a new Handler architecture

** New Feature
    * [AIRAVATA-315] - Provide an interface for Gateway administrator 
    * [AIRAVATA-316] - Provide a way to access the log for each experiment 

** Improvement
    * [AIRAVATA-202] - Add EC2 Provider to Airavata
    * [AIRAVATA-540] - There's no way to find final workflow outputs from notifications
    * [AIRAVATA-780] - Add support to add multiple security context 
    * [AIRAVATA-782] - Add the EC2 Job Submission Schedular to the trunk
    * [AIRAVATA-787] - Add support for Unicore and SSH provider in Xbaya UI

** Task
    * [AIRAVATA-471] - Add sample workflows to demonstrate the use of foreach construct
    * [AIRAVATA-757] - Remove dependency to OA4MP snapshot jars once OA4MP 1.0.6 is released
    * [AIRAVATA-803] - Run Amazon EC2 workflows through XBaya 
    * [AIRAVATA-804] - Fix the mechanism to keep the AWS secret key and access key within the workflow.

** Sub-task
    * [AIRAVATA-531] - Writing new Context classes to keep all the Context data
    * [AIRAVATA-770] - Add Unicore provider to submit jobs
    * [AIRAVATA-783] - Brief diagram about authentication framework

** Bug
    * [AIRAVATA-635] - Providing sample to configure workflow context header for each node
    * [AIRAVATA-742] - Make authenticators.xml read default database configurations from airavata-server.properties
    * [AIRAVATA-747] - SSH provider in EmbeddedGFacInvoker
    * [AIRAVATA-748] - Dependencies missing for SSH provider
    * [AIRAVATA-749] - Porting GSOC changes to Airavata trunk
    * [AIRAVATA-750] - airavataAPI.getProvenanceManager().getExperimentDataList()
    * [AIRAVATA-751] - Nullpointer exception in SSHProvider.getSession()
    * [AIRAVATA-764] - Job should not be canceled if there is a job error. 
    * [AIRAVATA-765] - GridFTPOutputHandler need to return file url incase output type in URI
    * [AIRAVATA-772] - Cannot start Airavata on Windows
    * [AIRAVATA-773] - XBaya does not work on Windows
    * [AIRAVATA-775] - Add the EC2 UI components to XBaya
    * [AIRAVATA-778] - Xbaya workflow editor: "Airavata Registry" panel doesn't update after making changes
    * [AIRAVATA-781] - Add a test case to gfac core to submit EC2 jobs 
    * [AIRAVATA-799] - Gram job data storing failing
    * [AIRAVATA-801] - 10 mins sample failed in 0.7 RC2
    * [AIRAVATA-809] - EC2 Instance Management window is not properly functioning due to backend issues
    * [AIRAVATA-812] - Add documentation for EC2 job submissions through XBaya
    * [AIRAVATA-813] - Incorrect instructions given in the wiki for Sample Workflow SimpleForEach
    * [AIRAVATA-815] - Issues when terminating and starting instances/AMIs using Amazon instance management window
    * [AIRAVATA-816] - Workflow Run sample fails  because of wrong host

Apache Airavata Version 0.6 Released on 2013-01-25
==================================================
0.6 is the fifth release of Apache Airavata. This release focuses on providing a REST service interface for Airavata Registry.

Known Issues in This Release
============================
This release is an important step towards a stable Airavata Server components and a good Airavata API client library. This version is not yet recommended for production usage.

** New Feature
    * [AIRAVATA-387] - Support for individual users in a community
    * [AIRAVATA-572] - Add basic auth based authenticator to Airavata
    * [AIRAVATA-573] - Add support to connect different types of user stores to authenticate Airavata REST API
    * [AIRAVATA-631] - Change Airavata API (airavata-client) to use Airavata REST Service
    * [AIRAVATA-632] - Change XBaya to use the Airavata Client
    * [AIRAVATA-633] - Change XBaya to use Airavata Client for Workflow Launches

** Improvement
    * [AIRAVATA-539] - Provide WorklfowNodeID in wokflowInvoked Notification
    * [AIRAVATA-644] - Change default authenticating database to Derby
    * [AIRAVATA-645] - Provide a utility method to set basic access headers in client side
    * [AIRAVATA-653] - Use Embedded Tomcat as servlet container for Airavata
    * [AIRAVATA-658] - Create a context class to store request specific properties
    * [AIRAVATA-683] - Improving Application Manager API
    * [AIRAVATA-684] - Add stop monitoring functionality for the Monitor object
    * [AIRAVATA-685] - Improvements to the WorkflowManager API
    * [AIRAVATA-704] - BPELScript log messages to parse wsdl should be of debug level
    * [AIRAVATA-719] - Enable rest client to communicate over HTTPS

** Task
    * [AIRAVATA-556] - Adding REST interface to Airavata Registry API
    * [AIRAVATA-670] - Update LICENSE & NOTICE files in distribution
    * [AIRAVATA-677] - Simplify runExperiment function overloading in Execution Manager
    * [AIRAVATA-679] - Make the WorkflowContextHeaderBuilder transparent to the API User
    * [AIRAVATA-698] - Move the registry related property data included on airavata-client and airavata-server properties files instead
    * [AIRAVATA-726] - Generate a WAR distribution for Airavata Server at build time

** Sub-task
    * [AIRAVATA-65] - Update Audit Notifier
    * [AIRAVATA-66] - Update Performance Notifier

** Bug
    * [AIRAVATA-259] - A notification is sent out with the description "Invoking a workflow" for each service invocation this is misleading.
    * [AIRAVATA-528] - During workflow data saving node with a name of "experiments[1]" creating
    * [AIRAVATA-619] - MsgBoxWsaResponsesCorrelator is creating an infinite thread  and there's no way to interrupt that thread
    * [AIRAVATA-621] - WorkflowInterpretorEventListener is accumulating - not properly shutting down
    * [AIRAVATA-622] - Error in console when running a workflow- Not always
    * [AIRAVATA-628] - Add new user displays user add to JCR registry
    * [AIRAVATA-643] - Add different registry accessors to airavata-server.properties and update AiravataJPARegistry accordingly
    * [AIRAVATA-646] - Make tests work with paths that include spaces (Fix build failure in tests due to paths with spaces)
    * [AIRAVATA-648] - MsgBoxWsaResponseCorrelator thread is not returning
    * [AIRAVATA-650] - Provide a sample how to push notification messages to someother endpoint after capturing them in airavata client
    * [AIRAVATA-652] - Create Java REST client to REST service
    * [AIRAVATA-654] - Cannot start Airavata if the installed path contains spaces
    * [AIRAVATA-664] - Null pointer exception is thrown from REST service when calling the registry API
    * [AIRAVATA-672] - Adding embedded tomcat as default  server to Airavata
    * [AIRAVATA-680] - Application Service menu get repeated in XBAya GUI
    * [AIRAVATA-681] - Enable hash passwords in Airavata local user store and make SHA as default password hash method
    * [AIRAVATA-682] - Failed login when connecting to an existing database
    * [AIRAVATA-690] - Lonestar GridFTP URL is wrong in default host objects
    * [AIRAVATA-692] - Not able to set HPC Configuration on New Application Deployment screen. Urgent!!
    * [AIRAVATA-693] - Edit Application- Edit deployment link does not work
    * [AIRAVATA-694] - Edit Application >  Edit deployment > Scratch working directory empty
    * [AIRAVATA-696] - Airavata-client needs database configuration in client side code which is wrong
    * [AIRAVATA-699] - When executing workflow user is authenticated multiple times for the same session
    * [AIRAVATA-700] - Edit Host Description dialog vanishes once one description get deleted
    * [AIRAVATA-701] - Maven clean install does not remove existing target folders for xbaya-gui
    * [AIRAVATA-705] - There are some dependencies missing in Airavata client distribution
    * [AIRAVATA-706] - Updating the HPC Configuration Options
    * [AIRAVATA-708] - XBaya doesn't return when backend gfac operation fail
    * [AIRAVATA-713] - Cleaning up unnecessary dependencies from Xbaya distribution and airavata-client distribution
    * [AIRAVATA-715] - Database setting are picked up from registry.properties.
    * [AIRAVATA-718] - An exception while starting integration tests
    * [AIRAVATA-724] - A valid SimpleMathService is not available for the 5 minute tutorial
    * [AIRAVATA-727] - Airavata distributions are not installed to the maven repository
    * [AIRAVATA-728] - OutputDataSettings does not have method to set node information.
    * [AIRAVATA-729] - Advanced options are not saved when creating an application
    * [AIRAVATA-734] - Multiple Workflow is invoked messages in the workflow
    * [AIRAVATA-741] - Airavata startup fails when Airavata is pointed to a new database

Apache Airavata Version 0.5 Released on 2012-10-28
=============================================================
0.5 is the fourth release of Airavata (skipped 0.1-INCUBATNG). This release focuses on improving test cases and stability of code, documentation.

** New Feature
    * [AIRAVATA-277] - Add do-while support to Xbaya and workflow engine
    * [AIRAVATA-314] - Hide workflow experiment ID from the user and allow user to add a user friendly experiment ID
    * [AIRAVATA-517] - Add XBaya JNLP generation to the Airavata Build
    * [AIRAVATA-548] - Implement StringArray incase output parameters are coming multiple times in STDOUT
    * [AIRAVATA-562] - Replacing existing Jackrabbit registry with MySQL

** Improvement
    * [AIRAVATA-57] - Consolidate XBaya Web Service Invoker Clients and Re-factor them to use Axis2
    * [AIRAVATA-220] - XBaya not prompting Myproxy dialog for secure workflow invocation
    * [AIRAVATA-229] - Managing Shutdown tasks using shutdown hooks
    * [AIRAVATA-363] - Adding Embedded GFac feature in to ducumentation
    * [AIRAVATA-476] - Add sample workflows to be shipped with Airavata to demonstrate grid job submissions
    * [AIRAVATA-533] - Add scripts to run Airavata in Windows environment
    * [AIRAVATA-541] - Some code is duplicated in AiravataJCRregistry
    * [AIRAVATA-543] - Some improvements to "Airavata HowTo" doc 
    * [AIRAVATA-546] - Implementing Persistency Data Storage for Airavata
    * [AIRAVATA-589] - Need to remove jackrabbit dependency from 0.5 build
    * [AIRAVATA-613] - Cleanup XBaya Invokers and remove legacy security calls
    * [AIRAVATA-614] - Cleanup all myproxy and gsi dependencies from XBaya

** Bug
    * [AIRAVATA-232] - GridFTPFileTransferClient has file paths that refer to a local file paths need to generalize this
    * [AIRAVATA-317] - After changing the username of jackrabbit still I can save service description
    * [AIRAVATA-400] - ConcurrentModificationException during using RegistryAPI
    * [AIRAVATA-497] - Deprecating xbaya engine running in the gui mode and make WorkflowInterpreter invocation by default
    * [AIRAVATA-506] - No log file is creating during standalone mode run of Airavata server
    * [AIRAVATA-516] - Input Output node data can not be retreived by using Airavata API's ProvananceManager
    * [AIRAVATA-522] - Application Failed status is not updated in XBaya
    * [AIRAVATA-527] - Monitor panel does not report final error when a node fails
    * [AIRAVATA-534] - Error creating the database in Windows environment - When starting the Airavata Server
    * [AIRAVATA-538] - getWorkflowExecutionByUser(...) method implementation is not correct
    * [AIRAVATA-544] - Could not deploy WS-Messenger with MySQL
    * [AIRAVATA-545] - 5 minutes tutorial fails when running WS-Messenger with MySQL
    * [AIRAVATA-559] - Improvements to AiravataJCRRegistry class
    * [AIRAVATA-564] - ForEach does not work if Array size is 1
    * [AIRAVATA-575] - Data type of workflow_graph and workflow_content of User_Workflow table and Published_Workflow table should be BLOB datatype
    * [AIRAVATA-581] - Supporting derby by default for airavata
    * [AIRAVATA-582] - Make run button of Xbaya to go through interpreter server by default
    * [AIRAVATA-584] - GridFTP transfer does not set type to Binary for binary data
    * [AIRAVATA-586] - Node deletion is giving some issues
    * [AIRAVATA-588] - Error when try to open a workflow from filesystem
    * [AIRAVATA-594] - Improving data retrieval time in provenance data 
    * [AIRAVATA-595] - Gram RSL generated is missing the jobtype parameter
    * [AIRAVATA-597] - XBaya pom have Junit jar version but its not added to properties
    * [AIRAVATA-598] - Warn user before closing XBaya
    * [AIRAVATA-611] - Remove derby.sh and startNetworkServer scripts
    * [AIRAVATA-612] - File transfer error getting masked to a general error

Apache Airavata Version 0.4-INCUBATING Released on 2012-07-28
=============================================================
0.4-INCUBATNG is the third release of Airavata (skipped 0.1-INCUBATNG). This release focuses on improving test cases
 and stability of code, documentation. 
 
** New Feature
    * [AIRAVATA-236] - Develop Gdirftp and and file transfer utils to GFac
    * [AIRAVATA-237] - Support http url sameway gridftp url is supported in the GFac URI type
    * [AIRAVATA-287] - Add while construct 
    * [AIRAVATA-298] - Allow workflow intepreter to start executing even when all the "Input Node" valuese are not set
    * [AIRAVATA-309] - XRegistry entries transfer (from OGCE XRegistry to Airavata XRegistry)
    * [AIRAVATA-358] - Integrate GFac with XBaya to run in embedded mode
    * [AIRAVATA-365] - Creating temporary location based on the given executable location
    * [AIRAVATA-366] - Adding default set of host descriptions during startup
    * [AIRAVATA-377] - Allowing users disable some of the input Nodes in a workflow during Invocation
    * [AIRAVATA-392] - Allowing users to specify the workflow name during XBaya startup and open the given workflow
    * [AIRAVATA-417] - Create a getter on AiravataClient to read the location to save the output file
    * [AIRAVATA-517] - Add XBaya JNLP generation to the Airavata Build

** Task
    * [AIRAVATA-414] - Refactor XBaya
    
** Sub-task
    * [AIRAVATA-321] - Create documentation for XRegistry to Airavata Registry migration tool
    * [AIRAVATA-326] - Gram and GridFTP ERP's are not populated in XRegistry entries transfer
    * [AIRAVATA-327] - Application temporary directory was not populated
    * [AIRAVATA-328] - Service Inputs and outputs are not coming
    * [AIRAVATA-329] - Verify different name spaces
    * [AIRAVATA-336] - After migration of xregistry resources, Application Services are not listed in Component List
    * [AIRAVATA-337] - Compare the OGCE Schema and Airavata Schema then add missing parts to airavata Schema
    * [AIRAVATA-491] - Do-While GUI component
    * [AIRAVATA-492] - Changing the workflow model for do-while
    * [AIRAVATA-493] - Add Do-while handler for Workflow Interpreter

** Improvement
    * [AIRAVATA-284] - Making the timeout value configurable in ws-messenger client package
    * [AIRAVATA-313] - Add validation in to airavata before submitting jobs to Grid
    * [AIRAVATA-334] - Xbaya Application description GUI
    * [AIRAVATA-381] - Copying gridftp and urls in to Grid during input Staging
    * [AIRAVATA-390] - Allowing users to configure the XBaya GUI placement in the screen
    * [AIRAVATA-401] - Allowing users to give empty String and URL inputs for a workflow
    * [AIRAVATA-403] - Workflow Execution Context should be used for all workflow executions
    * [AIRAVATA-405] - Adding monitoring capability to AiravataClient
    * [AIRAVATA-412] - GFac outputdata directory name should be customizable from application description
    * [AIRAVATA-464] - Extension for Application Deployment Description to specify Hadoop provider specific parameters 
    * [AIRAVATA-483] - Create java docs with the build using maven
    * [AIRAVATA-484] - Airavata API improvements
    * [AIRAVATA-486] - Add a document describing Airavata Users to the website
    * [AIRAVATA-520] - Service outputs as stdout and stderr
    
** Bug Fixes
    * [AIRAVATA-296] - Threads get create continuously in WorkflowInterpreter during accessing registry
    * [AIRAVATA-362] - Error while saving Gram Configuration
    * [AIRAVATA-368] - Host description update doesn't work properly
    * [AIRAVATA-369] - Huge Error message box comes when try to show an huge error
    * [AIRAVATA-380] - GFac doesn't keep the order properly for application invocation
    * [AIRAVATA-382] - Workflow loading when there's a URIParameterType is there in the workflow
    * [AIRAVATA-384] - Wrong workflow is saving so during loading of the workflow it shows a weird input nodes without Edges
    * [AIRAVATA-385] - Registry related commandline arguments are not picked up by the XBaya GUI
    * [AIRAVATA-386] - Cannot configure input nodes by clicking on inputNodes
    * [AIRAVATA-393] - Error while processing input from another node at Gfac-service
    * [AIRAVATA-395] - gfac fails with ArrayInput types
    * [AIRAVATA-411] - Service Description editing fails
    * [AIRAVATA-416] - Notifications are not delivering sometimes when a workflow run in Interpreter Service mode
    * [AIRAVATA-418] - Handling application exit codes and if its non zero through and error up to XBaya GUI
    * [AIRAVATA-421] - Propagate GFac failures in to XBaya GUI properly and make the failure nodes red
    * [AIRAVATA-425] - jackrabbit.log_IS_UNDEFINED
    * [AIRAVATA-431] - Error when importing a workflow from file system
    * [AIRAVATA-432] - GFAC is not creating outputData directory for GRAM Jobs
    * [AIRAVATA-435] - outputData directory variable is set as inputData in Gram RSL
    * [AIRAVATA-436] - GFAC does not support reading output data directly from outputData and set values into output array
    * [AIRAVATA-438] - Sometimes Gfac notifications are not receiving to XBaya so the failures scenarios are not visible to the user
    * [AIRAVATA-456] - Input type URIArray is not handled properly
    * [AIRAVATA-466] - WorkflowInterpreter notification is broken
    * [AIRAVATA-487] - Changing the host dynamically based on the request content
    * [AIRAVATA-494] - Not able to Run a local service in GFAC from Xbaya
    * [AIRAVATA-502] - -workflow option doesn't work on trunk
    * [AIRAVATA-503] - Workflow nodes are not becoming red when it failes but it receives the proper notification
    * [AIRAVATA-504] - NPE while starting Airavata Server
    * [AIRAVATA-505] - Saved workflow with EndWhile is loading the component wrong
    * [AIRAVATA-507] - NPE when deploying Airavata on Tomcat
    * [AIRAVATA-508] - Cannot add multipe hosts for a single service
    * [AIRAVATA-509] - Gram Hosts are not showing properly in XBAya gui
    * [AIRAVATA-510] - When connecting through XBaya to an Airavata which is deployed on tomcat, MessageBox and MessageBroker URLs are not propagated properly

** Test
    * [AIRAVATA-472] - Add more test cases to cover ForEach construct functionality


Apache Airavata Version 0.3-INCUBATING Released on 2012-05-14
=============================================================
0.3-INCUBATNG is the second release of Airavata (skipped 0.1-INCUBATNG). This release focuses on improving test cases
+and stability of code, documentation.

** New Feature
    * [AIRAVATA-100] - Workflow Execution Context Header schema
    * [AIRAVATA-305] - Allow users to configure provenacne Writer Thread pool size and shutdown the thread pool during service shutdown
    * [AIRAVATA-348] - Need Maven profiles for building Airavata clients.

** Task
    * [AIRAVATA-106] - Adding a Sample which demonstares the usage of XMLBean generated POJO classes
    * [AIRAVATA-301] - create documentation for how to use XBayaClient with a sample code
    * [AIRAVATA-302] - Document the xbaya.properties file entries used in WorkflowInterpreter service in detail
    * [AIRAVATA-303] - Document how to invoke echo service in one of the super computers (ranger)
    
** Sub-task
    * [AIRAVATA-291] - Test Foreach when workflow interpreter is  running without the ws-messenger
    * [AIRAVATA-292] - Long running stress evaluation of workflow interpreter without the ws-messenger
    * [AIRAVATA-407] - name all module jars with airavata prefix

** Improvement
    * [AIRAVATA-253] - Remove weps.jar
    * [AIRAVATA-263] - Improve WorkflowInterpreter to run multiple jobs in parallel
    * [AIRAVATA-267] - minimize the default size of XBaya Window
    * [AIRAVATA-273] - Providing multiple port suppor for EndForEach Node
    * [AIRAVATA-274] - Threads get created during a long run of Interpreter service
    * [AIRAVATA-279] - xml serialization error in 10 minute tutorial
    * [AIRAVATA-285] - Remove messenger to attic
    * [AIRAVATA-293] - Allow users to configure the time interval to delete old messageboxes
    * [AIRAVATA-294] - Create new api method to initialize the XBaya client without the notificaton listner
    * [AIRAVATA-319] - Move the XBayaClient to a separate module
    * [AIRAVATA-398] - remove src and target folders from binary distribution of samples

** Bug
    * [AIRAVATA-266] - Fix intermittent test failures in XBaya test cases
    * [AIRAVATA-269] - Hyphen replacement is not working properly
    * [AIRAVATA-272] - XBaya UI Application Description saving - executable selection doens't work properly
    * [AIRAVATA-275] - PUBLISHER threads are not interrupted after the workflow inovacation
    * [AIRAVATA-276] - Unnecessary QueueName element in ApplicationDescription dialog 
    * [AIRAVATA-283] - Old messagebox deletion doesn't work 
    * [AIRAVATA-286] - Registry API random test failures
    * [AIRAVATA-295] - In a long run messagePuller threads are not killing completely
    * [AIRAVATA-297] - New Deployment Description panel "save" button
    * [AIRAVATA-310] - Not able to edit existing service description
    * [AIRAVATA-311] - New Deployment Description panel layout issue
    * [AIRAVATA-312] - Host Description Advanced Options panel layout issue
    * [AIRAVATA-378] - Update Gram Configuration Dialog to accept Static Working Directory option
    * [AIRAVATA-389] - jobs fails with lack of memory in batch submission
    * [AIRAVATA-399] - Improve GramProvider to support transfer of local files 
    
** Test
    * [AIRAVATA-239] - Create a Edit distance based dot product and cartisian product ForEach test case

Airavata Version 0.2-INCUBATING Released on 2012-04-22
======================================================

0.2-INCUBATNG is the first release of Airavata, 0.1-INCUBATNG was attempted but the vote was cancelled. 
This notes covers both the releases. This release focuses on improving test cases and stability of code, 
cleaning up of donated code, packaging all components into modular architecture, documentation, and 
removal of non-compatible license dependencies.
 

** New Feature
    * [AIRAVATA-104] - Allow creating new account using XBaya GUI for Jackrabbit registry

** Task
    * [AIRAVATA-78] - Creating a document how to deploy gfac-axis2 service on axis2
    * [AIRAVATA-145] - Deprecate support for GPEL Client in XBaya
    * [AIRAVATA-227] - Disable Jython Execution Menu
    * [AIRAVATA-246] - Update the site documentation
    * [AIRAVATA-247] - Create new document for advance workflow sample running
    * [AIRAVATA-248] - Add the Complex-math-service and Levinshtine-distance-service to the maven build, in order to build axis2 service archives

** Improvement
    * [AIRAVATA-222] - Workflow launch input box requires inserting xml wrapper elements
    * [AIRAVATA-223] - Workflow Interpreter should go to pause if it waits on a failed service
    * [AIRAVATA-224] - Popup  save dialog when closing the workflow tab if changed
    * [AIRAVATA-225] - Add more samples/workflows which demonstrates the use of basic constructs
    * [AIRAVATA-226] - Allow user to browse the Application during definition of application description
    * [AIRAVATA-230] - Review XBaya code
    * [AIRAVATA-231] - Deprecate Stream component
    * [AIRAVATA-235] - Ability to edit existing application/service and host descriptions
    * [AIRAVATA-241] - Check App/Service/host descriptions before saving whether it overrides existing document

** Bug
    * [AIRAVATA-81] - Workflow interpreter- Workflow already running
    * [AIRAVATA-118] - WS-Notification monitoring tool is failing in airavata
    * [AIRAVATA-181] - When adding a ServiceDescription through the UI sometimes the out parameter is not added
    * [AIRAVATA-184] - Messagebox test should skip if a listener port cannot be started on machine due to firewall or system issues. 
    * [AIRAVATA-194] - XBaya Registry Test throws XML Parsing error
    * [AIRAVATA-203] - XBaya console error: node does not have a parent
    * [AIRAVATA-205] - SimpleMathService can be added 2 time but not more than that
    * [AIRAVATA-217] - GramProvider Test is failing with new schema
    * [AIRAVATA-218] - Application registration randomly sets application name to Application1
    * [AIRAVATA-219] - Appearence of dynamic workflow run toolbar during workflow execution
    * [AIRAVATA-221] - Inconsistency in managing of the Workflow instance status from GUI
    * [AIRAVATA-228] - XBaya Registry Connection Error Message
    * [AIRAVATA-233] - ressurect workflow test
    * [AIRAVATA-234] - HostDescription is allowed to be saved over and over in HostDescriptionDialog
    * [AIRAVATA-244] - CrossProductWorkflowTest fails with a NP
    * [AIRAVATA-245] - Fixing a build failure in WorkflowTrackingTest

** Test
    * [AIRAVATA-238] - Include a workflow tracking test that include the Messaging system
    * [AIRAVATA-242] - Registry Delete test
    * [AIRAVATA-243] - Registry Restart while XBaya is running Test


Version 0.1 Attempted Release on 2011-11-11 and Cancelled
=========================================================

** Initial Setup
    * [AIRAVATA-1 to AIRAVATA-10] - Accepting Code donation from OGCE. Setup and organize SVN, Website JIRA.
    
** Crypto Requirements & License Compatibility
    * [AIRAVATA-7] - Crypto Requirements for all SSL and GSI Security Dependencies
    * [AIRAVATA-23, AIRAVATA-26 to 28] - Remove MySQL jars and integrate with Apache Derby In-Memory database
   
** Build, Tools, Documentation & Code Cleanup
    * [AIRAVATA-38] - Improve Eclipse support
    * [AIRAVATA-94] - Add Airavata to Apache Sonar analysis service
    * [AIRAVATA-95] - Add Airavata to Apache's Jenkins build system
    * [AIRAVATA-42] - Providing README.txt and install files in to source
    * [AIRAVATA-58] - SVN Reorganization
    * [AIRAVATA-56] - Clean up Workflow-Interpreter pom file and correct the build profile for this module
    * [AIRAVATA-86] - create complete airavata distribution
    * [AIRAVATA-101] - Clean up WS-Messenger package
    * [AIRAVATA-122] - Add Architecture to Website
    * [AIRAVATA-144] - Deprecate XRegistry and move to Attic
    
** Improvement
    * [AIRAVATA-68] - Import OGCE GFac Schema as based type system for airavata Gfac
    * [AIRAVATA-102] - Simplify XBaya Menu to make it self explanatory
    * [AIRAVATA-105] - Improvements to the HostDescription, ServiceDescription and ApplicationDeploymentDescription classes
    * [AIRAVATA-107 to AIRAVATA-110] - Switch Logging Library to SLF4J
    * [AIRAVATA-123] - Aggregate the existing 3 forms & create a single form to support adding Application/Service/Host descriptors from XBaya GUI
    * [AIRAVATA-143] - Integrate Globus Online file transfer capability to XBaya
    * [AIRAVATA-146] - Add a Window to XBaya to support Globus online file transfers
    * [AIRAVATA-152] - Support application level scheduling and outputs in execution context
    * [AIRAVATA-153] - Improve ShellApplicationDeployment to use POJOs generated from XMLBeans
    * [AIRAVATA-161] - Reorganize Application Schema to make it extendable. 
    * [AIRAVATA-162] - Service Description Schema should have method and port types to generate wsdl
    * [AIRAVATA-171] - Remove GFac POJO and replace with XMLBeans object

** New Feature
    * [AIRAVATA-75] - Integrate new Registry API and GFAC Pojos to XBaya
    * [AIRAVATA-117] - Provided set of gfac-urls can be used in xbaya by referring registry
    * [AIRAVATA-134] - Saving outputs of Nodes in to Registry User space
    * [AIRAVATA-148] - Create a JCR registry browser for XBaya
    * [AIRAVATA-157] - Add workflow provenance interface to catalog workflow execution data
    * [AIRAVATA-158] - Implement Provenance Cataloging with JCR registry
    * [AIRAVATA-163] - Add WSDL Generation utilities to gfac-schema-utils
    * [AIRAVATA-119] - Save Application Descriptors through the JCRComponentRegistry in ApplicationDescriptionRegistrationWindow
    * [AIRAVATA-137] - When creating/updating a Service Description the WSDL for that service should be autogenerated & saved to the registry  
    * [AIRAVATA-61] - Integration of improved workflow tracking library
    * [AIRAVATA-36] - Change XBaya event handling to new WS-Messenger Client
    * [AIRAVATA-50] - Integrate all Airavata components system to use improved WS-Messenger
    * [AIRAVATA-171] - Improved GFac Application Registration Schema to use XML Beans, change the GFac Architecture
    * [AIRAVATA-183] - Change GFac architecture to serve incoming request, without starting temporary services each time
    * [AIRAVATA-73] - Add a Repository interface to GFac to experiment with JCR repository API
    * [AIRAVATA-74] - Integrate new Registry API to GFAC
    * [AIRAVATA-148 Create a JCR registry browser for XBaya
    * [AIRAVATA-159] - Add data browsing to the registry browser
    * [AIRAVATA-183] - Changing GFac architecture to better integrate with Axis2

** Bug
    * [AIRAVATA-24] - Error while running MsgBoxSample
    * [AIRAVATA-140] - Removing XRegistry menus from Xbaya since they are no longer functioning.
    * [AIRAVATA-142] - Cannot execute a workflow in XBaya when MessageBox is deployed on other machine
    * [AIRAVATA-150] - XBayaService is not working
    * [AIRAVATA-151] - Fixing a build error in Airavata trunk
    * [AIRAVATA-154] - Fixing a test failure in PropertiesBasedServiceImplTest
    * [AIRAVATA-155] - Improve ServiceDescription to use POJOs generated from XMLBeans
    * [AIRAVATA-156] - Improve DataType class to use POJOs generated from XMLBeans
    * [AIRAVATA-160] - Storing inputs for workflow in to Registry
    * [AIRAVATA-164] - XML format error while running the test WorkflowTest
    * [AIRAVATA-168] - Fixing the name of generated apache-airavata--0.0.1-SNAPSHOT-bin.zip file
    * [AIRAVATA-172] - Fix build warnings
    * [AIRAVATA-182] - Fixing the build failure in airavata trunk




