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.Unmanaged.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.HostingProcess.HostProc.RunUsersAssem
>>>>> bly()
>>>>>        at System.Threading.ThreadHelper.ThreadStart_Context(Object
>>>>> state)
>>>>>        at System.Threading.ExecutionContext.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.
>>>>>>>>
>>>>>>>>             }
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>

Reply via email to