Roll Back a Replicated TimesTen Upgrade

You can use Helm to roll back an upgrade of a replicated TimesTenClassic object. This reverts the replicated TimesTenClassic object and its associated TimesTen databases to the downgraded release.

Note:

Ensure you perform a downgrade at the appropriate time. We recommend that you do not perform a downgrade at the busiest time of a production day. Applications may experience outages and perhaps reduced performance as a result of the downgrade procedure.
  1. Before the rollback, do the following:
    1. Confirm the replicated TimesTenClassic object exists in your namespace.
      kubectl get ttc 
      The output is similar to the following:
      NAME              STATE              ACTIVE            AGE
      norepsamplehelm   AllReplicasReady   N/A               19h
      repsamplehelm     Normal             repsamplehelm-1   22h

      The repsamplehelm TimesTenClassic object exists and is in the Normal state.

    2. Verify the image.
      kubectl describe ttc repsamplehelm | grep Image
      The output is similar to the following:
      Image:       container-registry.oracle.com/timesten/timesten:22.1.1.28.0
      ...
  2. Review the revision history.
    helm history repsamplehelm
    The output is similar to the following:
    REVISION        UPDATED                         STATUS          CHART                   APP VERSION     DESCRIPTION
    1               Sun Aug  4 14:58:40 2024        superseded      ttclassic-2211270.1.0   22.1.1.27.0     Install complete
    2               Mon Aug  5 02:25:13 2024        deployed        ttclassic-2211280.1.0   22.1.1.28.0     Upgrade complete

    Revision 2 of the repsamplehelm chart is running release 22.1.1.28.0. Revision 1 is running release 22.1.1.27.0.

  3. Roll back to revision 1.
    helm rollback repsamplehelm 1

    The output is the following:

    Rollback was a success! Happy Helming!
  4. Observe the downgrade and how the TimesTenClassic object transitions from and to various states.
     kubectl get events -w

    The output is similar to the following:

    17m         Normal    Upgrade                  timestenclassic/repsamplehelm   Image updated, automatic upgrade started
    17m         Normal    Upgrade                  timestenclassic/repsamplehelm   Deleted standby pod repsamplehelm-0 during upgrade
    17m         Warning   Failed                   timestenclassic/repsamplehelm   Pod repsamplehelm-0 was replaced
    17m         Normal    StateChange              timestenclassic/repsamplehelm   Pod repsamplehelm-0 is Not Ready
    17m         Warning   StateChange              timestenclassic/repsamplehelm   TimesTenClassic was Normal, now ActiveTakeover
    17m         Normal    StateChange              timestenclassic/repsamplehelm   TimesTenClassic was ActiveTakeover, now StandbyDown
    14m         Normal    Info                     timestenclassic/repsamplehelm   Pod repsamplehelm-0 Agent Up
    14m         Normal    Info                     timestenclassic/repsamplehelm   Pod repsamplehelm-0 Instance Exists
    14m         Normal    Info                     timestenclassic/repsamplehelm   Pod repsamplehelm-0 Daemon Down
    14m         Normal    Info                     timestenclassic/repsamplehelm   Pod repsamplehelm-0 Daemon Up
    14m         Normal    Info                     timestenclassic/repsamplehelm   Pod repsamplehelm-0 Database Unloaded
    14m         Normal    Info                     timestenclassic/repsamplehelm   Pod repsamplehelm-0 Database None
    14m         Normal    Info                     timestenclassic/repsamplehelm   pollAsyncStatus: Async polling for RepDuplicate, timeout in 597 secs
    14m         Normal    Info                     timestenclassic/repsamplehelm   pollAsyncStatus: Async polling for RepDuplicate, timeout in 594 secs
    14m         Normal    Info                     timestenclassic/repsamplehelm   pollAsyncStatus: Async polling for RepDuplicate, timeout in 591 secs
    14m         Normal    Info                     timestenclassic/repsamplehelm   pollAsyncStatus: Async polling for RepDuplicate, timeout in 588 secs
    14m         Normal    Info                     timestenclassic/repsamplehelm   RepDuplicate completed in 14 secs
    14m         Normal    Info                     timestenclassic/repsamplehelm   Pod repsamplehelm-0 Database Loaded
    14m         Normal    Info                     timestenclassic/repsamplehelm   Pod repsamplehelm-0 RepAgent Not Running
    14m         Normal    Info                     timestenclassic/repsamplehelm   Pod repsamplehelm-0 RepScheme Exists
    14m         Normal    StateChange              timestenclassic/repsamplehelm   Pod repsamplehelm-0 RepState IDLE
    14m         Normal    Info                     timestenclassic/repsamplehelm   Pod repsamplehelm-0 Database Loaded
    14m         Normal    Info                     timestenclassic/repsamplehelm   Pod repsamplehelm-0 RepAgent Running
    14m         Normal    Info                     timestenclassic/repsamplehelm   Pod repsamplehelm-0 RepScheme Exists
    14m         Normal    StateChange              timestenclassic/repsamplehelm   Pod repsamplehelm-0 RepState STANDBY
    14m         Normal    StateChange              timestenclassic/repsamplehelm   Pod repsamplehelm-0 is Ready
    14m         Normal    Upgrade                  timestenclassic/repsamplehelm   Upgrade of standby complete
    14m         Normal    StateChange              timestenclassic/repsamplehelm   TimesTenClassic was StandbyDown, now Normal
    14m         Normal    Upgrade                  timestenclassic/repsamplehelm   Deleted active pod repsamplehelm-1 during upgrade
    14m         Warning   Failed                   timestenclassic/repsamplehelm   Pod repsamplehelm-1 has failed
    14m         Normal    StateChange              timestenclassic/repsamplehelm   Pod repsamplehelm-1 is Not Ready
    14m         Normal    StateChange              timestenclassic/repsamplehelm   Pod repsamplehelm-1 is Not Active Ready
    14m         Warning   StateChange              timestenclassic/repsamplehelm   TimesTenClassic was Normal, now ActiveDown
    13m         Warning   Failed                   timestenclassic/repsamplehelm   Pod repsamplehelm-1 was replaced
    13m         Normal    Info                     timestenclassic/repsamplehelm   Pod repsamplehelm-0 Database Updatable
    13m         Normal    StateChange              timestenclassic/repsamplehelm   Pod repsamplehelm-0 RepState ACTIVE
    13m         Normal    StateChange              timestenclassic/repsamplehelm   Pod repsamplehelm-0 is Not Ready
    13m         Normal    StateChange              timestenclassic/repsamplehelm   TimesTenClassic was ActiveDown, now ActiveTakeover
    13m         Normal    StateChange              timestenclassic/repsamplehelm   Pod repsamplehelm-0 is Ready
    13m         Normal    StateChange              timestenclassic/repsamplehelm   Pod repsamplehelm-0 is Active Ready
    13m         Normal    StateChange              timestenclassic/repsamplehelm   TimesTenClassic was ActiveTakeover, now StandbyDown
    12m         Normal    Info                     timestenclassic/repsamplehelm   Pod repsamplehelm-1 Agent Up
    12m         Normal    Info                     timestenclassic/repsamplehelm   Pod repsamplehelm-1 Instance Exists
    12m         Normal    Info                     timestenclassic/repsamplehelm   Pod repsamplehelm-1 Daemon Down
    12m         Normal    Info                     timestenclassic/repsamplehelm   Pod repsamplehelm-1 Daemon Up
    12m         Normal    Info                     timestenclassic/repsamplehelm   Pod repsamplehelm-1 Database Unloaded
    12m         Normal    Info                     timestenclassic/repsamplehelm   Pod repsamplehelm-1 Database None
    12m         Normal    Info                     timestenclassic/repsamplehelm   pollAsyncStatus: Async polling for RepDuplicate, timeout in 597 secs
    12m         Normal    Info                     timestenclassic/repsamplehelm   pollAsyncStatus: Async polling for RepDuplicate, timeout in 594 secs
    11m         Normal    Info                     timestenclassic/repsamplehelm   pollAsyncStatus: Async polling for RepDuplicate, timeout in 591 secs
    11m         Normal    Info                     timestenclassic/repsamplehelm   pollAsyncStatus: Async polling for RepDuplicate, timeout in 588 secs
    11m         Normal    Info                     timestenclassic/repsamplehelm   RepDuplicate completed in 15 secs
    11m         Normal    Info                     timestenclassic/repsamplehelm   Pod repsamplehelm-1 Database Loaded
    11m         Normal    Info                     timestenclassic/repsamplehelm   Pod repsamplehelm-1 RepAgent Not Running
    11m         Normal    Info                     timestenclassic/repsamplehelm   Pod repsamplehelm-1 RepScheme Exists
    11m         Normal    StateChange              timestenclassic/repsamplehelm   Pod repsamplehelm-1 RepState IDLE
    11m         Normal    Info                     timestenclassic/repsamplehelm   Pod repsamplehelm-1 Database Loaded
    11m         Normal    Info                     timestenclassic/repsamplehelm   Pod repsamplehelm-1 RepAgent Running
    11m         Normal    Info                     timestenclassic/repsamplehelm   Pod repsamplehelm-1 RepScheme Exists
    11m         Normal    StateChange              timestenclassic/repsamplehelm   Pod repsamplehelm-1 RepState STANDBY
    11m         Normal    StateChange              timestenclassic/repsamplehelm   Pod repsamplehelm-1 is Ready
    11m         Normal    Upgrade                  timestenclassic/repsamplehelm   Upgrade completed in 326 secs
    11m         Normal    StateChange              timestenclassic/repsamplehelm   TimesTenClassic was StandbyDown, now Normal

    The downgrade process completes. The TimesTenClassic object is in the Normal state. TimesTen databases are up and running and functioning properly. Active standby pair replication is configured between them.

  5. After the downgrade, do the following:
    1. Confirm the replicated TimesTenClassic object is in the Normal state and the active is repsamplehelm-0.
      kubectl get ttc 
      The output is similar to the following:
      NAME            STATE    ACTIVE            AGE
      repsamplehelm   Normal   repsamplehelm-0   23h

      The object is in the Normal state. The active is repsamplehelm-0.

    2. Verify the image.
      kubectl describe ttc repsamplehelm | grep Image
      The output is similar to the following:
      Image:       container-registry.oracle.com/timesten/timesten:22.1.1.27.0
      ...
  6. Check the history.
    helm history repsamplehelm

    The output is similar to the following:

    REVISION        UPDATED                         STATUS          CHART                   APP VERSION     DESCRIPTION
    1               Sun Aug  4 14:58:40 2024        superseded      ttclassic-2211270.1.0   22.1.1.27.0     Install complete
    2               Mon Aug  5 02:25:13 2024        superseded      ttclassic-2211280.1.0   22.1.1.28.0     Upgrade complete
    3               Mon Aug  5 13:54:33 2024        deployed        ttclassic-2211270.1.0   22.1.1.27.0     Rollback to 1

    Revision 3 is downgraded.

  7. Confirm the repsamplehelm release is downgraded.
    helm list
    The output is similar to the following:
    NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
    repsamplehelm   default         3               2024-08-05 13:54:33.909336613 +0000 UTC deployed        ttclassic-2211270.1.0   22.1.1.27.0
    ...

    The repsamplehelm chart release is downgraded.

Congratulations! You successfully completed the rollback. The TimesTenClassic object is downgraded to the desired release and is in the Normal state. The replicated active standby pair of TimesTen databases are running the downgraded release and are fully operational.