Example #1
0
        private long AffinityFunctionAssignPartitions(long memPtr)
        {
            using (var stream = IgniteManager.Memory.Get(memPtr).GetStream())
            {
                var ptr   = stream.ReadLong();
                var ctx   = new AffinityFunctionContext(_ignite.Marshaller.StartUnmarshal(stream));
                var func  = _handleRegistry.Get <IAffinityFunction>(ptr, true);
                var parts = func.AssignPartitions(ctx);

                if (parts == null)
                {
                    throw new IgniteException(func.GetType() + ".AssignPartitions() returned invalid result: null");
                }

                stream.Reset();

                AffinityFunctionSerializer.WritePartitions(parts, stream, _ignite.Marshaller);

                return(0);
            }
        }
Example #2
0
            public override IEnumerable <IEnumerable <IClusterNode> > AssignPartitions(AffinityFunctionContext context)
            {
                var baseRes = base.AssignPartitions(context).ToList();  // test base call

                Assert.AreEqual(Partitions, baseRes.Count);

                return(baseRes);
            }
Example #3
0
 public IEnumerable <IEnumerable <IClusterNode> > AssignPartitions(AffinityFunctionContext context)
 {
     return(Enumerable.Range(0, Partitions).Select(x => context.CurrentTopologySnapshot));
 }
Example #4
0
            public override IEnumerable <IEnumerable <IClusterNode> > AssignPartitions(AffinityFunctionContext context)
            {
                var res = base.AssignPartitions(context).Reverse();

                Interlocked.Increment(ref AssignCount);

                return(res);
            }
 /** <inheritdoc /> */
 public IEnumerable <IEnumerable <IClusterNode> > AssignPartitions(AffinityFunctionContext context)
 {
     return(DoInOp((int)Op.AssignPartitions, s => AffinityFunctionSerializer.ReadPartitions(s, Marshaller)));
 }
        /// <summary>
        /// Gets affinity nodes for a partition. In case of replicated cache, all returned
        /// nodes are updated in the same manner. In case of partitioned cache, the returned
        /// list should contain only the primary and back up nodes with primary node being
        /// always first.
        /// <pare />
        /// Note that partitioned affinity must obey the following contract: given that node
        /// <code>N</code> is primary for some key <code>K</code>, if any other node(s) leave
        /// grid and no node joins grid, node <code>N</code> will remain primary for key <code>K</code>.
        /// </summary>
        /// <param name="context">The affinity function context.</param>
        /// <returns>
        /// A collection of partitions, where each partition is a collection of nodes,
        /// where first node is a primary node, and other nodes are backup nodes.
        /// </returns>
        public virtual IEnumerable <IEnumerable <IClusterNode> > AssignPartitions(AffinityFunctionContext context)
        {
            ThrowIfUninitialized();

            return(_baseFunction.AssignPartitions(context));
        }