Ensemble Release Note Archive
Ensemble 2015.2
[Home] [Back] [Next]
InterSystems: The power behind what matters   
Class Reference   
Search:    

New Features in Ensemble 2015.2
Ensemble 2015.2 introduced the following minor new features and enhancements:
Compatibility Issues for Upgrades to Ensemble 2015.2
The following changes in this release may affect the operation of your existing system. Review these following issues before upgrading a previous instance of Ensemble.
Upgrading Enterprise Message Bank Requires Rebuilding Indices
If you are upgrading an Ensemble Message Bank system from Ensemble 2015.1 or earlier to Ensemble 2015.2 or later, you must disable and rebuild four new indices on the Message Bank System that are created during the upgrade. Until you disable the indices, Message Bank search will not find any messages that were sent to the Message Bank before the upgrade. Once you have rebuilt the indices, the Message Bank will use them and you will get improved performance on message search.
Ensemble 2015.2 includes a development change that improved Message Bank searches by replacing date-based searches with the equivalent searches based on IDs. This substantially improves the efficiency of searches especially when searching on date ranges. This change is dependent on new indices that are created when you upgrade Ensemble, but, by default, the new indices are only populated for messages received after the upgrade. This means that Message Bank search will only find these new messages and will not find old messages until you rebuild the indices.
Rebuilding indices is covered in the Caché documentation in Building Indices on a READ and WRITE Active System in Caché SQL Optimization Guide. The procedure described in this compatibility issue is slightly different from the procedures described there.
This procedure assumes that your Message Bank production is live and is actively receiving messages during this procedure. You only have to perform this procedure on the Message Bank system and do not have to make any changes to the client systems that are sending messages to the Message Bank.
To disable the four indices that were created during the upgrade, rebuilt the indices, and re-enable them, follow this procedure:
  1. Inactivate the indices with the following:
     Do $SYSTEM.SQL.SetMapSelectability("Ens_Enterprise_MsgBank.MessageHeader","NodeIdTime",0) 
     Do $SYSTEM.SQL.SetMapSelectability("Ens_Enterprise_MsgBank.MessageHeader","NodeId",0) 
     Do $SYSTEM.SQL.SetMapSelectability("Ens_Enterprise_MsgBank.MessageHeader","NTrg",0) 
     Do $SYSTEM.SQL.SetMapSelectability("Ens_Enterprise_MsgBank.MessageHeader","NSrc",0)
  2. If new messages have been added to the message bank since the upgrade, you should purge any cached queries. See Purging Cached Queries in Caché SQL Optimization Guide. At this point, queries should work using the other indices on the Message Bank. They will not have any improved efficiency, but they will return old as well as new messages.
  3. You can skip steps 2 through 5 as listed In Building Indices on a READ and WRITE Active System. The Message Bank code performs these steps automatically.
  4. If you are upgrading to Ensemble 2016.2 or later, use the %BuildIndices method to rebuild the indices.
    Set tSC = ##class(Ens.Enterprise.MsgBank.MessageHeader).%BuildIndices($LB("NodeIdTime","NSrc","NTrg","NodeId"),...) 
    See the %Library.Persistent %BuildIndices() method for a description of the method parameters. Since this method can take a long time to complete, you may want to build the indices in batches using the pStartID and pEndID parameters.
  5. If you are upgrading to Ensemble 2015.2 or Ensemble 2016.1, use the %ConstructIndicesParallel() method to build the index or indices. This method can take a long time to complete depending on the size of the Message Bank. [This is step 6 in the original procedure.]
     Set tSC=##class(Ens.Enterprise.MsgBank.MessageHeader).%ConstructIndicesParallel(,,,0,0,2,0)
    These parameters mean:
    This call will only build the four new indices because the %ConstructIndicesParallel uses the INDEXBUILDERFILTER class parameter, which specifies these four indices.
  6. Enable the index to be used in search with the following commands:
     Do $SYSTEM.SQL.SetMapSelectability("Ens_Enterprise_MsgBank.MessageHeader","NodeIdTime",1) 
     Do $SYSTEM.SQL.SetMapSelectability("Ens_Enterprise_MsgBank.MessageHeader","NodeId",1) 
     Do $SYSTEM.SQL.SetMapSelectability("Ens_Enterprise_MsgBank.MessageHeader","NTrg",1) 
     Do $SYSTEM.SQL.SetMapSelectability("Ens_Enterprise_MsgBank.MessageHeader","NSrc",1)