Running Essbase 11.1.2.x in the foreground

For many years, the conventional wisdom was that if your Essbase server was failing to start, you should run it in the foreground to see any messages that might be displayed to the console, but not logged into the Essbase.log file. With the pre-11.1.2.x versions, this was usually quite simple. In fact, if you had your environment variables set right, all you needed to do is type in ‘essbase’ at a command prompt regardless of what directory and your Essbase server would start before your eyes.

According to the Essbase Database Administrator’s Guide (dbag), it states that the ability to run Essbase in the foreground is no longer supported as of version 11.1.2.2.100. With the 11.1.2.x versions and their more complicated directory structure (some static files stored in …Oracle/Middleware/EPMSystem11R1/products…. and some files stored in …Oracle/Middleware/user_projects/epmsystem1/…); starting Essbase in the foreground can be challenging if you don’t use this simple hack.

If we open a command prompt and navigate to the …/Oracle/Middleware/EPMSystem11R1/products/Essbase/EssbaseServer/bin directory and type in ‘essbase’, you will likely see a message about an improper ESSBASEPATH, or maybe a message about the Locale.

In later versions, Essbase needs to reference files from different folders.  We have two options, we can either set up the proper environment variables or we can do what Oracle has done with their ESSCMD and ESSMSH executables.  I like to hijack the “startEsscmd.cmd” script that is installed with the Essbase Client in …/Oracle/Middleware/EPMSystem11R1/products/Essbase/EssbaseClient/bin directory.

Simply save a copy of the “startEsscmd.cmd” script as “startEssbase.cmd”.  Edit the new “startEssbase.cmd” script and change the “%ARBORPATH%\bin\ESSCMD.exe %*” line to “%ARBORPATH%\bin\ESSBASE.exe %*”. Then, save the startEssbase.cmd file and when you double-click it in Windows, Essbase will run in that window. Now you can use those old school Essbase commands in the foreground and rebuild the Essbase.sec file if absolutely necessary.

Of course, this is unsupported and with the advances in Essbase, it’s probably not even necessary since Essbase runs much better now than it did in the 9.3.x and early 11.1.1.x days.  The only time I have had to do this is when the Essbase.sec is corrupted beyond repair, but starting in version 11.1.2.2, I believe, Essbase tries to create a new Essbase.sec file automatically if it’s missing. It’s not very often that these steps are needed, but I wanted to document them just in case anyone is running on an old version out there. If you are on EPM version 11.1.2.2 or older, please consider an upgrade. I know a guy that can help with that.

Oracle Critical Patch Update – July 2015

Last week on July 14, Oracle released it’s quarterly Critical Patch Update.  The following Hyperion and BI products are affected by security vulnerabilities:

  • Hyperion Essbase
  • Hyperion Shared Services
  • Hyperion EPMA
  • OBIEE

Hyperion Essbase

There are patches available to fix the vulnerabilities in Essbase for the 11.1.2.2 and 11.1.2.3 versions. The patch for version 11.1.2.3 are the 11.1.2.3.506 Patch Set Update (PSU) for the Essbase Server and Essbase Client (patch numbers 20184072 and 20184082, respectively).  The vulnerability fix for Essbase version 11.1.2.2 is “Upgrade to Hyperion Essbase 11.1.2.3, then apply the patches listed above”.  If you are on an older version of Essbase than 11.1.2.3, it is time to upgrade.

Hyperion Shared Services

The CPU document calls this “Hyperion Common Security,” but they are talking about Shared Services. The vulnerability is listed as affecting versions 11.1.2.4, 11.1.2.3, and 11.1.2.2.  The patch for version 11.1.2.4 is listed as patch number 20876722. This one is interesting because if you search, that patch doesn’t bring anything up on the My Oracle Support site. I also searched for Shared Services patches under 11.1.2.4, but there isn’t even an 11.1.2.4 version available to choose yet.  Edit 7/22/15 – The Shared Services 11.1.2.4.001 patch (number 20876722) came out on 7/21 and is available on My Oracle Support. The 11.1.2.3 patch is the Shared Services 11.1.2.3.700 PSU (number 20675028). That PSU requires patching nearly every EPM product in your environment but gives the ability to run Internet Explorer 11 in its native mode – no more Enterprise Mode needed for 11.1.2.3.  The 11.1.2.2 patch is listed as number 21052487, but this is a bad patch number as well with no results when using their link.

Hyperion Enterprise Performance Management Architect

The EPMA vulnerabilities affect both versions 11.1.2.2 and 11.1.2.3.  In version 11.1.2.3, you have two different options to fix the vulnerabilities: EPMA PSU 11.1.2.3.501 (patch number 19466859) or EPMA PSU 11.1.2.3.700 (patch number 20929659).  If you are on version 11.1.2.2, a patch set update is available on request from Oracle.  I assume that you would need to submit an SR to get a PSU from Oracle Support for 11.1.2.2.

OBIEE

For version 11.1.1.9 of OBIEE, only a patch to Third Party BI software (patch number 21235195) is listed as a critical patch.

The following patches are listed to fix vulnerabilities in version 11.1.1.7:

Essbase fragmentation head-scratcher

With the release of Essbase 11.1.2.3.500, there was an interesting entry in the readme that caused some chatter on Network54.  The readme states:

The INPLACEDATAWRITE setting in essbase.cfg enables or disables in-place data writing.

Prior to this release, each time a data block was updated, it was written to a new disk location. With this release, for Exalytics, Essbase enables in-place data writing.

In-place data writing means that when updates occur, the data block can be written to the same location, as long as the compressed size of the data block fits in its original location on the disk.

In-place data writing can help reduce data fragmentation and lower the need for frequent restructuring of database. It also reduces the need for frequent index updates, resulting in improved performance.

Merely updating a single value of a cell in a single block causes that block to be written to the end of the page file? This made long-time developers scratch their heads because many of us believed that updating values in a block did not cause fragmentation. If submitting data causes fragmentation, imagine how bloated our Planning databases must be. No wonder we hear recommendations to restructure nightly during a planning cycle.

Glenn Schwartzberg said that yes, that’s how he understood it to work.  Edward Roske said there was no way submitting data cause fragmentation.  Cameron Lackpour didn’t believe it either until he did some testing and found that the ESSCMD GETDBSTATS command reported fragmentation after updating a single cell of Sample.Basic. Dan Pressman commented that he had seen the same behavior with compression turned off – BSO writes to the end of the .pag file when blocks are updated.

Test 1:

I tested this out on an 11.1.2.4.000, non-Exalytics sandbox. In Excel, I retrieved a single block of one of our sample cubes (not Sample.Basic, this was a larger demo cube). The page dimensions of my worksheet listed a single level-0 member from each Sparse dimension of the cube. Accounts were on my rows and January was my column dimension (both were level-0 Dense members).

With that sheet, I wrote a macro to do the following:

  • Update each data cell of the grid to a randomly generated number
  • Submit the data for the block back to Essbase
  • Call a MaxL script to stop and restart the Essbase application to flush the cache
  • Loop back to the top, iterating 250 times

While I ran the macro, I (im)patiently watched the database directory to see if the database’s essn.ind or essn.pag files would grow.  As we all know, if there is fragmentation that happens each time the block is submitted back to Essbase, the .pag file should see some growth – especially over 250 iterations. For complete transparency, this database is using the bitmap compression type that is the default for BSO applications.

After 250 iterations of changing the same block and stopping/restarting the application there was no essn.pag file growth. The GETDBSTATS results show the following:

  • Average Clustering Ratio: 0.4431846
  • Average Fragmentation Quotient: 0.8091218

That leads me to believe there is a little bit of fragmentation, so I cleared the cube and loaded in a level-0 extract of the data and ran a calculation.  After that, I ran GETDBSTATS again and found the following:

  • Average Clustering Ratio: 0.5117247
  • Average Fragmentation Quotient: 0.6745301

Test 2:

My next test was to do the same loop except I added in a quick aggregation step after the data was submitted. This time, as the macro ran, I could plainly see the essn.pag file growing every 5-6 loops of the code. The Average Clustering Ratio and Average Fragmentation Quotient also grew as the calculations ran.

What does all of this mean?

Conclusion:

My conclusion is that the documentation on INPLACEDATAWRITE is a little misleading. Essbase without the INPLACEDATAWRITE does NOT write a block to the end of the .pag file if a block is updated. Blocks may be updated all day long by submitting data to them without expanding your .pag files. Fragmentation is caused when a data block is brought into the calculator engine. This is where INPLACEDATAWRITE does its magic on Exalytics machines and allows those blocks to be compressed and returned to their original location in the .pag file, thus preventing fragmentation.

What about the Fragmentation Quotient? Well, in the DBAG, it mentions that the Fragmentation quotient can be high and not indicate a need to defragment since free space in the .pag is created in 8MB chunks. I observed this to be true during Test 2 where excess free space was added to the .pag file and the file would only grow after 5-6 loops of the submit data/calc/stop/start routine. My thought is that an Average Fragmentation Quotient less than 1 (<1%) is essentially no fragmentation at all. After a single calculation script I began to see that Average Fragmentation Quotient above 1 (1.884844). By nature Essbase has some degree of fragmentation all of the time as it’s .pag file is always a little bit bigger than the actual size of the data contained therein. As long as the .pag file isn’t growing and the Average Fragmentation Quotient is less than 1%, I’m counting that as no fragmentation by submitting data to a block.

Calculation Manager 11.1.2.4.002

As I posted the other day, Caclulation Manager 11.1.2.3.505 was released.  Not only did it include the fixes to the CDF declarations, it also contained some new CDFs we haven’t seen before.  Well, Calculation Manager 11.1.2.4.002 was released on Monday (patch number 20830325) and contains the same fixes as 11.1.2.3.505.

This version of Calculation Manager contains the new CDFs as well as fixes the issues with the CDF registration.  I think it’s great that the Calculation Manager team continues to crank out new CDFs for us to use.  Beyond that, I am very impressed that they have caught up the 11.1.2.3.50x Calc Manager to the 11.1.2.4.002 version.  It would be very simple for them to say that the new CDFs will only be added to the latest release, but they have kept the 11.1.2.3 version up-to-date.  Kudos to Oracle and the Calculation Manager product team!

Calculation Manager 11.1.2.3.505

On Tuesday, 6/9, Calculation Manager patch set update 11.1.2.3.505 was released. I have previously written about the errors in the CDF registration and how to fix those. I am very happy to report that all of the CDFs are now registered properly in 11.1.2.3.505. Not only that, but there are some new CDFs to report with this version of Calculation Manager as well. Calculation Manager 11.1.2.3.505 is a patch set update now available on My Oracle Support as patch number 20968612.

New Functions in Calc Manager 11.1.2.3.505:

@CalcMgrPadText (text,length,padText,append) – Fills the text with a padding text before or after the text to make up the length.

  • @CalcMgrPadText(“01″,5,”0”,@_true) = 01000
  • @CalcMgrPadText(“01″,5,”0”,@_false) = 00001

@CalcMgrMatches(text, regExpr, ignoreCase) – Returns true, if the first substring of this string that matches the given regular expression. For regular expression, please refer to java docs for java.util.regex.Pattern.

  • @CalcMgrMatches(“AsSeT”, “(Asset|Liability|Income|Expense|Equity)”, @_false) = true
  • @CalcMgrMatches(“CAT”, “c*”, @_true) = true

@CalcMgrFindFirst(text, regExpr, ignoreCase) – Find the first substring of this string that matches the given regular expression. For regular expression, please refer to java docs for java.util.regex.Pattern.

  • @CalcMgrFindFirst(“We are searching for a string in this sentence.”, “string”, @_false) = “string”
  • @CalcMgrFindFirst(“Can’t find this STRING anywhere”, “string”, @_true) = “Can’t find this STRING anywhere”

@CalcMgrFindLast(text, regExpr, ignoreCase) – Find the last substring of this string that matches the given regular expression. For regular expression, please refer to java docs for java.util.regex.Pattern.

  • @CalcMgrFindFirst(“acatamaranbatarang”, “ran?”, @_false) = “rang”

@CalcMgrDoubleFromString(text) – Returns a double.

  • @CalcMgrDoubleFromString(“12.54”) = 12.54(Double)
  • @CalcMgrDoubleFromString(“test”) = 0.0(Double)

@CalcMgrGetCurrentDateTime() – Returns the current date and time in the YYYYMMDDHHMMSS format.

  • @CalcMgrGetCurrentDateTime() = 20140101143001

@CalcMgrGetCustomDateTime(year,month,day,hour,min,sec) – Returns the custom date and time in the YYYYMMDDHHMMSS format.

  • @CalcMgrGetCustomDateTime(2015,06,11,21,27,01) = 20150611212701

@CalcMgrGetDateTimePart(date,date_part_ex) – Returns the Year/Month/Week/Day/DayOfYear/Weekday/Hour/Minute/Second as a number from date.

  • Options for the date_part_ex parameter are: Year, Month, DayofMonth, WeekOfYear, WeekOfMonth, DayOfYear, Hour, Minute, or Second.  These are Strings passed and the capitalization does not matter.
  • @CalcMgrGetDatePart (20141230052736, Hour) = 05
  • @CalcMgrGetDatePart (20141230125430, mInUtE) = 54

@CalcMgrMesssageFormat(text,parameters) – Creates a String with the given pattern and uses it to format the given arguments.

  • This one is interesting, it accepts the parameters to basically create a dynamic string that can be used in messages. You might pass those messages to a custom log file or even into an email for your administrators.

EPM Compact Deployment issue in 11.1.2.4

A compact deployment in EPM is when there are multiple Java Web Applications deployed to a single WebLogic Managed Server called EPMServer0.  A compact deployment is part of Oracle’s standard deployment documentation for EPM; however, I do not recommend it for production systems.  The compact deployment is an option for development or sandbox environments as it reduces the memory (RAM) requirements for the EPM system.  That means that you can size a development environment smaller than your production environment if you use the compact deployment.  There are some trade-offs in going this route, so do your homework to make an educated decision before using compact deployment.

This is a fairly minor issue with a quick fix.  I found on my laptop installation of EPM that my icons were not displaying in Shared Services when attempting to assign filter access to a user.  My colleague, Kenneth Staudt, pointed me to a Knowledge Base article on Oracle’s support site that described the issue exactly.  The instructions on KB article 1612768.1 are for 11.1.2.3.003 and later; however, the folders are a little different in 11.1.2.4.

If you run into this issue, copy the “ui_themes” folder from …\Oracle\Middleware\user_projects\domains\EPMSystem\servers\EPMServer0\tmp\servers\EPMServer0\tmp\_WL_user\SHAREDSERVICES_11.1.2.0\nth7gv\war to …\Oracle\Middleware\user_projects\domains\EPMSystem\servers\EPMServer0\tmp\servers\EPMServer0\tmp\_WL_user\WORKSPACE_11.1.2.0\rj8acj\war.  After that, restart your EPMServer0 Managed Server and you should now have the icons in the Access Control screen.

Oracle Critical Patch Update – April 2015

Oracle’s quarterly Critical Patch Update came out last week on April 14, 2015. There were two Hyperion products listed this quarter that require patches to fix the security vulnerabilities: Hyperion BI+ (Reporting and Analysis) and Smart View.

Hyperion BI+

There are patches available for Hyperion BI+ in the 11.1.2.3.x and 11.1.2.2.x code lines, which is consistent with Oracle’s Lifetime Support policy. The patch for the 11.1.2.3.x code line is the 11.1.2.3.506 Patch Set Update (PSU) for the Reporting and Analysis Framework (patch number 20029854). The patch for the 11.1.2.2.x code line is the 11.1.2.2.500 PSU for the RA Framework (patch number 18659116). Interesting enough, is that the 11.1.2.2.500 PSU has been available for 9+ months and fixes the vulnerabilities just uncovered this quarter. Hopefully if you are on 11.1.2.2.x, you have already patched to 11.1.2.2.500 for BI+.

Smart View

The Smart View vulnerability is patched in Smart View 11.1.2.5.400 (patch number 20327649).  This goes along with the theory that you should keep up with the Smart View releases. We need to get in the habit of thinking of Smart View like the apps on an iPhone; they often update automatically and you always have the most recent version. Why? By keeping up with the technology, you get the latest bug fixes and security updates as well as any new features.

Little known ESSCMDQ feature – FILLDB

Occasionally, we have a need to load up a database with some fake data. This could be a copy of a customer application or perhaps a sample application that we really want to load up with some random data for calculation testing.

As most people know, Oracle has a special version of ESSCMD known as ESSCMDQ downloadable on their site here. Oracle even has an 11.1.2.4 version posted for those of us playing with the latest version. As of right now, the only documentation available on ESSCMDQ relates to the ASO compaction process blogged about by several of my colleagues in the EPM space.

Edward Roske mentioned this command to me a couple of years ago when we were doing some load testing of a customer’s application, but the only thing I could find about it on Google was a single Network54 post from 2004. Thank you Ray Dhiilon, wherever you are for recording the only existing documentation on FILLDB until now. I recently saw that Jason Jones created a utility called Cube Data that fills random data into Essbase and it jogged my memory on this command. While it was fresh in my mind, I figured that I would share it.

Setting up ESSCMDQ

I downloaded the zip file for 64-bit ESSCMDQ version 11.1.2.4 from Oracle’s site. I copied the ESSCMDQ.exe file into my Essbase Server directory at C:\Oracle\Middleware\EPMSystem11R1\products\Essbase\EssbaseServer\bin. In the C:\Oracle\Middleware\user_projects\epmsystem1\EssbaseServer\essbaseserver1\bin directory, I copied the startEsscmd.bat file to startEsscmdq.bat and edited the script to call ESSCMDQ.exe instead of ESSCMD.exe.

startEsscmdq Script

I launched ESSCMDQ by double-clicking on my .bat file. I am not a huge fan of ESSCMD, so I don’t know the login steps very well. I figured there are probably a lot of people like me that have invested time into learning MaxL, so don’t really use ESSCMD very frequently or ever.  The commands are pretty easy to make this work and I show how to run this in my command line output below.

FILLDB loads random data into level0 data blocks. There are three parameters, if no parameters are specified, ESSCMDQ will fill all cells of the database.

FILLDB [size density distance]

  • size – the desired combined size of the essn.pag files in Megabytes (MB)
  • density – how full your blocks will be as a percent
  • distance – distance between blocks that get filled (determines the sparsity of the database)

FILLDB 1024 5 3 = Fill the database up to 1GB, 5% block density, fill every third block.

FILLDB = Fill the entire database, 100% block density, fill every block.

The distance parameter is interesting. The way it appears to work is that it takes the level0 list of your first sparse dimension and will fill the top level0 member, then skip the desired number of level0 members and fill in the next one.

I logged into my 11.1.2.4 sandbox environment and selected a Hybrid Aggregation database just to see if it would work. I am pleased to report that it does. That’s not terribly surprising since Hybrid Aggregation databases still use blocks and index and page files.  Combine that with the fact that FILLDB works on level0 cells and it’s really a no-brainer; nevertheless, I wanted to make sure.

FILLDB command

Just to prove that it actually works, this cube was blank when I started and here are the statistics:

FILLDB block density

  FILLDB PAG size

Obviously, this is a BSO command, as we are talking about filling blocks.  You can run it against an ASO application, but the prompt just goes away while ESSCMDQ tries to figure it out.  I let it run for a few minutes and then it came back with a 1042017 Essbase error.  So, BSO only for this command.

Also, while I’m blogging, I just wanted to put in a quick plug for the OAUG Hyperion SIG meeting this Sunday, April 12.  If you are going to be at COLLABORATE, please join me at the SIG meeting.  We have some great speakers lined up to cover what’s new in 11.1.2.4 as well as talk about the road map beyond 11.1.2.4.

 

EDIT: It’s probably worth mentioning that this is undocumented and unsupported, so don’t call Oracle Support if you are having issues. You are on your own, and of course this may be removed at any time as well. So use it if you can, if not, take a look at Jason Jones’s utilities.

Calc Manager 11.1.2.4 New Functions

EPM 11.1.2.4 has been out for a few weeks now and I have been heads-down diverting my “free time” to a different creative outlet besides blogging. Most EPM bloggers have already given details on the new features of their favorite applications, so I won’t belabor the point. I haven’t yet seen anyone report on the new functions in Calculation Manager 11.1.2.4, as these are not documented in the readme for Calc Manager or anywhere else, unfortunately.

As I researched the functions, it was clear that the EPM community is always looking for some type of documentation around these functions, so I wanted to make the latest information available for anyone out there on the cutting edge. All of the functions in Calc Manager 11.1.2.3.502 are still available in 11.1.2.4, so these are only the brand new functions. Also, the errors on the CDF definitions persist in 11.1.2.4, so the blog entry I did here is still relevant.  If you are going to use those functions, just edit the essfunc.xml file and you’re good to go.

New Functions in Calc Manager 11.1.2.4:

@CalcMgrGetFormattedDate (date, format) – Accepts a date and its format and will reformat it into YYYYMMDD format.

  • @CalcMgrGetFormattedDate (12302014, “mmddyyyy”) = 20141230
  • @CalcMgrGetFormattedDate (30122014, “ddmmyyyy”) = 20141230

 

@CalcMgrGetStringFormattedDate (dateString, format) – Accepts a string of numbers and its format and will reformat the string into YYYYMMDD format.

  • @CalcMgrGetFormattedDate (“12302014”, “mmddyyyy”) = 20141230

 

@CalcMgrGetDatePart (date, date_part_ex) – Returns the Year/Month/Week/DayofMonth/WeekofYear/WeekOfMonth/DayOfYear as a number from date which is in the YYYYMMDD format.

  • Options for the date_part_ex parameter are: Year, Month, Week, DayofMonth, WeekOfYear, WeekOfMonth, or DayOfYear.  These are Strings passed and the capitalization does not matter.
  • @CalcMgrGetDatePart (20141230, DayOfYEAR) = 364
  • @CalcMgrGetDatePart (20141230, yEAR) = 2014

 

@CalcMgrGetDayOfYear (date) – Returns the day of year (1-366) from date which is in the YYYYMMDD format.

  • Calls the same code as @CalcMgrGetDatePart (YYYYMMDD, DayOfYear).
  • @CalcMgrGetDayOfYear (20141230) = 364

 

@CalcMgrAddDatePart (date,date_part,amountToAdd) – Add specified number of years/months/days/weeks to the date which is in the YYYYMMDD format.

  • Options for the date_part parameter are: Year, Month, Day, or Week.
  • The amountToAdd may be positive or negative.
  • @CalcMgrAddDatePart (20141230,week,1) = 20150106

 

@CalcMgrRollDate (date,date_part,up) – Adds or subtracts (up or down) a single unit of time on the given date field without changing larger fields.

  • Options for the date_part parameter are: Year, Month, Day, or Week
  • The up parameter is a boolean (true or false) Java parameter.  Use @_true to add, and @_false to subtract.
  • @CalcMgrRollDate(19960131,”month”,@_true) = 19960229
  • @CalcMgrRollDate(19960131,”day”,@_true) = 19960101
    • Note that the DAY field was rolled over to 1, but the MONTH field remained at 01.
    • Use @CalcMgrAddDatePart to automatically increment months when rolling over days

 

@CalcMgrDateDiff (fromDate,toDate,datePart) – Returns the difference (number) between two input dates, in YYYYMMDD format, in terms of the specified date-parts, following a standard Gregorian calendar.

  • Options for the date_part parameter are: Year, Month, Day, or Week
  • Returns integers (no remainders or decimals) for the difference.

 

@CalcMgrYearsBetween (fromDate,toDate) – Returns the years between two dates which are in the YYYYMMDD format.

  • Calls the same code as @CalcMgrDateDiff (YYYYMMDD, YYYYMMDD, Year).
  • Returns integers (no remainders or decimals) for the difference.

 

@CalcMgrMonthsBetween (fromDate,toDate) – Returns the months between two dates which are in the YYYYMMDD format.

  • Calls the same code as @CalcMgrDateDiff (YYYYMMDD, YYYYMMDD, Month).
  • Returns integers (no remainders or decimals) for the difference.

 

Calc Manager 11.1.2.3.503 released

Three blog posts in three days? He’s on fire. Maybe that’s not as highbrow as Cameron Lackpour’s references; however, if you’re in your 30’s, you probably understand.

A couple of days ago, I posted the fix to five of the Calc Manager CDFs in 11.1.2.3.502. Well, as luck would have it, a new patch to Calc Manager 11.1.2.3 was released a few days ago on January 15. As one that frequents this blog, I’m sure you all went right out and made those changes to your essfunc.xml files and are wondering if that was necessary or if this release fixes those CDFs for you.

I downloaded and applied the patch to my laptop’s sandbox EPM system and found that all 55 of the @CalcMgr* functions from 11.1.2.3.502 persist in 11.1.2.3.503. Not only do the same CDFs persist, but so do all five errors on the CDF declarations. I compared the essfunc.xml files from the two patches and found only a few differences but nothing that would materially change the implementation of the CDFs between 11.1.2.3.502 and 11.1.2.3.503.

To sum it all up, if you have fixed your CDFs in 11.1.2.3.502 and are planning to apply 11.1.2.3.503 (patch number 19927906), then prepare to re-fix your CDF specifications in either EAS or the essfunc.xml file again.  The great news is that if you have used some of the cool functionality in Calc Manager 11.1.2.3.502, you can still use it in 11.1.2.3.503.

**** EDIT 6/11/2015 **** Calculation Manager 11.1.2.3.505 has been released and fixes the issues with CDF registration.