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.
>>>>>>>>>
>>>>>>>>>             }
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>

Reply via email to