Repository: ignite
Updated Branches:
  refs/heads/ignite-1282 b1c64af19 -> 0d7fd86bd


IGNITE-1625 .Net: Remove Types serialization from Continuous Queries.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/0d7fd86b
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/0d7fd86b
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/0d7fd86b

Branch: refs/heads/ignite-1282
Commit: 0d7fd86bd420abbce879a01aba81f60e6ef2198f
Parents: b1c64af
Author: vozerov-gridgain <[email protected]>
Authored: Fri Oct 9 10:10:12 2015 +0300
Committer: vozerov-gridgain <[email protected]>
Committed: Fri Oct 9 10:10:12 2015 +0300

----------------------------------------------------------------------
 .../Continuous/ContinuousQueryFilterHolder.cs   | 35 ++------------------
 .../Continuous/ContinuousQueryHandleImpl.cs     |  4 +--
 .../Impl/Common/DelegateTypeDescriptor.cs       | 26 +++++++++++++++
 .../Impl/Unmanaged/UnmanagedCallbacks.cs        | 13 ++------
 4 files changed, 33 insertions(+), 45 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/0d7fd86b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/Query/Continuous/ContinuousQueryFilterHolder.cs
----------------------------------------------------------------------
diff --git 
a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/Query/Continuous/ContinuousQueryFilterHolder.cs
 
b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/Query/Continuous/ContinuousQueryFilterHolder.cs
index 9b1f8f4..5737ed3 100644
--- 
a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/Query/Continuous/ContinuousQueryFilterHolder.cs
+++ 
b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/Query/Continuous/ContinuousQueryFilterHolder.cs
@@ -17,7 +17,6 @@
 
 namespace Apache.Ignite.Core.Impl.Cache.Query.Continuous
 {
-    using System;
     using Apache.Ignite.Core.Impl.Portable;
     using Apache.Ignite.Core.Portable;
 
@@ -27,12 +26,6 @@ namespace Apache.Ignite.Core.Impl.Cache.Query.Continuous
     /// </summary>
     public class ContinuousQueryFilterHolder : IPortableWriteAware
     {
-        /** Key type. */
-        private readonly Type _keyTyp;
-
-        /** Value type. */
-        private readonly Type _valTyp;
-
         /** Filter object. */
         private readonly object _filter;
 
@@ -42,35 +35,15 @@ namespace Apache.Ignite.Core.Impl.Cache.Query.Continuous
         /// <summary>
         /// Constructor.
         /// </summary>
-        /// <param name="keyTyp">Key type.</param>
-        /// <param name="valTyp">Value type.</param>
         /// <param name="filter">Filter.</param>
         /// <param name="keepPortable">Keep portable flag.</param>
-        public ContinuousQueryFilterHolder(Type keyTyp, Type valTyp, object 
filter, bool keepPortable)
+        public ContinuousQueryFilterHolder(object filter, bool keepPortable)
         {
-            _keyTyp = keyTyp;
-            _valTyp = valTyp;
             _filter = filter;
             _keepPortable = keepPortable;
         }
 
         /// <summary>
-        /// Key type.
-        /// </summary>
-        internal Type KeyType
-        {
-            get { return _keyTyp; }
-        }
-
-        /// <summary>
-        /// Value type.
-        /// </summary>
-        internal Type ValueType
-        {
-            get { return _valTyp; }
-        }
-
-        /// <summary>
         /// Filter.
         /// </summary>
         internal object Filter
@@ -94,8 +67,6 @@ namespace Apache.Ignite.Core.Impl.Cache.Query.Continuous
         {
             PortableWriterImpl rawWriter = (PortableWriterImpl) 
writer.GetRawWriter();
 
-            PortableUtils.WritePortableOrSerializable(rawWriter, _keyTyp);
-            PortableUtils.WritePortableOrSerializable(rawWriter, _valTyp);
             PortableUtils.WritePortableOrSerializable(rawWriter, _filter);
 
             rawWriter.WriteBoolean(_keepPortable);
@@ -107,10 +78,8 @@ namespace Apache.Ignite.Core.Impl.Cache.Query.Continuous
         /// <param name="reader">The reader.</param>
         public ContinuousQueryFilterHolder(IPortableReader reader)
         {
-            PortableReaderImpl rawReader = (PortableReaderImpl) 
reader.GetRawReader();
+            var rawReader = (PortableReaderImpl) reader.GetRawReader();
 
-            _keyTyp = 
PortableUtils.ReadPortableOrSerializable<Type>(rawReader);
-            _valTyp = 
PortableUtils.ReadPortableOrSerializable<Type>(rawReader);
             _filter = 
PortableUtils.ReadPortableOrSerializable<object>(rawReader);
             _keepPortable = rawReader.ReadBoolean();
         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/0d7fd86b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/Query/Continuous/ContinuousQueryHandleImpl.cs
----------------------------------------------------------------------
diff --git 
a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/Query/Continuous/ContinuousQueryHandleImpl.cs
 
b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/Query/Continuous/ContinuousQueryHandleImpl.cs
index b292a13..f7dd6e1 100644
--- 
a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/Query/Continuous/ContinuousQueryHandleImpl.cs
+++ 
b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Cache/Query/Continuous/ContinuousQueryHandleImpl.cs
@@ -111,8 +111,8 @@ namespace Apache.Ignite.Core.Impl.Cache.Query.Continuous
             writer.WriteBoolean(qry.Local);
             writer.WriteBoolean(_filter != null);
 
-            ContinuousQueryFilterHolder filterHolder = _filter == null || 
qry.Local ? null : 
-                new ContinuousQueryFilterHolder(typeof (TK), typeof (TV), 
_filter, _keepPortable);
+            var filterHolder = _filter == null || qry.Local ? null :
+                new ContinuousQueryFilterHolder(_filter, _keepPortable);
 
             writer.WriteObject(filterHolder);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/0d7fd86b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Common/DelegateTypeDescriptor.cs
----------------------------------------------------------------------
diff --git 
a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Common/DelegateTypeDescriptor.cs
 
b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Common/DelegateTypeDescriptor.cs
index 5460037..d974654 100644
--- 
a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Common/DelegateTypeDescriptor.cs
+++ 
b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Common/DelegateTypeDescriptor.cs
@@ -19,11 +19,14 @@ namespace Apache.Ignite.Core.Impl.Common
 {
     using System;
     using System.Globalization;
+
     using Apache.Ignite.Core.Cache;
+    using Apache.Ignite.Core.Cache.Event;
     using Apache.Ignite.Core.Compute;
     using Apache.Ignite.Core.Datastream;
     using Apache.Ignite.Core.Events;
     using Apache.Ignite.Core.Impl.Cache;
+    using Apache.Ignite.Core.Impl.Cache.Query.Continuous;
     using Apache.Ignite.Core.Impl.Datastream;
     using Apache.Ignite.Core.Impl.Portable.IO;
     using Apache.Ignite.Core.Impl.Unmanaged;
@@ -69,6 +72,9 @@ namespace Apache.Ignite.Core.Impl.Common
         /** */
         private readonly Func<object, object> _streamTransformerCtor;
 
+        /** */
+        private readonly Func<object, object, object> 
_continuousQueryFilterCtor;
+
         /// <summary>
         /// Gets the <see cref="IComputeFunc{T}" /> invocator.
         /// </summary>
@@ -174,6 +180,16 @@ namespace Apache.Ignite.Core.Impl.Common
         }
 
         /// <summary>
+        /// Gets the <see cref="ContinuousQueryFilter{TK,TV}"/>> ctor 
invocator.
+        /// </summary>
+        /// <param name="type">Type.</param>
+        /// <returns>Precompiled invocator delegate.</returns>
+        public static Func<object, object, object> 
GetContinuousQueryFilterCtor(Type type)
+        {
+            return Get(type)._continuousQueryFilterCtor;
+        }
+
+        /// <summary>
         /// Gets the <see cref="DelegateTypeDescriptor" /> by type.
         /// </summary>
         private static DelegateTypeDescriptor Get(Type type)
@@ -308,6 +324,16 @@ namespace Apache.Ignite.Core.Impl.Common
                             },
                             new[] {true, false, false, false, false, false});
                 }
+                else if (genericTypeDefinition == typeof 
(ICacheEntryEventFilter<,>))
+                {
+                    ThrowIfMultipleInterfaces(_streamReceiver, type, 
typeof(ICacheEntryEventFilter<,>));
+
+                    var args = iface.GetGenericArguments();
+
+                    _continuousQueryFilterCtor =
+                        DelegateConverter.CompileCtor<Func<object, object, 
object>>(
+                            
typeof(ContinuousQueryFilter<,>).MakeGenericType(args), new[] { iface, 
typeof(bool) });
+                }
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/0d7fd86b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs
----------------------------------------------------------------------
diff --git 
a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs
 
b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs
index 6373353..f9949f3 100644
--- 
a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs
+++ 
b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbacks.cs
@@ -23,7 +23,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
     using System.Diagnostics.CodeAnalysis;
     using System.Runtime.InteropServices;
     using System.Threading;
-    using Apache.Ignite.Core.Cache.Event;
+
     using Apache.Ignite.Core.Cluster;
     using Apache.Ignite.Core.Common;
     using Apache.Ignite.Core.Impl.Cache;
@@ -546,15 +546,8 @@ namespace Apache.Ignite.Core.Impl.Unmanaged
                     var filterHolder = 
reader.ReadObject<ContinuousQueryFilterHolder>();
 
                     // 2. Create real filter from it's holder.
-                    Type filterWrapperTyp = typeof (ContinuousQueryFilter<,>)
-                        .MakeGenericType(filterHolder.KeyType, 
filterHolder.ValueType);
-
-                    Type filterTyp = typeof (ICacheEntryEventFilter<,>)
-                        .MakeGenericType(filterHolder.KeyType, 
filterHolder.ValueType);
-
-                    var filter = (IContinuousQueryFilter) filterWrapperTyp
-                        .GetConstructor(new[] {filterTyp, typeof (bool)})
-                        .Invoke(new[] {filterHolder.Filter, 
filterHolder.KeepPortable});
+                    var filter = (IContinuousQueryFilter) 
DelegateTypeDescriptor.GetContinuousQueryFilterCtor(
+                        filterHolder.Filter.GetType())(filterHolder.Filter, 
filterHolder.KeepPortable);
 
                     // 3. Inject grid.
                     filter.Inject(_ignite);

Reply via email to