That is strange, can you wrap it in try-catch block and print out
ex.ToString()?
How many nodes do you have?

On Wed, Jun 7, 2017 at 5:46 PM, Chetan D <ccheta...@gmail.com> wrote:

> 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