Copied to clipboard

Flag this post as spam?

This post will be reported to the moderators as potential spam to be looked at


  • Topic author was deleted

    Jan 31, 2018 @ 12:53

    Upgrade from 7.2.8 -> 7.7.9 - A war story

    Hi all.

    Not an issue that requires an answer but I wanted to share an upgrade that ended up taking an entire work day to resolve. A post-mortem follows.

    The task: Upgrade from 7.2.8 ->7.7.9 using Websites on Azure.

    Locally on my dev laptop, the upgrade went without a hitch.

    Once pushed to Azure, I used the SCM to change the version back to v7.2.8 in order to trigger the upgrade script.

    Upon loading of the upgrade, I knew I was in trouble already. The old logo (orange) from 7.2.8 appeared and the dreaded BlueImp error was on my screen.

    Fix action attempt 1: Clear the ClientDepenendency cache and touch the web.config.

    Nope.

    Fix action attempt 2: Delete /umbraco and /umbraco_client folders from the www root.

    This did not work but the folders came back with 7.2.8 static files.

    Fix action attempt 3: Delete the same folders but also navigate into the repository folder on the website and delete the Nuget folders for 7.2.8. Both the core and the cms folders, redeploy.

    Upon redeploy the purple 7.7.9 finally loaded.

    However, the upgrader thought I was trying to upgrade from 7.7.9 to 7.7.9 despite the web.config showing a configuration value of 7.2.8.

    No matter what I tried, I could not get Umbraco to think it had a v7.2.8 DB that needed upgraded.

    I kept getting this error:

    System.Data.SqlClient.SqlException (0x80131904): Invalid object name 'umbracoMigration'. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() at System.Data.SqlClient.SqlDataReader.get_MetaData() at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) at Glimpse.Ado.AlternateType.GlimpseDbCommand.ExecuteDbDataReader(CommandBehavior behavior) at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) at StackExchange.Profiling.Data.ProfiledDbCommand.ExecuteDbDataReader(CommandBehavior behavior) in c:\Code\github\SamSaffron\MiniProfiler\StackExchange.Profiling\Data\ProfiledDbCommand.cs:line 248 at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader() at Umbraco.Core.Persistence.PetaPocoCommandExtensions.<>c__DisplayClass5_0.<ExecuteReaderWithRetry>b__0() at Umbraco.Core.Persistence.FaultHandling.RetryPolicy.ExecuteAction[TResult](Func`1 func) at Umbraco.Core.Persistence.PetaPocoCommandExtensions.ExecuteReaderWithRetry(IDbCommand command, RetryPolicy cmdRetryPolicy, RetryPolicy conRetryPolicy) at Umbraco.Core.Persistence.PetaPocoCommandExtensions.ExecuteReaderWithRetry(IDbCommand command, RetryPolicy retryPolicy) at Umbraco.Core.Persistence.PetaPocoCommandExtensions.ExecuteReaderWithRetry(IDbCommand command) at Umbraco.Core.Persistence.Database.<Query>d__74`1.MoveNext()

    Fix action: The only thing to overcome this was to point my local dev laptop to the Azure DB and the migrations finally worked.

    Later on I had discovered that the Public Access panel in the backoffice was throwing a 500 exception.

    Fix Action: Remove a client added packaged called Glimpse.

    Next, images weren't showing on Azure. Getting missing extension method exception.

    Fix action: upgrade to the latest ImageProcessor DLL's.

    Next Archetype was breaking.

    Fix Action: Remove client added Nested Content they had tried for testing. They had added a the external package and NC is now core. I assume there is some weirdness when having both.

    Next, the log was being spammed with Prevalue warnings.

    Fix Action: Resave all prevalues.

    Oddities: one particular PropertyValueConverter is giving me trouble and is yet unresolved (not a big deal).

    Also, Azure CDN is no longer working correctly with the current setup so I'm using local server caching for images as a workaround.

    Ok there it is. I hope one of these details might help someone in the future.

  • Dan Diplo 1554 posts 6205 karma points MVP 5x c-trib
    Jan 31, 2018 @ 13:18
    Dan Diplo
    0

    You have my commiserations! Though most upgrades I perform now work fine, I do recall a few nightmare ones that leave you pulling your hair out :)

    One thing to note. You say:

    "However, the upgrader thought I was trying to upgrade from 7.7.9 to 7.7.9 despite the web.config showing a configuration value of 7.2.8."

    I may be wrong, but I don't think Umbraco uses the value in web.config anymore to determine what version you are running. I think it now uses the latest value in the umbracoMigration table. It then checks this against the assembly version, I believe.

  • Comment author was deleted

    Jan 31, 2018 @ 13:38

    I suspected there is something to do with the UmbracoMigration table when I saw the SQL error in the log. I had half a mind to try to create the table and figure out something clever to put in there to pull off the trick.

    One day I might dig into the code to find out where that value comes from. For now I'm trying to take it easy today :)

Please Sign in or register to post replies

Write your reply to:

Draft