Update Tasks deprecated

Introduction

Updates for database are executed by so called update tasks. Each task applies one or more changes either to database schema (e.g. add another column to an existing table) or to data (e.g. insert a new default value for existing rows in a table).

Triggers

Each new version of the Open-Xchange Middleware may ship with one or more such update tasks. The not yet applied update tasks are either triggered

  • Manually by invoking the runupdate or the runallupdate command-line interface
  • By the first login of any user from any context that is hosted on the affected database schema
  • By executing provisioning calls
    • On context deletion
    • On moving a context to another database
    • On context administrator login via RMI (accessing special com.openexchange.admin.rmi.OXLoginInterface RMI interface)
    • On every call to com.openexchange.admin.rmi.OXUserInterface
    • On every call to com.openexchange.admin.rmi.OXGroupInterface
    • On every call to com.openexchange.admin.rmi.OXResourceInterface

Furthermore, an administrator may (re-)execute certain update tasks through using the forceupdatetask command-line interface.

Note: The update tasks that are actually scheduled and/or available for execution may vary based on the installed packages and enabled features on the system.

Excluding update tasks

In certain scenarios, specific update tasks may be forcibly excluded from being executed. In order to do so, the update task's name needs to be entered in the configuration file excludedupdatetasks.properties. Update tasks and their identifying names are announced in the release notes. Additionally, certain collections of update tasks may be excluded via their namespace. Possible namespaces are yielded with the command line tool listupdatetasknamespaces.

A general overview about all pending and excluded update tasks (either via the properties file excludedupdatetasks.properties or via namespace is availale through the command line utility listupdatetasks.

Error scenarios

Unexpected termination

A typical error scenario is when the JVM or the executing update task is terminated unexpectedly; e.g. by killing the Java process. In that case, the update task mechanism is not able to remove special markers on affected database schemas, which leaves those schemas in an unaccessible state.

To detect or remedy from such a situation, an administrator can execute the checkdatabase command-line interface which lists all database schemas that either need an update, are currently blocked by a running update or are considered as stale (updating for more than 24 hours).

Example:

  id name      hostname            scheme       status                               
1996 database1 db.open-xchange.com database1_73 Needs update                         
1996 database1 db.open-xchange.com database1_75 Needs update                         
1996 database1 db.open-xchange.com database1_77 Needs update                         
1996 database1 db.open-xchange.com database1_79 Blocking updates running                         
1996 database1 db.open-xchange.com database1_81 Blocking updates running                         
1996 database1 db.open-xchange.com database1_83 Needs update                         
1996 database1 db.open-xchange.com database1_85 Needs update                         
1996 database1 db.open-xchange.com database1_91 Blocking updates running for too long
1996 database1 db.open-xchange.com database1_92 Blocking updates running for too long

To unblock such schemas that have their status set to Blocking updates running for too long and are known by administrator that no update should be running, the unblockdatabase command-line interface is available. That command-line interface may be used to either unblock a certain database schema or unblock all schemas of a certain database that are considered as stale (last-modified time stamp more than 24 hours in the past).

Taking the exemplary output an invocation of ./unblockdatabase -i 1996 -A oxadminmaster -P secret yields:

unblocked the following schemas from database 1996:

  id name      hostname            scheme         
1996 database1 db.open-xchange.com database1_91
1996 database1 db.open-xchange.com database1_92

Ordinary failure

Although an update task is supposed to never fail, it may occur due to untested environments and/or database versions that an update task may fail. In contrast to the previous section, any markers are removed; meaning the database schema is still accessible. However, needed modifications were not applied, which might lead to errors during runtime.

To check the update tasks' status for a certain database schema the listExecutedUpdateTasks command-line interface is supposed to be used, which lists all executed update task for denoted schema along-side with each task's status (successful vs. failed)

./listExecutedUpdateTasks -l admin -s secret -n openxchangedb
taskName                                successful lastModified
com.openexchange.tasks.SuccessfulTask01 true       2016-12-23 10:43:51 CET
com.openexchange.tasks.SuccessfulTask02 true       2016-12-23 10:43:51 CET
com.openexchange.tasks.SuccessfulTask03 true       2016-12-23 10:43:51 CET
com.openexchange.tasks.SuccessfulTask04 true       2016-12-23 10:43:51 CET
com.openexchange.tasks.SuccessfulTask05 true       2016-12-23 10:43:51 CET
com.openexchange.tasks.FailedTask01     false      2016-12-23 10:43:51 CET
com.openexchange.tasks.FailedTask02     false      2016-12-23 10:43:51 CET
com.openexchange.tasks.SuccessfulTask06 true       2016-12-23 10:43:51 CET
com.openexchange.tasks.SuccessfulTask07 true       2016-12-23 10:43:51 CET
...
com.openexchange.tasks.SuccessfulTaskN  true       2016-12-23 10:43:51 CET

A failed update task can be re-run using the forceupdatetask command-line tool

./forceupdatetask -l admin -s secret -n openxchangedb -t com.openexchange.tasks.FailedTask01

Command-line interfaces

(Re-)Run a certain update task

As mentioned above the forceupdatetask command-line interface is supposed to be executed in order to (re-)run a certain update task either for a specific database schema or for all available database schemas.

Parameters

  • -c,--context <arg>
    A valid context identifier contained in target schema; if missing and '-n/--name' option is also absent all schemas are considered.
  • -H,--host <arg>
    The optional JMX host (default:localhost)
  • -h,--help
    Prints a help text
  • -l,--login <arg>
    The optional JMX login (if JMX has authentication enabled)
  • -n,--name <arg>
    A valid schema name. This option is a substitute for -c/--context option. If both are present -c/--context is preferred. If both absent all schemas are considered.
  • -p,--port <arg>
    The optional JMX port (default:9999)
  • --responsetimeout <arg>
    The optional response timeout in seconds when reading data from server (default: 0s; infinite)
  • -s,--password <arg>
    The optional JMX password (if JMX has authentication enabled)
  • -t,--task <arg>
    The update task's class name

Examples

./forceupdatetask -l admin -s secret -n openxchangedb -t com.openexchange.tasks.FailedTask01

List executed, pending and/or excluded update tasks for a schema

The listExecutedUpdateTasks can to be used to list all update tasks that have been executed on a specified database schema as well as all pending and excluded ones, i.e. the tasks that were either not executed yet, or were excluded via the excludedupdatetasks.properties file or via a namespace..

Parameters

  • -A,--adminuser <masterAdmin> The master admin username
  • -a,--all Lists all pending and excluded update tasks (both via excludedupdate.properties' file and namespace)
  • -e,--executed Lists all executed (ran at least once) update tasks of a schema
  • -g,--pending Lists only the pending update tasks, i.e. those that were never executed but are due for execution.
  • -h,--help Prints a help text
  • -n,--name <schemaName> A valid schema name.
  • -p,--port <rmiPort> The optional RMI port (default:1099)
  • -P,--adminpass <masterPassword> The master admin password
  • --responsetimeout <arg> The optional response timeout in seconds when reading data from server (default: 0s; infinite)
  • -s,--server <arg> The optional RMI server (default: localhost)
  • -x,--excluded Lists only the update tasks excluded both via excludedupdate.properties' file and namespace
  • -xf,--excluded-via-file Lists only the update tasks excluded via 'excludedupdate.properties' file
  • -xn,--excluded-via-namespace Lists only the update tasks excluded via namespace

Lists executed, pending and excluded update tasks of a schema specified by the '-n' switch (mandatory). The switches '-a', '-e', '-g', '-x', '-xf' and '-xn' are mutually exclusive AND mandatory.

An overall database status of all schemata can be retrieved via the 'checkdatabase' command line tool.

An update task may be in 'pending' state for three reasons: a) It was never executed before and is due for execution b) It is excluded via a namespace c) It is excluded via an entry in the 'excludeupdatetasks.properties'

Examples

List all pending and excluded update tasks

./listExecutedUpdateTasks -A oxadminmaster -P secret -a -n oxdatabase_1337
taskName                                                                                                state                                            
com.openexchange.oauth.impl.internal.groupware.RemoveLinkedInScopeUpdateTask                            pending                                          
com.openexchange.chronos.storage.rdb.groupware.CalendarEventCorrectRangesTask                           pending                                          
com.openexchange.groupware.update.tasks.DeleteOldYahooSubscriptions                                     pending                                          
com.openexchange.groupware.contexts.impl.sql.ChangePrimaryKeyForContextAttribute                        pending                                          
com.openexchange.chronos.storage.rdb.groupware.CalendarAttendeeAddHiddenColumnTask                      pending                                          
com.openexchange.groupware.update.tasks.DeleteOldYahooSubscriptions                                     excluded via file 'excludedupdatetask.properties'
com.openexchange.groupware.update.tasks.ResourceTablesUtf8Mb4UpdateTask                                 excluded via namespace 'groupware.utf8mb4'       
com.openexchange.oauth.impl.internal.groupware.OAuthAccountsTableUtf8Mb4UpdateTaskV2                    excluded via namespace 'groupware.utf8mb4'       
com.openexchange.download.limit.rdb.FileAccessConvertUtf8ToUtf8mb4UpdateTask                            excluded via namespace 'groupware.utf8mb4'       
com.openexchange.groupware.update.tasks.IndexedFoldersConvertToUtf8mb4                                  excluded via namespace 'groupware.utf8mb4'       
com.openexchange.groupware.update.tasks.AdminTablesUtf8Mb4UpdateTask                                    excluded via namespace 'groupware.utf8mb4'       
com.openexchange.groupware.update.tasks.SettingsConvertUtf8ToUtf8mb4Task                                excluded via namespace 'groupware.utf8mb4'       
com.openexchange.groupware.update.tasks.IDConvertToUtf8mb4Task                                          excluded via namespace 'groupware.utf8mb4'       
com.openexchange.groupware.update.tasks.ContactTablesUtf8Mb4UpdateTask                                  excluded via namespace 'groupware.utf8mb4'       
com.openexchange.oauth.provider.impl.groupware.OAuthGrantConvertUtf8ToUtf8mb4Task                       excluded via namespace 'groupware.utf8mb4'       
com.openexchange.snippet.mime.groupware.MimeSnippetTablesUtf8Mb4UpdateTask                              excluded via namespace 'groupware.utf8mb4'       
com.openexchange.groupware.update.tasks.OAuthAccessorConvertToUtf8mb4                                   excluded via namespace 'groupware.utf8mb4'       
com.openexchange.capabilities.groupware.CapabilityConvertUtf8ToUtf8mb4Task                              excluded via namespace 'groupware.utf8mb4'       
com.openexchange.groupware.update.tasks.InfostoreConvertUtf8ToUtf8mb4Task                               excluded via namespace 'groupware.utf8mb4'       
com.openexchange.groupware.update.tasks.AttachmentConvertUtf8ToUtf8mb4Task                              excluded via namespace 'groupware.utf8mb4'       
com.openexchange.oauth.impl.internal.groupware.OAuthAccountsTableUtf8Mb4UpdateTask                      excluded via namespace 'groupware.utf8mb4'       
com.openexchange.groupware.update.tasks.AggregatingContactsConvertUtf8ToUtf8mb4Task                     excluded via namespace 'groupware.utf8mb4'       
com.openexchange.snippet.rdb.groupware.RdbSnippetTablesUtf8Mb4UpdateTask                                excluded via namespace 'groupware.utf8mb4'       
com.openexchange.oauth.provider.impl.groupware.AuthCodeConvertUtf8ToUtf8mb4Task                         excluded via namespace 'groupware.utf8mb4'       
com.openexchange.groupware.update.tasks.FolderConvertUtf8ToUtf8mb4Task                                  excluded via namespace 'groupware.utf8mb4'       
com.openexchange.subscribe.database.SubscriptionsTablesUtf8Mb4UpdateTask                                excluded via namespace 'groupware.utf8mb4'       
com.openexchange.messaging.generic.groupware.MessagingGenericConvertToUtf8mb4                           excluded via namespace 'groupware.utf8mb4'       
com.openexchange.groupware.update.tasks.TaskConvertUtf8ToUtf8mb4Task                                    excluded via namespace 'groupware.utf8mb4'       
com.openexchange.push.impl.credstorage.rdb.groupware.CredConvertUtf8ToUtf8mb4Task                       excluded via namespace 'groupware.utf8mb4'       
com.openexchange.publish.database.PublicationsTablesUtf8Mb4UpdateTask                                   excluded via namespace 'groupware.utf8mb4'       
com.openexchange.tools.oxfolder.property.sql.OXFolderUserPropertyConvertUtf8ToUtf8mb4Task               excluded via namespace 'groupware.utf8mb4'       
com.openexchange.groupware.update.tasks.LdapConvertUtf8ToUtf8mb4Task                                    excluded via namespace 'groupware.utf8mb4'       
com.openexchange.jslob.storage.db.groupware.JsonStorageTableUtf8Mb4UpdateTask                           excluded via namespace 'groupware.utf8mb4'       
com.openexchange.groupware.update.tasks.LegacyCalendarTablesUtf8Mb4UpdateTask                           excluded via namespace 'groupware.utf8mb4'       
com.openexchange.groupware.update.tasks.SequenceTablesUtf8Mb4UpdateTask                                 excluded via namespace 'groupware.utf8mb4'       
com.openexchange.ajax.requesthandler.converters.preview.cache.groupware.PreviewTableUtf8Mb4UpdateTask   excluded via namespace 'groupware.utf8mb4'       
com.openexchange.groupware.update.tasks.ObjectUseCountPermissionTableUtf8Mb4UpdateTask                  excluded via namespace 'groupware.utf8mb4'       
com.openexchange.datatypes.genericonf.storage.impl.GenConfConvertUtf8ToUtf8mb4UpdateTask                excluded via namespace 'groupware.utf8mb4'       
com.openexchange.groupware.update.tasks.MailAccountConvertUtf8ToUtf8mb4Task                             excluded via namespace 'groupware.utf8mb4'       
com.openexchange.groupware.update.tasks.MiscConvertUtf8ToUtf8mb4Task                                    excluded via namespace 'groupware.utf8mb4'       
com.openexchange.groupware.update.tasks.ReminderTableUtf8Mb4UpdateTask                                  excluded via namespace 'groupware.utf8mb4'       
com.openexchange.groupware.infostore.database.impl.InfostoreReservedPathsConvertUtf8ToUtf8mb4UpdateTask excluded via namespace 'groupware.utf8mb4'       
com.openexchange.file.storage.rdb.groupware.FileStorageConvertUtf8ToUtf8mb4Task                         excluded via namespace 'groupware.utf8mb4'       
com.openexchange.net.ssl.management.storage.SSLCertificateManagementTableUtf8Mb4UpdateTask              excluded via namespace 'groupware.utf8mb4'       
com.openexchange.groupware.update.tasks.ContextAttributeConvertUtf8ToUtf8mb4Task                        excluded via namespace 'groupware.utf8mb4'   

List all executed update tasks

./listExecutedUpdateTasks -l oxadminmaster -s secret -n openxchangedb -e
taskName                                                                               successful lastModified
com.openexchange.groupware.update.tasks.CalendarExtendDNColumnTask                     true       2009-12-23 10:43:51 CET
com.openexchange.groupware.update.tasks.MailAccountAddPersonalTask                     true       2009-12-23 10:43:51 CET
com.openexchange.groupware.update.tasks.ContactsAddIndex4AutoCompleteSearch            true       2009-12-23 10:43:51 CET
com.openexchange.groupware.update.tasks.DelFolderTreeTableUpdateTask                   true       2009-12-23 10:43:51 CET
com.openexchange.groupware.update.tasks.MALPollCreateTableTask                         true       2009-12-23 10:43:51 CET
 ...
com.openexchange.drive.checksum.rdb.DirectoryChecksumsAddUsedColumnTask                true       2016-03-16 16:33:10 CET
com.openexchange.drive.checksum.rdb.DirectoryChecksumsReIndexTaskV2                    true       2016-03-16 16:33:10 CET
com.openexchange.usm.database.ox.update.USMDeleteStoredProceduresUpdateTaskV2          true       2016-04-11 14:37:30 CEST
com.openexchange.groupware.update.tasks.AddStartTLSColumnForMailAccountTablesTask      true       2016-04-11 14:37:30 CEST
com.openexchange.groupware.update.tasks.UserSettingMediumTextTask                      true       2016-04-29 07:57:44 CEST
com.openexchange.groupware.update.tasks.Release781UpdateTask                           true       2016-05-01 09:12:07 CEST
com.openexchange.share.limit.rdb.FileAccessCreateTableTask                             true       2016-05-12 10:04:18 CEST
com.openexchange.drive.events.subscribe.rdb.DriveEventSubscriptionsAddUuidColumnTask   true       2016-05-30 11:31:40 CEST
com.openexchange.download.limit.rdb.FileAccessCreateTableTask                          true       2016-06-08 16:51:59 CEST
com.openexchange.drive.events.subscribe.rdb.DriveEventSubscriptionsMakeUuidPrimaryTask true       2016-06-23 11:57:13 CEST

Trigger all pending update tasks for a specific schema

To apply all pending update tasks to a certain schema, the runupdate command-line interface is available, provided that specified schema is not yet marked as being updated. In case the schema is already blocked, the invocation does nothing.

Once the schema is updated, the tool lists those update tasks, that could not be successfully executed on denoted database schema.

Parameters

  • -c,--context <arg>
    A valid context identifier contained in target schema
  • -H,--host <arg>
    The optional JMX host (default:localhost)
  • -h,--help
    Prints a help text
  • -l,--login <arg>
    The optional JMX login (if JMX has authentication enabled)
  • -n,--name <arg>
    A valid schema name. This option is a substitute for -c/--context option. If both are present -c/--context is preferred.
  • -p,--port <arg>
    The optional JMX port (default:9999)
  • --responsetimeout <arg>
    The optional response timeout in seconds when reading data from server (default: 0s; infinite)
  • -s,--password <arg>
    The optional JMX password (if JMX has authentication enabled)

Examples

./runupdate -l admin -s secret -n openxchangedb
The following update task(s) failed:
 com.openexchange.tasks.FailedTask01 (schema=openxchangedb)
 com.openexchange.tasks.FailedTask02 (schema=openxchangedb)

Trigger all pending update tasks for all schemas

To apply all pending update tasks to all available schemas, the runallupdate command-line interface is available. That tool supports two modes. The first one is to ignore possible errors and/or conflicts on a certain schema and to continue with the next schema in line. The other does abort the invocation whenever an error and/or conflict occurs.

Moreover, that tool starts a task that performs the actual update asynchronously. Therefore, the current status/progress is periodically printed to standard out.

Parameters

  • -e,--error
    The flag indicating whether process is supposed to be stopped if an error occurs when trying to update a schema.
  • -H,--host <arg>
    The optional JMX host (default:localhost)
  • -h,--help
    Prints a help text
  • -l,--login <arg>
    The optional JMX login (if JMX has authentication enabled)
  • -p,--port <arg>
    The optional JMX port (default:9999)
  • --responsetimeout <arg>
    The optional response timeout in seconds when reading data from server (default: 0s; infinite)
  • -s,--password <arg>
    The optional JMX password (if JMX has authentication enabled)

Example

Invocation with error flag enabled; encountering an error:

./runallupdate  -l admin -s secret -e
Attempting to update 167 schemas in total...
Processed 27 of 167 schemas.
Processed 27 of 167 schemas.
Processed 27 of 167 schemas.
Processed 27 of 167 schemas.
Processed 29 of 167 schemas.
Processed 29 of 167 schemas.
Processed 29 of 167 schemas.
Processed 29 of 167 schemas.
Processed 29 of 167 schemas.
Processed 33 of 167 schemas.
Processed 33 of 167 schemas.
Processed 33 of 167 schemas.
Processed 33 of 167 schemas.
Processed 42 of 167 schemas.
Processed 42 of 167 schemas.
Processed 42 of 167 schemas.
Processed 42 of 167 schemas.
Update conflict detected. Another process is currently updating schema database1_77.

Invocation without error flag enabled:
Possible errors/warnings are written to logging

./runallupdate  -l admin -s secret
Attempting to update 167 schemas in total...
Processed 44 of 167 schemas.
Processed 44 of 167 schemas.
Processed 44 of 167 schemas.
Processed 45 of 167 schemas.
Processed 45 of 167 schemas.
Processed 47 of 167 schemas.
Processed 47 of 167 schemas.
Processed 61 of 167 schemas.
Processed 88 of 167 schemas.
Processed 88 of 167 schemas.
Processed 167 of 167 schemas.

Checking for pending, blocked or stale schemas

To check for pending, blocked or stale schemas, the checkdatabase command-line interface is supposed to be used. As mentioned in previous section, this tool lists all database schemas that either need an update, are currently blocked by a running update or are considered as stale (updating for more than 24 hours).

Parameters

  • -h,--help
    Prints a help text
  • --responsetimeout <arg>
    The optional response timeout in seconds for reading response from the backend (default 0s; infinite)
  • -A,--adminuser <arg>
    Admin username
  • -P,--adminpass <arg>
    Admin password

Examples

Example:

  id name      hostname            scheme       status                               
1996 database1 db.open-xchange.com database1_73 Needs update                         
1996 database1 db.open-xchange.com database1_75 Needs update                         
1996 database1 db.open-xchange.com database1_77 Needs update                         
1996 database1 db.open-xchange.com database1_79 Blocking updates running                         
1996 database1 db.open-xchange.com database1_81 Blocking updates running                         
1996 database1 db.open-xchange.com database1_83 Needs update                         
1996 database1 db.open-xchange.com database1_85 Needs update                         
1996 database1 db.open-xchange.com database1_91 Blocking updates running for too long
1996 database1 db.open-xchange.com database1_92 Blocking updates running for too long

Unblocking stale schemas

Such schemas considered as stale may be unblocked by an administrator in order to make that schema re-accessible. For that purpose the unblockdatabase command-line interface is supposed to be used. This command-line interface may be used to either unblock a certain database schema or unblock all schemas of a certain database that are considered as stale (last-modified time stamp more than 24 hours in the past).

Parameters

  • -h,--help
    Prints a help text
  • --responsetimeout <arg>
    The optional response timeout in seconds for reading response from the backend (default 0s; infinite)
  • -A,--adminuser <arg>
    Admin username
  • -P,--adminpass <arg>
    Admin password
  • -i,--id <arg>
    The id of the database.
  • -n,--name <arg>
    Name of the database
  • --schema <arg>
    The optional schema name of the database.

Examples

./unblockdatabase -i 1996 -A oxadminmaster -P secret
unblocked the following schemas from database 1996:

  id name      hostname            scheme         
1996 database1 db.open-xchange.com database1_91
1996 database1 db.open-xchange.com database1_92