Umbraco-CMS: Exception in BPlusTree
See #4992, one that issue was fixed, the following happened:
System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
Parameter name: length
at CSharpTest.Net.IO.TransactedCompoundFile.Write(UInt32 handle, Byte[] bytes, Int32 offset, Int32 length)
at CSharpTest.Net.Storage.BTreeFileStoreV2.Update[T](IStorageHandle handleIn, ISerializer`1 serializer, T node)
at CSharpTest.Net.Collections.BPlusTree`2.StorageCache.OnItemRemoved(KeyValuePair`2 item)
at CSharpTest.Net.Collections.LurchTable`2.TryDequeue(Predicate`1 predicate, KeyValuePair`2& value)
at CSharpTest.Net.Collections.BPlusTree`2.StorageCache.Flush()
at CSharpTest.Net.Collections.BPlusTree`2.StorageCache.Commit()
at CSharpTest.Net.Collections.BPlusTree`2.CommitChanges(Boolean requiresLock)
at Umbraco.Web.PublishedCache.NuCache.ContentStore.Release(WriteLockInfo lockInfo, Boolean commit)
at Umbraco.Web.PublishedCache.NuCache.ContentStore.Set(ContentNodeKit kit)
at Umbraco.Web.PublishedCache.NuCache.PublishedSnapshotService.NotifyLocked(IEnumerable`1 payloads, Boolean& draftChanged, Boolean& publishedChanged)
at Umbraco.Web.PublishedCache.NuCache.PublishedSnapshotService.Notify(JsonPayload[] payloads, Boolean& draftChanged, Boolean& publishedChanged)
at Umbraco.Web.Cache.ContentCacheRefresher.Refresh(JsonPayload[] payloads)
at Umbraco.Core.Sync.ServerMessengerBase.DeliverLocal[TPayload](ICacheRefresher refresher, TPayload[] payload)
at Umbraco.Core.Sync.ServerMessengerBase.Deliver[TPayload](ICacheRefresher refresher, TPayload[] payload)
at Umbraco.Core.Sync.ServerMessengerBase.PerformRefresh[TPayload](ICacheRefresher refresher, TPayload[] payload)
at Umbraco.Web.Cache.DistributedCache.RefreshByPayload[TPayload](Guid refresherGuid, IEnumerable`1 payloads)
at Umbraco.Web.Cache.DistributedCacheExtensions.RefreshContentCache(DistributedCache dc, TreeChange`1[] changes)
at Umbraco.Web.Cache.DistributedCacheBinder.ContentService_TreeChanged(IContentService sender, EventArgs args)
at Umbraco.Core.Events.EventDefinition`2.RaiseEvent()
at Umbraco.Core.Events.QueuingEventDispatcher.ScopeExitCompleted()
at Umbraco.Core.Events.QueuingEventDispatcherBase.ScopeExit(Boolean completed)
at Umbraco.Core.Scoping.Scope.<>c__DisplayClass72_0.<RobustExit>b__1()
at Umbraco.Core.Scoping.Scope.TryFinally(Int32 index, Action[] actions)
at Umbraco.Core.Scoping.Scope.TryFinally(Int32 index, Action[] actions)
at Umbraco.Core.Scoping.Scope.RobustExit(Boolean completed, Boolean onException)
at Umbraco.Core.Scoping.Scope.DisposeLastScope()
at Umbraco.Core.Scoping.Scope.Dispose()
at Umbraco.Core.Services.Implement.ContentService.SaveAndPublish(IContent content, String culture, Int32 userId, Boolean raiseEvents)
at cmdportal.com.Controllers.ContentController.ImportArticle(Object objarticle)
in C:\CMDSVN\Websites\Controllers\ContentController.cs:line 1459
About this issue
- Original URL
- State: closed
- Created 5 years ago
- Comments: 25 (13 by maintainers)
Many thanks for testing! Next steps:
Turns out the file storage we are using has a block size that can be configured. I have created PR #5111 which adds a new app setting:
The default value is 4096 but you can use greater values - you have to use powers of two, lower than or equal to 65536 - so 8192, 16384, 32768 or 65536.
Don’t know if you are comfortable building from a PR and testing? Want to try with differerent values and see if a value is ok for you? Bearing in mind that I’d go with the smallest value that fits.
OK, I am just amazed by your detective work 😉 I have been hijacked on other topics and am somewhat ashamed I cannot answer to you faster. Anyways: going to try to repro later tonight with a content body of size > 541K chars - if I can repro, well then, will try to figure out what’s going on.