http://git-wip-us.apache.org/repos/asf/ignite/blob/f0bac562/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Events/RemoteListenEventFilter.cs ---------------------------------------------------------------------- diff --git a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Events/RemoteListenEventFilter.cs b/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Events/RemoteListenEventFilter.cs deleted file mode 100644 index 8b44966..0000000 --- a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Events/RemoteListenEventFilter.cs +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -namespace Apache.Ignite.Core.Impl.Events -{ - using System; - using System.Diagnostics; - using Apache.Ignite.Core.Events; - using Apache.Ignite.Core.Impl.Common; - using Apache.Ignite.Core.Impl.Portable; - using Apache.Ignite.Core.Impl.Portable.IO; - - /// <summary> - /// Event filter/listener holder for RemoteListen. - /// </summary> - internal class RemoteListenEventFilter : IInteropCallback - { - /** */ - private readonly Ignite _ignite; - - /** */ - private readonly Func<Guid, IEvent, bool> _filter; - - /// <summary> - /// Initializes a new instance of the <see cref="RemoteListenEventFilter"/> class. - /// </summary> - /// <param name="ignite">The grid.</param> - /// <param name="filter">The filter.</param> - public RemoteListenEventFilter(Ignite ignite, Func<Guid, IEvent, bool> filter) - { - _ignite = ignite; - _filter = filter; - } - - /** <inheritdoc /> */ - public int Invoke(IPortableStream stream) - { - var reader = _ignite.Marshaller.StartUnmarshal(stream); - - var evt = EventReader.Read<IEvent>(reader); - - var nodeId = reader.ReadGuid() ?? Guid.Empty; - - return _filter(nodeId, evt) ? 1 : 0; - } - - /// <summary> - /// Creates an instance of this class from a stream. - /// </summary> - /// <param name="memPtr">Memory pointer.</param> - /// <param name="grid">Grid</param> - /// <returns>Deserialized instance of <see cref="RemoteListenEventFilter"/></returns> - public static RemoteListenEventFilter CreateInstance(long memPtr, Ignite grid) - { - Debug.Assert(grid != null); - - using (var stream = IgniteManager.Memory.Get(memPtr).Stream()) - { - var marsh = grid.Marshaller; - - var reader = marsh.StartUnmarshal(stream); - - var pred = reader.ReadObject<PortableOrSerializableObjectHolder>().Item; - - var func = DelegateTypeDescriptor.GetEventFilter(pred.GetType()); - - return new RemoteListenEventFilter(grid, (id, evt) => func(pred, id, evt)); - } - } - } -} \ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/f0bac562/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/ExceptionUtils.cs ---------------------------------------------------------------------- diff --git a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/ExceptionUtils.cs b/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/ExceptionUtils.cs deleted file mode 100644 index 066f345..0000000 --- a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/ExceptionUtils.cs +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -namespace Apache.Ignite.Core.Impl -{ - using System; - using System.Collections.Generic; - using System.Diagnostics; - using System.Runtime.InteropServices; - using System.Security; - using System.Threading; - using Apache.Ignite.Core.Cache; - using Apache.Ignite.Core.Cache.Store; - using Apache.Ignite.Core.Cluster; - using Apache.Ignite.Core.Common; - using Apache.Ignite.Core.Compute; - using Apache.Ignite.Core.Impl.Portable; - using Apache.Ignite.Core.Transactions; - - /// <summary> - /// Managed environment. Acts as a gateway for native code. - /// </summary> - [StructLayout(LayoutKind.Sequential)] - internal static class ExceptionUtils - { - /** NoClassDefFoundError fully-qualified class name which is important during startup phase. */ - private const string ClsNoClsDefFoundErr = "java.lang.NoClassDefFoundError"; - - /** NoSuchMethodError fully-qualified class name which is important during startup phase. */ - private const string ClsNoSuchMthdErr = "java.lang.NoSuchMethodError"; - - /** InteropCachePartialUpdateException. */ - private const string ClsCachePartialUpdateErr = "org.apache.ignite.internal.processors.platform.cache.PlatformCachePartialUpdateException"; - - /** Map with predefined exceptions. */ - private static readonly IDictionary<string, ExceptionFactoryDelegate> EXS = new Dictionary<string, ExceptionFactoryDelegate>(); - - /** Exception factory delegate. */ - private delegate Exception ExceptionFactoryDelegate(string msg); - - /// <summary> - /// Static initializer. - /// </summary> - static ExceptionUtils() - { - // Common Java exceptions mapped to common .Net exceptions. - EXS["java.lang.IllegalArgumentException"] = m => new ArgumentException(m); - EXS["java.lang.IllegalStateException"] = m => new InvalidOperationException(m); - EXS["java.lang.UnsupportedOperationException"] = m => new NotImplementedException(m); - EXS["java.lang.InterruptedException"] = m => new ThreadInterruptedException(m); - - // Generic Ignite exceptions. - EXS["org.apache.ignite.IgniteException"] = m => new IgniteException(m); - EXS["org.apache.ignite.IgniteCheckedException"] = m => new IgniteException(m); - - // Cluster exceptions. - EXS["org.apache.ignite.cluster.ClusterGroupEmptyException"] = m => new ClusterGroupEmptyException(m); - EXS["org.apache.ignite.cluster.ClusterTopologyException"] = m => new ClusterTopologyException(m); - - // Compute exceptions. - EXS["org.apache.ignite.compute.ComputeExecutionRejectedException"] = m => new ComputeExecutionRejectedException(m); - EXS["org.apache.ignite.compute.ComputeJobFailoverException"] = m => new ComputeJobFailoverException(m); - EXS["org.apache.ignite.compute.ComputeTaskCancelledException"] = m => new ComputeTaskCancelledException(m); - EXS["org.apache.ignite.compute.ComputeTaskTimeoutException"] = m => new ComputeTaskTimeoutException(m); - EXS["org.apache.ignite.compute.ComputeUserUndeclaredException"] = m => new ComputeUserUndeclaredException(m); - - // Cache exceptions. - EXS["javax.cache.CacheException"] = m => new CacheException(m); - EXS["javax.cache.integration.CacheLoaderException"] = m => new CacheStoreException(m); - EXS["javax.cache.integration.CacheWriterException"] = m => new CacheStoreException(m); - EXS["javax.cache.processor.EntryProcessorException"] = m => new CacheEntryProcessorException(m); - EXS["org.apache.ignite.cache.CacheAtomicUpdateTimeoutException"] = m => new CacheAtomicUpdateTimeoutException(m); - - // Transaction exceptions. - EXS["org.apache.ignite.transactions.TransactionOptimisticException"] = m => new TransactionOptimisticException(m); - EXS["org.apache.ignite.transactions.TransactionTimeoutException"] = m => new TransactionTimeoutException(m); - EXS["org.apache.ignite.transactions.TransactionRollbackException"] = m => new TransactionRollbackException(m); - EXS["org.apache.ignite.transactions.TransactionHeuristicException"] = m => new TransactionHeuristicException(m); - - // Security exceptions. - EXS["org.apache.ignite.IgniteAuthenticationException"] = m => new SecurityException(m); - EXS["org.apache.ignite.plugin.security.GridSecurityException"] = m => new SecurityException(m); - } - - /// <summary> - /// Creates exception according to native code class and message. - /// </summary> - /// <param name="clsName">Exception class name.</param> - /// <param name="msg">Exception message.</param> - /// <param name="reader">Error data reader.</param> - public static Exception GetException(string clsName, string msg, PortableReaderImpl reader = null) - { - ExceptionFactoryDelegate ctor; - - if (EXS.TryGetValue(clsName, out ctor)) - return ctor(msg); - - if (ClsNoClsDefFoundErr.Equals(clsName)) - return new IgniteException("Java class is not found (did you set IGNITE_HOME environment " + - "variable?): " + msg); - - if (ClsNoSuchMthdErr.Equals(clsName)) - return new IgniteException("Java class method is not found (did you set IGNITE_HOME environment " + - "variable?): " + msg); - - if (ClsCachePartialUpdateErr.Equals(clsName)) - return ProcessCachePartialUpdateException(msg, reader); - - return new IgniteException("Java exception occurred [class=" + clsName + ", message=" + msg + ']'); - } - - /// <summary> - /// Process cache partial update exception. - /// </summary> - /// <param name="msg">Message.</param> - /// <param name="reader">Reader.</param> - /// <returns></returns> - private static Exception ProcessCachePartialUpdateException(string msg, PortableReaderImpl reader) - { - if (reader == null) - return new CachePartialUpdateException(msg, new IgniteException("Failed keys are not available.")); - - bool dataExists = reader.ReadBoolean(); - - Debug.Assert(dataExists); - - if (reader.ReadBoolean()) - { - bool keepPortable = reader.ReadBoolean(); - - PortableReaderImpl keysReader = reader.Marshaller.StartUnmarshal(reader.Stream, keepPortable); - - try - { - return new CachePartialUpdateException(msg, ReadNullableList(keysReader)); - } - catch (Exception e) - { - // Failed to deserialize data. - return new CachePartialUpdateException(msg, e); - } - } - - // Was not able to write keys. - string innerErrCls = reader.ReadString(); - string innerErrMsg = reader.ReadString(); - - Exception innerErr = GetException(innerErrCls, innerErrMsg); - - return new CachePartialUpdateException(msg, innerErr); - } - - /// <summary> - /// Create JVM initialization exception. - /// </summary> - /// <param name="clsName">Class name.</param> - /// <param name="msg">Message.</param> - /// <returns>Exception.</returns> - public static Exception GetJvmInitializeException(string clsName, string msg) - { - if (clsName != null) - return new IgniteException("Failed to initialize JVM.", GetException(clsName, msg)); - - if (msg != null) - return new IgniteException("Failed to initialize JVM: " + msg); - - return new IgniteException("Failed to initialize JVM."); - } - - /// <summary> - /// Reads nullable list. - /// </summary> - /// <param name="reader">Reader.</param> - /// <returns>List.</returns> - private static List<object> ReadNullableList(PortableReaderImpl reader) - { - if (!reader.ReadBoolean()) - return null; - - var size = reader.ReadInt(); - - var list = new List<object>(size); - - for (int i = 0; i < size; i++) - list.Add(reader.ReadObject<object>()); - - return list; - } - } -} http://git-wip-us.apache.org/repos/asf/ignite/blob/f0bac562/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Handle/Handle.cs ---------------------------------------------------------------------- diff --git a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Handle/Handle.cs b/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Handle/Handle.cs deleted file mode 100644 index 0168963..0000000 --- a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Handle/Handle.cs +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -namespace Apache.Ignite.Core.Impl.Handle -{ - using System; - using System.Threading; - - /// <summary> - /// Wrapper over some resource ensuring it's release. - /// </summary> - public class Handle<T> : IHandle - { - /** Target.*/ - private readonly T _target; - - /** Release action. */ - private readonly Action<T> _releaseAction; - - /** Release flag. */ - private int _released; - - /// <summary> - /// Constructor. - /// </summary> - /// <param name="target">Target.</param> - /// <param name="releaseAction">Release action.</param> - public Handle(T target, Action<T> releaseAction) - { - _target = target; - _releaseAction = releaseAction; - } - - /// <summary> - /// Target. - /// </summary> - public T Target - { - get { return _target; } - } - - /** <inheritdoc /> */ - public void Release() - { - if (Interlocked.CompareExchange(ref _released, 1, 0) == 0) - _releaseAction(_target); - } - - /** <inheritdoc /> */ - public bool Released - { - get { return Thread.VolatileRead(ref _released) == 1; } - } - } -} http://git-wip-us.apache.org/repos/asf/ignite/blob/f0bac562/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Handle/HandleRegistry.cs ---------------------------------------------------------------------- diff --git a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Handle/HandleRegistry.cs b/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Handle/HandleRegistry.cs deleted file mode 100644 index 9c8178f..0000000 --- a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Handle/HandleRegistry.cs +++ /dev/null @@ -1,340 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -namespace Apache.Ignite.Core.Impl.Handle -{ - using System; - using System.Collections.Concurrent; - using System.Collections.Generic; - using System.Linq; - using System.Threading; - - /// <summary> - /// Resource registry. - /// </summary> - public class HandleRegistry - { - /** Default critical resources capacity. */ - internal const int DfltFastCap = 1024; - - /** Array for fast-path. */ - private readonly object[] _fast; - - /** Dictionery for slow-path. */ - private readonly ConcurrentDictionary<long, object> _slow; - - /** Capacity of fast array. */ - private readonly int _fastCap; - - /** Counter for fast-path. */ - private int _fastCtr; - - /** Counter for slow-path. */ - private long _slowCtr; - - /** Close flag. */ - private int _closed; - - /// <summary> - /// Constructor. - /// </summary> - public HandleRegistry() : this(DfltFastCap) - { - // No-op. - } - - /// <summary> - /// Constructor. - /// </summary> - /// <param name="fastCap">Amount of critical resources this registry can allocate in "fast" mode.</param> - public HandleRegistry(int fastCap) - { - _fastCap = fastCap; - _fast = new object[fastCap]; - - _slow = new ConcurrentDictionary<long, object>(); - _slowCtr = fastCap; - } - - /// <summary> - /// Allocate a handle for resource. - /// </summary> - /// <param name="target">Target.</param> - /// <returns>Pointer.</returns> - public long Allocate(object target) - { - return Allocate0(target, false, false); - } - - /// <summary> - /// Allocate a handle in safe mode. - /// </summary> - /// <param name="target">Target.</param> - /// <returns>Pointer.</returns> - public long AllocateSafe(object target) - { - return Allocate0(target, false, true); - } - - /// <summary> - /// Allocate a handle for critical resource. - /// </summary> - /// <param name="target">Target.</param> - /// <returns>Pointer.</returns> - public long AllocateCritical(object target) - { - return Allocate0(target, true, false); - } - - /// <summary> - /// Allocate a handle for critical resource in safe mode. - /// </summary> - /// <param name="target">Target.</param> - /// <returns>Pointer.</returns> - public long AllocateCriticalSafe(object target) - { - return Allocate0(target, true, true); - } - - /// <summary> - /// Internal allocation routine. - /// </summary> - /// <param name="target">Target.</param> - /// <param name="critical">Critical flag.</param> - /// <param name="safe">Safe flag.</param> - /// <returns>Pointer.</returns> - private long Allocate0(object target, bool critical, bool safe) - { - if (Closed) - throw ClosedException(); - - // Try allocating on critical path. - if (critical) - { - if (_fastCtr < _fastCap) // Non-volatile read could yield in old value, but increment resolves this. - { - int fastIdx = Interlocked.Increment(ref _fastCtr); - - if (fastIdx < _fastCap) - { - Thread.VolatileWrite(ref _fast[fastIdx], target); - - if (safe && Closed) - { - Thread.VolatileWrite(ref _fast[fastIdx], null); - - Release0(target, true); - - throw ClosedException(); - } - - return fastIdx; - } - } - } - - // Critical allocation failed, fallback to slow mode. - long slowIdx = Interlocked.Increment(ref _slowCtr); - - _slow[slowIdx] = target; - - if (safe && Closed) - { - _slow[slowIdx] = null; - - Release0(target, true); - - throw ClosedException(); - } - - return slowIdx; - } - - - /// <summary> - /// Release handle. - /// </summary> - /// <param name="id">Identifier.</param> - /// <param name="quiet">Whether release must be quiet or not.</param> - public void Release(long id, bool quiet = false) - { - if (id < _fastCap) - { - object target = Thread.VolatileRead(ref _fast[id]); - - if (target != null) - { - Thread.VolatileWrite(ref _fast[id], null); - - Release0(target, quiet); - } - } - else - { - object target; - - if (_slow.TryRemove(id, out target)) - Release0(target, quiet); - } - } - - /// <summary> - /// Internal release routine. - /// </summary> - /// <param name="target">Target.</param> - /// <param name="quiet">Whether release must be quiet or not.</param> - private static void Release0(object target, bool quiet) - { - IHandle target0 = target as IHandle; - - if (target0 != null) - { - if (quiet) - { - try - { - target0.Release(); - } - catch (Exception) - { - // No-op. - } - } - else - target0.Release(); - } - } - - /// <summary> - /// Gets handle target. - /// </summary> - /// <param name="id">Identifier.</param> - /// <returns>Target.</returns> - public T Get<T>(long id) - { - return Get<T>(id, false); - } - - /// <summary> - /// Gets handle target. - /// </summary> - /// <param name="id">Identifier.</param> - /// <param name="throwOnAbsent">Whether to throw an exception if resource is not found.</param> - /// <returns>Target.</returns> - public T Get<T>(long id, bool throwOnAbsent) - { - object target; - - if (id < _fastCap) - { - target = Thread.VolatileRead(ref _fast[id]); - - if (target != null) - return (T)target; - } - else - { - if (_slow.TryGetValue(id, out target)) - return (T) target; - } - - if (throwOnAbsent) - throw new InvalidOperationException("Resource handle has been released (is Ignite stopping?)."); - - return default(T); - } - - /// <summary> - /// Close the registry. All resources allocated at the moment of close are - /// guaranteed to be released. - /// </summary> - public void Close() - { - if (Interlocked.CompareExchange(ref _closed, 1, 0) == 0) - { - // Cleanup on fast-path. - for (int i = 0; i < _fastCap; i++) - { - object target = Thread.VolatileRead(ref _fast[i]); - - if (target != null) - { - Thread.VolatileWrite(ref _fast[i], null); - - Release0(target, true); - } - } - - // Cleanup on slow-path. - foreach (var item in _slow) - { - object target = item.Value; - - if (target != null) - Release0(target, true); - } - - _slow.Clear(); - } - } - - /// <summary> - /// Closed flag. - /// </summary> - public bool Closed - { - get { return Thread.VolatileRead(ref _closed) == 1; } - } - - /// <summary> - /// Gets the current handle count. - /// </summary> - public int Count - { - get - { - Thread.MemoryBarrier(); - - return _fast.Count(x => x != null) + _slow.Count; - } - } - - /// <summary> - /// Gets a snapshot of currently referenced objects list. - /// </summary> - public List<KeyValuePair<long, object>> GetItems() - { - Thread.MemoryBarrier(); - - return - _fast.Select((x, i) => new KeyValuePair<long, object>(i, x)) - .Where(x => x.Value != null) - .Concat(_slow) - .ToList(); - } - - /// <summary> - /// Create new exception for closed state. - /// </summary> - /// <returns>Exception.</returns> - private static Exception ClosedException() - { - return new InvalidOperationException("Cannot allocate a resource handle because Ignite is stopping."); - } - } -} - \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/f0bac562/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Handle/IHandle.cs ---------------------------------------------------------------------- diff --git a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Handle/IHandle.cs b/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Handle/IHandle.cs deleted file mode 100644 index d147f8b..0000000 --- a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Handle/IHandle.cs +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -namespace Apache.Ignite.Core.Impl.Handle -{ - /// <summary> - /// Wrapper over some resource ensuring it's release. - /// </summary> - public interface IHandle - { - /// <summary> - /// Release the resource. - /// </summary> - void Release(); - - /// <summary> - /// Resource released flag. - /// </summary> - bool Released { get; } - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/f0bac562/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/IInteropCallback.cs ---------------------------------------------------------------------- diff --git a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/IInteropCallback.cs b/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/IInteropCallback.cs deleted file mode 100644 index 91838d0..0000000 --- a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/IInteropCallback.cs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -namespace Apache.Ignite.Core.Impl -{ - using Apache.Ignite.Core.Impl.Portable.IO; - - /// <summary> - /// Interop callback. - /// </summary> - internal interface IInteropCallback - { - /// <summary> - /// Invokes callback. - /// </summary> - /// <param name="stream">Stream.</param> - /// <returns>Invocation result.</returns> - int Invoke(IPortableStream stream); - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/f0bac562/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Ignite.cs ---------------------------------------------------------------------- diff --git a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Ignite.cs b/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Ignite.cs deleted file mode 100644 index 5f764c1..0000000 --- a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/Ignite.cs +++ /dev/null @@ -1,511 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -namespace Apache.Ignite.Core.Impl -{ - using System; - using System.Collections.Concurrent; - using System.Collections.Generic; - using System.Diagnostics; - using System.Linq; - using Apache.Ignite.Core.Cache; - using Apache.Ignite.Core.Cluster; - 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.Cluster; - using Apache.Ignite.Core.Impl.Common; - using Apache.Ignite.Core.Impl.Datastream; - using Apache.Ignite.Core.Impl.Handle; - using Apache.Ignite.Core.Impl.Portable; - using Apache.Ignite.Core.Impl.Transactions; - using Apache.Ignite.Core.Impl.Unmanaged; - using Apache.Ignite.Core.Lifecycle; - using Apache.Ignite.Core.Messaging; - using Apache.Ignite.Core.Portable; - using Apache.Ignite.Core.Services; - using Apache.Ignite.Core.Transactions; - using UU = Apache.Ignite.Core.Impl.Unmanaged.UnmanagedUtils; - - /// <summary> - /// Native Ignite wrapper. - /// </summary> - internal class Ignite : IIgnite, IClusterGroupEx, ICluster - { - /** */ - private readonly IgniteConfiguration _cfg; - - /** Grid name. */ - private readonly string _name; - - /** Unmanaged node. */ - private readonly IUnmanagedTarget _proc; - - /** Marshaller. */ - private readonly PortableMarshaller _marsh; - - /** Initial projection. */ - private readonly ClusterGroupImpl _prj; - - /** Portables. */ - private readonly PortablesImpl _portables; - - /** Cached proxy. */ - private readonly IgniteProxy _proxy; - - /** Lifecycle beans. */ - private readonly IList<LifecycleBeanHolder> _lifecycleBeans; - - /** Local node. */ - private IClusterNode _locNode; - - /** Transactions facade. */ - private readonly Lazy<TransactionsImpl> _transactions; - - /** Callbacks */ - private readonly UnmanagedCallbacks _cbs; - - /** Node info cache. */ - - private readonly ConcurrentDictionary<Guid, ClusterNodeImpl> _nodes = - new ConcurrentDictionary<Guid, ClusterNodeImpl>(); - - /// <summary> - /// Constructor. - /// </summary> - /// <param name="cfg">Configuration.</param> - /// <param name="name">Grid name.</param> - /// <param name="proc">Interop processor.</param> - /// <param name="marsh">Marshaller.</param> - /// <param name="lifecycleBeans">Lifecycle beans.</param> - /// <param name="cbs">Callbacks.</param> - public Ignite(IgniteConfiguration cfg, string name, IUnmanagedTarget proc, PortableMarshaller marsh, - IList<LifecycleBeanHolder> lifecycleBeans, UnmanagedCallbacks cbs) - { - Debug.Assert(cfg != null); - Debug.Assert(proc != null); - Debug.Assert(marsh != null); - Debug.Assert(lifecycleBeans != null); - Debug.Assert(cbs != null); - - _cfg = cfg; - _name = name; - _proc = proc; - _marsh = marsh; - _lifecycleBeans = lifecycleBeans; - _cbs = cbs; - - marsh.Ignite = this; - - _prj = new ClusterGroupImpl(proc, UU.ProcessorProjection(proc), marsh, this, null); - - _portables = new PortablesImpl(marsh); - - _proxy = new IgniteProxy(this); - - cbs.Initialize(this); - - // Grid is not completely started here, can't initialize interop transactions right away. - _transactions = new Lazy<TransactionsImpl>( - () => new TransactionsImpl(UU.ProcessorTransactions(proc), marsh, GetLocalNode().Id)); - } - - /// <summary> - /// On-start routine. - /// </summary> - internal void OnStart() - { - foreach (var lifecycleBean in _lifecycleBeans) - lifecycleBean.OnStart(this); - } - - /// <summary> - /// Gets Ignite proxy. - /// </summary> - /// <returns>Proxy.</returns> - public IgniteProxy Proxy - { - get { return _proxy; } - } - - /** <inheritdoc /> */ - public string Name - { - get { return _name; } - } - - /** <inheritdoc /> */ - - public ICluster GetCluster() - { - return this; - } - - /** <inheritdoc /> */ - IIgnite IClusterGroup.Ignite - { - get { return this; } - } - - /** <inheritdoc /> */ - public IClusterGroup ForLocal() - { - return _prj.ForNodes(GetLocalNode()); - } - - /** <inheritdoc /> */ - public ICompute GetCompute() - { - return _prj.GetCompute(); - } - - /** <inheritdoc /> */ - public IClusterGroup ForNodes(IEnumerable<IClusterNode> nodes) - { - return ((IClusterGroup) _prj).ForNodes(nodes); - } - - /** <inheritdoc /> */ - public IClusterGroup ForNodes(params IClusterNode[] nodes) - { - return _prj.ForNodes(nodes); - } - - /** <inheritdoc /> */ - public IClusterGroup ForNodeIds(IEnumerable<Guid> ids) - { - return ((IClusterGroup) _prj).ForNodeIds(ids); - } - - /** <inheritdoc /> */ - public IClusterGroup ForNodeIds(ICollection<Guid> ids) - { - return _prj.ForNodeIds(ids); - } - - /** <inheritdoc /> */ - public IClusterGroup ForNodeIds(params Guid[] ids) - { - return _prj.ForNodeIds(ids); - } - - /** <inheritdoc /> */ - public IClusterGroup ForPredicate(Func<IClusterNode, bool> p) - { - IgniteArgumentCheck.NotNull(p, "p"); - - return _prj.ForPredicate(p); - } - - /** <inheritdoc /> */ - public IClusterGroup ForAttribute(string name, string val) - { - return _prj.ForAttribute(name, val); - } - - /** <inheritdoc /> */ - public IClusterGroup ForCacheNodes(string name) - { - return _prj.ForCacheNodes(name); - } - - /** <inheritdoc /> */ - public IClusterGroup ForDataNodes(string name) - { - return _prj.ForDataNodes(name); - } - - /** <inheritdoc /> */ - public IClusterGroup ForClientNodes(string name) - { - return _prj.ForClientNodes(name); - } - - /** <inheritdoc /> */ - public IClusterGroup ForRemotes() - { - return _prj.ForRemotes(); - } - - /** <inheritdoc /> */ - public IClusterGroup ForHost(IClusterNode node) - { - IgniteArgumentCheck.NotNull(node, "node"); - - return _prj.ForHost(node); - } - - /** <inheritdoc /> */ - public IClusterGroup ForRandom() - { - return _prj.ForRandom(); - } - - /** <inheritdoc /> */ - public IClusterGroup ForOldest() - { - return _prj.ForOldest(); - } - - /** <inheritdoc /> */ - public IClusterGroup ForYoungest() - { - return _prj.ForYoungest(); - } - - /** <inheritdoc /> */ - public IClusterGroup ForDotNet() - { - return _prj.ForDotNet(); - } - - /** <inheritdoc /> */ - public ICollection<IClusterNode> GetNodes() - { - return _prj.GetNodes(); - } - - /** <inheritdoc /> */ - public IClusterNode GetNode(Guid id) - { - return _prj.GetNode(id); - } - - /** <inheritdoc /> */ - public IClusterNode GetNode() - { - return _prj.GetNode(); - } - - /** <inheritdoc /> */ - public IClusterMetrics GetMetrics() - { - return _prj.GetMetrics(); - } - - /** <inheritdoc /> */ - public void Dispose() - { - Ignition.Stop(Name, true); - } - - /// <summary> - /// Internal stop routine. - /// </summary> - /// <param name="cancel">Cancel flag.</param> - internal unsafe void Stop(bool cancel) - { - UU.IgnitionStop(_proc.Context, Name, cancel); - - _cbs.Cleanup(); - - foreach (var bean in _lifecycleBeans) - bean.OnLifecycleEvent(LifecycleEventType.AfterNodeStop); - } - - /** <inheritdoc /> */ - public ICache<TK, TV> GetCache<TK, TV>(string name) - { - return Cache<TK, TV>(UU.ProcessorCache(_proc, name)); - } - - /** <inheritdoc /> */ - public ICache<TK, TV> GetOrCreateCache<TK, TV>(string name) - { - return Cache<TK, TV>(UU.ProcessorGetOrCreateCache(_proc, name)); - } - - /** <inheritdoc /> */ - public ICache<TK, TV> CreateCache<TK, TV>(string name) - { - return Cache<TK, TV>(UU.ProcessorCreateCache(_proc, name)); - } - - /// <summary> - /// Gets cache from specified native cache object. - /// </summary> - /// <param name="nativeCache">Native cache.</param> - /// <param name="keepPortable">Portable flag.</param> - /// <returns> - /// New instance of cache wrapping specified native cache. - /// </returns> - public ICache<TK, TV> Cache<TK, TV>(IUnmanagedTarget nativeCache, bool keepPortable = false) - { - var cacheImpl = new CacheImpl<TK, TV>(this, nativeCache, _marsh, false, keepPortable, false, false); - - return new CacheProxyImpl<TK, TV>(cacheImpl); - } - - /** <inheritdoc /> */ - public IClusterNode GetLocalNode() - { - return _locNode ?? (_locNode = GetNodes().FirstOrDefault(x => x.IsLocal)); - } - - /** <inheritdoc /> */ - public bool PingNode(Guid nodeId) - { - return _prj.PingNode(nodeId); - } - - /** <inheritdoc /> */ - public long TopologyVersion - { - get { return _prj.TopologyVersion; } - } - - /** <inheritdoc /> */ - public ICollection<IClusterNode> GetTopology(long ver) - { - return _prj.Topology(ver); - } - - /** <inheritdoc /> */ - public void ResetMetrics() - { - UU.ProjectionResetMetrics(_prj.Target); - } - - /** <inheritdoc /> */ - public IDataStreamer<TK, TV> GetDataStreamer<TK, TV>(string cacheName) - { - return new DataStreamerImpl<TK, TV>(UU.ProcessorDataStreamer(_proc, cacheName, false), - _marsh, cacheName, false); - } - - /** <inheritdoc /> */ - public IPortables GetPortables() - { - return _portables; - } - - /** <inheritdoc /> */ - public ICacheAffinity GetAffinity(string cacheName) - { - return new CacheAffinityImpl(UU.ProcessorAffinity(_proc, cacheName), _marsh, false, this); - } - - /** <inheritdoc /> */ - - public ITransactions GetTransactions() - { - return _transactions.Value; - } - - /** <inheritdoc /> */ - public IMessaging GetMessaging() - { - return _prj.GetMessaging(); - } - - /** <inheritdoc /> */ - public IEvents GetEvents() - { - return _prj.GetEvents(); - } - - /** <inheritdoc /> */ - public IServices GetServices() - { - return _prj.GetServices(); - } - - /// <summary> - /// Gets internal projection. - /// </summary> - /// <returns>Projection.</returns> - internal ClusterGroupImpl ClusterGroup - { - get { return _prj; } - } - - /// <summary> - /// Marshaller. - /// </summary> - internal PortableMarshaller Marshaller - { - get { return _marsh; } - } - - /// <summary> - /// Configuration. - /// </summary> - internal IgniteConfiguration Configuration - { - get { return _cfg; } - } - - /// <summary> - /// Put metadata to Grid. - /// </summary> - /// <param name="metas">Metadata.</param> - internal void PutMetadata(IDictionary<int, IPortableMetadata> metas) - { - _prj.PutMetadata(metas); - } - - /** <inheritDoc /> */ - public IPortableMetadata Metadata(int typeId) - { - return _prj.Metadata(typeId); - } - - /// <summary> - /// Handle registry. - /// </summary> - public HandleRegistry HandleRegistry - { - get { return _cbs.HandleRegistry; } - } - - /// <summary> - /// Updates the node information from stream. - /// </summary> - /// <param name="memPtr">Stream ptr.</param> - public void UpdateNodeInfo(long memPtr) - { - var stream = IgniteManager.Memory.Get(memPtr).Stream(); - - IPortableRawReader reader = Marshaller.StartUnmarshal(stream, false); - - var node = new ClusterNodeImpl(reader); - - node.Init(this); - - _nodes[node.Id] = node; - } - - /// <summary> - /// Gets the node from cache. - /// </summary> - /// <param name="id">Node id.</param> - /// <returns>Cached node.</returns> - public ClusterNodeImpl GetNode(Guid? id) - { - return id == null ? null : _nodes[id.Value]; - } - - /// <summary> - /// Gets the interop processor. - /// </summary> - internal IUnmanagedTarget InteropProcessor - { - get { return _proc; } - } - } -} http://git-wip-us.apache.org/repos/asf/ignite/blob/f0bac562/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/IgniteConfigurationEx.cs ---------------------------------------------------------------------- diff --git a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/IgniteConfigurationEx.cs b/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/IgniteConfigurationEx.cs deleted file mode 100644 index 358e805..0000000 --- a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/IgniteConfigurationEx.cs +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -namespace Apache.Ignite.Core.Impl -{ - /// <summary> - /// Internal extensions for IgniteConfiguration. - /// </summary> - internal class IgniteConfigurationEx : IgniteConfiguration - { - /// <summary> - /// Default constructor. - /// </summary> - public IgniteConfigurationEx() - { - // No-op. - } - - /// <summary> - /// Copying constructor. - /// </summary> - /// <param name="cfg">Configuration.</param> - public IgniteConfigurationEx(IgniteConfiguration cfg) : base(cfg) - { - // No-op. - } - - /// <summary> - /// Copying constructor. - /// </summary> - /// <param name="cfg">Configuration.</param> - public IgniteConfigurationEx(IgniteConfigurationEx cfg) - : this((IgniteConfiguration) cfg) - { - GridName = cfg.GridName; - } - - /// <summary> - /// Grid name which is used if not provided in configuration file. - /// </summary> - public string GridName { get; set; } - } -} http://git-wip-us.apache.org/repos/asf/ignite/blob/f0bac562/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/IgniteManager.cs ---------------------------------------------------------------------- diff --git a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/IgniteManager.cs b/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/IgniteManager.cs deleted file mode 100644 index 8fd8825..0000000 --- a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/IgniteManager.cs +++ /dev/null @@ -1,490 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -namespace Apache.Ignite.Core.Impl -{ - using System; - using System.Collections.Generic; - using System.Diagnostics.CodeAnalysis; - using System.IO; - using System.Linq; - using System.Reflection; - using System.Runtime.InteropServices; - using System.Text; - using Apache.Ignite.Core.Common; - using Apache.Ignite.Core.Impl.Memory; - using Apache.Ignite.Core.Impl.Unmanaged; - using UU = Apache.Ignite.Core.Impl.Unmanaged.UnmanagedUtils; - - /// <summary> - /// Native interface manager. - /// </summary> - internal static unsafe class IgniteManager - { - /** Environment variable: IGNITE_HOME. */ - internal const string EnvIgniteHome = "IGNITE_HOME"; - - /** Environment variable: whether to set test classpath or not. */ - internal const string EnvIgniteNativeTestClasspath = "IGNITE_NATIVE_TEST_CLASSPATH"; - - /** Classpath prefix. */ - private const string ClasspathPrefix = "-Djava.class.path="; - - /** Java Command line argument: Xms. Case sensitive. */ - private const string CmdJvmMinMemJava = "-Xms"; - - /** Java Command line argument: Xmx. Case sensitive. */ - private const string CmdJvmMaxMemJava = "-Xmx"; - - /** Monitor for DLL load synchronization. */ - private static readonly object SyncRoot = new object(); - - /** First created context. */ - private static void* _ctx; - - /** Configuration used on JVM start. */ - private static JvmConfiguration _jvmCfg; - - /** Memory manager. */ - private static PlatformMemoryManager _mem; - - /// <summary> - /// Static initializer. - /// </summary> - static IgniteManager() - { - // No-op. - } - - /// <summary> - /// Create JVM. - /// </summary> - /// <param name="cfg">Configuration.</param> - /// <param name="cbs">Callbacks.</param> - /// <returns>Context.</returns> - internal static void* GetContext(IgniteConfiguration cfg, UnmanagedCallbacks cbs) - { - lock (SyncRoot) - { - // 1. Warn about possible configuration inconsistency. - JvmConfiguration jvmCfg = JvmConfig(cfg); - - if (!cfg.SuppressWarnings && _jvmCfg != null) - { - if (!_jvmCfg.Equals(jvmCfg)) - { - Console.WriteLine("Attempting to start Ignite node with different Java " + - "configuration; current Java configuration will be ignored (consider " + - "starting node in separate process) [oldConfig=" + _jvmCfg + - ", newConfig=" + jvmCfg + ']'); - } - } - - // 2. Create unmanaged pointer. - void* ctx = CreateJvm(cfg, cbs); - - cbs.SetContext(ctx); - - // 3. If this is the first JVM created, preserve it. - if (_ctx == null) - { - _ctx = ctx; - _jvmCfg = jvmCfg; - _mem = new PlatformMemoryManager(1024); - } - - return ctx; - } - } - - /// <summary> - /// Memory manager attached to currently running JVM. - /// </summary> - internal static PlatformMemoryManager Memory - { - get { return _mem; } - } - - /// <summary> - /// Destroy JVM. - /// </summary> - public static void DestroyJvm() - { - lock (SyncRoot) - { - if (_ctx != null) - { - UU.DestroyJvm(_ctx); - - _ctx = null; - } - } - } - - /// <summary> - /// Create JVM. - /// </summary> - /// <returns>JVM.</returns> - private static void* CreateJvm(IgniteConfiguration cfg, UnmanagedCallbacks cbs) - { - var ggHome = GetIgniteHome(cfg); - - var cp = CreateClasspath(ggHome, cfg, false); - - var jvmOpts = GetMergedJvmOptions(cfg); - - var hasGgHome = !string.IsNullOrWhiteSpace(ggHome); - - var opts = new sbyte*[1 + jvmOpts.Count + (hasGgHome ? 1 : 0)]; - - int idx = 0; - - opts[idx++] = IgniteUtils.StringToUtf8Unmanaged(cp); - - if (hasGgHome) - opts[idx++] = IgniteUtils.StringToUtf8Unmanaged("-DIGNITE_HOME=" + ggHome); - - foreach (string cfgOpt in jvmOpts) - opts[idx++] = IgniteUtils.StringToUtf8Unmanaged(cfgOpt); - - try - { - IntPtr mem = Marshal.AllocHGlobal(opts.Length * 8); - - fixed (sbyte** opts0 = opts) - { - PlatformMemoryUtils.CopyMemory(opts0, mem.ToPointer(), opts.Length * 8); - } - - try - { - return UU.CreateContext(mem.ToPointer(), opts.Length, cbs.CallbacksPointer); - } - finally - { - Marshal.FreeHGlobal(mem); - } - } - finally - { - foreach (sbyte* opt in opts) - Marshal.FreeHGlobal((IntPtr)opt); - } - } - - /// <summary> - /// Gets JvmOptions collection merged with individual properties (Min/Max mem, etc) according to priority. - /// </summary> - private static IList<string> GetMergedJvmOptions(IgniteConfiguration cfg) - { - var jvmOpts = cfg.JvmOptions == null ? new List<string>() : cfg.JvmOptions.ToList(); - - // JvmInitialMemoryMB / JvmMaxMemoryMB have lower priority than CMD_JVM_OPT - if (!jvmOpts.Any(opt => opt.StartsWith(CmdJvmMinMemJava, StringComparison.OrdinalIgnoreCase))) - jvmOpts.Add(string.Format("{0}{1}m", CmdJvmMinMemJava, cfg.JvmInitialMemoryMb)); - - if (!jvmOpts.Any(opt => opt.StartsWith(CmdJvmMaxMemJava, StringComparison.OrdinalIgnoreCase))) - jvmOpts.Add(string.Format("{0}{1}m", CmdJvmMaxMemJava, cfg.JvmMaxMemoryMb)); - - return jvmOpts; - } - - /// <summary> - /// Create JVM configuration value object. - /// </summary> - /// <param name="cfg">Configuration.</param> - /// <returns>JVM configuration.</returns> - private static JvmConfiguration JvmConfig(IgniteConfiguration cfg) - { - return new JvmConfiguration - { - Home = cfg.IgniteHome, - Dll = cfg.JvmDllPath, - Classpath = cfg.JvmClasspath, - Options = cfg.JvmOptions - }; - } - - /// <summary> - /// Append jars from the given path. - /// </summary> - /// <param name="path">Path.</param> - /// <param name="cpStr">Classpath string builder.</param> - private static void AppendJars(string path, StringBuilder cpStr) - { - if (Directory.Exists(path)) - { - foreach (string jar in Directory.EnumerateFiles(path, "*.jar")) - { - cpStr.Append(jar); - cpStr.Append(';'); - } - } - } - - /// <summary> - /// Calculate Ignite home. - /// </summary> - /// <param name="cfg">Configuration.</param> - /// <returns></returns> - internal static string GetIgniteHome(IgniteConfiguration cfg) - { - var home = cfg == null ? null : cfg.IgniteHome; - - if (string.IsNullOrWhiteSpace(home)) - home = Environment.GetEnvironmentVariable(EnvIgniteHome); - else if (!IsIgniteHome(new DirectoryInfo(home))) - throw new IgniteException(string.Format("IgniteConfiguration.IgniteHome is not valid: '{0}'", home)); - - if (string.IsNullOrWhiteSpace(home)) - home = ResolveIgniteHome(); - else if (!IsIgniteHome(new DirectoryInfo(home))) - throw new IgniteException(string.Format("{0} is not valid: '{1}'", EnvIgniteHome, home)); - - return home; - } - - /// <summary> - /// Automatically resolve Ignite home directory. - /// </summary> - /// <returns>Ignite home directory.</returns> - private static string ResolveIgniteHome() - { - var probeDirs = new[] - { - Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), - Directory.GetCurrentDirectory() - }; - - foreach (var probeDir in probeDirs.Where(x => !string.IsNullOrEmpty(x))) - { - var dir = new DirectoryInfo(probeDir); - - while (dir != null) - { - if (IsIgniteHome(dir)) - return dir.FullName; - - dir = dir.Parent; - } - } - - return null; - } - - /// <summary> - /// Determines whether specified dir looks like a Ignite home. - /// </summary> - /// <param name="dir">Directory.</param> - /// <returns>Value indicating whether specified dir looks like a Ignite home.</returns> - private static bool IsIgniteHome(DirectoryInfo dir) - { - return dir.Exists && dir.EnumerateDirectories().Count(x => x.Name == "examples" || x.Name == "bin") == 2; - } - - /// <summary> - /// Creates classpath from the given configuration, or default classpath if given config is null. - /// </summary> - /// <param name="cfg">The configuration.</param> - /// <param name="forceTestClasspath">Append test directories even if <see cref="EnvIgniteNativeTestClasspath" /> is not set.</param> - /// <returns> - /// Classpath string. - /// </returns> - internal static string CreateClasspath(IgniteConfiguration cfg = null, bool forceTestClasspath = false) - { - return CreateClasspath(GetIgniteHome(cfg), cfg, forceTestClasspath); - } - - /// <summary> - /// Creates classpath from the given configuration, or default classpath if given config is null. - /// </summary> - /// <param name="ggHome">The home dir.</param> - /// <param name="cfg">The configuration.</param> - /// <param name="forceTestClasspath">Append test directories even if - /// <see cref="EnvIgniteNativeTestClasspath" /> is not set.</param> - /// <returns> - /// Classpath string. - /// </returns> - private static string CreateClasspath(string ggHome, IgniteConfiguration cfg, bool forceTestClasspath) - { - var cpStr = new StringBuilder(); - - if (cfg != null && cfg.JvmClasspath != null) - { - cpStr.Append(cfg.JvmClasspath); - - if (!cfg.JvmClasspath.EndsWith(";")) - cpStr.Append(';'); - } - - if (!string.IsNullOrWhiteSpace(ggHome)) - AppendHomeClasspath(ggHome, forceTestClasspath, cpStr); - - return ClasspathPrefix + cpStr; - } - - /// <summary> - /// Appends classpath from home directory, if it is defined. - /// </summary> - /// <param name="ggHome">The home dir.</param> - /// <param name="forceTestClasspath">Append test directories even if - /// <see cref="EnvIgniteNativeTestClasspath"/> is not set.</param> - /// <param name="cpStr">The classpath string.</param> - private static void AppendHomeClasspath(string ggHome, bool forceTestClasspath, StringBuilder cpStr) - { - // Append test directories (if needed) first, because otherwise build *.jar will be picked first. - if (forceTestClasspath || "true".Equals(Environment.GetEnvironmentVariable(EnvIgniteNativeTestClasspath))) - { - AppendTestClasses(ggHome + "\\examples", cpStr); - AppendTestClasses(ggHome + "\\modules", cpStr); - } - - string ggLibs = ggHome + "\\libs"; - - AppendJars(ggLibs, cpStr); - - if (Directory.Exists(ggLibs)) - { - foreach (string dir in Directory.EnumerateDirectories(ggLibs)) - { - if (!dir.EndsWith("optional")) - AppendJars(dir, cpStr); - } - } - } - - /// <summary> - /// Append target (compile) directories to classpath (for testing purposes only). - /// </summary> - /// <param name="path">Path</param> - /// <param name="cp">Classpath builder.</param> - private static void AppendTestClasses(string path, StringBuilder cp) - { - if (Directory.Exists(path)) - { - AppendTestClasses0(path, cp); - - foreach (string moduleDir in Directory.EnumerateDirectories(path)) - AppendTestClasses0(moduleDir, cp); - } - } - - /// <summary> - /// Internal routine to append classes and jars from eploded directory. - /// </summary> - /// <param name="path">Path.</param> - /// <param name="cp">Classpath builder.</param> - private static void AppendTestClasses0(string path, StringBuilder cp) - { - if (path.EndsWith("rest-http", StringComparison.OrdinalIgnoreCase)) - return; - - if (Directory.Exists(path + "\\target\\classes")) - cp.Append(path + "\\target\\classes;"); - - if (Directory.Exists(path + "\\target\\test-classes")) - cp.Append(path + "\\target\\test-classes;"); - - if (Directory.Exists(path + "\\target\\libs")) - AppendJars(path + "\\target\\libs", cp); - } - - /// <summary> - /// JVM configuration. - /// </summary> - private class JvmConfiguration - { - /// <summary> - /// Gets or sets the home. - /// </summary> - public string Home { get; set; } - - /// <summary> - /// Gets or sets the DLL. - /// </summary> - public string Dll { get; set; } - - /// <summary> - /// Gets or sets the cp. - /// </summary> - public string Classpath { get; set; } - - /// <summary> - /// Gets or sets the options. - /// </summary> - public ICollection<string> Options { get; set; } - - /** <inheritDoc /> */ - public override int GetHashCode() - { - return 0; - } - - /** <inheritDoc /> */ - [SuppressMessage("ReSharper", "FunctionComplexityOverflow")] - public override bool Equals(object obj) - { - JvmConfiguration other = obj as JvmConfiguration; - - if (other == null) - return false; - - if (!string.Equals(Home, other.Home, StringComparison.OrdinalIgnoreCase)) - return false; - - if (!string.Equals(Classpath, other.Classpath, StringComparison.OrdinalIgnoreCase)) - return false; - - if (!string.Equals(Dll, other.Dll, StringComparison.OrdinalIgnoreCase)) - return false; - - return (Options == null && other.Options == null) || - (Options != null && other.Options != null && Options.Count == other.Options.Count - && !Options.Except(other.Options).Any()); - } - - /** <inheritDoc /> */ - public override string ToString() - { - var sb = new StringBuilder("[IgniteHome=" + Home + ", JvmDllPath=" + Dll); - - if (Options != null && Options.Count > 0) - { - sb.Append(", JvmOptions=["); - - bool first = true; - - foreach (string opt in Options) - { - if (first) - first = false; - else - sb.Append(", "); - - sb.Append(opt); - } - - sb.Append(']'); - } - - sb.Append(", Classpath=" + Classpath + ']'); - - return sb.ToString(); - } - } - } -} http://git-wip-us.apache.org/repos/asf/ignite/blob/f0bac562/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/IgniteProxy.cs ---------------------------------------------------------------------- diff --git a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/IgniteProxy.cs b/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/IgniteProxy.cs deleted file mode 100644 index 2e01a5b..0000000 --- a/modules/platform/src/main/dotnet/Apache.Ignite.Core/Impl/IgniteProxy.cs +++ /dev/null @@ -1,333 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -namespace Apache.Ignite.Core.Impl -{ - using System; - using System.Collections.Generic; - using Apache.Ignite.Core.Cache; - using Apache.Ignite.Core.Cluster; - using Apache.Ignite.Core.Compute; - using Apache.Ignite.Core.Datastream; - using Apache.Ignite.Core.Events; - using Apache.Ignite.Core.Impl.Cluster; - using Apache.Ignite.Core.Impl.Portable; - using Apache.Ignite.Core.Messaging; - using Apache.Ignite.Core.Portable; - using Apache.Ignite.Core.Services; - using Apache.Ignite.Core.Transactions; - - /// <summary> - /// Grid proxy with fake serialization. - /// </summary> - [Serializable] - internal class IgniteProxy : IIgnite, IClusterGroupEx, IPortableWriteAware, ICluster - { - /** */ - [NonSerialized] - private readonly IIgnite _ignite; - - /// <summary> - /// Default ctor for marshalling. - /// </summary> - public IgniteProxy() - { - // No-op. - } - - /// <summary> - /// Constructor. - /// </summary> - /// <param name="ignite">Grid.</param> - public IgniteProxy(IIgnite ignite) - { - _ignite = ignite; - } - - /** <inheritdoc /> */ - public string Name - { - get { return _ignite.Name; } - } - - /** <inheritdoc /> */ - - public ICluster GetCluster() - { - return this; - } - - /** <inheritdoc /> */ - public IIgnite Ignite - { - get { return this; } - } - - /** <inheritdoc /> */ - public IClusterGroup ForLocal() - { - return _ignite.GetCluster().ForLocal(); - } - - /** <inheritdoc /> */ - public ICompute GetCompute() - { - return _ignite.GetCompute(); - } - - /** <inheritdoc /> */ - public IClusterGroup ForNodes(IEnumerable<IClusterNode> nodes) - { - return _ignite.GetCluster().ForNodes(nodes); - } - - /** <inheritdoc /> */ - public IClusterGroup ForNodes(params IClusterNode[] nodes) - { - return _ignite.GetCluster().ForNodes(nodes); - } - - /** <inheritdoc /> */ - public IClusterGroup ForNodeIds(IEnumerable<Guid> ids) - { - return _ignite.GetCluster().ForNodeIds(ids); - } - - /** <inheritdoc /> */ - public IClusterGroup ForNodeIds(ICollection<Guid> ids) - { - return _ignite.GetCluster().ForNodeIds(ids); - } - - /** <inheritdoc /> */ - public IClusterGroup ForNodeIds(params Guid[] ids) - { - return _ignite.GetCluster().ForNodeIds(ids); - } - - /** <inheritdoc /> */ - public IClusterGroup ForPredicate(Func<IClusterNode, bool> p) - { - return _ignite.GetCluster().ForPredicate(p); - } - - /** <inheritdoc /> */ - public IClusterGroup ForAttribute(string name, string val) - { - return _ignite.GetCluster().ForAttribute(name, val); - } - - /** <inheritdoc /> */ - public IClusterGroup ForCacheNodes(string name) - { - return _ignite.GetCluster().ForCacheNodes(name); - } - - /** <inheritdoc /> */ - public IClusterGroup ForDataNodes(string name) - { - return _ignite.GetCluster().ForDataNodes(name); - } - - /** <inheritdoc /> */ - public IClusterGroup ForClientNodes(string name) - { - return _ignite.GetCluster().ForClientNodes(name); - } - - /** <inheritdoc /> */ - public IClusterGroup ForRemotes() - { - return _ignite.GetCluster().ForRemotes(); - } - - /** <inheritdoc /> */ - public IClusterGroup ForHost(IClusterNode node) - { - return _ignite.GetCluster().ForHost(node); - } - - /** <inheritdoc /> */ - public IClusterGroup ForRandom() - { - return _ignite.GetCluster().ForRandom(); - } - - /** <inheritdoc /> */ - public IClusterGroup ForOldest() - { - return _ignite.GetCluster().ForOldest(); - } - - /** <inheritdoc /> */ - public IClusterGroup ForYoungest() - { - return _ignite.GetCluster().ForYoungest(); - } - - /** <inheritdoc /> */ - public IClusterGroup ForDotNet() - { - return _ignite.GetCluster().ForDotNet(); - } - - /** <inheritdoc /> */ - public ICollection<IClusterNode> GetNodes() - { - return _ignite.GetCluster().GetNodes(); - } - - /** <inheritdoc /> */ - public IClusterNode GetNode(Guid id) - { - return _ignite.GetCluster().GetNode(id); - } - - /** <inheritdoc /> */ - public IClusterNode GetNode() - { - return _ignite.GetCluster().GetNode(); - } - - /** <inheritdoc /> */ - public IClusterMetrics GetMetrics() - { - return _ignite.GetCluster().GetMetrics(); - } - - /** <inheritdoc /> */ - public void Dispose() - { - _ignite.Dispose(); - } - - /** <inheritdoc /> */ - public ICache<TK, TV> GetCache<TK, TV>(string name) - { - return _ignite.GetCache<TK, TV>(name); - } - - /** <inheritdoc /> */ - public ICache<TK, TV> GetOrCreateCache<TK, TV>(string name) - { - return _ignite.GetOrCreateCache<TK, TV>(name); - } - - /** <inheritdoc /> */ - public ICache<TK, TV> CreateCache<TK, TV>(string name) - { - return _ignite.CreateCache<TK, TV>(name); - } - - /** <inheritdoc /> */ - - public IClusterNode GetLocalNode() - { - return _ignite.GetCluster().GetLocalNode(); - } - - /** <inheritdoc /> */ - public bool PingNode(Guid nodeId) - { - return _ignite.GetCluster().PingNode(nodeId); - } - - /** <inheritdoc /> */ - public long TopologyVersion - { - get { return _ignite.GetCluster().TopologyVersion; } - } - - /** <inheritdoc /> */ - public ICollection<IClusterNode> GetTopology(long ver) - { - return _ignite.GetCluster().GetTopology(ver); - } - - /** <inheritdoc /> */ - public void ResetMetrics() - { - _ignite.GetCluster().ResetMetrics(); - } - - /** <inheritdoc /> */ - public IDataStreamer<TK, TV> GetDataStreamer<TK, TV>(string cacheName) - { - return _ignite.GetDataStreamer<TK, TV>(cacheName); - } - - /** <inheritdoc /> */ - public IPortables GetPortables() - { - return _ignite.GetPortables(); - } - - /** <inheritdoc /> */ - public ICacheAffinity GetAffinity(string name) - { - return _ignite.GetAffinity(name); - } - - /** <inheritdoc /> */ - - public ITransactions GetTransactions() - { - return _ignite.GetTransactions(); - } - - /** <inheritdoc /> */ - public IMessaging GetMessaging() - { - return _ignite.GetMessaging(); - } - - /** <inheritdoc /> */ - public IEvents GetEvents() - { - return _ignite.GetEvents(); - } - - /** <inheritdoc /> */ - public IServices GetServices() - { - return _ignite.GetServices(); - } - - /** <inheritdoc /> */ - public void WritePortable(IPortableWriter writer) - { - // No-op. - } - - /// <summary> - /// Target grid. - /// </summary> - internal IIgnite Target - { - get - { - return _ignite; - } - } - - /** <inheritdoc /> */ - public IPortableMetadata Metadata(int typeId) - { - return ((IClusterGroupEx)_ignite).Metadata(typeId); - } - } -}
