protected override bool ProcessSync(LocalLogMessage message)
 {
     ProcessSyncWasCalled = true;
     MessagePassedToProcessSync?.Release();
     MessagePassedToProcessSync = message;
     MessagePassedToProcessSync.AddRef();
     return(base.ProcessSync(message));
 }
            /// <summary>
            /// Serializes an indexing operation in a bulk request
            /// </summary>
            /// <param name="message">Message to serialize.</param>
            private void SerializeIndexingRequest(LocalLogMessage message)
            {
                // serialize bulk request item object for indexing
                mRequestContentWriter.Reset();
                mStage.WriteBulkRequestIndexAction_ECS110(mRequestContentWriter);

                // finalize line with a newline character
                mContentStream.WriteByte((byte)'\n');

                // serialize the actual log message
                mRequestContentWriter.Reset();
                mStage.WriteJsonMessage_ECS110(mRequestContentWriter, message);

                // finalize line with a newline character
                mContentStream.WriteByte((byte)'\n');
            }
            /// <summary>
            /// Adds a message to the request.
            /// </summary>
            /// <param name="message">
            /// Message to add to the request
            /// (<see cref="LocalLogMessage.Release"/> is called automatically when sending completes).
            /// </param>
            /// <returns>
            /// <c>true</c> if the the request was successfully added to the request;
            /// <c>false</c> if the request is full.
            /// </returns>
            public bool AddMessage(LocalLogMessage message)
            {
                // abort, if the maximum number of messages per request is reached
                if (mMessagesPreparedToSend.Count >= mStage.mBulkRequestMaxMessageCount)
                {
                    return(false);
                }

                // store current stream position to be able to truncate the stream in case of an error
                long lastStreamPosition = mContentStream.Position;

                // serialize indexing request for the message into the stream
                SerializeIndexingRequest(message);

                if (mContentStream.Position > mStage.mBulkRequestMaxSize)
                {
                    // the maximum request size has been exceeded
                    if (lastStreamPosition < 0)
                    {
                        // the current message is so big that it does not fit into a bulk request
                        // => discard it
                        mStage.WritePipelineError(
                            $"Message is too large ({mContentStream.Position} bytes) to fit into a bulk request (max. {mStage.mBulkRequestMaxMessageCount} bytes). Discarding message...",
                            null);
                        message.Release();
                        mContentStream.SetLength(0);
                        return(true);                        // pretend to have added it to the request...
                    }

                    // truncate the stream to contain only the last messages to avoid exceeding the maximum request size
                    mContentStream.SetLength(lastStreamPosition);
                    IsFull = true;
                    return(false);
                }

                // the message was added to the request successfully
                mMessagesPreparedToSend.AddToBack(message);
                return(true);
            }