ошибка в реализации Ignite.net с сохранением - PullRequest
0 голосов
/ 13 декабря 2018

Я новичок в технологии Ignite.net и пытаюсь реализовать ее с помощью функции сохранения данных (использую ядро ​​EF 2.1 для моих классов хранилища кеша).Я настраиваю Ignite Configuration следующим образом

        var cfg = new IgniteConfiguration
        {
            JvmDllPath = @"C:\Program Files\Java\jdk-11.0.1\bin\server\jvm.dll",
            IsActiveOnStart = true,
            ClientMode = false,
            IgniteInstanceName = FirstValues.IgniteInstanceName,
            WorkDirectory = @"C:\IGNITE_HOME\workspace",
            GridName = Guid.NewGuid().ToString(),
            DataStorageConfiguration = new DataStorageConfiguration()
            {
                DefaultDataRegionConfiguration = new DataRegionConfiguration()
                {
                    PersistenceEnabled = true,
                    Name = "inMemoryRegion",
                    CheckpointPageBufferSize = 1024,
                },
                WriteThrottlingEnabled = true
            },
            BinaryConfiguration = new BinaryConfiguration()
            {
                CompactFooter = true,
                KeepDeserialized = false
            }
        };

        cfg = FirstValues.cacheConfigAll(cfg);
        cfg = FirstValues.setupDiscoveryConfig(cfg);
        Environment.SetEnvironmentVariable("IGNITE_H2_DEBUG_CONSOLE", "true");
        var ignite = Ignition.TryGetIgnite() ?? Ignition.Start(cfg);
        ignite.SetActive(true);
        var s = ignite.GetCluster().ForServers().GetNodes();
        ignite.GetCluster().SetBaselineTopology(s);

эти два класса реализованы таким образом

        public static IgniteConfiguration cacheConfigAll(IgniteConfiguration config)
    {
        CacheConfiguration cacheConfigVehicle = VehicleCacheCfgReader();

        CacheConfiguration cacheConfigDevice = DeviceCacheCfgReader();

        CacheConfiguration cacheConfigZone = ZoneCacheCfgReader();

        CacheConfiguration cacheConfigGeoPoint = GeoPointCacheCfgReader();

        List<CacheConfiguration> list = new List<CacheConfiguration>();
        list.Add(cacheConfigVehicle);
        list.Add(cacheConfigDevice);
        list.Add(cacheConfigZone);
        list.Add(cacheConfigGeoPoint);
        config.CacheConfiguration = list;
        return config;
    }

    public static IgniteConfiguration setupDiscoveryConfig(IgniteConfiguration config)
    {
        TcpDiscoverySpi spi = new TcpDiscoverySpi();
        var ipFinder = new TcpDiscoveryMulticastIpFinder();
        ((TcpDiscoveryMulticastIpFinder)ipFinder).MulticastGroup = "228.10.10.157";
        ipFinder.LocalAddress = "127.0.0.1";
        spi.IpFinder = ipFinder;
        config.DiscoverySpi = spi;
        return config;
    }

, и здесь это одно из моих хранилищ кеша (все они похожи друг на друга)

        public static CacheConfiguration VehicleCacheCfgReader()
    {
        return new CacheConfiguration(FmsCacheName)
        {
            Name = VehicleCacheName,
            SqlSchema = "PUBLIC",
            Backups = 1,
            CacheMode = CacheMode.Partitioned,
            WriteSynchronizationMode = CacheWriteSynchronizationMode.FullSync,
            AtomicityMode = CacheAtomicityMode.Atomic,
            WriteBehindEnabled = true,
            CacheStoreFactory = new VehicleCacheStoreFactory(),
            ReadThrough = true,
            WriteThrough = true,
            KeepBinaryInStore = false,
            DataRegionName = "inMemoryRegion",                
            QueryEntities = new List<QueryEntity>()
            {
                new QueryEntity()
                {
                    TableName = VehicleCacheName,
                    KeyType = typeof(string),
                    KeyFieldName = "Id",
                    ValueType = typeof(Vehicle),
                    Fields = new List<QueryField>() {
                            new QueryField("Id", typeof(string)) { IsKeyField = true },
                            new QueryField("Name", typeof(string)),
                            new QueryField("ZoneId", typeof(string))
                    }
                }
            }
        };
    }

и теперь, когда я запускаю зажигание, у меня появляется эта ошибка

class org.apache.ignite.IgniteException: An error occurred during cache configuration loading from file [file=C:\IGNITE_HOME\workspace\db\node00-f9d2cd52-ad3e-4304-92ce-92f6585cb0a6\cache-DeviceCache1212201883355PM\cache_data.dat]
at org.

apache.ignite.internal.util.IgniteUtils.convertException(IgniteUtils.java:1025)
    at org.apache.ignite.internal.processors.platform.PlatformAbstractBootstrap.start(PlatformAbstractBootstrap.java:48)
    at org.apache.ignite.internal.processors.platform.PlatformIgnition.start(PlatformIgnition.java:75)
Caused by: class org.apache.ignite.IgniteCheckedException: An error occurred during cache configuration loading from file [file=C:\IGNITE_HOME\workspace\db\node00-f9d2cd52-ad3e-4304-92ce-92f6585cb0a6\cache-DeviceCache1212201883355PM\cache_data.dat]
    at org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.readCacheData(FilePageStoreManager.java:843)
    at org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.readCacheConfigurations(FilePageStoreManager.java:785)
    at org.apache.ignite.internal.processors.cache.GridCacheProcessor.addCacheOnJoinFromConfig(GridCacheProcessor.java:888)
    at org.apache.ignite.internal.processors.cache.GridCacheProcessor.startCachesOnStart(GridCacheProcessor.java:753)
    at org.apache.ignite.internal.processors.cache.GridCacheProcessor.onReadyForRead(GridCacheProcessor.java:737)
    at org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager.notifyMetastorageReadyForRead(GridCacheDatabaseSharedManager.java:396)
    at org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager.readMetastore(GridCacheDatabaseSharedManager.java:662)
    at org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager.notifyMetaStorageSubscribersOnReadyForRead(GridCacheDatabaseSharedManager.java:4610)
    at org.apache.ignite.internal.IgniteKernal.start(IgniteKernal.java:1048)
    at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start0(IgnitionEx.java:2038)
    at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start(IgnitionEx.java:1730)
    at org.apache.ignite.internal.IgnitionEx.start0(IgnitionEx.java:1158)
    at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:656)
    at org.apache.ignite.internal.processors.platform.PlatformAbstractBootstrap.start(PlatformAbstractBootstrap.java:43)
    ... 1 more
Caused by: class org.apache.ignite.IgniteCheckedException: Failed to deserialize object with given class loader: jdk.internal.loader.ClassLoaders$AppClassLoader@14514713
    at org.apache.ignite.marshaller.jdk.JdkMarshaller.unmarshal0(JdkMarshaller.java:147)
    at org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller.unmarshal(AbstractNodeNameAwareMarshaller.java:94)
    at org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.readCacheData(FilePageStoreManager.java:839)
    ... 14 more
Caused by: java.lang.IllegalArgumentException: Ignite instance name thread local must be set or this method should be accessed under org.apache.ignite.thread.IgniteThread
    at org.apache.ignite.internal.IgnitionEx.localIgnite(IgnitionEx.java:1411)
    at org.apache.ignite.internal.binary.GridBinaryMarshaller.threadLocalContext(GridBinaryMarshaller.java:398)
    at org.apache.ignite.internal.binary.BinaryObjectImpl.readExternal(BinaryObjectImpl.java:695)
    at java.base/java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:2136)
    at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2085)
    at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1594)
    at java.base/java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2355)
    at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2249)
    at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2087)
    at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1594)
    at java.base/java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2355)
    at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2249)
    at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2087)
    at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1594)
    at java.base/java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2355)
    at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2249)
    at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2087)
    at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1594)
    at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:430)
    at org.apache.ignite.marshaller.jdk.JdkMarshaller.unmarshal0(JdkMarshaller.java:139)

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

После некоторых поисков я решил самостоятельно внедрить механизм хранения кеша.Как вы можете видеть, в архитектуре Ignite мы должны обращаться к базе данных хранилища, когда у нас нет данных в кеше, поэтому я пишу некоторые коды в своих функциях get для чтения данных и записываю их в кеш, когда в кеше нет запрашиваемых данных.*

0 голосов
/ 13 декабря 2018

Мое предыдущее предположение было неверным, как кажется.

Есть проблема IGNITE-10451 , боюсь, это будет означать, что вы не сможете использовать Cache Store вместес сохранением при использовании Ignite.Net.

Если вы удалите определение CacheStore на всех кешах и удалите рабочий каталог, он запустится без ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...