Skip to content
Snippets Groups Projects
streams.md 5.32 KiB
Newer Older
  • Learn to ignore specific revisions
  • osTicket Database Migration
    ===========================
    
    Database Upgrade Streams
    ------------------------
    Database upgrade streams are registered in the
    `INCLUDE_DIR/upgrader/streams/streams.cfg`. This file contains the names of
    the upgrade streams in the order the streams should be applied in. The stock
    osTicket install does not ship with a `streams.cfg`, so that updates to the
    source code base will not destroy your `streams.cfg` file. If the file does
    not exist, only the osTicket `core` stream will be updated.
    
    Streams folders
    ---------------
    Stream folders are created in the `INCLUDE_DIR/upgrader/streams` folder. The
    name of the stream will be the name of the folder. For instance, the core
    osTicket stream exists in the `core` folder, and so is called `core`. Each
    stream folder should also have an accompanying hash file which gives the md5
    hash of the tip of the stream. How you generate the hashes is up to you. For
    the core stream, we use the md5 hash of the install SQL file. Changes made
    to the main install file result in changes to the md5 hash of the file.
    Then, the update file placed in the upgrade stream will have the changes
    between to two hashes.
    
    Upgrade Streams
    ---------------
    Upgrade patches are used to migrate the database from snapshot to snapshot.
    The system will start upgrading by consulting the `schema_signature`
    configuration setting in the `config` table in the namespace of your stream
    name. It will look for an upgrade patch file that starts with the first
    eight characters of the current signature.
    
    Each upgrade in a stream should set the `schema_signature` configuration
    option in the `config` when completed. The plan is to make this automatic,
    but currently, it is still a manual process. Whatever the hash of then last
    executed patch is, it should be reflected in the config table at the
    completion of the upgrade patch.
    
    The migration process will continue until the hash reflected in the
    `schema_signature` setting is the same as the value given in the stream
    signature file. If no patch files are given to migrate from the current
    `schema_signature` value to the value listed in the md5 file, then the
    migrater will fail and complain that the system is not upgradeable.
    
    Patch Files
    -----------
    Patch files should live in your stream folder and should have the name of
    
        12345678-00abcdef.patch.sql
    
    and should contain only SQL text. Double-dash comments are only supported if
    started at the beginning of a line. For instance, do not write then inline
    as part of a long running SQL statement. The filename format is the first
    eight chars of the starting and ending database `schema_signature` values.
    
    Your patch process can be separated into two parts if you like. A cleanup file can be used to cleanup database objects after the completion of the patch process. Cleanup files must have the name of
    
        12345678-00abcdef.cleanup.sql
    
    Where the starting and ending hashes are listed with a hyphen in between.
    The idea is that PHP code can be run between the two SQL patch files.
    //Currently, support for this is hardcoded, but will hopefully be redesigned
    to include a `patch.php` file at some point in the future.//
    
    If you want to use numeric serial numbers, make sure the first eight digits
    change for every upgrade. For instance, use 00000001-00000002. Technically,
    there is no current requirement for the hash file to be an actual md5 or even
    have 32 hex chars in it.
    
    Patch files should contain a header with some common information about the
    patch. The header should be formatted similar to
    
        /* osTicket database migration patch
         *
         * @version 0.0.0
         * @signature 0123456789abcdef0000000000000000
         *
         * Details about the migration patch are listed here
         */
    
    Eventually the `@signature` line will be automatically inspected and forced
    into the config table for the `schema_signature` setting in the namespace of
    your stream at the completion of the patch process. Please add it to your
    patches to keep them future-minded. The `@version` is a string that will be
    shown to clients during the upgrade process indicating the version numbers
    as each patch is applied.
    
    Customizing osTicket
    ====================
    osTicket now supports database customizations using a separation technique
    called *streams*. Separating the database upgrade path into streams allows
    the upstream osTicket database upgrades to be kept separate from your own,
    custom upgrade streams. Streams are registered in `streams.cfg` located in
    the `UPGRADE_DIR/streams`.
    
    Example streams.cfg
    -------------------
        # Write the names of the stream folders to be enabled in this file.
        # The order is significant. The upgrade process will run updates for the
        # respective streams in the order they are listed in this file.
    
        core            # The upstream osTicket upgrade stream
    
        # Add custom upgrade streams here, which will be applied in the order
        # listed in this file
    
    Database Customization Rules
    ---------------------------
    1. Leave the upstream osTicket tables unchanged. If your customization makes
       changes to the main osTicket tables, you will likely get merge conflicts
       when the *core* stream is updated. If you need to add columns to an
       upstream table, add another table with the extra columns and link the
       data to the upstream table using the primary key of the upstream table.
       This will keep your data model separate from the upstream data model.