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);
