Latest release of uSync - re-engineered to take advantage of all the api stuff in 7.3.
Release Notes
this version of uSync sees a separation of the serialization code from that of the disk and events. meaning the core of uSync can now be used independently and for all sorts of coolness
uSync.Core
The heart of uSync the core handles all the ins and outs with umbraco, mapping ids between versions of datatypes, doctypes and content, the core can push or pull most things in and out of umbraco.
uSync.BackOffice edition
This is uSync - using the core, back office reads and writing everything from the disk as before, but now, it handles renames and deletes much better, and comes with a much improved dashboard (in developer section) with pre-import reporting so you can see what's changing.
Changes
With such a large re-write of code there are bound to be a number of changes, mostly uSync will just work the same as before, but the following are worth noting.
default folder change
the default folder for uSync is now ~/uSync/data, this is mainly to give some space in the uSync folder for other things comeing soon (like migrations). old uSync files should still work with this version of uSync, but we would encourage you to do a full export to get a newer set of files.
Events events have moved. not used by most, but you can hook into uSync at key points in it's import process (pre/post save, delete, import, export) - these events use to be scatterd all over uSync they are now in Jumoo.uSync.BackOffice.Events
Enhancements
Just using uSync.BackOffice you might not notice much but there are a number of enhancements to this version.
ID Tracking improvements, better handling of Internal IDs in datatypes, and content, so when you are moving stuff, the ID is much more likely to match on the other site.
Item and Property renaming, better tracking of renames of doctypes, mediatypes, datatypes etc, and the properties inside them - these changes now happen as real-renames so data doesn't get lost.
Reporting the dashboard now has options for you to report on what's going to happen, at the moment it just highlights what items have changed, later versions should offer details down to property level (i hope)
Extensibility this version of uSync is way more flexible, it's not something you might see or use, but you can plug into uSync with you're own handlers to add extra sync functionality (and this is how the next version of uSync.ContentEdition will work).
The API in core also means you can do you're own syncing - the LocalGovStarterKit, uses a variant of the core for it's own content import dashboard. and if you go over to the GitHub repo you can see how we are using the API to build uSync.Migrations, which will allow you to take and import snapshots into umbraco.
Testers needed
anyway - it's all very new and fancy, please test this version of uSync on Umbraco7.3rc1 and later. and pop any feedback below.
Note: uSync.Core is included in the uSync.BackOffice package. you
don't need both
Today, we've put up the Release Candidate for uSync.ContentEdition.
This handles content and media in the same way that back office handles all the other stuff.
uSync.ContentEdition
Content Edition is now just an add on to Back Office (so you need to have back office installed). and will just add a set of two new handlers to BackOffice that manage all the content and media items.
At the end of a sync you will have a Content folder with all the content in (in a nice tree) and a media folder with your media items.
Content and Media imports will map all content id's between installations, so if you have a content picker on one site the same pages should still be selected when you get to the other side.
When the media items have files, these will be stored in a subfolder of the item called _uSyncMedia. uSync then uses this to import the media item at the other end.
Hey Kevin, what is "Back Office"? Did a search under "Projects" and didn't find it.
Also, I haven't tried it, but I'm glad to see reporting is becoming more developed. That was the main reason I had to abandon uSync in the past (because it would do things I wasn't aware of due to the lack of reporting).
Because the new version has things separated out, It has:
uSync.Core, Which doesn't do anything on it's own, it's a sync API
The backoffice bit which does what the current version of uSync does
ContentEdtion then syncs media and content
Migrations will do snapshots and changesets, so you can incrementally apply stuff
I suppose when it's done the main download on the project will be the BackOffice package, as that is what most people will use, but the other bits will be if you need them.
at the moment if you look in downloads for uSync, then BackOffice package is the main one, content is an add-on
Migrations uses the uSync engine to create snapshots of an umbraco instance at a point in time.
when you create the first migration all the changes on the disk are captured and put into a /usync/migrations/[migration name] folder.
migrations include not only changes to umbraco db elements, but the views/css/app_code/scripts/xslt and fonts folders (if they exist)
after you have made some changes in umbraco you can run a new migration and any changes will be captured in another migration folder.
then you will have a number of migration folders each with only the changes that have been made between migrations.
you can then copy these migrations over to another installation, and apply them, usync.migrations will then combine all the migrations to get a latest snapshot and apply that using usync so you installation will be upto date
a command line version of this process is also in github,.
at the moment this is an early beta of migrations; it uses the core engine so is fairly robust when it comes to that, but testing of the migration production and merging would be welcomed.
I'm currently using uSync.2.4.10 through NuGet. I would like to upgrade to usync 3.0rc. Can I just upgrade it through NuGet or is it not backwards compatible?
short answer: not quite, uninstall and reinstall the new one.
longer answer :
In theory v3 will read v2.4's files, and run the imports, v3 has slightly more information in the export files (keys, and GUIDs mostly) but it should fallback and still import, but I haven't checked this completely yet.
At the moment the new version puts its files in ~/usync/data so the files are in a different place by default, so it won't see v2.4 files (you can change this in config, or move the files)
because v3 separates out the logic the dlls have changed as have the config files, so i need to do some work on removing and renaming on a nuget upgrade.
There is a nuget package for v3 its:
Install-Package uSync.BackOffice -Pre
i would say remove usync v2 and install v3 run a new export and everything should work fine.
when i've worked out the nuances of nuget and backwards compatibility I will probably update the existing nuget package to handle it , but it's not quite there.
There is a framework version thing if you've also come from Umbraco 7.2.x , you get build warnings but if you update the target framework to 4.5.1 they go away.
Updated with NuGet and everything seems to work. Only had to make some changes to the dashboard.config because a section alias attribute and areas element was missing. Don't know if that happend because of the upgrade.
Thanks for helping. uSync is a great package! H5YR
uSync rc3 doesn't load for me. Installed via Nuget and get
Could not load control: '/App_Plugins/usync/BackOffice/uSyncBackOfficeDashboard.ascx'.
Error message: System.Web.HttpParseException (0x80004005): Could not load type 'Jumoo.uSync.BackOffice.UI.uSyncBackOfficeDashboard'. ---> System.Web.HttpParseException (0x80004005): Could not load type 'Jumoo.uSync.BackOffice.UI.uSyncBackOfficeDashboard'. --->
quick look and it looks like calling the Umbraco Content Service for a media type by guid when the media type doesn't exist throws this error (it doesn't for other things). So I am wrapping that bit in a try catch... but i am going to see if i can track down the error two..
Should have a updated nuget package out for this in a hour or two.
We've got a custom video media type that inherits from the file media type. No custom properties.
In the trace log is the same error as I posted.
It also seems that the import isn't working correctly now. I removed properties on dev which are still on staging, but the properties that I added on dev are there.
On the dashboard when I look at the change report it says there are still changes, but I've run change import a couple of times and it keeps showing the same results when looking at change report.
yeah I've just tracked down that one - silly bug meaing remove properties wasn't running properly.
I've pushed a new version of the uSync.Core to Nuget (RC5) this covers both the SQL error (for which there is also now PR in the core). and the remove properties.
I still haven't fully locked down the change report, it is giving the odd false positive saying it has changes when it hasn't, the changes are happening they are just not resulting in identical sync data - which is why usync things they need updating again - Working on this :( K
The full import also doesn't seem to work. Can't find anything strange is the logs. Is there something I could look for in the logs if the sync is completed or failed?
there are also some files in \App_Data\TEMP\uSync\ they are xml files saying what usync processed - so if they are not there then the sync isn't running
Just looking at some code, media types will always say they need changing, as there is a slight bugget in setting the key values - I'm working out if i can fix that. but the updates should actually be happening...
Thanks. Getting a lot more log info, but nothing strange. It says 0 failures and when I look at AppData\temp\uSync\20150915144757_Import.config it also reports succes messages for the changes. It like it get's rolled back or something like that.
I've put another update out of both back office and core (rc6) - this doesn't have any significant changes in it, but it does try to fix the little inconsistencies that mean the report thinks their are differences when there aren't (its mainly what happens when the descriptions where blank).
if you do a full export at one end, and a full import at the other, you should see most (if not all) of the changes disappear after an import,
The two that can still cause trouble are:
Rich text editor - the default editor's settings are stored in the old way until you go and save the datatype. so it looks odd to the importer and it thinks it's a change when it isn't.
Membertypes - the member type properties have a GUID value but this isn't always settable - i think the default GUIDs on the properties aren't real guids and can conflict :(
if you are still getting no import, you could send us over a usync folder and / or the logs i'll have a look.
I upgraded to RC6 and did a full export and a full import. Now everything seems to work again :-). Will do some more testing today. Thanks for helping!
We've got some complaints that on our staging environment the dictionary items are being reverted. So after changing a dictionary item the next day it has the old value. Could uSync overwrite these values?
uSync could be setting those values - but only if the files on disk have the old values in.
if stage doesn't have ExportOnSave set to true then the files on disk won't be getting the new dictionary values and the old ones will come back when you then sync anything.
<!-- run import at startup -->
<Import>true</Import>
<!-- export everything to disk at startup -->
<ExportAtStartup>false</ExportAtStartup>
<!-- when a user saves something, write it to disk -->
<ExportOnSave>true</ExportOnSave>
<!-- watch the usync folder, and if something changes, import it-->
<WatchForFileChanges>false</WatchForFileChanges>
When the customer changes a dictionairy item, it will be overwritten when the import runs again.
yeah - if you want to update the values, it would be better to make sure you get the latest ones first.
In a setup like that I would be inclined to turn DictionaryItem (& Language) off in the config.
The migration stuff might make sense for this (where it only snapshots changes), but that is really still really an early beta, so probably isn't something you will want to put on a deployed site.
I had an existing doc type and I renamed + added some properties. The properties that we're added are correct, but the renamed properties still had their old alias.
Thanks for the new release. Still on RC6 and just got this error after running a full import:
Server Error in '/' Application.
Value cannot be null.
Parameter name: value
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ArgumentNullException: Value cannot be null.
Parameter name: value
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[ArgumentNullException: Value cannot be null.
Parameter name: value]
System.Xml.Linq.XAttribute..ctor(XName name, Object value) +214
Jumoo.uSync.BackOffice.uSyncActionLogger.SaveActionLog(String name, IEnumerable`1 actions) +1441
Jumoo.uSync.BackOffice.UI.uSyncBackOfficeDashboard.PerformImport(Boolean force) +629
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +155
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3554
We'll upgrade to the final to see if that fixes it.
Think I found another bug. It seems that you can't rename a template. When you try that you get the following error:
Template not saved: Please make sure that you do not have 2 templates with the same aliasCould not find a part of the path 'D:\data\inetpub\project\Sources\project.Web.UI\uSync\data\Template\testelement'.. Check log for details.
The first part of the message is just a default error message when something goes wrong while saving a template and is not related to what's happening. It tries to save to the config file to the old path. After renaming there is a new path.
yeah, just looking at some logs, it's actually the cleanup code that's failing :)
When a template is renamed, a new version is saved (in the right place) then uSync checks to make sure there are no orphaned templates around (we don't get passed the old name - so we go hunting).
The code was finding the old one, but then getting confused when deleting it.
I've created a stylesheet in the backoffice and also create some style sheet properties below it. These changes aren't saved in uSync. I added the properties manually on the staging environment, but after syncing the were gone again.
uSync doesn't do anything with Stylesheets anymore . since v7.3 stylesheets no longer have a database element, so all that code should be gone. I'll double check the source - but unless their is some weird interdependency thing going on i don't think this is usync.
do the properties disappear after a sync (via the dashboard) or an app restart sync - it might just be umbraco loosing them ?
After sync the stylesheets that had been added through Umbraco were missing. Stylesheets that are in a different folder that aren't in the backoffice are there.
There is no stylesheet or css code in usync (v3) - so no real idea whats causing it : (
Only css is in migrations package (which is a separate package) and then it's just a copy the css (and other) folders into a changeset folder when creating a one).
Sorry this was an error of our deploy script. We forgot to include the new stylesheets in our project so during deployment they we're removed from the staging environment. It's not related to uSync :-).
I am struggling to get uSync to work at all. It keeps reporting problems with the templates.
"ITemplate Import Failed to generate template path"
I am running Umbraco 7.3, upgraded from 7.2.8 - never used uSync on the site.
Then I installed uSync and then copied the full site (visual studio project) into a "production folder" (test) and run that...
then I try to add some test templates in developer site and then export using backoffice, copy "data" folder in uSync and then import from backoffice in the "production"
i think you are probibly missing the view folder on the production server.
uSync will do all the database bits, but with templates you also need the views/masterpages folder - the error message you are seeing can happen when the template files are not on the disk where usync things they are -
admittidly it could be a better message - but it comes from uSync guessing the path, then looking on the disk to see if it's right, when it doesn't find the file, it assumes it got it wrong (and you get the error).
Its also possible that the files are there but the delete is removing them - it looks like you have a couple of deletes happening before the import , I haven't checked but the deletes may be removing the template files from the disk, so when the import happens they are missing .
if you are coping over the views folder then I would remove the uSyncactions.config file from the usync folder because that is where the deletes are. and then see if that import works.
unfortunatly templates don't yet have an internal guid in umbraco, so the template delete is done by name and it looks like it might be a little blunt, i think i might add the option to have it turned off. at least until guids for templates arrive.
aha! okay, so we should manually copy views? thanks for your quick response (less than a day, awesome!) ... I have been pulling my hair out for a few days, so this is good news I think.
I renamed some templates. This is the first time I did this since upgrading to 3.0.2 which should have fixed the renaming issue. Now I'm getting this error:
Server Error in '/' Application.
Cannot insert duplicate key row in object 'dbo.umbracoNode' with unique index 'IX_umbracoNode_uniqueID'. The duplicate key value is (8ae38a66-3cbb-4c45-b7f4-aec6daec4e7b).
The statement has been terminated.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Data.SqlClient.SqlException: Cannot insert duplicate key row in object 'dbo.umbracoNode' with unique index 'IX_umbracoNode_uniqueID'. The duplicate key value is (8ae38a66-3cbb-4c45-b7f4-aec6daec4e7b).
The statement has been terminated.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[SqlException (0x80131904): Cannot insert duplicate key row in object 'dbo.umbracoNode' with unique index 'IX_umbracoNode_uniqueID'. The duplicate key value is (8ae38a66-3cbb-4c45-b7f4-aec6daec4e7b).
The statement has been terminated.]
System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +408
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +768
System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +4489
System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() +117
System.Data.SqlClient.SqlDataReader.get_MetaData() +126
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +522
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds) +3117
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +440
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +104
System.Data.SqlClient.SqlCommand.ExecuteScalar() +1071
System.Data.SqlClient.SqlCommand.ExecuteScalar() +1560
StackExchange.Profiling.Data.ProfiledDbCommand.ExecuteScalar() in c:\Code\github\SamSaffron\MiniProfiler\StackExchange.Profiling\Data\ProfiledDbCommand.cs:299
Umbraco.Core.Persistence.<>c__DisplayClassa.<ExecuteScalarWithRetry>b__9() +159
Umbraco.Core.Persistence.FaultHandling.RetryPolicy.ExecuteAction(Func`1 func) +545
Umbraco.Core.Persistence.Database.Insert(String tableName, String primaryKeyName, Boolean autoIncrement, Object poco) +2877
Umbraco.Core.Persistence.Database.Insert(Object poco) +58
Umbraco.Core.Persistence.Repositories.TemplateRepository.PersistNewItem(ITemplate entity) +353
Umbraco.Core.Persistence.Repositories.RepositoryBase`2.PersistNewItem(IEntity entity) +836
Umbraco.Core.Persistence.UnitOfWork.PetaPocoUnitOfWork.Commit(Action`1 transactionCompleting) +187
Umbraco.Core.Services.FileService.SaveTemplate(ITemplate template, Int32 userId) +233
Jumoo.uSync.Core.Serializers.TemplateSerializer.DeserializeCore(XElement node) +2238
Jumoo.uSync.Core.Serializers.SyncBaseSerializer`1.DeSerialize(XElement node, Boolean forceUpdate) +195
Jumoo.uSync.BackOffice.Handlers.TemplateHandler.Import(String filePath, Boolean force) +170
Jumoo.uSync.BackOffice.Handlers.uSyncBaseHandler`1.ImportFolder(String folder, Boolean force, Dictionary`2 updates) +370
Jumoo.uSync.BackOffice.Handlers.uSyncBaseHandler`1.ImportFolder(String folder, Boolean force, Dictionary`2 updates) +852
Jumoo.uSync.BackOffice.Handlers.uSyncBaseHandler`1.ImportAll(String folder, Boolean force) +447
Jumoo.uSync.BackOffice.uSyncBackOfficeContext.ImportAll(String folder, Boolean force) +601
Jumoo.uSync.BackOffice.uSyncApplicationEventHandler.Setup() +290
Umbraco.Core.CoreBootManager.<Complete>b__8(IApplicationEventHandler x) +220
Umbraco.Core.EnumerableExtensions.ForEach(IEnumerable`1 items, Action`1 action) +148
Umbraco.Core.CoreBootManager.Complete(Action`1 afterComplete) +320
Umbraco.Web.WebBootManager.Complete(Action`1 afterComplete) +90
Umbraco.Core.UmbracoApplicationBase.StartApplication(Object sender, EventArgs e) +352
[HttpException (0x80004005): Cannot insert duplicate key row in object 'dbo.umbracoNode' with unique index 'IX_umbracoNode_uniqueID'. The duplicate key value is (8ae38a66-3cbb-4c45-b7f4-aec6daec4e7b).
The statement has been terminated.]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +475
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +181
System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +304
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +402
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +266
[HttpException (0x80004005): Cannot insert duplicate key row in object 'dbo.umbracoNode' with unique index 'IX_umbracoNode_uniqueID'. The duplicate key value is (8ae38a66-3cbb-4c45-b7f4-aec6daec4e7b).
The statement has been terminated.]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +629
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +165
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +739
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.34274
It's probably the result of the rename failing to delete the folder/file with the old name. When the import then runs it will try import the old folder like it's new except the GUID already exists and we get an error :( [I need to capture this error and do something better!]
uSync had a issue deleting folders which was fixed with the above. As far as usync is concerned it actually does processes a rename as a delete and save so this might be your issue.
it was fixed in 3.0.3 - but if you update and still have the old folder/files in your usync/data folder you will still get the error, you may have to find and delete them.
also, if you don't have <ExportOnSave>true</ExportOnSave> in the config file renames will never work, because uSync will never find out about them.
I just did a major upgrade from QA to UAT. During the upgrade Umbraco was also upgraded from 7.3.3 to 7.3.4. After deploying the Umbraco upgrade process started. After it was finished I got the following exception:
Server Error in '/' Application.
The INSERT statement conflicted with the FOREIGN KEY SAME TABLE constraint
"FK_cmsPropertyTypeGroup_cmsPropertyTypeGroup_id". The conflict occurred in database "", table
"dbo.cmsPropertyTypeGroup", column 'id'.
The statement has been terminated.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace
for more information about the error and where it originated in the code.
Exception Details: System.Data.SqlClient.SqlException: The INSERT statement conflicted with the FOREIGN KEY SAME TABLE
constraint "FK_cmsPropertyTypeGroup_cmsPropertyTypeGroup_id". The conflict occurred in database "",
table "dbo.cmsPropertyTypeGroup", column 'id'.
The statement has been terminated.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and
location of the exception can be identified using the exception stack trace below.
Stack Trace:
[SqlException (0x80131904): The INSERT statement conflicted with the FOREIGN KEY SAME TABLE constraint
"FK_cmsPropertyTypeGroup_cmsPropertyTypeGroup_id". The conflict occurred in database "", table
"dbo.cmsPropertyTypeGroup", column 'id'.
The statement has been terminated.]
System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
+408
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock,
Boolean asyncClose) +768
System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream,
BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +4489
System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() +117
System.Data.SqlClient.SqlDataReader.get_MetaData() +126
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String
resetOptionsString) +522
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean
returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds) +3117
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean
returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +536
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean
returnStream, String method) +104
System.Data.SqlClient.SqlCommand.ExecuteScalar() +1071
System.Data.SqlClient.SqlCommand.ExecuteScalar() +1560
StackExchange.Profiling.Data.ProfiledDbCommand.ExecuteScalar() in c:\Code\github\SamSaffron\MiniProfiler
\StackExchange.Profiling\Data\ProfiledDbCommand.cs:299
Umbraco.Core.Persistence.<>c__DisplayClassa.<ExecuteScalarWithRetry>b__9() +159
Umbraco.Core.Persistence.FaultHandling.RetryPolicy.ExecuteAction(Func`1 func) +545
Umbraco.Core.Persistence.Database.Insert(String tableName, String primaryKeyName, Boolean autoIncrement, Object poco)
+2877
Umbraco.Core.Persistence.Database.Insert(Object poco) +58
Umbraco.Core.Persistence.Repositories.ContentTypeBaseRepository`1.PersistNewBaseContentType(ContentTypeDto dto,
IContentTypeComposition entity) +2069
Umbraco.Core.Persistence.Repositories.ContentTypeRepository.PersistNewItem(IContentType entity) +431
Umbraco.Core.Persistence.Repositories.RepositoryBase`2.PersistNewItem(IEntity entity) +858
Umbraco.Core.Persistence.UnitOfWork.PetaPocoUnitOfWork.Commit(Action`1 transactionCompleting) +167
Umbraco.Core.Services.ContentTypeService.Save(IContentType contentType, Int32 userId) +369
Jumoo.uSync.Core.Serializers.ContentTypeSerializer.DeserializeCore(XElement node) +2399
Jumoo.uSync.Core.Serializers.SyncBaseSerializer`1.DeSerialize(XElement node, Boolean forceUpdate) +195
Jumoo.uSync.BackOffice.Handlers.ContentTypeHandler.Import(String filePath, Boolean force) +170
Jumoo.uSync.BackOffice.Handlers.uSyncBaseHandler`1.ImportFolder(String folder, Boolean force, Dictionary`2 updates) +370
Jumoo.uSync.BackOffice.Handlers.uSyncBaseHandler`1.ImportFolder(String folder, Boolean force, Dictionary`2 updates) +852
Jumoo.uSync.BackOffice.Handlers.uSyncBaseHandler`1.ImportFolder(String folder, Boolean force, Dictionary`2 updates) +852
Jumoo.uSync.BackOffice.Handlers.uSyncBaseHandler`1.ImportAll(String folder, Boolean force) +447
Jumoo.uSync.BackOffice.uSyncBackOfficeContext.ImportAll(String folder, Boolean force) +601
Jumoo.uSync.BackOffice.uSyncApplicationEventHandler.Setup() +289
Umbraco.Core.CoreBootManager.<Complete>b__8(IApplicationEventHandler x) +220
Umbraco.Core.EnumerableExtensions.ForEach(IEnumerable`1 items, Action`1 action) +148
Umbraco.Core.CoreBootManager.Complete(Action`1 afterComplete) +320
Umbraco.Web.WebBootManager.Complete(Action`1 afterComplete) +90
Umbraco.Core.UmbracoApplicationBase.StartApplication(Object sender, EventArgs e) +352
[HttpException (0x80004005): The INSERT statement conflicted with the FOREIGN KEY SAME TABLE constraint
"FK_cmsPropertyTypeGroup_cmsPropertyTypeGroup_id". The conflict occurred in database "", table
"dbo.cmsPropertyTypeGroup", column 'id'.
The statement has been terminated.]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +475
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[]
handlers) +181
System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext
context) +304
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +402
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +459
[HttpException (0x80004005): The INSERT statement conflicted with the FOREIGN KEY SAME TABLE constraint
"FK_cmsPropertyTypeGroup_cmsPropertyTypeGroup_id". The conflict occurred in database "", table
"dbo.cmsPropertyTypeGroup", column 'id'.
The statement has been terminated.]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +629
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +165
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +739
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.34274
After restarting the website everything seems to work now. Any idea what this error could be?
Upgraded to usync 3.0.3, but still getting this error:
Cannot insert duplicate key row in object 'dbo.umbracoNode' with unique index 'IXumbracoNodeuniqueID'. The duplicate key value is (8ae38a66-3cbb-4c45-b7f4-aec6daec4e7b).
The statement has been terminated.
If I delete the old folder/files in the usync/data folder after recreating all id's are new. So I didn't do that.
uSync 3.0rc1 - Release for Umbraco 7.1rc1 Testers needed
Latest release of uSync - re-engineered to take advantage of all the api stuff in 7.3.
Release Notes
this version of uSync sees a separation of the serialization code from that of the disk and events. meaning the core of uSync can now be used independently and for all sorts of coolness
uSync.Core
The heart of uSync the core handles all the ins and outs with umbraco, mapping ids between versions of datatypes, doctypes and content, the core can push or pull most things in and out of umbraco.
uSync.BackOffice edition
This is uSync - using the core, back office reads and writing everything from the disk as before, but now, it handles renames and deletes much better, and comes with a much improved dashboard (in developer section) with pre-import reporting so you can see what's changing.
Changes
With such a large re-write of code there are bound to be a number of changes, mostly uSync will just work the same as before, but the following are worth noting.
default folder change the default folder for uSync is now ~/uSync/data, this is mainly to give some space in the uSync folder for other things comeing soon (like migrations). old uSync files should still work with this version of uSync, but we would encourage you to do a full export to get a newer set of files.
Events events have moved. not used by most, but you can hook into uSync at key points in it's import process (pre/post save, delete, import, export) - these events use to be scatterd all over uSync they are now in
Jumoo.uSync.BackOffice.Events
Enhancements
Just using uSync.BackOffice you might not notice much but there are a number of enhancements to this version.
ID Tracking improvements, better handling of Internal IDs in datatypes, and content, so when you are moving stuff, the ID is much more likely to match on the other site.
Item and Property renaming, better tracking of renames of doctypes, mediatypes, datatypes etc, and the properties inside them - these changes now happen as real-renames so data doesn't get lost.
Reporting the dashboard now has options for you to report on what's going to happen, at the moment it just highlights what items have changed, later versions should offer details down to property level (i hope)
Extensibility this version of uSync is way more flexible, it's not something you might see or use, but you can plug into uSync with you're own handlers to add extra sync functionality (and this is how the next version of uSync.ContentEdition will work).
The API in core also means you can do you're own syncing - the LocalGovStarterKit, uses a variant of the core for it's own content import dashboard. and if you go over to the GitHub repo you can see how we are using the API to build uSync.Migrations, which will allow you to take and import snapshots into umbraco.
Testers needed
anyway - it's all very new and fancy, please test this version of uSync on Umbraco7.3rc1 and later. and pop any feedback below.
Today, we've put up the Release Candidate for uSync.ContentEdition.
This handles content and media in the same way that back office handles all the other stuff.
uSync.ContentEdition
Content Edition is now just an add on to Back Office (so you need to have back office installed). and will just add a set of two new handlers to BackOffice that manage all the content and media items.
At the end of a sync you will have a Content folder with all the content in (in a nice tree) and a media folder with your media items.
Content and Media imports will map all content id's between installations, so if you have a content picker on one site the same pages should still be selected when you get to the other side.
When the media items have files, these will be stored in a subfolder of the item called _uSyncMedia. uSync then uses this to import the media item at the other end.
uSync.ContentEdtion Release Candidate
Hey Kevin, what is "Back Office"? Did a search under "Projects" and didn't find it.
Also, I haven't tried it, but I'm glad to see reporting is becoming more developed. That was the main reason I had to abandon uSync in the past (because it would do things I wasn't aware of due to the lack of reporting).
Hi,
Yeah i'm not great at the naming thing : )
TL;DR BackOffice is the same as the current uSync
Because the new version has things separated out, It has:
I suppose when it's done the main download on the project will be the BackOffice package, as that is what most people will use, but the other bits will be if you need them.
at the moment if you look in downloads for uSync, then BackOffice package is the main one, content is an add-on
did that help? i'm not sure if it did?
uSync.Migrations
the uSync Migrations beta is now also uploaded,
Migrations uses the uSync engine to create snapshots of an umbraco instance at a point in time.
when you create the first migration all the changes on the disk are captured and put into a /usync/migrations/[migration name] folder.
migrations include not only changes to umbraco db elements, but the views/css/app_code/scripts/xslt and fonts folders (if they exist)
after you have made some changes in umbraco you can run a new migration and any changes will be captured in another migration folder.
then you will have a number of migration folders each with only the changes that have been made between migrations.
you can then copy these migrations over to another installation, and apply them, usync.migrations will then combine all the migrations to get a latest snapshot and apply that using usync so you installation will be upto date
a command line version of this process is also in github,.
at the moment this is an early beta of migrations; it uses the core engine so is fairly robust when it comes to that, but testing of the migration production and merging would be welcomed.
Hello,
I'm currently using uSync.2.4.10 through NuGet. I would like to upgrade to usync 3.0rc. Can I just upgrade it through NuGet or is it not backwards compatible?
Jeroen
Hi,
short answer: not quite, uninstall and reinstall the new one.
longer answer : In theory v3 will read v2.4's files, and run the imports, v3 has slightly more information in the export files (keys, and GUIDs mostly) but it should fallback and still import, but I haven't checked this completely yet.
At the moment the new version puts its files in ~/usync/data so the files are in a different place by default, so it won't see v2.4 files (you can change this in config, or move the files)
because v3 separates out the logic the dlls have changed as have the config files, so i need to do some work on removing and renaming on a nuget upgrade.
There is a nuget package for v3 its:
Install-Package uSync.BackOffice -Pre
i would say remove usync v2 and install v3 run a new export and everything should work fine.
when i've worked out the nuances of nuget and backwards compatibility I will probably update the existing nuget package to handle it , but it's not quite there.
of course writing all that, makes you realise that's how NuGet works :)
So I am putting a updated uSync package together so you will be able to do a straight upgrade.
Updating via
Update-Package uSync -pre
works now.There is a framework version thing if you've also come from Umbraco 7.2.x , you get build warnings but if you update the target framework to 4.5.1 they go away.
Updated with NuGet and everything seems to work. Only had to make some changes to the dashboard.config because a section alias attribute and areas element was missing. Don't know if that happend because of the upgrade.
Thanks for helping. uSync is a great package! H5YR
Jeroen
Cool,
Some earlier nuget packages for 2.x where a bit poor at removing themselves from dashboard - it was probably that.
uSync rc3 doesn't load for me. Installed via Nuget and get
anyone else getting this?
Hi I can't reproduce that.
I've just done a nuget of UmbracoCMS -pre, build follwed by nuget uSync -pre
and i did it with nuget uSync.BackOffice -pre (that should be the same as above) that seemed to work to
any more info on you're build ?
i thought it might be that you have to build the solution after nuget but it seemed to work fine not built for me.
Hi Kevin,
sorry I've been offline for a few days. It's Umbraco 7.3RC3, installed via nuget as was usync as usync.backoffice -pre
It's VS2013 and target framework 4.5
There's a bunch of other Umbraco modules, installed via nuget:
installed the latest downloads form the package library:
HTH
many thanks
Tom
Hello,
When uSync 3 tries to sync media we got this error:
Fow now we disabled media type sync in the config file and everything worked again.
Jeroen
HI,
quick look and it looks like calling the Umbraco Content Service for a media type by guid when the media type doesn't exist throws this error (it doesn't for other things). So I am wrapping that bit in a try catch... but i am going to see if i can track down the error two..
Should have a updated nuget package out for this in a hour or two.
K
Hi, do you have any special media types ?
it looks like that error is happening during an import - if you could have a look at the umbracotracelog and see if you can identify the media type?
Then i could have a look at the media file and see if i can reproduce it.
We've got a custom video media type that inherits from the file media type. No custom properties.
In the trace log is the same error as I posted.
It also seems that the import isn't working correctly now. I removed properties on dev which are still on staging, but the properties that I added on dev are there.
On the dashboard when I look at the change report it says there are still changes, but I've run change import a couple of times and it keeps showing the same results when looking at change report.
Jeroen
Hi,
yeah I've just tracked down that one - silly bug meaing remove properties wasn't running properly.
I've pushed a new version of the uSync.Core to Nuget (RC5) this covers both the SQL error (for which there is also now PR in the core). and the remove properties.
I still haven't fully locked down the change report, it is giving the odd false positive saying it has changes when it hasn't, the changes are happening they are just not resulting in identical sync data - which is why usync things they need updating again - Working on this :( K
Thanks for your help. I'll upgrade to RC5 and will run the sync afterwards. Maybe than it's already fixed.
Jeroen
Just upgraded to RC5, but the sync still isn't working. Change report keeps reporting the same things even after change import.
Jeroen
The full import also doesn't seem to work. Can't find anything strange is the logs. Is there something I could look for in the logs if the sync is completed or failed?
Jeroen
Hi
if you flick log4net to debug or just add a usync line (see below) you will get lots more logging...
there are also some files in
\App_Data\TEMP\uSync\
they are xml files saying what usync processed - so if they are not there then the sync isn't runningJust looking at some code, media types will always say they need changing, as there is a slight bugget in setting the key values - I'm working out if i can fix that. but the updates should actually be happening...
Thanks. Getting a lot more log info, but nothing strange. It says 0 failures and when I look at AppData\temp\uSync\20150915144757_Import.config it also reports succes messages for the changes. It like it get's rolled back or something like that.
Jeroen
Hi,
I've put another update out of both back office and core (rc6) - this doesn't have any significant changes in it, but it does try to fix the little inconsistencies that mean the report thinks their are differences when there aren't (its mainly what happens when the descriptions where blank).
if you do a full export at one end, and a full import at the other, you should see most (if not all) of the changes disappear after an import,
The two that can still cause trouble are:
Rich text editor - the default editor's settings are stored in the old way until you go and save the datatype. so it looks odd to the importer and it thinks it's a change when it isn't.
Membertypes - the member type properties have a GUID value but this isn't always settable - i think the default GUIDs on the properties aren't real guids and can conflict :(
if you are still getting no import, you could send us over a usync folder and / or the logs i'll have a look.
Hello,
I upgraded to RC6 and did a full export and a full import. Now everything seems to work again :-). Will do some more testing today. Thanks for helping!
Jeroen
Yeah! I can now load usync since updating to RC6, I did have custom media types with additional properties, e.g. altText
many thanks, now to try it out.
t
Hello,
We've got some complaints that on our staging environment the dictionary items are being reverted. So after changing a dictionary item the next day it has the old value. Could uSync overwrite these values?
Jeroen
Hi,
uSync could be setting those values - but only if the files on disk have the old values in.
if stage doesn't have ExportOnSave set to true then the files on disk won't be getting the new dictionary values and the old ones will come back when you then sync anything.
ExportOnSave is false so that must be it. Thanks!
Hi Kevin,
We have this config on our test server :
When the customer changes a dictionairy item, it will be overwritten when the import runs again.
Dave
Hmm,
Strange. Now it keeps the updated text. And the change report doesn't report as change anymore.
Will keep a close eye on this.
Dave
Hi Kevin,
Did some more testing.
When a user changes a dictionairy item on the test environment this change is not overwritten by uSync when the application restarts.
But when we do a deployment from development environment these get overwritten because dev has different values.
Writing this post it actually sounds logical to me, because the content of the uSync file is different,
What is the recommend way of handling this ? Update the local environment with the values from the test environment before deployment. ?
Dave
hi,
yeah - if you want to update the values, it would be better to make sure you get the latest ones first.
In a setup like that I would be inclined to turn DictionaryItem (& Language) off in the config.
The migration stuff might make sense for this (where it only snapshots changes), but that is really still really an early beta, so probably isn't something you will want to put on a deployed site.
K
I had an existing doc type and I renamed + added some properties. The properties that we're added are correct, but the renamed properties still had their old alias.
Dev:
Staging:
Jeroen
Hi,
The fix for this has just sneaked into the v3 release :)
I'm just pushing it out to our and nuget now.
K
Thanks for the new release. Still on RC6 and just got this error after running a full import:
We'll upgrade to the final to see if that fixes it.
Jeroen
Hi,
I was just looking at this, I had same error it github issue.
In my eagerness to but a better action log together i think i missed a check on a message value that can sometimes be blank : (
package and nuget are now updated to 3.0.1
Think I found another bug. It seems that you can't rename a template. When you try that you get the following error:
Template not saved: Please make sure that you do not have 2 templates with the same aliasCould not find a part of the path 'D:\data\inetpub\project\Sources\project.Web.UI\uSync\data\Template\testelement'.. Check log for details.
The first part of the message is just a default error message when something goes wrong while saving a template and is not related to what's happening. It tries to save to the config file to the old path. After renaming there is a new path.
Jeroen
When I try to do an import on the staging for those templates I get the following error: Failed to generate template path.
yeah, just looking at some logs, it's actually the cleanup code that's failing :)
When a template is renamed, a new version is saved (in the right place) then uSync checks to make sure there are no orphaned templates around (we don't get passed the old name - so we go hunting).
The code was finding the old one, but then getting confused when deleting it.
github has a new dll, for this the nuget and package will be updated shortly :)
Thanks! I'll wait for the NuGet package :).
'tis nugeted v3.0.2 : )
And upgraded :).
Hello,
I've created a stylesheet in the backoffice and also create some style sheet properties below it. These changes aren't saved in uSync. I added the properties manually on the staging environment, but after syncing the were gone again.
Jeroen
Humm,
uSync doesn't do anything with Stylesheets anymore . since v7.3 stylesheets no longer have a database element, so all that code should be gone. I'll double check the source - but unless their is some weird interdependency thing going on i don't think this is usync.
do the properties disappear after a sync (via the dashboard) or an app restart sync - it might just be umbraco loosing them ?
After sync the stylesheets that had been added through Umbraco were missing. Stylesheets that are in a different folder that aren't in the backoffice are there.
Jeroen
Odd,
There is no stylesheet or css code in usync (v3) - so no real idea whats causing it : (
Only css is in migrations package (which is a separate package) and then it's just a copy the css (and other) folders into a changeset folder when creating a one).
Sorry this was an error of our deploy script. We forgot to include the new stylesheets in our project so during deployment they we're removed from the staging environment. It's not related to uSync :-).
Jeroen
I am struggling to get uSync to work at all. It keeps reporting problems with the templates.
"ITemplate Import Failed to generate template path"
I am running Umbraco 7.3, upgraded from 7.2.8 - never used uSync on the site.
Then I installed uSync and then copied the full site (visual studio project) into a "production folder" (test) and run that...
then I try to add some test templates in developer site and then export using backoffice, copy "data" folder in uSync and then import from backoffice in the "production"
I get this:
Hi,
i think you are probibly missing the view folder on the production server.
uSync will do all the database bits, but with templates you also need the views/masterpages folder - the error message you are seeing can happen when the template files are not on the disk where usync things they are -
admittidly it could be a better message - but it comes from uSync guessing the path, then looking on the disk to see if it's right, when it doesn't find the file, it assumes it got it wrong (and you get the error).
Its also possible that the files are there but the delete is removing them - it looks like you have a couple of deletes happening before the import , I haven't checked but the deletes may be removing the template files from the disk, so when the import happens they are missing .
if you are coping over the views folder then I would remove the uSyncactions.config file from the usync folder because that is where the deletes are. and then see if that import works.
unfortunatly templates don't yet have an internal guid in umbraco, so the template delete is done by name and it looks like it might be a little blunt, i think i might add the option to have it turned off. at least until guids for templates arrive.
aha! okay, so we should manually copy views? thanks for your quick response (less than a day, awesome!) ... I have been pulling my hair out for a few days, so this is good news I think.
Hello,
I renamed some templates. This is the first time I did this since upgrading to 3.0.2 which should have fixed the renaming issue. Now I'm getting this error:
Any idea what this could be?
Jeroen
As a workaround I disabled template sync and now it works:
Jeroen
Hi,
It's probably the result of the rename failing to delete the folder/file with the old name. When the import then runs it will try import the old folder like it's new except the GUID already exists and we get an error :( [I need to capture this error and do something better!]
I've had a look around - and I think a fix for something else may actually point to the problem. (see https://github.com/KevinJump/uSync/commit/6232464123180919ab104e4fc8eb1c4051bfa7a0)
uSync had a issue deleting folders which was fixed with the above. As far as usync is concerned it actually does processes a rename as a delete and save so this might be your issue.
it was fixed in 3.0.3 - but if you update and still have the old folder/files in your usync/data folder you will still get the error, you may have to find and delete them.
also, if you don't have
<ExportOnSave>true</ExportOnSave>
in the config file renames will never work, because uSync will never find out about them.Hello,
I just did a major upgrade from QA to UAT. During the upgrade Umbraco was also upgraded from 7.3.3 to 7.3.4. After deploying the Umbraco upgrade process started. After it was finished I got the following exception:
After restarting the website everything seems to work now. Any idea what this error could be?
Jeroen
Hello,
Upgraded to usync 3.0.3, but still getting this error:
Cannot insert duplicate key row in object 'dbo.umbracoNode' with unique index 'IXumbracoNodeuniqueID'. The duplicate key value is (8ae38a66-3cbb-4c45-b7f4-aec6daec4e7b). The statement has been terminated.
If I delete the old folder/files in the usync/data folder after recreating all id's are new. So I didn't do that.
Jeroen
is working on a reply...