private long DataStreamerStreamReceiverInvoke(long memPtr, long unused, long unused1, void *cache) { using (var stream = IgniteManager.Memory.Get(memPtr).GetStream()) { var rcvPtr = stream.ReadLong(); var keepBinary = stream.ReadBool(); var reader = _ignite.Marshaller.StartUnmarshal(stream, BinaryMode.ForceBinary); var binaryReceiver = reader.ReadObject <BinaryObject>(); var receiver = _handleRegistry.Get <StreamReceiverHolder>(rcvPtr) ?? binaryReceiver.Deserialize <StreamReceiverHolder>(); if (receiver != null) { var cacheRef = _jvm.AttachCurrentThread().NewGlobalRef((IntPtr)cache); var target = new PlatformJniTarget(cacheRef, _ignite.Marshaller); receiver.Receive(_ignite, target, stream, keepBinary); } return(0); } }
private long AffinityFunctionInit(long memPtr, long unused, long unused1, void *baseFunc) { using (var stream = IgniteManager.Memory.Get(memPtr).GetStream()) { var reader = BinaryUtils.Marshaller.StartUnmarshal(stream); var func = reader.ReadObjectEx <IAffinityFunction>(); ResourceProcessor.Inject(func, _ignite); var affBase = func as AffinityFunctionBase; if (affBase != null) { var baseFunc0 = new PlatformJniTarget(UU.Acquire(_ctx, baseFunc), _ignite.Marshaller); affBase.SetBaseFunction(new PlatformAffinityFunction(baseFunc0)); } return(_handleRegistry.Allocate(func)); } }
/// <summary> /// Starts Ignite with given configuration. /// </summary> /// <returns>Started Ignite.</returns> public static unsafe IIgnite Start(IgniteConfiguration cfg) { IgniteArgumentCheck.NotNull(cfg, "cfg"); lock (SyncRoot) { // 0. Init logger var log = cfg.Logger ?? new JavaLogger(); log.Debug("Starting Ignite.NET " + Assembly.GetExecutingAssembly().GetName().Version); // 1. Check GC settings. CheckServerGc(cfg, log); // 2. Create context. IgniteUtils.LoadDlls(cfg.JvmDllPath, log); var cbs = new UnmanagedCallbacks(log); IgniteManager.CreateJvmContext(cfg, cbs, log); log.Debug("JVM started."); var gridName = cfg.IgniteInstanceName; if (cfg.AutoGenerateIgniteInstanceName) { gridName = (gridName ?? "ignite-instance-") + Guid.NewGuid(); } // 3. Create startup object which will guide us through the rest of the process. _startup = new Startup(cfg, cbs); PlatformJniTarget interopProc = null; try { // 4. Initiate Ignite start. UU.IgnitionStart(cbs.Context, cfg.SpringConfigUrl, gridName, ClientMode, cfg.Logger != null); // 5. At this point start routine is finished. We expect STARTUP object to have all necessary data. var node = _startup.Ignite; interopProc = (PlatformJniTarget)node.InteropProcessor; var javaLogger = log as JavaLogger; if (javaLogger != null) { javaLogger.SetIgnite(node); } // 6. On-start callback (notify lifecycle components). node.OnStart(); Nodes[new NodeKey(_startup.Name)] = node; return(node); } catch (Exception) { // 1. Perform keys cleanup. string name = _startup.Name; if (name != null) { NodeKey key = new NodeKey(name); if (Nodes.ContainsKey(key)) { Nodes.Remove(key); } } // 2. Stop Ignite node if it was started. if (interopProc != null) { UU.IgnitionStop(interopProc.Target.Context, gridName, true); } // 3. Throw error further (use startup error if exists because it is more precise). if (_startup.Error != null) { // Wrap in a new exception to preserve original stack trace. throw new IgniteException("Failed to start Ignite.NET, check inner exception for details", _startup.Error); } throw; } finally { var ignite = _startup.Ignite; _startup = null; if (ignite != null) { ignite.ProcessorReleaseStart(); } } } }