Upgrade notes for 10.6 -> 10.7

General notes

The 10.7.0 release introduces a handful of new features that warrant some attention during upgrades. In particular:

Important

Please ensure that you have read and understood the general Preparing for an upgrade notes that apply to any Preside upgrade.

 

Tip

We recommend upgrading directly to 10.8.0 if possible as this is a more-or-less straight forward upgrade from 10.7.0 and brings a lot of improvements. If you do opt to upgrade directly to 10.8.0, the notes below are still relevent and should be read thoroughly.

Preparing for upgrade

Drafts

The new draft system brought around some fundamental database schema changes with regards to versioning. These changes require a data upgrade script to run and this will run as part of the application reload. To prepare for upgrade:

  • Check for large version database tables
  • Test the upgrade on a non-live version of the application that is using a restored backup of live data

Large version tables

Important: If you have version tables with a large number of rows, you should consider cleaning that data up and ensuring that your application is only making version changes when necessary before running the Preside upgrade. You can see database table sizes in MySQL with:

select   table_name
       , round( ( ( data_length + index_length ) / 1024 / 1024 ), 2 ) size_in_mb
from     information_schema.tables 
where    table_schema = '$db_name' -- your db name here
order by size_in_mb desc

If you find some surprisingly large version tables, you can use the following SQL to quickly debug problems with versioning changes to fields that we shouldn't care about for versioning (e.g. 'last logged in' date):

select    count(*) as _record_count
        , _version_changed_fields
from      _version_pobj_my_table 
group by  _version_changed_fields
order by  _record_count desc;

If you find large numbers of version changes for fields that should not count as a new version record, you can add the ignoreChangesForVersioning=true attribute to the property, e.g.

component {
    // ...
	property name="last_logged_in" type="date" dbtype="datetime" ignoreChangesForVersioning=true;
	// ...
}

If your tables are very large, you will need to plan your approach to deleting records that you no longer wish to keep (i.e. either old records or records that are recording redundant changes).

DO NOT SIMPLY TRUNCATE A VERSION TABLE THAT IS IN USE. Each record requires at least one corresponding version record as of 10.7.0.

If you find that you have version tables for objects that do not require versioning, you can simply add the @versioned false annotation to your Preside Object CFC. Once the application has been deployed and reloaded, you should be able to drop the redundant version table(s). e.g.

// /application/preside-objects/some_log_object.cfc
/**
 * @versioned false
 *
 */
component {
	// ...
}

Task manager

If you have the preside-ext-taskmanager extension installed, you will need to remove it before upgrading to 10.7.0 and above.

Firstly, remove its entry in /application/extensions/extensions.json. Then remove the /application/extensions/preside-ext-taskmanager folder from your application entirely; how you do that will depend on how you have installed the extension. If you have installed as a git submodule:

git submodule deinit application/extensions/preside-ext-taskmanager
git rm application/extensions/preside-ext-taskmanager

If you have installed as a commandbox dependency using box.json, simply remove any references to it from that file.

Rules engine

The new rules engine system in 10.7.0 allows you to restrict content based on rules about the currently logged in user. In 10.8.0, this feature is moved forward considerably and we recommend not using the feature in 10.7.0 unless you / your client are well prepared to use it.

The feature is turned off by default in 10.7.0 (turned on in 10.8.0) and you can ensure that it is turned off with the following in Config.cfc:

settings.features.rulesEngine.enabled = false;

If you do opt to turn it on, familiarize yourself with the changes it brings in your testing environments and your system users for the changes.