You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2015/09/22 09:40:22 UTC
[03/51] [abbrv] [partial] ignite git commit: IGNITE-1513: platform ->
platforms.
http://git-wip-us.apache.org/repos/asf/ignite/blob/bcefaa24/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/ServiceContext.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/ServiceContext.cs b/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/ServiceContext.cs
deleted file mode 100644
index f5674f3..0000000
--- a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/ServiceContext.cs
+++ /dev/null
@@ -1,60 +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.Services
-{
- using System;
- using System.Diagnostics;
- using Apache.Ignite.Core.Portable;
- using Apache.Ignite.Core.Services;
-
- /// <summary>
- /// Service context.
- /// </summary>
- internal class ServiceContext : IServiceContext
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="ServiceContext"/> class.
- /// </summary>
- /// <param name="reader">The reader.</param>
- public ServiceContext(IPortableRawReader reader)
- {
- Debug.Assert(reader != null);
-
- Name = reader.ReadString();
- ExecutionId = reader.ReadGuid() ?? Guid.Empty;
- IsCancelled = reader.ReadBoolean();
- CacheName = reader.ReadString();
- AffinityKey = reader.ReadObject<object>();
- }
-
- /** <inheritdoc /> */
- public string Name { get; private set; }
-
- /** <inheritdoc /> */
- public Guid ExecutionId { get; private set; }
-
- /** <inheritdoc /> */
- public bool IsCancelled { get; private set; }
-
- /** <inheritdoc /> */
- public string CacheName { get; private set; }
-
- /** <inheritdoc /> */
- public object AffinityKey { get; private set; }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/bcefaa24/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/ServiceDescriptor.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/ServiceDescriptor.cs b/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/ServiceDescriptor.cs
deleted file mode 100644
index 9bd9814..0000000
--- a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/ServiceDescriptor.cs
+++ /dev/null
@@ -1,106 +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.Services
-{
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using Apache.Ignite.Core.Impl.Collections;
- using Apache.Ignite.Core.Impl.Portable;
- using Apache.Ignite.Core.Services;
-
- /// <summary>
- /// Service descriptor.
- /// </summary>
- internal class ServiceDescriptor : IServiceDescriptor
- {
- /** Services. */
- private readonly IServices _services;
-
- /** Service type. */
- private Type _type;
-
- /// <summary>
- /// Initializes a new instance of the <see cref="ServiceDescriptor" /> class.
- /// </summary>
- /// <param name="name">Name.</param>
- /// <param name="reader">Reader.</param>
- /// <param name="services">Services.</param>
- public ServiceDescriptor(string name, PortableReaderImpl reader, IServices services)
- {
- Debug.Assert(reader != null);
- Debug.Assert(services != null);
- Debug.Assert(!string.IsNullOrEmpty(name));
-
- _services = services;
- Name = name;
-
- CacheName = reader.ReadString();
- MaxPerNodeCount = reader.ReadInt();
- TotalCount = reader.ReadInt();
- OriginNodeId = reader.ReadGuid() ?? Guid.Empty;
- AffinityKey = reader.ReadObject<object>();
-
- var mapSize = reader.ReadInt();
- var snap = new Dictionary<Guid, int>(mapSize);
-
- for (var i = 0; i < mapSize; i++)
- snap[reader.ReadGuid() ?? Guid.Empty] = reader.ReadInt();
-
- TopologySnapshot = snap.AsReadOnly();
- }
-
- /** <inheritdoc /> */
- public string Name { get; private set; }
-
- /** <inheritdoc /> */
- public Type Type
- {
- get
- {
- try
- {
- return _type ?? (_type = _services.GetServiceProxy<IService>(Name).GetType());
- }
- catch (Exception ex)
- {
- throw new ServiceInvocationException(
- "Failed to retrieve service type. It has either been cancelled, or is not a .Net service", ex);
- }
- }
- }
-
- /** <inheritdoc /> */
- public int TotalCount { get; private set; }
-
- /** <inheritdoc /> */
- public int MaxPerNodeCount { get; private set; }
-
- /** <inheritdoc /> */
- public string CacheName { get; private set; }
-
- /** <inheritdoc /> */
- public object AffinityKey { get; private set; }
-
- /** <inheritdoc /> */
- public Guid OriginNodeId { get; private set; }
-
- /** <inheritdoc /> */
- public IDictionary<Guid, int> TopologySnapshot { get; private set; }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/bcefaa24/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/ServiceProxy.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/ServiceProxy.cs b/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/ServiceProxy.cs
deleted file mode 100644
index ebb4c84..0000000
--- a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/ServiceProxy.cs
+++ /dev/null
@@ -1,71 +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.Services
-{
- using System;
- using System.Diagnostics;
- using System.Reflection;
- using System.Runtime.Remoting.Messaging;
- using System.Runtime.Remoting.Proxies;
-
- /// <summary>
- /// Service proxy: user works with a remote service as if it is a local object.
- /// </summary>
- /// <typeparam name="T">User type to be proxied.</typeparam>
- internal class ServiceProxy<T> : RealProxy
- {
- /** Services. */
- private readonly Func<MethodBase, object[], object> _invokeAction;
-
- /// <summary>
- /// Initializes a new instance of the <see cref="ServiceProxy{T}" /> class.
- /// </summary>
- /// <param name="invokeAction">Method invoke action.</param>
- public ServiceProxy(Func<MethodBase, object[], object> invokeAction)
- : base(typeof (T))
- {
- Debug.Assert(invokeAction != null);
-
- _invokeAction = invokeAction;
- }
-
- /** <inheritdoc /> */
- public override IMessage Invoke(IMessage msg)
- {
- var methodCall = msg as IMethodCallMessage;
-
- if (methodCall == null)
- throw new NotSupportedException("Service proxy operation type not supported: " + msg.GetType() +
- ". Only method and property calls are supported.");
-
- if (methodCall.InArgCount != methodCall.ArgCount)
- throw new NotSupportedException("Service proxy does not support out arguments: "
- + methodCall.MethodBase);
-
- var result = _invokeAction(methodCall.MethodBase, methodCall.Args);
-
- return new ReturnMessage(result, null, 0, methodCall.LogicalCallContext, methodCall);
- }
-
- /** <inheritdoc /> */
- public new T GetTransparentProxy()
- {
- return (T) base.GetTransparentProxy();
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/bcefaa24/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/ServiceProxyInvoker.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/ServiceProxyInvoker.cs b/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/ServiceProxyInvoker.cs
deleted file mode 100644
index fa5da17..0000000
--- a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/ServiceProxyInvoker.cs
+++ /dev/null
@@ -1,136 +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.Services
-{
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Linq;
- using System.Reflection;
-
- /// <summary>
- /// Invokes service proxy methods.
- /// </summary>
- internal static class ServiceProxyInvoker
- {
- /// <summary>
- /// Invokes the service method according to data from a stream,
- /// and writes invocation result to the output stream.
- /// </summary>
- /// <param name="svc">Service instance.</param>
- /// <param name="methodName">Name of the method.</param>
- /// <param name="arguments">Arguments.</param>
- /// <returns>Pair of method return value and invocation exception.</returns>
- public static KeyValuePair<object, Exception> InvokeServiceMethod(object svc, string methodName,
- object[] arguments)
- {
- Debug.Assert(svc != null);
- Debug.Assert(!string.IsNullOrWhiteSpace(methodName));
-
- var method = GetMethodOrThrow(svc.GetType(), methodName, arguments);
-
- try
- {
- return new KeyValuePair<object, Exception>(method.Invoke(svc, arguments), null);
- }
- catch (TargetInvocationException invokeErr)
- {
- return new KeyValuePair<object, Exception>(null, invokeErr.InnerException);
- }
- catch (Exception err)
- {
- return new KeyValuePair<object, Exception>(null, err);
- }
- }
-
- /// <summary>
- /// Finds suitable method in the specified type, or throws an exception.
- /// </summary>
- private static MethodBase GetMethodOrThrow(Type svcType, string methodName, object[] arguments)
- {
- Debug.Assert(svcType != null);
- Debug.Assert(!string.IsNullOrWhiteSpace(methodName));
-
- // 1) Find methods by name
- var methods = svcType.GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
- .Where(m => CleanupMethodName(m) == methodName).ToArray();
-
- if (methods.Length == 1)
- return methods[0];
-
- if (methods.Length == 0)
- throw new InvalidOperationException(
- string.Format("Failed to invoke proxy: there is no method '{0}' in type '{1}'",
- methodName, svcType));
-
- // 2) There is more than 1 method with specified name - resolve with argument types.
- methods = methods.Where(m => AreMethodArgsCompatible(arguments, m.GetParameters())).ToArray();
-
- if (methods.Length == 1)
- return methods[0];
-
- // 3) 0 or more than 1 matching method - throw.
- var argsString = arguments == null || arguments.Length == 0
- ? "0"
- : "(" +
- arguments.Select(x => x == null ? "null" : x.GetType().Name).Aggregate((x, y) => x + ", " + y)
- + ")";
-
- if (methods.Length == 0)
- throw new InvalidOperationException(
- string.Format("Failed to invoke proxy: there is no method '{0}' in type '{1}' with {2} arguments",
- methodName, svcType, argsString));
-
- throw new InvalidOperationException(
- string.Format("Failed to invoke proxy: there are {2} methods '{0}' in type '{1}' with {3} " +
- "arguments, can't resolve ambiguity.", methodName, svcType, methods.Length, argsString));
- }
-
- /// <summary>
- /// Cleans up a method name by removing interface part,
- /// which occurs when explicit interface implementation is used.
- /// </summary>
- private static string CleanupMethodName(MethodBase method)
- {
- var name = method.Name;
-
- var dotIdx = name.LastIndexOf(Type.Delimiter);
-
- return dotIdx < 0 ? name : name.Substring(dotIdx + 1);
- }
-
- /// <summary>
- /// Determines whether specified method arguments are comatible with given method parameter definitions.
- /// </summary>
- /// <param name="methodArgs">Method argument types.</param>
- /// <param name="targetParameters">Target method parameter definitions.</param>
- /// <returns>True if a target method can be called with specified set of arguments; otherwise, false.</returns>
- private static bool AreMethodArgsCompatible(object[] methodArgs, ParameterInfo[] targetParameters)
- {
- if (methodArgs == null || methodArgs.Length == 0)
- return targetParameters.Length == 0;
-
- if (methodArgs.Length != targetParameters.Length)
- return false;
-
- return methodArgs
- .Zip(targetParameters, (arg, param) => arg == null || param.ParameterType.IsInstanceOfType(arg))
- .All(x => x);
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/bcefaa24/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/ServiceProxySerializer.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/ServiceProxySerializer.cs b/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/ServiceProxySerializer.cs
deleted file mode 100644
index e7af8da..0000000
--- a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/ServiceProxySerializer.cs
+++ /dev/null
@@ -1,140 +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.Services
-{
- using System;
- using System.Diagnostics;
- using System.Reflection;
- using Apache.Ignite.Core.Impl.Portable;
- using Apache.Ignite.Core.Impl.Portable.IO;
- using Apache.Ignite.Core.Portable;
- using Apache.Ignite.Core.Services;
-
- /// <summary>
- /// Static proxy methods.
- /// </summary>
- internal static class ServiceProxySerializer
- {
- /// <summary>
- /// Writes proxy method invocation data to the specified writer.
- /// </summary>
- /// <param name="writer">Writer.</param>
- /// <param name="method">Method.</param>
- /// <param name="arguments">Arguments.</param>
- public static void WriteProxyMethod(PortableWriterImpl writer, MethodBase method, object[] arguments)
- {
- Debug.Assert(writer != null);
- Debug.Assert(method != null);
-
- writer.WriteString(method.Name);
-
- if (arguments != null)
- {
- writer.WriteBoolean(true);
- writer.WriteInt(arguments.Length);
-
- foreach (var arg in arguments)
- writer.WriteObject(arg);
- }
- else
- writer.WriteBoolean(false);
- }
-
- /// <summary>
- /// Reads proxy method invocation data from the specified reader.
- /// </summary>
- /// <param name="stream">Stream.</param>
- /// <param name="marsh">Marshaller.</param>
- /// <param name="mthdName">Method name.</param>
- /// <param name="mthdArgs">Method arguments.</param>
- public static void ReadProxyMethod(IPortableStream stream, PortableMarshaller marsh,
- out string mthdName, out object[] mthdArgs)
- {
- var reader = marsh.StartUnmarshal(stream);
-
- var srvKeepPortable = reader.ReadBoolean();
-
- mthdName = reader.ReadString();
-
- if (reader.ReadBoolean())
- {
- mthdArgs = new object[reader.ReadInt()];
-
- if (srvKeepPortable)
- reader = marsh.StartUnmarshal(stream, true);
-
- for (var i = 0; i < mthdArgs.Length; i++)
- mthdArgs[i] = reader.ReadObject<object>();
- }
- else
- mthdArgs = null;
- }
-
- /// <summary>
- /// Writes method invocation result.
- /// </summary>
- /// <param name="stream">Stream.</param>
- /// <param name="marsh">Marshaller.</param>
- /// <param name="methodResult">Method result.</param>
- /// <param name="invocationError">Method invocation error.</param>
- public static void WriteInvocationResult(IPortableStream stream, PortableMarshaller marsh, object methodResult,
- Exception invocationError)
- {
- Debug.Assert(stream != null);
- Debug.Assert(marsh != null);
-
- var writer = marsh.StartMarshal(stream);
-
- PortableUtils.WriteInvocationResult(writer, invocationError == null, invocationError ?? methodResult);
- }
-
- /// <summary>
- /// Reads method invocation result.
- /// </summary>
- /// <param name="stream">Stream.</param>
- /// <param name="marsh">Marshaller.</param>
- /// <param name="keepPortable">Portable flag.</param>
- /// <returns>
- /// Method invocation result, or exception in case of error.
- /// </returns>
- public static object ReadInvocationResult(IPortableStream stream, PortableMarshaller marsh, bool keepPortable)
- {
- Debug.Assert(stream != null);
- Debug.Assert(marsh != null);
-
- var mode = keepPortable ? PortableMode.ForcePortable : PortableMode.Deserialize;
-
- var reader = marsh.StartUnmarshal(stream, mode);
-
- object err;
-
- var res = PortableUtils.ReadInvocationResult(reader, out err);
-
- if (err == null)
- return res;
-
- var portErr = err as IPortableObject;
-
- throw portErr != null
- ? new ServiceInvocationException("Proxy method invocation failed with a portable error. " +
- "Examine PortableCause for details.", portErr)
- : new ServiceInvocationException("Proxy method invocation failed with an exception. " +
- "Examine InnerException for details.", (Exception) err);
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/bcefaa24/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/Services.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/Services.cs b/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/Services.cs
deleted file mode 100644
index 38a7175..0000000
--- a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/Services.cs
+++ /dev/null
@@ -1,316 +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.Services
-{
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Linq;
- using System.Reflection;
- using Apache.Ignite.Core.Cluster;
- using Apache.Ignite.Core.Common;
- using Apache.Ignite.Core.Impl.Common;
- using Apache.Ignite.Core.Impl.Portable;
- using Apache.Ignite.Core.Impl.Unmanaged;
- using Apache.Ignite.Core.Services;
- using UU = Apache.Ignite.Core.Impl.Unmanaged.UnmanagedUtils;
-
- /// <summary>
- /// Services implementation.
- /// </summary>
- internal class Services : PlatformTarget, IServices
- {
- /** */
- private const int OpDeploy = 1;
-
- /** */
- private const int OpDeployMultiple = 2;
-
- /** */
- private const int OpDotnetServices = 3;
-
- /** */
- private const int OpInvokeMethod = 4;
-
- /** */
- private const int OpDescriptors = 5;
-
- /** */
- private readonly IClusterGroup _clusterGroup;
-
- /** Invoker portable flag. */
- protected readonly bool KeepPortable;
-
- /** Server portable flag. */
- protected readonly bool SrvKeepPortable;
-
- /// <summary>
- /// Initializes a new instance of the <see cref="Services" /> class.
- /// </summary>
- /// <param name="target">Target.</param>
- /// <param name="marsh">Marshaller.</param>
- /// <param name="clusterGroup">Cluster group.</param>
- /// <param name="keepPortable">Invoker portable flag.</param>
- /// <param name="srvKeepPortable">Server portable flag.</param>
- public Services(IUnmanagedTarget target, PortableMarshaller marsh, IClusterGroup clusterGroup,
- bool keepPortable, bool srvKeepPortable)
- : base(target, marsh)
- {
- Debug.Assert(clusterGroup != null);
-
- _clusterGroup = clusterGroup;
- KeepPortable = keepPortable;
- SrvKeepPortable = srvKeepPortable;
- }
-
- /** <inheritDoc /> */
- public virtual IServices WithKeepPortable()
- {
- if (KeepPortable)
- return this;
-
- return new Services(Target, Marshaller, _clusterGroup, true, SrvKeepPortable);
- }
-
- /** <inheritDoc /> */
- public virtual IServices WithServerKeepPortable()
- {
- if (SrvKeepPortable)
- return this;
-
- return new Services(UU.ServicesWithServerKeepPortable(Target), Marshaller, _clusterGroup, KeepPortable, true);
- }
-
- /** <inheritDoc /> */
- public virtual IServices WithAsync()
- {
- return new ServicesAsync(UU.ServicesWithAsync(Target), Marshaller, _clusterGroup, KeepPortable, SrvKeepPortable);
- }
-
- /** <inheritDoc /> */
- public virtual bool IsAsync
- {
- get { return false; }
- }
-
- /** <inheritDoc /> */
- public virtual IFuture GetFuture()
- {
- throw new InvalidOperationException("Asynchronous mode is disabled");
- }
-
- /** <inheritDoc /> */
- public virtual IFuture<TResult> GetFuture<TResult>()
- {
- throw new InvalidOperationException("Asynchronous mode is disabled");
- }
-
- /** <inheritDoc /> */
- public IClusterGroup ClusterGroup
- {
- get { return _clusterGroup; }
- }
-
- /** <inheritDoc /> */
- public void DeployClusterSingleton(string name, IService service)
- {
- IgniteArgumentCheck.NotNullOrEmpty(name, "name");
- IgniteArgumentCheck.NotNull(service, "service");
-
- DeployMultiple(name, service, 1, 1);
- }
-
- /** <inheritDoc /> */
- public void DeployNodeSingleton(string name, IService service)
- {
- IgniteArgumentCheck.NotNullOrEmpty(name, "name");
- IgniteArgumentCheck.NotNull(service, "service");
-
- DeployMultiple(name, service, 0, 1);
- }
-
- /** <inheritDoc /> */
- public void DeployKeyAffinitySingleton<TK>(string name, IService service, string cacheName, TK affinityKey)
- {
- IgniteArgumentCheck.NotNullOrEmpty(name, "name");
- IgniteArgumentCheck.NotNull(service, "service");
- IgniteArgumentCheck.NotNull(affinityKey, "affinityKey");
-
- Deploy(new ServiceConfiguration
- {
- Name = name,
- Service = service,
- CacheName = cacheName,
- AffinityKey = affinityKey,
- TotalCount = 1,
- MaxPerNodeCount = 1
- });
- }
-
- /** <inheritDoc /> */
- public void DeployMultiple(string name, IService service, int totalCount, int maxPerNodeCount)
- {
- IgniteArgumentCheck.NotNullOrEmpty(name, "name");
- IgniteArgumentCheck.NotNull(service, "service");
-
- DoOutOp(OpDeployMultiple, w =>
- {
- w.WriteString(name);
- w.WriteObject(service);
- w.WriteInt(totalCount);
- w.WriteInt(maxPerNodeCount);
- });
- }
-
- /** <inheritDoc /> */
- public void Deploy(ServiceConfiguration configuration)
- {
- IgniteArgumentCheck.NotNull(configuration, "configuration");
-
- DoOutOp(OpDeploy, w =>
- {
- w.WriteString(configuration.Name);
- w.WriteObject(configuration.Service);
- w.WriteInt(configuration.TotalCount);
- w.WriteInt(configuration.MaxPerNodeCount);
- w.WriteString(configuration.CacheName);
- w.WriteObject(configuration.AffinityKey);
-
- if (configuration.NodeFilter != null)
- w.WriteObject(new PortableOrSerializableObjectHolder(configuration.NodeFilter));
- else
- w.WriteObject<PortableOrSerializableObjectHolder>(null);
- });
- }
-
- /** <inheritDoc /> */
- public void Cancel(string name)
- {
- IgniteArgumentCheck.NotNullOrEmpty(name, "name");
-
- UU.ServicesCancel(Target, name);
- }
-
- /** <inheritDoc /> */
- public void CancelAll()
- {
- UU.ServicesCancelAll(Target);
- }
-
- /** <inheritDoc /> */
- public ICollection<IServiceDescriptor> GetServiceDescriptors()
- {
- return DoInOp(OpDescriptors, stream =>
- {
- var reader = Marshaller.StartUnmarshal(stream, KeepPortable);
-
- var size = reader.ReadInt();
-
- var result = new List<IServiceDescriptor>(size);
-
- for (var i = 0; i < size; i++)
- {
- var name = reader.ReadString();
-
- result.Add(new ServiceDescriptor(name, reader, this));
- }
-
- return result;
- });
- }
-
- /** <inheritDoc /> */
- public T GetService<T>(string name)
- {
- IgniteArgumentCheck.NotNullOrEmpty(name, "name");
-
- var services = GetServices<T>(name);
-
- if (services == null)
- return default(T);
-
- return services.FirstOrDefault();
- }
-
- /** <inheritDoc /> */
- public ICollection<T> GetServices<T>(string name)
- {
- IgniteArgumentCheck.NotNullOrEmpty(name, "name");
-
- return DoOutInOp<ICollection<T>>(OpDotnetServices, w => w.WriteString(name),
- r =>
- {
- bool hasVal = r.ReadBool();
-
- if (hasVal)
- {
- var count = r.ReadInt();
-
- var res = new List<T>(count);
-
- for (var i = 0; i < count; i++)
- res.Add((T)Marshaller.Ignite.HandleRegistry.Get<IService>(r.ReadLong()));
-
- return res;
- }
- return null;
- });
- }
-
- /** <inheritDoc /> */
- public T GetServiceProxy<T>(string name) where T : class
- {
- return GetServiceProxy<T>(name, false);
- }
-
- /** <inheritDoc /> */
- public T GetServiceProxy<T>(string name, bool sticky) where T : class
- {
- IgniteArgumentCheck.NotNullOrEmpty(name, "name");
- IgniteArgumentCheck.Ensure(typeof(T).IsInterface, "T", "Service proxy type should be an interface: " + typeof(T));
-
- // In local scenario try to return service instance itself instead of a proxy
- // Get as object because proxy interface may be different from real interface
- var locInst = GetService<object>(name) as T;
-
- if (locInst != null)
- return locInst;
-
- var javaProxy = UU.ServicesGetServiceProxy(Target, name, sticky);
-
- return new ServiceProxy<T>((method, args) => InvokeProxyMethod(javaProxy, method, args))
- .GetTransparentProxy();
- }
-
- /// <summary>
- /// Invokes the service proxy method.
- /// </summary>
- /// <param name="proxy">Unmanaged proxy.</param>
- /// <param name="method">Method to invoke.</param>
- /// <param name="args">Arguments.</param>
- /// <returns>
- /// Invocation result.
- /// </returns>
- private unsafe object InvokeProxyMethod(IUnmanagedTarget proxy, MethodBase method, object[] args)
- {
- return DoOutInOp(OpInvokeMethod,
- writer => ServiceProxySerializer.WriteProxyMethod(writer, method, args),
- stream => ServiceProxySerializer.ReadInvocationResult(stream, Marshaller, KeepPortable), proxy.Target);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/ignite/blob/bcefaa24/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/ServicesAsync.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/ServicesAsync.cs b/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/ServicesAsync.cs
deleted file mode 100644
index 860de45..0000000
--- a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Services/ServicesAsync.cs
+++ /dev/null
@@ -1,89 +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.Services
-{
- using Apache.Ignite.Core.Cluster;
- using Apache.Ignite.Core.Common;
- using Apache.Ignite.Core.Impl.Portable;
- using Apache.Ignite.Core.Impl.Unmanaged;
- using Apache.Ignite.Core.Services;
- using UU = Apache.Ignite.Core.Impl.Unmanaged.UnmanagedUtils;
-
- /// <summary>
- /// Async services implementation.
- /// </summary>
- internal class ServicesAsync : Services
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="ServicesAsync" /> class.
- /// </summary>
- /// <param name="target">Target.</param>
- /// <param name="marsh">Marshaller.</param>
- /// <param name="clusterGroup">Cluster group.</param>
- /// <param name="keepPortable">Portable flag.</param>
- /// <param name="srvKeepPortable">Server portable flag.</param>
- public ServicesAsync(IUnmanagedTarget target, PortableMarshaller marsh, IClusterGroup clusterGroup,
- bool keepPortable, bool srvKeepPortable)
- : base(target, marsh, clusterGroup, keepPortable, srvKeepPortable)
- {
- // No-op
- }
-
- /** <inheritDoc /> */
- public override bool IsAsync
- {
- get { return true; }
- }
-
- /** <inheritDoc /> */
- public override IServices WithKeepPortable()
- {
- if (KeepPortable)
- return this;
-
- return new ServicesAsync(Target, Marshaller, ClusterGroup, true, SrvKeepPortable);
- }
-
- /** <inheritDoc /> */
- public override IServices WithServerKeepPortable()
- {
- if (SrvKeepPortable)
- return this;
-
- return new ServicesAsync(Target, Marshaller, ClusterGroup, KeepPortable, true);
- }
-
- /** <inheritDoc /> */
- public override IServices WithAsync()
- {
- return this;
- }
-
- /** <inheritDoc /> */
- public override IFuture GetFuture()
- {
- return GetFuture<object>();
- }
-
- /** <inheritDoc /> */
- public override IFuture<T> GetFuture<T>()
- {
- return GetFuture<T>((futId, futTyp) => UU.TargetListenFuture(Target, futId, futTyp));
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/bcefaa24/modules/platform/dotnet/Apache.Ignite.Core/Impl/Transactions/AsyncTransaction.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Transactions/AsyncTransaction.cs b/modules/platform/dotnet/Apache.Ignite.Core/Impl/Transactions/AsyncTransaction.cs
deleted file mode 100644
index 82d1d55..0000000
--- a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Transactions/AsyncTransaction.cs
+++ /dev/null
@@ -1,78 +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.Transactions
-{
- using System;
- using System.Threading;
- using Apache.Ignite.Core.Common;
-
- /// <summary>
- /// Grid async transaction facade.
- /// </summary>
- internal class AsyncTransaction : Transaction
- {
- /** */
- private readonly ThreadLocal<IFuture> _curFut = new ThreadLocal<IFuture>();
-
- /// <summary>
- /// Initializes a new instance of the <see cref="AsyncTransaction"/> class.
- /// </summary>
- /// <param name="tx">The tx to wrap.</param>
- public AsyncTransaction(TransactionImpl tx) : base(tx)
- {
- // No-op.
- }
-
- /** <inheritDoc /> */
- public override bool IsAsync
- {
- get { return true; }
- }
-
- /** <inheritDoc /> */
- public override IFuture<TResult> GetFuture<TResult>()
- {
- return GetFuture() as IFuture<TResult>;
- }
-
- /** <inheritDoc /> */
- public override IFuture GetFuture()
- {
- var fut = _curFut.Value;
-
- if (fut == null)
- throw new InvalidOperationException("Asynchronous operation not started.");
-
- _curFut.Value = null;
-
- return fut;
- }
-
- /** <inheritDoc /> */
- public override void Commit()
- {
- _curFut.Value = Tx.GetFutureOrError(() => Tx.CommitAsync());
- }
-
- /** <inheritDoc /> */
- public override void Rollback()
- {
- _curFut.Value = Tx.GetFutureOrError(() => Tx.RollbackAsync());
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/bcefaa24/modules/platform/dotnet/Apache.Ignite.Core/Impl/Transactions/Transaction.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Transactions/Transaction.cs b/modules/platform/dotnet/Apache.Ignite.Core/Impl/Transactions/Transaction.cs
deleted file mode 100644
index 47c9f93..0000000
--- a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Transactions/Transaction.cs
+++ /dev/null
@@ -1,155 +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.Transactions
-{
- using System;
- using Apache.Ignite.Core.Common;
- using Apache.Ignite.Core.Transactions;
-
- /// <summary>
- /// Ignite transaction facade.
- /// </summary>
- internal class Transaction : ITransaction
- {
- /** */
- protected readonly TransactionImpl Tx;
-
- /// <summary>
- /// Initializes a new instance of the <see cref="Transaction" /> class.
- /// </summary>
- /// <param name="tx">The tx to wrap.</param>
- public Transaction(TransactionImpl tx)
- {
- Tx = tx;
- }
-
- /** <inheritDoc /> */
- public void Dispose()
- {
- Tx.Dispose();
- }
-
- /** <inheritDoc /> */
- public ITransaction WithAsync()
- {
- return new AsyncTransaction(Tx);
- }
-
- /** <inheritDoc /> */
- public virtual bool IsAsync
- {
- get { return false; }
- }
-
- /** <inheritDoc /> */
- public virtual IFuture GetFuture()
- {
- throw IgniteUtils.GetAsyncModeDisabledException();
- }
-
- /** <inheritDoc /> */
- public virtual IFuture<TResult> GetFuture<TResult>()
- {
- throw IgniteUtils.GetAsyncModeDisabledException();
- }
-
- /** <inheritDoc /> */
- public Guid NodeId
- {
- get { return Tx.NodeId; }
- }
-
- /** <inheritDoc /> */
- public long ThreadId
- {
- get { return Tx.ThreadId; }
- }
-
- /** <inheritDoc /> */
- public DateTime StartTime
- {
- get { return Tx.StartTime; }
- }
-
- /** <inheritDoc /> */
- public TransactionIsolation Isolation
- {
- get { return Tx.Isolation; }
- }
-
- /** <inheritDoc /> */
- public TransactionConcurrency Concurrency
- {
- get { return Tx.Concurrency; }
- }
-
- /** <inheritDoc /> */
- public TransactionState State
- {
- get { return Tx.State; }
- }
-
- /** <inheritDoc /> */
- public TimeSpan Timeout
- {
- get { return Tx.Timeout; }
- }
-
- /** <inheritDoc /> */
- public bool IsRollbackOnly
- {
- get { return Tx.IsRollbackOnly; }
- }
-
- /** <inheritDoc /> */
- public bool SetRollbackonly()
- {
- return Tx.SetRollbackOnly();
- }
-
- /** <inheritDoc /> */
- public virtual void Commit()
- {
- Tx.Commit();
- }
-
- /** <inheritDoc /> */
- public virtual void Rollback()
- {
- Tx.Rollback();
- }
-
- /** <inheritDoc /> */
- public void AddMeta<TV>(string name, TV val)
- {
- Tx.AddMeta(name, val);
- }
-
- /** <inheritDoc /> */
- public TV Meta<TV>(string name)
- {
- return Tx.Meta<TV>(name);
- }
-
- /** <inheritDoc /> */
- public TV RemoveMeta<TV>(string name)
- {
- return Tx.RemoveMeta<TV>(name);
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/bcefaa24/modules/platform/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionImpl.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionImpl.cs b/modules/platform/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionImpl.cs
deleted file mode 100644
index 9e71181..0000000
--- a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionImpl.cs
+++ /dev/null
@@ -1,489 +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.Transactions
-{
- using System;
- using System.Threading;
- using Apache.Ignite.Core.Common;
- using Apache.Ignite.Core.Impl.Common;
- using Apache.Ignite.Core.Transactions;
-
- /// <summary>
- /// Grid cache transaction implementation.
- /// </summary>
- internal sealed class TransactionImpl
- {
- /** Metadatas. */
- private object[] _metas;
-
- /** Unique transaction ID.*/
- private readonly long _id;
-
- /** Cache. */
- private readonly TransactionsImpl _txs;
-
- /** TX concurrency. */
- private readonly TransactionConcurrency _concurrency;
-
- /** TX isolation. */
- private readonly TransactionIsolation _isolation;
-
- /** Timeout. */
- private readonly TimeSpan _timeout;
-
- /** Start time. */
- private readonly DateTime _startTime;
-
- /** Owning thread ID. */
- private readonly int _threadId;
-
- /** Originating node ID. */
- private readonly Guid _nodeId;
-
- /** State holder. */
- private StateHolder _state;
-
- // ReSharper disable once InconsistentNaming
- /** Transaction for this thread. */
- [ThreadStatic]
- private static TransactionImpl THREAD_TX;
-
- /// <summary>
- /// Constructor.
- /// </summary>
- /// <param name="id">ID.</param>
- /// <param name="txs">Transactions.</param>
- /// <param name="concurrency">TX concurrency.</param>
- /// <param name="isolation">TX isolation.</param>
- /// <param name="timeout">Timeout.</param>
- /// <param name="nodeId">The originating node identifier.</param>
- public TransactionImpl(long id, TransactionsImpl txs, TransactionConcurrency concurrency,
- TransactionIsolation isolation, TimeSpan timeout, Guid nodeId) {
- _id = id;
- _txs = txs;
- _concurrency = concurrency;
- _isolation = isolation;
- _timeout = timeout;
- _nodeId = nodeId;
-
- _startTime = DateTime.Now;
-
- _threadId = Thread.CurrentThread.ManagedThreadId;
-
- THREAD_TX = this;
- }
-
- /// <summary>
- /// Transaction assigned to this thread.
- /// </summary>
- public static Transaction Current
- {
- get
- {
- var tx = THREAD_TX;
-
- if (tx == null)
- return null;
-
- if (tx.IsClosed)
- {
- THREAD_TX = null;
-
- return null;
- }
-
- return new Transaction(tx);
- }
- }
-
- /// <summary>
- /// Commits this tx and closes it.
- /// </summary>
- public void Commit()
- {
- lock (this)
- {
- ThrowIfClosed();
-
- _state = new StateHolder(_txs.TxCommit(this));
- }
- }
-
- /// <summary>
- /// Rolls this tx back and closes it.
- /// </summary>
- public void Rollback()
- {
- lock (this)
- {
- ThrowIfClosed();
-
- _state = new StateHolder(_txs.TxRollback(this));
- }
- }
-
- /// <summary>
- /// Sets the rollback only flag.
- /// </summary>
- public bool SetRollbackOnly()
- {
- lock (this)
- {
- ThrowIfClosed();
-
- return _txs.TxSetRollbackOnly(this);
- }
- }
-
- /// <summary>
- /// Gets a value indicating whether this instance is rollback only.
- /// </summary>
- public bool IsRollbackOnly
- {
- get
- {
- lock (this)
- {
- var state0 = _state == null ? State : _state.State;
-
- return state0 == TransactionState.MarkedRollback ||
- state0 == TransactionState.RollingBack ||
- state0 == TransactionState.RolledBack;
- }
- }
- }
-
- /// <summary>
- /// Gets the state.
- /// </summary>
- public TransactionState State
- {
- get
- {
- lock (this)
- {
- return _state != null ? _state.State : _txs.TxState(this);
- }
- }
- }
-
- /// <summary>
- /// Gets the isolation.
- /// </summary>
- public TransactionIsolation Isolation
- {
- get { return _isolation; }
- }
-
- /// <summary>
- /// Gets the concurrency.
- /// </summary>
- public TransactionConcurrency Concurrency
- {
- get { return _concurrency; }
- }
-
- /// <summary>
- /// Gets the timeout.
- /// </summary>
- public TimeSpan Timeout
- {
- get { return _timeout; }
- }
-
- /// <summary>
- /// Gets the start time.
- /// </summary>
- public DateTime StartTime
- {
- get { return _startTime; }
- }
-
-
- /// <summary>
- /// Gets the node identifier.
- /// </summary>
- public Guid NodeId
- {
- get { return _nodeId; }
- }
-
- /// <summary>
- /// Gets the thread identifier.
- /// </summary>
- public long ThreadId
- {
- get { return _threadId; }
- }
-
- /// <summary>
- /// Adds a new metadata.
- /// </summary>
- public void AddMeta<TV>(string name, TV val)
- {
- if (name == null)
- throw new ArgumentException("Meta name cannot be null.");
-
- lock (this)
- {
- if (_metas != null)
- {
- int putIdx = -1;
-
- for (int i = 0; i < _metas.Length; i += 2)
- {
- if (name.Equals(_metas[i]))
- {
- _metas[i + 1] = val;
-
- return;
- }
- if (_metas[i] == null && putIdx == -1)
- // Preserve empty space index.
- putIdx = i;
- }
-
- // No meta with the given name found.
- if (putIdx == -1)
- {
- // Extend array.
- putIdx = _metas.Length;
-
- object[] metas0 = new object[putIdx + 2];
-
- Array.Copy(_metas, metas0, putIdx);
-
- _metas = metas0;
- }
-
- _metas[putIdx] = name;
- _metas[putIdx + 1] = val;
- }
- else
- _metas = new object[] { name, val };
- }
- }
-
- /// <summary>
- /// Gets metadata by name.
- /// </summary>
- public TV Meta<TV>(string name)
- {
- if (name == null)
- throw new ArgumentException("Meta name cannot be null.");
-
- lock (this)
- {
- if (_metas != null)
- {
- for (int i = 0; i < _metas.Length; i += 2)
- {
- if (name.Equals(_metas[i]))
- return (TV)_metas[i + 1];
- }
- }
-
- return default(TV);
- }
- }
-
- /// <summary>
- /// Removes metadata by name.
- /// </summary>
- public TV RemoveMeta<TV>(string name)
- {
- if (name == null)
- throw new ArgumentException("Meta name cannot be null.");
-
- lock (this)
- {
- if (_metas != null)
- {
- for (int i = 0; i < _metas.Length; i += 2)
- {
- if (name.Equals(_metas[i]))
- {
- TV val = (TV)_metas[i + 1];
-
- _metas[i] = null;
- _metas[i + 1] = null;
-
- return val;
- }
- }
- }
-
- return default(TV);
- }
- }
-
- /// <summary>
- /// Commits tx in async mode.
- /// </summary>
- internal IFuture CommitAsync()
- {
- lock (this)
- {
- ThrowIfClosed();
-
- var fut = _txs.CommitAsync(this);
-
- CloseWhenComplete(fut);
-
- return fut;
- }
- }
-
- /// <summary>
- /// Rolls tx back in async mode.
- /// </summary>
- internal IFuture RollbackAsync()
- {
- lock (this)
- {
- ThrowIfClosed();
-
- var fut = _txs.RollbackAsync(this);
-
- CloseWhenComplete(fut);
-
- return fut;
- }
- }
-
- /// <summary>
- /// Transaction ID.
- /// </summary>
- internal long Id
- {
- get { return _id; }
- }
-
- /** <inheritdoc /> */
- public void Dispose()
- {
- try
- {
- Close();
- }
- finally
- {
- GC.SuppressFinalize(this);
- }
- }
-
- /// <summary>
- /// Gets a value indicating whether this transaction is closed.
- /// </summary>
- internal bool IsClosed
- {
- get { return _state != null; }
- }
-
- /// <summary>
- /// Gets the closed exception.
- /// </summary>
- private InvalidOperationException GetClosedException()
- {
- return new InvalidOperationException(string.Format("Transaction {0} is closed, state is {1}", Id, State));
- }
-
- /// <summary>
- /// Creates a future via provided factory if IsClosed is false; otherwise, return a future with an error.
- /// </summary>
- internal IFuture GetFutureOrError(Func<IFuture> operationFactory)
- {
- lock (this)
- {
- return IsClosed ? GetExceptionFuture() : operationFactory();
- }
- }
-
- /// <summary>
- /// Gets the future that throws an exception.
- /// </summary>
- private IFuture GetExceptionFuture()
- {
- var fut = new Future<object>();
-
- fut.OnError(GetClosedException());
-
- return fut;
- }
-
- /// <summary>
- /// Closes the transaction and releases unmanaged resources.
- /// </summary>
- private void Close()
- {
- lock (this)
- {
- _state = _state ?? new StateHolder((TransactionState) _txs.TxClose(this));
- }
- }
-
- /// <summary>
- /// Throws and exception if transaction is closed.
- /// </summary>
- private void ThrowIfClosed()
- {
- if (IsClosed)
- throw GetClosedException();
- }
-
- /// <summary>
- /// Closes this transaction upon future completion.
- /// </summary>
- private void CloseWhenComplete(IFuture fut)
- {
- fut.Listen(Close);
- }
-
- /** <inheritdoc /> */
- ~TransactionImpl()
- {
- Dispose();
- }
-
- /// <summary>
- /// State holder.
- /// </summary>
- private class StateHolder
- {
- /** Current state. */
- private readonly TransactionState _state;
-
- /// <summary>
- /// Constructor.
- /// </summary>
- /// <param name="state">State.</param>
- public StateHolder(TransactionState state)
- {
- _state = state;
- }
-
- /// <summary>
- /// Current state.
- /// </summary>
- public TransactionState State
- {
- get { return _state; }
- }
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/ignite/blob/bcefaa24/modules/platform/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionMetricsImpl.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionMetricsImpl.cs b/modules/platform/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionMetricsImpl.cs
deleted file mode 100644
index e2528f4..0000000
--- a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionMetricsImpl.cs
+++ /dev/null
@@ -1,62 +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.Transactions
-{
- using System;
- using Apache.Ignite.Core.Portable;
- using Apache.Ignite.Core.Transactions;
-
- /// <summary>
- /// Transaction metrics.
- /// </summary>
- internal class TransactionMetricsImpl : ITransactionMetrics
- {
- /// <summary>
- /// Initializes a new instance of the <see cref="TransactionMetricsImpl"/> class.
- /// </summary>
- /// <param name="reader">The reader.</param>
- public TransactionMetricsImpl(IPortableRawReader reader)
- {
- CommitTime = reader.ReadDate() ?? default(DateTime);
- RollbackTime = reader.ReadDate() ?? default(DateTime);
-
- TxCommits = reader.ReadInt();
- TxRollbacks = reader.ReadInt();
- }
-
- /// <summary>
- /// Gets the last time transaction was committed.
- /// </summary>
- public DateTime CommitTime { get; private set; }
-
- /// <summary>
- /// Gets the last time transaction was rolled back.
- /// </summary>
- public DateTime RollbackTime { get; private set; }
-
- /// <summary>
- /// Gets the total number of transaction commits.
- /// </summary>
- public int TxCommits { get; private set; }
-
- /// <summary>
- /// Gets the total number of transaction rollbacks.
- /// </summary>
- public int TxRollbacks { get; private set; }
- }
-}
http://git-wip-us.apache.org/repos/asf/ignite/blob/bcefaa24/modules/platform/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionsImpl.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionsImpl.cs b/modules/platform/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionsImpl.cs
deleted file mode 100644
index 4eaa53f..0000000
--- a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionsImpl.cs
+++ /dev/null
@@ -1,201 +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.Transactions
-{
- using System;
- using Apache.Ignite.Core.Common;
- using Apache.Ignite.Core.Impl.Portable;
- using Apache.Ignite.Core.Impl.Unmanaged;
- using Apache.Ignite.Core.Portable;
- using Apache.Ignite.Core.Transactions;
- using UU = Apache.Ignite.Core.Impl.Unmanaged.UnmanagedUtils;
-
- /// <summary>
- /// Transactions facade.
- /// </summary>
- internal class TransactionsImpl : PlatformTarget, ITransactions
- {
- /** */
- private const int OpCacheConfigParameters = 1;
-
- /** */
- private const int OpMetrics = 2;
-
- /** */
- private readonly TransactionConcurrency _dfltConcurrency;
-
- /** */
- private readonly TransactionIsolation _dfltIsolation;
-
- /** */
- private readonly TimeSpan _dfltTimeout;
-
- /** */
- private readonly Guid _localNodeId;
-
- /// <summary>
- /// Initializes a new instance of the <see cref="TransactionsImpl" /> class.
- /// </summary>
- /// <param name="target">Target.</param>
- /// <param name="marsh">Marshaller.</param>
- /// <param name="localNodeId">Local node id.</param>
- public TransactionsImpl(IUnmanagedTarget target, PortableMarshaller marsh,
- Guid localNodeId) : base(target, marsh)
- {
- _localNodeId = localNodeId;
-
- TransactionConcurrency concurrency = default(TransactionConcurrency);
- TransactionIsolation isolation = default(TransactionIsolation);
- TimeSpan timeout = default(TimeSpan);
-
- DoInOp(OpCacheConfigParameters, stream =>
- {
- var reader = marsh.StartUnmarshal(stream).RawReader();
-
- concurrency = reader.ReadEnum<TransactionConcurrency>();
- isolation = reader.ReadEnum<TransactionIsolation>();
- timeout = TimeSpan.FromMilliseconds(reader.ReadLong());
- });
-
- _dfltConcurrency = concurrency;
- _dfltIsolation = isolation;
- _dfltTimeout = timeout;
- }
-
- /** <inheritDoc /> */
- public ITransaction TxStart()
- {
- return TxStart(_dfltConcurrency, _dfltIsolation);
- }
-
- /** <inheritDoc /> */
- public ITransaction TxStart(TransactionConcurrency concurrency, TransactionIsolation isolation)
- {
- return TxStart(concurrency, isolation, _dfltTimeout, 0);
- }
-
- /** <inheritDoc /> */
- public ITransaction TxStart(TransactionConcurrency concurrency, TransactionIsolation isolation,
- TimeSpan timeout, int txSize)
- {
- var id = UU.TransactionsStart(Target, (int)concurrency, (int)isolation, (long)timeout.TotalMilliseconds,
- txSize);
-
- var innerTx = new TransactionImpl(id, this, concurrency, isolation, timeout, _localNodeId);
-
- return new Transaction(innerTx);
- }
-
- /** <inheritDoc /> */
- public ITransaction Tx
- {
- get { return TransactionImpl.Current; }
- }
-
- /** <inheritDoc /> */
- public ITransactionMetrics GetMetrics()
- {
- return DoInOp(OpMetrics, stream =>
- {
- IPortableRawReader reader = Marshaller.StartUnmarshal(stream, false);
-
- return new TransactionMetricsImpl(reader);
- });
- }
-
- /** <inheritDoc /> */
- public void ResetMetrics()
- {
- UU.TransactionsResetMetrics(Target);
- }
-
- /// <summary>
- /// Commit transaction.
- /// </summary>
- /// <param name="tx">Transaction.</param>
- /// <returns>Final transaction state.</returns>
- internal TransactionState TxCommit(TransactionImpl tx)
- {
- return (TransactionState) UU.TransactionsCommit(Target, tx.Id);
- }
-
- /// <summary>
- /// Rollback transaction.
- /// </summary>
- /// <param name="tx">Transaction.</param>
- /// <returns>Final transaction state.</returns>
- internal TransactionState TxRollback(TransactionImpl tx)
- {
- return (TransactionState)UU.TransactionsRollback(Target, tx.Id);
- }
-
- /// <summary>
- /// Close transaction.
- /// </summary>
- /// <param name="tx">Transaction.</param>
- /// <returns>Final transaction state.</returns>
- internal int TxClose(TransactionImpl tx)
- {
- return UU.TransactionsClose(Target, tx.Id);
- }
-
- /// <summary>
- /// Get transaction current state.
- /// </summary>
- /// <param name="tx">Transaction.</param>
- /// <returns>Transaction current state.</returns>
- internal TransactionState TxState(TransactionImpl tx)
- {
- return GetTransactionState(UU.TransactionsState(Target, tx.Id));
- }
-
- /// <summary>
- /// Set transaction rollback-only flag.
- /// </summary>
- /// <param name="tx">Transaction.</param>
- /// <returns><c>true</c> if the flag was set.</returns>
- internal bool TxSetRollbackOnly(TransactionImpl tx)
- {
- return UU.TransactionsSetRollbackOnly(Target, tx.Id);
- }
-
- /// <summary>
- /// Commits tx in async mode.
- /// </summary>
- internal IFuture CommitAsync(TransactionImpl tx)
- {
- return GetFuture<object>((futId, futTyp) => UU.TransactionsCommitAsync(Target, tx.Id, futId));
- }
-
- /// <summary>
- /// Rolls tx back in async mode.
- /// </summary>
- internal IFuture RollbackAsync(TransactionImpl tx)
- {
- return GetFuture<object>((futId, futTyp) => UU.TransactionsRollbackAsync(Target, tx.Id, futId));
- }
-
- /// <summary>
- /// Gets the state of the transaction from int.
- /// </summary>
- private static TransactionState GetTransactionState(int state)
- {
- return (TransactionState)state;
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/bcefaa24/modules/platform/dotnet/Apache.Ignite.Core/Impl/Unmanaged/IUnmanagedTarget.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Unmanaged/IUnmanagedTarget.cs b/modules/platform/dotnet/Apache.Ignite.Core/Impl/Unmanaged/IUnmanagedTarget.cs
deleted file mode 100644
index 235f20d..0000000
--- a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Unmanaged/IUnmanagedTarget.cs
+++ /dev/null
@@ -1,42 +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.Unmanaged
-{
- using System;
-
- /// <summary>
- /// Unmanaged target.
- /// </summary>
- internal unsafe interface IUnmanagedTarget : IDisposable
- {
- /// <summary>
- /// Context.
- /// </summary>
- void* Context { get; }
-
- /// <summary>
- /// Target.
- /// </summary>
- void* Target { get; }
-
- /// <summary>
- /// Creates new instance with same context and different target.
- /// </summary>
- IUnmanagedTarget ChangeTarget(void* target);
- }
-}
http://git-wip-us.apache.org/repos/asf/ignite/blob/bcefaa24/modules/platform/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbackHandlers.cs
----------------------------------------------------------------------
diff --git a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbackHandlers.cs b/modules/platform/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbackHandlers.cs
deleted file mode 100644
index 07cf309..0000000
--- a/modules/platform/dotnet/Apache.Ignite.Core/Impl/Unmanaged/UnmanagedCallbackHandlers.cs
+++ /dev/null
@@ -1,99 +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.Unmanaged
-{
- using System.Runtime.InteropServices;
-
- /// <summary>
- /// Unmanaged callback handler function pointers.
- /// </summary>
- [StructLayout(LayoutKind.Sequential)]
- internal unsafe struct UnmanagedCallbackHandlers
- {
- internal void* target;
-
- internal void* cacheStoreCreate;
- internal void* cacheStoreInvoke;
- internal void* cacheStoreDestroy;
- internal void* cacheStoreSessionCreate;
-
- internal void* cacheEntryFilterCreate;
- internal void* cacheEntryFilterApply;
- internal void* cacheEntryFilterDestroy;
-
- internal void* cacheInvoke;
-
- internal void* computeTaskMap;
- internal void* computeTaskJobResult;
- internal void* computeTaskReduce;
- internal void* computeTaskComplete;
- internal void* computeJobSerialize;
- internal void* computeJobCreate;
- internal void* computeJobExecute;
- internal void* computeJobCancel;
- internal void* computeJobDestroy;
-
- internal void* continuousQueryListenerApply;
- internal void* continuousQueryFilterCreate;
- internal void* continuousQueryFilterApply;
- internal void* continuousQueryFilterRelease;
-
- internal void* dataStreamerTopologyUpdate;
- internal void* dataStreamerStreamReceiverInvoke;
-
- internal void* futureByteResult;
- internal void* futureBoolResult;
- internal void* futureShortResult;
- internal void* futureCharResult;
- internal void* futureIntResult;
- internal void* futureFloatResult;
- internal void* futureLongResult;
- internal void* futureDoubleResult;
- internal void* futureObjectResult;
- internal void* futureNullResult;
- internal void* futureError;
-
- internal void* lifecycleOnEvent;
-
- internal void* memoryReallocate;
-
- internal void* messagingFilterCreate;
- internal void* messagingFilterApply;
- internal void* messagingFilterDestroy;
-
- internal void* eventFilterCreate;
- internal void* eventFilterApply;
- internal void* eventFilterDestroy;
-
- internal void* serviceInit;
- internal void* serviceExecute;
- internal void* serviceCancel;
- internal void* serviceInvokeMethod;
-
- internal void* clusterNodeFilterApply;
-
- internal void* nodeInfo;
-
- internal void* onStart;
- internal void* onStop;
- internal void* error;
-
- internal void* extensionCbInLongOutLong;
- internal void* extensionCbInLongLongOutLong;
- }
-}