/// <summary> /// Check stream reallocation. /// </summary> /// <param name="mem">Memory.</param> private void CheckStreamReallocate(IPlatformMemory mem) { Assert.IsTrue(mem.Capacity >= 256); int dataLen = 2048 + 13; Random rand = new Random(); byte[] data = new byte[dataLen]; for (int i = 0; i < data.Length; i++) { data[i] = (byte)rand.Next(0, 255); } PlatformMemoryStream stream = mem.Stream(); stream.WriteByteArray(data); stream.SynchronizeOutput(); Assert.IsTrue(mem.Capacity >= dataLen); stream.Reset(); stream.SynchronizeInput(); byte[] data0 = stream.ReadByteArray(dataLen); Assert.AreEqual(data, data0); }
private long ComputeJobExecute(long memPtr) { using (PlatformMemoryStream stream = IgniteManager.Memory.Get(memPtr).GetStream()) { var job = Job(stream.ReadLong()); var cancel = stream.ReadBool(); stream.Reset(); job.ExecuteRemote(stream, cancel); } return(0); }
private long CacheInvoke(long memPtr) { using (PlatformMemoryStream stream = IgniteManager.Memory.Get(memPtr).GetStream()) { var result = ReadAndRunCacheEntryProcessor(stream, _ignite); stream.Reset(); result.Write(stream, _ignite.Marshaller); stream.SynchronizeOutput(); } return(0); }
private long CacheStoreInvoke(long memPtr) { using (PlatformMemoryStream stream = IgniteManager.Memory.Get(memPtr).GetStream()) { try { var store = _handleRegistry.Get <CacheStore>(stream.ReadLong(), true); return(store.Invoke(stream, _ignite)); } catch (Exception e) { stream.Reset(); _ignite.Marshaller.StartMarshal(stream).WriteObject(e); return(-1); } } }
public void Map(PlatformMemoryStream stream) { IList <IClusterNode> subgrid; ClusterGroupImpl prj = (ClusterGroupImpl)_compute.ClusterGroup; var ignite = (Ignite)prj.Ignite; // 1. Unmarshal topology info if topology changed. var reader = prj.Marshaller.StartUnmarshal(stream); if (reader.ReadBoolean()) { long topVer = reader.ReadLong(); List <IClusterNode> nodes = new List <IClusterNode>(reader.ReadInt()); int nodesCnt = reader.ReadInt(); subgrid = new List <IClusterNode>(nodesCnt); for (int i = 0; i < nodesCnt; i++) { IClusterNode node = ignite.GetNode(reader.ReadGuid()); nodes.Add(node); if (reader.ReadBoolean()) { subgrid.Add(node); } } // Update parent projection to help other task callers avoid this overhead. // Note that there is a chance that topology changed even further and this update fails. // It means that some of subgrid nodes could have left the Grid. This is not critical // for us, because Java will handle it gracefully. prj.UpdateTopology(topVer, nodes); } else { IList <IClusterNode> nodes = prj.NodesNoRefresh(); Debug.Assert(nodes != null, "At least one topology update should have occurred."); subgrid = IgniteUtils.Shuffle(nodes); } // 2. Perform map. IDictionary <IComputeJob <T>, IClusterNode> map; Exception err; try { map = _task.Map(subgrid, _arg); err = null; } catch (Exception e) { map = null; err = e; // Java can receive another exception in case of marshalling failure but it is not important. Finish(default(TR), e); } // 3. Write map result to the output stream. stream.Reset(); BinaryWriter writer = prj.Marshaller.StartMarshal(stream); try { if (err == null) { writer.WriteBoolean(true); // Success flag. if (map == null) { writer.WriteBoolean(false); // Map produced no result. } else { writer.WriteBoolean(true); // Map produced result. _jobHandles = WriteJobs(writer, map); } } else { writer.WriteBoolean(false); // Map failed. // Write error as string because it is not important for Java, we need only to print // a message in the log. writer.WriteString("Map step failed [errType=" + err.GetType().Name + ", errMsg=" + err.Message + ']'); } } catch (Exception e) { // Something went wrong during marshaling. Finish(default(TR), e); stream.Reset(); writer.WriteBoolean(false); // Map failed. writer.WriteString(e.Message); // Write error message. } finally { prj.Marshaller.FinishMarshal(writer); } }