Example #1
0
        public void MarkSnapshot(
            long snapshotTypeId,
            long logPosition,
            long leadershipTermId,
            int snapshotIndex,
            SnapshotMark snapshotMark,
            ClusterTimeUnit timeUnit,
            int appVersion)
        {
            idleStrategy.Reset();
            while (true)
            {
                long result = publication.TryClaim(ENCODED_MARKER_LENGTH, bufferClaim);
                if (result > 0)
                {
                    snapshotMarkerEncoder
                    .WrapAndApplyHeader(bufferClaim.Buffer, bufferClaim.Offset, messageHeaderEncoder)
                    .TypeId(snapshotTypeId)
                    .LogPosition(logPosition)
                    .LeadershipTermId(leadershipTermId)
                    .Index(snapshotIndex)
                    .Mark(snapshotMark)
                    .TimeUnit(timeUnit)
                    .AppVersion(appVersion);

                    bufferClaim.Commit();
                    break;
                }

                CheckResultAndIdle(result);
            }
        }
Example #2
0
 public void MarkEnd(
     long snapshotTypeId,
     long logPosition,
     long leadershipTermId,
     int snapshotIndex,
     ClusterTimeUnit timeUnit,
     int appVersion)
 {
     MarkSnapshot(
         snapshotTypeId, logPosition, leadershipTermId, snapshotIndex, SnapshotMark.END, timeUnit, appVersion);
 }
Example #3
0
 public void OnNewLeadershipTermEvent(
     long leadershipTermId,
     long logPosition,
     long timestamp,
     long termBaseLogPosition,
     int leaderMemberId,
     int logSessionId,
     ClusterTimeUnit timeUnit,
     int appVersion)
 {
     Console.WriteLine($"OnNewLeadershipTerm: leadershipTermId={leadershipTermId}");
 }
 public SnapshotMarkerEncoder TimeUnit(ClusterTimeUnit value)
 {
     _buffer.PutInt(_offset + 32, (int)value, ByteOrder.LittleEndian);
     return(this);
 }
Example #5
0
 public NewLeadershipTermEventEncoder TimeUnit(ClusterTimeUnit value)
 {
     _buffer.PutInt(_offset + 40, (int)value, ByteOrder.LittleEndian);
     return(this);
 }
Example #6
0
        public ControlledFragmentHandlerAction OnFragment(IDirectBuffer buffer, int offset, int length, Header header)
        {
            messageHeaderDecoder.Wrap(buffer, offset);

            int schemaId = messageHeaderDecoder.SchemaId();

            if (schemaId != MessageHeaderDecoder.SCHEMA_ID)
            {
                throw new ClusterException("expected schemaId=" + MessageHeaderDecoder.SCHEMA_ID + ", actual=" +
                                           schemaId);
            }

            int templateId = messageHeaderDecoder.TemplateId();

            switch (templateId)
            {
            case SnapshotMarkerDecoder.TEMPLATE_ID:
                snapshotMarkerDecoder.Wrap(
                    buffer,
                    offset + MessageHeaderDecoder.ENCODED_LENGTH,
                    messageHeaderDecoder.BlockLength(),
                    messageHeaderDecoder.Version());

                long typeId = snapshotMarkerDecoder.TypeId();
                if (typeId != ClusteredServiceContainer.Configuration.SNAPSHOT_TYPE_ID)
                {
                    throw new ClusterException("unexpected snapshot type: " + typeId);
                }

                switch (snapshotMarkerDecoder.Mark())
                {
                case SnapshotMark.BEGIN:
                    if (inSnapshot)
                    {
                        throw new ClusterException("already in snapshot");
                    }

                    inSnapshot = true;
                    appVersion = snapshotMarkerDecoder.AppVersion();
                    timeUnit   = snapshotMarkerDecoder.TimeUnit() == ClusterTimeUnit.NULL_VALUE
                                ? ClusterTimeUnit.MILLIS
                                : snapshotMarkerDecoder.TimeUnit();

                    return(ControlledFragmentHandlerAction.CONTINUE);

                case SnapshotMark.END:
                    if (!inSnapshot)
                    {
                        throw new ClusterException("missing begin snapshot");
                    }

                    isDone = true;
                    return(ControlledFragmentHandlerAction.BREAK);
                }

                break;

            case ClientSessionDecoder.TEMPLATE_ID:
                clientSessionDecoder.Wrap(
                    buffer,
                    offset + MessageHeaderDecoder.ENCODED_LENGTH,
                    messageHeaderDecoder.BlockLength(),
                    messageHeaderDecoder.Version());

                string responseChannel  = clientSessionDecoder.ResponseChannel();
                byte[] encodedPrincipal = new byte[clientSessionDecoder.EncodedPrincipalLength()];
                clientSessionDecoder.GetEncodedPrincipal(encodedPrincipal, 0, encodedPrincipal.Length);

                agent.AddSession(
                    clientSessionDecoder.ClusterSessionId(),
                    clientSessionDecoder.ResponseStreamId(),
                    responseChannel,
                    encodedPrincipal);
                break;
            }

            return(ControlledFragmentHandlerAction.CONTINUE);
        }