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); }