[ https://issues.apache.org/jira/browse/IGNITE-18347?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17647054#comment-17647054 ]
Danut Radoaica commented on IGNITE-18347: ----------------------------------------- unfortunately I wasn't able to reproduce locally or in the develop env (also in AKS), this are the unit test and the helper class: {code:c#} [TestMethod] public void TestCacheFactoryPutThenGetAllPrintableChars() { IgniteClientConfiguration igniteClientConfiguration = CacheFactory.GetIgniteClientConfiguration(); IIgniteClient igniteClient = CacheFactory.ConnectAsClient(igniteClientConfiguration); string cacheName = "LiveChatConversationAllPrintableChars"; ICacheClient<Guid, LiveChatConversation> cacheClient = CacheFactory.GetOrCreateCacheClient<Guid, LiveChatConversation>(igniteClient, cacheName, configuration => configuration.QueryEntities = new List<QueryEntity>() { new QueryEntity(typeof(Guid), typeof(LiveChatConversation)) { Fields = new List<QueryField>() { new QueryField("Id", typeof(Guid)) }, Indexes = new List<QueryIndex>() { new QueryIndex("Id") } } }).WithExpiryPolicy(new ExpiryPolicy(TimeSpan.FromDays(1), TimeSpan.FromDays(1), TimeSpan.FromDays(1))); // see: https://web.itu.edu.tr/~sgunduz/courses/mikroisl/ascii.html for (int i = char.MinValue; i <= char.MaxValue; i++) { char c = Convert.ToChar(i); if (!char.IsControl(c)) { Guid id = Guid.NewGuid(); LiveChatConversation liveChatConversation = new() { Id = id, HelpdeskSubject = $"{c}" }; cacheClient.Put(liveChatConversation.Id, liveChatConversation); liveChatConversation = cacheClient.Get(liveChatConversation.Id); Assert.IsNotNull(liveChatConversation); } } igniteClient.DestroyCache(cacheName); } {code} {code:c#} public static class CacheFactory { public static IgniteClientConfiguration GetIgniteClientConfiguration(string endpoint = "127.0.0.1", string userName = null, string password = null, bool useSsl = false, string certificatePath = null, string certificatePassword = null) { IgniteClientConfiguration igniteClientConfiguration = new() { Endpoints = new[] { endpoint }, RetryPolicy = new ClientRetryReadPolicy(), RetryLimit = 5, SocketTimeout = TimeSpan.FromSeconds(30), EnablePartitionAwareness = true, EnableHeartbeats = true, // Enable trace logging to observe discovery process. Logger = new ConsoleLogger { MinLevel = LogLevel.Trace } }; if (!string.IsNullOrWhiteSpace(userName)) { igniteClientConfiguration.UserName = userName; } if (!string.IsNullOrWhiteSpace(password)) { igniteClientConfiguration.Password = password; } if (useSsl) { igniteClientConfiguration.SslStreamFactory = new SslStreamFactory { CertificatePath = certificatePath, CertificatePassword = certificatePassword, CheckCertificateRevocation = true, SkipServerCertificateValidation = true, SslProtocols = SslProtocols.Tls12 }; } return igniteClientConfiguration; } public static IIgnite ConnectAsClient(IgniteConfiguration igniteConfiguration) { Ignition.ClientMode = true; return Ignition.Start(igniteConfiguration); } public static IIgniteClient ConnectAsClient(IgniteClientConfiguration igniteClientConfiguration) { return Ignition.StartClient(igniteClientConfiguration); } public static ICache<TKey, TData> GetOrCreateCache<TKey, TData>(IIgnite ignite, string cacheName, Action<CacheConfiguration> extendConfigurationAction = null) { CacheConfiguration cacheCfg = new() { Name = cacheName, CacheMode = CacheMode.Partitioned, GroupName = typeof(TData).FullNameWithoutAssemblyInfo(), QueryEntities = new[] { new QueryEntity { KeyType = typeof(TKey), ValueType = typeof(TData) } }, Backups = 1, PlatformCacheConfiguration = new PlatformCacheConfiguration { KeyTypeName = typeof(TKey).FullNameWithoutAssemblyInfo(), ValueTypeName = typeof(TData).FullNameWithoutAssemblyInfo() } }; extendConfigurationAction?.Invoke(cacheCfg); ICache<TKey, TData> cache = ignite.GetOrCreateCache<TKey, TData>(cacheCfg); return cache; } public static ICacheClient<TKey, TData> GetOrCreateCacheClient<TKey, TData>(IIgniteClient ignite, string cacheName, Action<CacheClientConfiguration> extendConfigurationAction = null) { CacheClientConfiguration cacheCfg = new( new CacheConfiguration { PlatformCacheConfiguration = new PlatformCacheConfiguration { KeyTypeName = typeof(TKey).FullNameWithoutAssemblyInfo(), ValueTypeName = typeof(TData).FullNameWithoutAssemblyInfo() } }, true) { Name = cacheName, CacheMode = CacheMode.Partitioned, GroupName = typeof(TData).FullNameWithoutAssemblyInfo(), QueryEntities = new[] { new QueryEntity { KeyType = typeof(TKey), ValueType = typeof(TData) } }, Backups = 1 }; extendConfigurationAction?.Invoke(cacheCfg); return ignite.GetOrCreateCache<TKey, TData>(cacheCfg); } } {code} > .NET: B+Tree is corrupted when string value has emoticons > --------------------------------------------------------- > > Key: IGNITE-18347 > URL: https://issues.apache.org/jira/browse/IGNITE-18347 > Project: Ignite > Issue Type: Bug > Components: platforms > Affects Versions: 2.14 > Environment: Apache Ignite: v2.14.0 > JDK: v1.11 > .NET Core: v6.0 > Azure Kubernetes Service (AKS) > StorageClass: (provisioner: disk.csi.azure.com, skuname: Premium_ZRS) > Reporter: Danut Radoaica > Priority: Major > > exception: "JVM will be halted immediately due to the failure: > [failureCtx=FailureContext [type=CRITICAL_ERROR, err=class > o.a.i.i.processors.cache.persistence.tree.CorruptedTreeException: B+Tree is > corrupted [groupId=-1229361758, pageIds=[1129924291198982], > groupName=Druid.DataAccess.DbEntities.LiveChatConversation, msg=Runtime > failure on search row: SearchRow [key=KeyCacheObjectImpl [part=937, > val=6194b7bf-64a0-4b00-87eb-2660ecc3536a, hasValBytes=true], hash=1847364021, > cacheId=-998779923]]]]" > dto: > [Table("LiveChatConversation")] > private class LiveChatConversation > { > [Column] > [Key] > public Guid Id \{ get; set; } > [Column] > [MaxLength(255)] > public string HelpdeskSubject \{ get; set; } > } > HelpdeskSubject string value: "💋💋💋💋💋💋💋💋💋" -- This message was sent by Atlassian Jira (v8.20.10#820010)