/// <summary> /// Prepare lifecycle beans. /// </summary> /// <param name="reader">Reader.</param> /// <param name="outStream">Output stream.</param> /// <param name="handleRegistry">Handle registry.</param> private static void PrepareLifecycleBeans(BinaryReader reader, PlatformMemoryStream outStream, HandleRegistry handleRegistry) { IList<LifecycleBeanHolder> beans = new List<LifecycleBeanHolder>(); // 1. Read beans defined in Java. int cnt = reader.ReadInt(); for (int i = 0; i < cnt; i++) beans.Add(new LifecycleBeanHolder(CreateLifecycleBean(reader))); // 2. Append beans definied in local configuration. ICollection<ILifecycleBean> nativeBeans = _startup.Configuration.LifecycleBeans; if (nativeBeans != null) { foreach (ILifecycleBean nativeBean in nativeBeans) beans.Add(new LifecycleBeanHolder(nativeBean)); } // 3. Write bean pointers to Java stream. outStream.WriteInt(beans.Count); foreach (LifecycleBeanHolder bean in beans) outStream.WriteLong(handleRegistry.AllocateCritical(bean)); outStream.SynchronizeOutput(); // 4. Set beans to STARTUP object. _startup.LifecycleBeans = beans; }
/// <summary> /// Writes the partitions assignment to a stream. /// </summary> /// <param name="parts">The parts.</param> /// <param name="stream">The stream.</param> /// <param name="marsh">The marshaller.</param> internal static void WritePartitions(IEnumerable<IEnumerable<IClusterNode>> parts, PlatformMemoryStream stream, Marshaller marsh) { Debug.Assert(parts != null); Debug.Assert(stream != null); Debug.Assert(marsh != null); IBinaryRawWriter writer = marsh.StartMarshal(stream); var partCnt = 0; writer.WriteInt(partCnt); // reserve size foreach (var part in parts) { if (part == null) throw new IgniteException("IAffinityFunction.AssignPartitions() returned invalid partition: null"); partCnt++; var nodeCnt = 0; var cntPos = stream.Position; writer.WriteInt(nodeCnt); // reserve size foreach (var node in part) { nodeCnt++; writer.WriteGuid(node.Id); } var endPos = stream.Position; stream.Seek(cntPos, SeekOrigin.Begin); stream.WriteInt(nodeCnt); stream.Seek(endPos, SeekOrigin.Begin); } stream.SynchronizeOutput(); stream.Seek(0, SeekOrigin.Begin); writer.WriteInt(partCnt); }