系统重启后,Ignite缓存变空

时间:2017-10-25 13:21:42

标签: c# ignite

我玩点燃并使用简单的测试应用程序来探索其持久性功能:

using System;
using Apache.Ignite.Core;
using Apache.Ignite.Core.PersistentStore;

namespace IgniteDemo
{
    internal class Item
    {
        public int Number { get; set; }
        public DateTime PointInTime { get; set; }
        public override string ToString() => $"Item:{{Number={Number} ,PointInTime={PointInTime}}}";
    }

    class Program
    {
        static void Main(string[] args)
        {
            const string itemCacheName = @"Items";
            var random = new Random();

            var igniteConfig = new IgniteConfiguration{
                JvmInitialMemoryMb = 1024,
                PersistentStoreConfiguration = new PersistentStoreConfiguration()
            };

            using (var ignite = Ignition.Start(igniteConfig))
            {
                ignite.SetActive(true);

                var cache = ignite.GetOrCreateCache<Guid, Item>(itemCacheName);
                cache.LoadCache(null);

                // put random item into cache
                cache.Put(Guid.NewGuid(), new Item {Number = random.Next(), PointInTime = DateTime.Now});

                //print all items in the cache
                Console.WriteLine(@"Cache content:");
                foreach (var cacheEntry in cache)
                    Console.WriteLine(cacheEntry);

                Console.WriteLine("\nPress any key to Close");
                Console.ReadKey();
            }
        }
    }
}

一切都好。数据在应用程序执行之间保留在缓存中。 但是,如果我重新启动系统,所有缓存数据都会消失。 我的第一个猜测是问题发生在默认情况下Temp文件夹中的工作目录。所以我决定将工作目录移动到自定义文件夹:

        var igniteConfig = new IgniteConfiguration
        {
            JvmInitialMemoryMb = 1024,
            WorkDirectory = @"D:\Store\Wd",
            PersistentStoreConfiguration = new PersistentStoreConfiguration()
            {
                PersistentStorePath = @"D:\Store\Data",
                WalStorePath = @"D:\Store\Wal",
                WalArchivePath = @"D:\Store\Wal\Archive"
            }
        };

这没有结果。

我已阅读下面列出的官方资源

https://apacheignite.readme.io/docs

https://ptupitsyn.github.io/

但我仍然不明白为什么我的缓存数据会消失。我错过了一些关于Ignite持久性的重要信息吗?

我正在使用NuGet获取Ignite并在我的机器上安装了Java 1.8.0_151

1 个答案:

答案 0 :(得分:3)

如果查看PersistentStorePath文件夹的内容,您会看到0_0_0_0_0_0_0_1_127_0_0_1_172_25_4_66_2001_0_9d38_6abd_388e_bade_3c6f_269_47500等文件夹(有关名称生成here的详细信息)。

重新启动计算机会导致此ID更改,这是一个known issue,其中包含Ignite 2.1和2.2(在即将发布的2.3中已修复)。解决方法是设置IgniteConfiguration.consistentId属性,但在Ignite.NET中不可用(也在2.3中添加)。

所以你的选择是:

  • 等待Ignite 2.3发布,或使用nightly build
  • consistentId设置为Spring XML并将其加载IgniteConfiguration.SpringConfigUrl属性