diff --git a/src/Umbraco.Core/Sync/DatabaseServerMessenger.cs b/src/Umbraco.Core/Sync/DatabaseServerMessenger.cs
index d8d828b23e..153b90ba5a 100644
--- a/src/Umbraco.Core/Sync/DatabaseServerMessenger.cs
+++ b/src/Umbraco.Core/Sync/DatabaseServerMessenger.cs
@@ -344,19 +344,39 @@ namespace Umbraco.Core.Sync
///
/// Ensure that the last instruction that was processed is still in the database.
///
- /// If the last instruction is not in the database anymore, then the messenger
+ ///
+ /// If the last instruction is not in the database anymore, then the messenger
/// should not try to process any instructions, because some instructions might be lost,
- /// and it should instead cold-boot.
+ /// and it should instead cold-boot.
+ /// However, if the last synced instruction id is '0' and there are '0' records, then this indicates
+ /// that it's a fresh site and no user actions have taken place, in this circumstance we do not want to cold
+ /// boot. See: http://issues.umbraco.org/issue/U4-8627
+ ///
private void EnsureInstructions()
{
- var sql = new Sql().Select("*")
+ if (_lastId == 0)
+ {
+ var sql = new Sql().Select("COUNT(*)")
+ .From(_appContext.DatabaseContext.SqlSyntax);
+
+ var count = _appContext.DatabaseContext.Database.ExecuteScalar(sql);
+
+ //if there are instructions but we haven't synced, then a cold boot is necessary
+ if (count > 0)
+ _lastId = -1;
+ }
+ else
+ {
+ var sql = new Sql().Select("*")
.From(_appContext.DatabaseContext.SqlSyntax)
.Where(dto => dto.Id == _lastId);
- var dtos = _appContext.DatabaseContext.Database.Fetch(sql);
+ var dtos = _appContext.DatabaseContext.Database.Fetch(sql);
- if (dtos.Count == 0)
- _lastId = -1;
+ //if the last synced instruction is not found in the db, then a cold boot is necessary
+ if (dtos.Count == 0)
+ _lastId = -1;
+ }
}
///