public override unsafe void Write(Slice changeVector, Stream stream, byte[] tempBuffer, OutgoingReplicationStatsScope stats) { fixed(byte *pTemp = tempBuffer) { if (AssertChangeVectorSize() > tempBuffer.Length) { ThrowTooManyChangeVectorEntries(this, Id); } var tempBufferPos = WriteCommon(changeVector, pTemp); *(int *)(pTemp + tempBufferPos) = Id.Size; tempBufferPos += sizeof(int); Memory.Copy(pTemp + tempBufferPos, Id.Buffer, Id.Size); tempBufferPos += Id.Size; *(int *)(pTemp + tempBufferPos) = Collection.Size; tempBufferPos += sizeof(int); Memory.Copy(pTemp + tempBufferPos, Collection.Buffer, Collection.Size); tempBufferPos += Collection.Size; *(int *)(pTemp + tempBufferPos) = Values.Size; tempBufferPos += sizeof(int); Memory.Copy(pTemp + tempBufferPos, Values.BasePointer, Values.Size); tempBufferPos += Values.Size; stream.Write(tempBuffer, 0, tempBufferPos); Values.TryGet(CountersStorage.Values, out BlittableJsonReaderObject counters); stats.RecordCountersOutput(counters?.Count ?? 0); } }
public abstract void Write(Slice changeVector, Stream stream, byte[] tempBuffer, OutgoingReplicationStatsScope stats);
public override unsafe void Write(Slice changeVector, Stream stream, byte[] tempBuffer, OutgoingReplicationStatsScope stats) { fixed(byte *pTemp = tempBuffer) { if (AssertChangeVectorSize() > tempBuffer.Length) { ThrowTooManyChangeVectorEntries(this, Key.ToString()); } var tempBufferPos = WriteCommon(changeVector, pTemp); *(long *)(pTemp + tempBufferPos) = LastModifiedTicks; tempBufferPos += sizeof(long); *(int *)(pTemp + tempBufferPos) = Key.Size; tempBufferPos += sizeof(int); Memory.Copy(pTemp + tempBufferPos, Key.Content.Ptr, Key.Size); tempBufferPos += Key.Size; stream.Write(tempBuffer, 0, tempBufferPos); stats.RecordAttachmentTombstoneOutput(); } }
public override unsafe void Write(Slice changeVector, Stream stream, byte[] tempBuffer, OutgoingReplicationStatsScope stats) { fixed(byte *pTemp = tempBuffer) { if (AssertChangeVectorSize() > tempBuffer.Length) { ThrowTooManyChangeVectorEntries(this, Key.ToString()); } var tempBufferPos = WriteCommon(changeVector, pTemp); *(int *)(pTemp + tempBufferPos) = Key.Size; tempBufferPos += sizeof(int); Memory.Copy(pTemp + tempBufferPos, Key.Content.Ptr, Key.Size); tempBufferPos += Key.Size; *(int *)(pTemp + tempBufferPos) = Segment.NumberOfBytes; tempBufferPos += sizeof(int); Memory.Copy(pTemp + tempBufferPos, Segment.Ptr, Segment.NumberOfBytes); tempBufferPos += Segment.NumberOfBytes; *(int *)(pTemp + tempBufferPos) = Collection.Size; tempBufferPos += sizeof(int); Memory.Copy(pTemp + tempBufferPos, Collection.Buffer, Collection.Size); tempBufferPos += Collection.Size; *(int *)(pTemp + tempBufferPos) = Name.Size; tempBufferPos += sizeof(int); Memory.Copy(pTemp + tempBufferPos, Name.Buffer, Name.Size); tempBufferPos += Name.Size; stream.Write(tempBuffer, 0, tempBufferPos); stats.RecordTimeSeriesOutput(Segment.NumberOfBytes); } }
public override unsafe void Write(Slice changeVector, Stream stream, byte[] tempBuffer, OutgoingReplicationStatsScope stats) { fixed(byte *pTemp = tempBuffer) { if (AssertChangeVectorSize() > tempBuffer.Length) { ThrowTooManyChangeVectorEntries(this, Key.ToString()); } var tempBufferPos = WriteCommon(changeVector, pTemp); *(int *)(pTemp + tempBufferPos) = Key.Size; tempBufferPos += sizeof(int); Memory.Copy(pTemp + tempBufferPos, Key.Content.Ptr, Key.Size); tempBufferPos += Key.Size; *(int *)(pTemp + tempBufferPos) = Name.Size; tempBufferPos += sizeof(int); Memory.Copy(pTemp + tempBufferPos, Name.Buffer, Name.Size); tempBufferPos += Name.Size; *(int *)(pTemp + tempBufferPos) = ContentType.Size; tempBufferPos += sizeof(int); Memory.Copy(pTemp + tempBufferPos, ContentType.Buffer, ContentType.Size); tempBufferPos += ContentType.Size; pTemp[tempBufferPos++] = (byte)Base64Hash.Size; Base64Hash.CopyTo(pTemp + tempBufferPos); tempBufferPos += Base64Hash.Size; stream.Write(tempBuffer, 0, tempBufferPos); } }
public override unsafe void Write(Slice changeVector, Stream stream, byte[] tempBuffer, OutgoingReplicationStatsScope stats) { fixed(byte *pTemp = tempBuffer) { if (AssertChangeVectorSize() > tempBuffer.Length) { ThrowTooManyChangeVectorEntries(this, Id); } var tempBufferPos = WriteCommon(changeVector, pTemp); *(long *)(pTemp + tempBufferPos) = LastModifiedTicks; tempBufferPos += sizeof(long); *(DocumentFlags *)(pTemp + tempBufferPos) = Flags; tempBufferPos += sizeof(DocumentFlags); *(int *)(pTemp + tempBufferPos) = Id.Size; tempBufferPos += sizeof(int); Memory.Copy(pTemp + tempBufferPos, Id.Buffer, Id.Size); tempBufferPos += Id.Size; if (Data != null) { *(int *)(pTemp + tempBufferPos) = Data.Size; tempBufferPos += sizeof(int); var docReadPos = 0; while (docReadPos < Data.Size) { var sizeToCopy = Math.Min(Data.Size - docReadPos, tempBuffer.Length - tempBufferPos); if (sizeToCopy == 0) // buffer is full, need to flush it { stream.Write(tempBuffer, 0, tempBufferPos); tempBufferPos = 0; continue; } Memory.Copy(pTemp + tempBufferPos, Data.BasePointer + docReadPos, sizeToCopy); tempBufferPos += sizeToCopy; docReadPos += sizeToCopy; } stats.RecordDocumentOutput(Data.Size); } else { int dataSize; if (Type == ReplicationItemType.DocumentTombstone) { dataSize = -1; } else if ((Flags & DocumentFlags.DeleteRevision) == DocumentFlags.DeleteRevision) { dataSize = -2; } else { throw new InvalidDataException("Cannot write document with empty data."); } *(int *)(pTemp + tempBufferPos) = dataSize; tempBufferPos += sizeof(int); if (Collection == null) //precaution { throw new InvalidDataException("Cannot write item with empty collection name..."); } *(int *)(pTemp + tempBufferPos) = Collection.Size; tempBufferPos += sizeof(int); Memory.Copy(pTemp + tempBufferPos, Collection.Buffer, Collection.Size); tempBufferPos += Collection.Size; stats.RecordDocumentTombstoneOutput(); } stream.Write(tempBuffer, 0, tempBufferPos); } }