Hi Pavel, That is the full stack trace
On Jun 7, 2017 7:00 PM, "Pavel Tupitsyn" <ptupit...@apache.org> wrote: > Hi Chetan, is that full stack trace? > > Pavel > > On Wed, Jun 7, 2017 at 4:20 PM, Chetan D <ccheta...@gmail.com> wrote: > >> Hi Pavel, >> >> I have implemented Lock but got following exception. >> >> using (var cacheLock = cache.Lock(1)) >> { >> cacheLock.Enter(); >> List<Car> cars = cache.Get(1); >> cars.Add(newCar); >> cache.Put(1, cars);-------------------------->exception here >> cacheLock.Exit(); >> } >> >> Apache.Ignite.Core.Cache.Store.CacheStoreException was unhandled by user >> code >> HResult=-2146233088 >> Message=class org.apache.ignite.transactions.TransactionRollbackException: >> Transaction has been rolled back: 48906b28c51-00000000-0674-db36 >> -0000-000000000001 >> Source=Apache.Ignite.Core >> StackTrace: >> at Apache.Ignite.Core.Impl.PlatformTarget.DoOutInOpX(Int32 type, >> Action`1 outAction, Func`2 inErrorAction) >> at Apache.Ignite.Core.Impl.Cache.CacheImpl`2.DoOutOp[T1,T2](CacheOp >> op, T1 x, T2 y) >> at Apache.Ignite.Core.Impl.Cache.CacheImpl`2.Put(TK key, TV val) >> at Addtableentirely.Program.Changed(Object sender, >> RecordChangedEventArgs`1 e) in C:\Users\M1029218\Documents\Visual Studio >> 2015\Projects\Apacheignite\Addtableentirely\Program.cs:line 260 >> InnerException: >> HResult=-2146233088 >> Message=Transaction has been rolled back: >> 48906b28c51-00000000-0674-db36-0000-000000000001 >> InnerException: >> HResult=-2147467262 >> Message=Unable to cast object of type ' >> System.Collections.Generic.List`1[Addtableentirely.car]' to type >> 'Addtableentirely.car'. >> Source=Apache.Ignite.Core >> StackTrace: >> at Apache.Ignite.Core.Impl.Binary >> .BinaryReflectiveSerializerInternal.Apache.Ignite.Core.Impl. >> Binary.IBinarySerializerInternal.ReadBinary[T](BinaryReader reader, >> IBinaryTypeDescriptor desc, Int32 pos) >> at Apache.Ignite.Core.Impl.Binary >> .BinaryReader.ReadFullObject[T](Int32 pos) >> at Apache.Ignite.Core.Impl.Binary >> .BinaryReader.TryDeserialize[T](T& res) >> at Apache.Ignite.Core.Impl.Binary >> .BinaryReader.Deserialize[T]() >> at Apache.Ignite.Core.Impl.Binary >> .BinaryReader.ReadBinaryObject[T](Boolean doDetach) >> at Apache.Ignite.Core.Impl.Binary >> .BinaryReader.TryDeserialize[T](T& res) >> at Apache.Ignite.Core.Impl.Binary >> .BinaryReader.Deserialize[T]() >> at Apache.Ignite.Core.Impl.Binary >> .BinaryReader.ReadObject[T]() >> at Apache.Ignite.Core.Impl.Cache. >> Store.CacheStoreInternal`2.Invoke(IBinaryStream stream, Ignite grid) >> at Apache.Ignite.Core.Impl.Cache. >> Store.CacheStore.Invoke(PlatformMemoryStream stream, Ignite grid) >> at Apache.Ignite.Core.Impl.Unmana >> ged.UnmanagedCallbacks.CacheStoreInvoke(Int64 memPtr) >> InnerException: >> >> >> On Wed, Jun 7, 2017 at 5:33 PM, Pavel Tupitsyn <ptupit...@apache.org> >> wrote: >> >>> > my requirement is such that i need to store all values of table with >>> single key associated >>> How many values do you plan to store in a single Ignite entry? >>> Typically you have one Ignite cache entry for one DB row. >>> >>> > when a new record has been added and that new record i need to insert >>> it to cache >>> So you in Ignite you have a mapping from int to List<Car>, right? >>> ICache<int, List<Car>>? >>> If you need to insert a new Car into that list atomically, you can do >>> that within a cache lock: >>> >>> using (var cacheLock = cache.Lock(1)) >>> { >>> cacheLock.Enter(); >>> List<Car> cars = cache.Get(1); >>> cars.Add(newCar); >>> cache.Put(1, cars); >>> cacheLock.Exit(); >>> } >>> >>> > difference between cache.getandreplace() and cache.getandput() >>> GetAndReplace does not do anything if there is no entry with specified >>> key. >>> GetAndPut always has effect: either creates new entry or updates existing >>> >>> cache.GetAndReplace(1, ""); >>> cache.ContainsKey(1); // False >>> cache.GetAndPut(2, ""); >>> cache.ContainsKey(2); // True >>> >>> >>> > Unable to cast object of type >>> > 'System.Collections.Generic.List`1[Addtableentirely.car]' >>> to type 'Addtableentirely.car' >>> Your cache store implementation is ICacheStore<int, car> while there is >>> List<car> value in cache. >>> Change the cache store to ICacheStore<int, List<car>> >>> >>> > the issue is when i do the above code it is again actually calling my >>> icachestore method WRITE() and the data is again added to database table >>> To avoid this use WithSkipStore method: >>> cache.WithSkipStore().Put(e.Entity.ID,new car(e.Entity.Name, >>> e.Entity.Power)); >>> >>> Here you have ICache<int, car> again instead of List<car>, by the way. >>> Have you decided to go this way instead? >>> >>> >>> > $bin/ignite.sh but its not working >>> For .NET please use >>> platforms\dotnet\bin\Apache.Ignite.exe >>> >>> >>> Thanks, >>> >>> Pavel >>> >>> On Wed, Jun 7, 2017 at 2:08 PM, Chetan D <ccheta...@gmail.com> wrote: >>> >>>> Hi, >>>> >>>> I need one more help can you tell me how to start ignite node without >>>> using Visual studio. >>>> >>>> i have seen this command >>>> >>>> $bin/ignite.sh >>>> >>>> but its not working >>>> >>>> >>>> >>>> On Wed, Jun 7, 2017 at 4:29 PM, Chetan D <ccheta...@gmail.com> wrote: >>>> >>>>> Hi Pavel, >>>>> >>>>> when a new record has been added to DB i have handled it through event >>>>> and i was able to add it to cache >>>>> like this >>>>> var ignite = Ignition.GetIgnite(); >>>>> var cache = ignite.GetCache<int, car>("cars"); >>>>> cache.Put(e.Entity.ID,new car(e.Entity.Name, >>>>> e.Entity.Power)); >>>>> >>>>> but the issue is when i do the above code it is again actually calling >>>>> my icachestore method WRITE() and the data is again added to database >>>>> table. >>>>> >>>>> On Wed, Jun 7, 2017 at 3:13 PM, Chetan D <ccheta...@gmail.com> wrote: >>>>> >>>>>> also i am doing this and got the following error dont know what it is. >>>>>> >>>>>> SqlCommand cmd = new SqlCommand("select Name,Power from Cars", con); >>>>>> con.Open(); >>>>>> rdr = cmd.ExecuteReader(); >>>>>> >>>>>> #region using put >>>>>> List<car> directcar = new List<car>(); >>>>>> while (rdr.Read()) >>>>>> { >>>>>> directcar.Add(new car(rdr["Name"].ToString(), >>>>>> Convert.ToDouble(rdr["Power"]))); >>>>>> } >>>>>> cache.Put(2, directcar); >>>>>> >>>>>> got this exception >>>>>> Apache.Ignite.Core.Cache.Store.CacheStoreException was unhandled >>>>>> HResult=-2146233088 >>>>>> Message=class org.apache.ignite.internal.pro >>>>>> cessors.cache.CachePartialUpdateCheckedException: Failed to update >>>>>> keys (retry update if possible).: [2] >>>>>> Source=Apache.Ignite.Core >>>>>> StackTrace: >>>>>> at Apache.Ignite.Core.Impl.PlatformTarget.DoOutInOpX(Int32 >>>>>> type, Action`1 outAction, Func`2 inErrorAction) >>>>>> at Apache.Ignite.Core.Impl.Cache. >>>>>> CacheImpl`2.DoOutOp[T1,T2](CacheOp op, T1 x, T2 y) >>>>>> at Apache.Ignite.Core.Impl.Cache.CacheImpl`2.Put(TK key, TV >>>>>> val) >>>>>> at Addtableentirely.Program.Main(String[] args) in >>>>>> C:\Users\M1029218\Documents\Visual Studio >>>>>> 2015\Projects\Apacheignite\Addtableentirely\Program.cs:line 106 >>>>>> at System.AppDomain._nExecuteAssembly(RuntimeAssembly >>>>>> assembly, String[] args) >>>>>> at System.AppDomain.ExecuteAssembly(String assemblyFile, >>>>>> Evidence assemblySecurity, String[] args) >>>>>> at Microsoft.VisualStudio.Hosting >>>>>> Process.HostProc.RunUsersAssembly() >>>>>> at System.Threading.ThreadHelper.ThreadStart_Context(Object >>>>>> state) >>>>>> at System.Threading.ExecutionCont >>>>>> ext.RunInternal(ExecutionContext executionContext, ContextCallback >>>>>> callback, Object state, Boolean preserveSyncCtx) >>>>>> at System.Threading.ExecutionContext.Run(ExecutionContext >>>>>> executionContext, ContextCallback callback, Object state, Boolean >>>>>> preserveSyncCtx) >>>>>> at System.Threading.ExecutionContext.Run(ExecutionContext >>>>>> executionContext, ContextCallback callback, Object state) >>>>>> at System.Threading.ThreadHelper.ThreadStart() >>>>>> InnerException: >>>>>> HResult=-2147467262 >>>>>> Message=Unable to cast object of type ' >>>>>> System.Collections.Generic.List`1[Addtableentirely.car]' to type >>>>>> 'Addtableentirely.car'. >>>>>> Source=Apache.Ignite.Core >>>>>> StackTrace: >>>>>> at Apache.Ignite.Core.Impl.Binary >>>>>> .BinaryReflectiveSerializerInternal.Apache.Ignite.Core.Impl. >>>>>> Binary.IBinarySerializerInternal.ReadBinary[T](BinaryReader reader, >>>>>> IBinaryTypeDescriptor desc, Int32 pos) >>>>>> at Apache.Ignite.Core.Impl.Binary >>>>>> .BinaryReader.ReadFullObject[T](Int32 pos) >>>>>> at Apache.Ignite.Core.Impl.Binary >>>>>> .BinaryReader.TryDeserialize[T](T& res) >>>>>> at Apache.Ignite.Core.Impl.Binary >>>>>> .BinaryReader.Deserialize[T]() >>>>>> at Apache.Ignite.Core.Impl.Binary >>>>>> .BinaryReader.ReadBinaryObject[T](Boolean doDetach) >>>>>> at Apache.Ignite.Core.Impl.Binary >>>>>> .BinaryReader.TryDeserialize[T](T& res) >>>>>> at Apache.Ignite.Core.Impl.Binary >>>>>> .BinaryReader.Deserialize[T]() >>>>>> at Apache.Ignite.Core.Impl.Binary >>>>>> .BinaryReader.ReadObject[T]() >>>>>> at Apache.Ignite.Core.Impl.Cache. >>>>>> Store.CacheStoreInternal`2.Invoke(IBinaryStream stream, Ignite grid) >>>>>> at Apache.Ignite.Core.Impl.Cache. >>>>>> Store.CacheStore.Invoke(PlatformMemoryStream stream, Ignite grid) >>>>>> at Apache.Ignite.Core.Impl.Unmana >>>>>> ged.UnmanagedCallbacks.CacheStoreInvoke(Int64 memPtr) >>>>>> InnerException: >>>>>> >>>>>> >>>>>> On Wed, Jun 7, 2017 at 3:08 PM, Chetan D <ccheta...@gmail.com> wrote: >>>>>> >>>>>>> Hi Pavel, >>>>>>> >>>>>>> I got that its easy when there is a key with value but my >>>>>>> requirement is such that i need to store all values of table with single >>>>>>> key associated. >>>>>>> >>>>>>> The code which you sent is not working and doesnt give any error as >>>>>>> well. >>>>>>> >>>>>>> you have sent it in case when an update happens. >>>>>>> >>>>>>> my question is when a new record has been added and that new record >>>>>>> i need to insert it to cache. >>>>>>> >>>>>>> and also i have a column in my table in which i have updated say in >>>>>>> this case name value to something else so i need to update that >>>>>>> corresponding value in cache as well. >>>>>>> >>>>>>> >>>>>>> can you tell me the difference between cache.getandreplace() and >>>>>>> cache.getandput() they both are doing same thing actually. >>>>>>> >>>>>>> >>>>>>> >>>>>>> it would be helpfull if i can get answer with respect to list >>>>>>> storage. >>>>>>> >>>>>>> On Wed, Jun 7, 2017 at 2:34 PM, Pavel Tupitsyn <ptupit...@apache.org >>>>>>> > wrote: >>>>>>> >>>>>>>> Hi Chetan, >>>>>>>> >>>>>>>> I'm not sure about #1 and #3 - why do you add all entities as a >>>>>>>> list with a single key? Typically this is not how Ignite is used. >>>>>>>> Proper way is to add each entity (Car) as a separate cache entry, >>>>>>>> with unique key (id), like in #2. >>>>>>>> >>>>>>>> As soon as you have all data in cache, each Car with a unique id, >>>>>>>> and you have an SQL listener set up, event handler can look like this: >>>>>>>> >>>>>>>> static void Changed(object sender, RecordChangedEventArgs<Car> e) >>>>>>>> { >>>>>>>> var ignite = Ignition.GetIgnite(); >>>>>>>> var cache = ignite.GetCache<int, Car>("cars"); >>>>>>>> >>>>>>>> switch (e.ChangeType) >>>>>>>> { >>>>>>>> case ChangeType.Update: >>>>>>>> cache.Put(e.ID, e); >>>>>>>> break; >>>>>>>> case ChangeType.Delete: >>>>>>>> cache.Remove(e.ID); >>>>>>>> break; >>>>>>>> } >>>>>>>> } >>>>>>>> >>>>>>>> Let me know if this makes sense. >>>>>>>> >>>>>>>> Thanks, >>>>>>>> Pavel >>>>>>>> >>>>>>>> >>>>>>>> On Wed, Jun 7, 2017 at 11:41 AM, Chetan D <ccheta...@gmail.com> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Hi Pavel, >>>>>>>>> >>>>>>>>> I am using the same car program which you have written in blog and >>>>>>>>> i have some doubts on that. >>>>>>>>> >>>>>>>>> I have the following scenarios which i have doubts on. >>>>>>>>> >>>>>>>>> 1.#region using put >>>>>>>>> List<car> directcar = new List<car>(); >>>>>>>>> while (rdr.Read()) >>>>>>>>> { >>>>>>>>> directcar.Add(new >>>>>>>>> car(rdr["Name"].ToString(), Convert.ToDouble(rdr["Power"]))); >>>>>>>>> } >>>>>>>>> cache.Put(1, directcar); >>>>>>>>> #endregion put >>>>>>>>> Here i am creating a cache and adding list of values with a single >>>>>>>>> key >>>>>>>>> >>>>>>>>> 2.Using data streamer >>>>>>>>> //using (var ldr = ignite.GetDataStreamer<int, >>>>>>>>> car>(cacheCfg.Name)) >>>>>>>>> //{ >>>>>>>>> // //ldr.PerNodeBufferSize = 1024; >>>>>>>>> >>>>>>>>> >>>>>>>>> // while (rdr.Read()) >>>>>>>>> // { >>>>>>>>> // ldr.AddData((int)rdr[0], new >>>>>>>>> car(rdr["Name"].ToString(),Convert.ToDouble(rdr["Power"]))); >>>>>>>>> >>>>>>>>> // Console.WriteLine("LDR" + ldr.ToString()); >>>>>>>>> >>>>>>>>> // } >>>>>>>>> >>>>>>>>> //} >>>>>>>>> here i am using datastreamer and adding each values with a key >>>>>>>>> >>>>>>>>> 3. #region adding all elements as list with single key using get >>>>>>>>> datastremer >>>>>>>>> using (var ldr = ignite.GetDataStreamer<int, >>>>>>>>> List<car>>(cacheCfg.Name)) >>>>>>>>> { >>>>>>>>> List<car> cars = new List<car>(); >>>>>>>>> >>>>>>>>> while (rdr.Read()) >>>>>>>>> { >>>>>>>>> cars.Add(new >>>>>>>>> car(rdr["Name"].ToString(), Convert.ToDouble(rdr["Power"]))); >>>>>>>>> } >>>>>>>>> ldr.AddData(1, cars); >>>>>>>>> Console.WriteLine("LDR" + ldr.ToString()); >>>>>>>>> >>>>>>>>> } >>>>>>>>> #region reading from cache >>>>>>>>> foreach (ICacheEntry<int, List<car>> car in >>>>>>>>> cache) >>>>>>>>> { >>>>>>>>> foreach (car cars in car.Value) >>>>>>>>> { >>>>>>>>> Console.WriteLine(cars.ToString()); >>>>>>>>> } >>>>>>>>> Console.WriteLine(car.Value.ToList()); >>>>>>>>> >>>>>>>>> >>>>>>>>> } >>>>>>>>> #endregion >>>>>>>>> here i am using data streamer to add list of values with a single >>>>>>>>> key. >>>>>>>>> >>>>>>>>> so now when this application is running and all the cache data has >>>>>>>>> been loaded i have added a new record in my table. >>>>>>>>> >>>>>>>>> so for that i have added a listener like this >>>>>>>>> >>>>>>>>> var mapper = new ModelToTableMapper<car>(); >>>>>>>>> mapper.AddMapping(c => c.ID, "ID"); >>>>>>>>> mapper.AddMapping(c => c.Name, "Name"); >>>>>>>>> mapper.AddMapping(c => c.Power, "Power"); >>>>>>>>> mapper.AddMapping(c => c.IsAvailable, >>>>>>>>> "IsAvailable"); >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> using (var dep = new >>>>>>>>> SqlTableDependency<car>(ad.sqlconnection, >>>>>>>>> "Cars", mapper)) >>>>>>>>> { >>>>>>>>> dep.OnChanged += Changed; >>>>>>>>> dep.Start(); >>>>>>>>> >>>>>>>>> Console.WriteLine("Press a key to exit"); >>>>>>>>> Console.ReadKey(); >>>>>>>>> >>>>>>>>> dep.Stop(); >>>>>>>>> } >>>>>>>>> #endregion >>>>>>>>> static void Changed(object sender, RecordChangedEventArgs<car> e) >>>>>>>>> { >>>>>>>>> if (e.ChangeType != ChangeType.None) >>>>>>>>> { >>>>>>>>> var changedEntity = e.Entity; >>>>>>>>> Console.WriteLine("DML operation: " + >>>>>>>>> e.ChangeType); >>>>>>>>> Console.WriteLine("ID: " + changedEntity.ID); >>>>>>>>> Console.WriteLine("Name: " + changedEntity.Name); >>>>>>>>> Console.WriteLine("Power: " + changedEntity.Power); >>>>>>>>> Console.WriteLine("IsAvailable: " + >>>>>>>>> changedEntity.IsAvailable); >>>>>>>>> >>>>>>>>> Console.WriteLine("<---------- >>>>>>>>> ------------------------------------------------------------ >>>>>>>>> ---------------->"); >>>>>>>>> } >>>>>>>>> >>>>>>>>> so my question is when a new record has been added to my table i >>>>>>>>> get a event triggered and will get the value which is inserted. >>>>>>>>> >>>>>>>>> so now how to add the new value to existing cache say by using >>>>>>>>> datastreamer which works on list i need to add this row to end of >>>>>>>>> list in >>>>>>>>> existing cache. >>>>>>>>> >>>>>>>>> Delete >>>>>>>>> when record is deleted i get a event and i need to delete that >>>>>>>>> record from existing cache. >>>>>>>>> >>>>>>>>> Update >>>>>>>>> when a column of table is updated say NAME column i need to update >>>>>>>>> that particular column value in cache. >>>>>>>>> >>>>>>>>> can you please help me how to implement this. >>>>>>>>> >>>>>>>>> } >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> >