public SequenceNumber ReserveAndAppend( IList <ArraySegment <byte> > data, SequenceNumber nextUndoRecord, SequenceNumber previousRecord, RecordAppendOptions recordAppendOptions, ReservationCollection reservationCollection, params long[] reservations) { if (reservationCollection == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentNull("reservationCollection")); } if (reservations == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentNull("reservations")); } FileReservationCollection fileResCollection = null; fileResCollection = reservationCollection as FileReservationCollection; if (fileResCollection == null || !fileResCollection.IsMyCollection(this)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentInvalid(SR.LogRecSeq_InvalidReservationCollection)); } foreach (long reservationSize in reservations) { if (reservationSize < 0) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentOutOfRange("reservations")); } } foreach (long reservationSize in reservations) { fileResCollection.Add(reservationSize); } bool throwing = true; try { SequenceNumber returnValue = Append(data, nextUndoRecord, previousRecord, recordAppendOptions); throwing = false; return(returnValue); } finally { if (throwing && fileResCollection != null) { foreach (long reservationSize in reservations) { fileResCollection.Remove(reservationSize); } } } }
public Task <SequenceNumber> Append( IList <ArraySegment <byte> > record, SequenceNumber nextUndoRecord, SequenceNumber previousRecord, RecordAppendOptions options) { this.EnsureAvailableSpace(); return(this.log.AppendAsync(record, nextUndoRecord, previousRecord, options)); }
public SequenceNumber Append( ArraySegment <byte> data, SequenceNumber nextUndoRecord, SequenceNumber previousRecord, RecordAppendOptions recordAppendOptions) { return(Append(new ArraySegment <byte>[] { data }, nextUndoRecord, previousRecord, recordAppendOptions)); }
public SequenceNumber Append( IList <ArraySegment <byte> > data, SequenceNumber nextUndoRecord, SequenceNumber previousRecord, RecordAppendOptions recordAppendOptions, ReservationCollection reservations) { int size = 0; if (reservations == null) { return(Append(data, nextUndoRecord, previousRecord, recordAppendOptions)); } if (data == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentNull("data")); } FileReservationCollection reservationCollection = reservations as FileReservationCollection; if (reservationCollection == null || !reservationCollection.IsMyCollection(this)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentInvalid(SR.LogRecSeq_InvalidReservationCollection)); } for (int i = 0; i < data.Count; i++) { size += data[i].Count; } long reservation = reservationCollection.GetBestMatchingReservation(size); if (reservation < 0) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ReservationNotFound()); } bool throwing = true; try { SequenceNumber returnValue = this.Append(data, nextUndoRecord, previousRecord, recordAppendOptions); throwing = false; return(returnValue); } finally { if (throwing) { reservationCollection.Add(reservation); } } }
public IAsyncResult BeginAppend( IList <ArraySegment <byte> > data, SequenceNumber nextUndoRecord, SequenceNumber previousRecord, RecordAppendOptions recordAppendOptions, AsyncCallback callback, object state) { SequenceNumber result = Append(data, nextUndoRecord, previousRecord, recordAppendOptions); return(new FileRecordSequenceCompletedAsyncResult(result, callback, state, Work.Append)); }
public IAsyncResult BeginReserveAndAppend( IList <ArraySegment <byte> > data, SequenceNumber userRecord, SequenceNumber previousRecord, RecordAppendOptions recordAppendOptions, ReservationCollection reservationCollection, long[] reservations, AsyncCallback callback, object state) { long totalRecordSize; LogReservationCollection lrc; this.store.ValidateSequenceNumber( ref userRecord, SequenceNumberConstraint.Arbitrary, "userRecord"); this.store.ValidateSequenceNumber( ref previousRecord, SequenceNumberConstraint.Arbitrary, "previousRecord"); if (reservationCollection == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentNull("reservationCollection")); } if (reservations == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentNull("reservations")); } ValidateReservations(reservations); totalRecordSize = ValidateData(data); lrc = ValidateReservationCollection(reservationCollection); EnsureMarshalContext(); LogAppendAsyncResult result = new LogAppendAsyncResult(this, callback, state); result.Data = data; result.TotalRecordSize = totalRecordSize; result.UserLsn = userRecord.High; result.PreviousLsn = previousRecord.High; result.RecordAppendOptions = recordAppendOptions; result.ReservationCollection = lrc; result.Reservations = reservations; result.Start(); return(result); }
public IAsyncResult BeginAppend( IList <ArraySegment <byte> > data, SequenceNumber userRecord, SequenceNumber previousRecord, RecordAppendOptions recordAppendOptions, ReservationCollection reservations, AsyncCallback callback, object state) { long totalRecordSize; LogReservationCollection lrc; if ((this.store.Access & FileAccess.Write) == 0) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.NotSupported(SR.NotSupported_ReadOnly)); } if (recordAppendOptions > (RecordAppendOptions.ForceAppend | RecordAppendOptions.ForceFlush) || recordAppendOptions < RecordAppendOptions.None) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentOutOfRange("recordAppendOptions")); } this.store.ValidateSequenceNumber( ref userRecord, SequenceNumberConstraint.Arbitrary, "userRecord"); this.store.ValidateSequenceNumber( ref previousRecord, SequenceNumberConstraint.Arbitrary, "previousRecord"); totalRecordSize = ValidateData(data); lrc = ValidateReservationCollection(reservations); EnsureMarshalContext(); LogAppendAsyncResult result = new LogAppendAsyncResult(this, callback, state); result.Data = data; result.TotalRecordSize = totalRecordSize; result.UserLsn = userRecord.High; result.PreviousLsn = previousRecord.High; result.RecordAppendOptions = recordAppendOptions; result.ReservationCollection = lrc; result.Start(); return(result); }
public SequenceNumber Append( IList <ArraySegment <byte> > data, SequenceNumber userRecord, SequenceNumber previousRecord, RecordAppendOptions recordAppendOptions) { return(Append( data, userRecord, previousRecord, recordAppendOptions, null)); }
public SequenceNumber ReserveAndAppend( IList <ArraySegment <byte> > data, SequenceNumber userRecord, SequenceNumber previousRecord, RecordAppendOptions recordAppendOptions, ReservationCollection reservationCollection, params long[] reservations) { long totalRecordSize; LogReservationCollection lrc; this.store.ValidateSequenceNumber( ref userRecord, SequenceNumberConstraint.Arbitrary, "userRecord"); this.store.ValidateSequenceNumber( ref previousRecord, SequenceNumberConstraint.Arbitrary, "previousRecord"); totalRecordSize = ValidateData(data); lrc = ValidateReservationCollection(reservationCollection); if (lrc == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentNull("reservationCollection")); } if (reservations == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentNull("reservations")); } ValidateReservations(reservations); EnsureMarshalContext(); LogReserveAndAppendState state = new LogReserveAndAppendState(); state.RecordSequence = this; state.Data = data; state.TotalRecordSize = totalRecordSize; state.UserLsn = userRecord.High; state.PreviousLsn = previousRecord.High; state.RecordAppendOptions = recordAppendOptions; state.ReservationCollection = lrc; state.Reservations = reservations; state.Start(); return(new SequenceNumber(state.ResultLsn)); }
public IAsyncResult BeginAppend( ArraySegment <byte> data, SequenceNumber nextUndoRecord, SequenceNumber previousRecord, RecordAppendOptions recordAppendOptions, AsyncCallback callback, object state) { return(BeginAppend(new ArraySegment <byte>[] { data }, nextUndoRecord, previousRecord, recordAppendOptions, callback, state)); }
public SequenceNumber ReserveAndAppend( ArraySegment <byte> data, SequenceNumber nextUndoRecord, SequenceNumber previousRecord, RecordAppendOptions recordAppendOptions, ReservationCollection reservationCollection, params long[] reservations) { return(ReserveAndAppend(new ArraySegment <byte>[] { data }, nextUndoRecord, previousRecord, recordAppendOptions, reservationCollection, reservations)); }
public IAsyncResult BeginAppend( IList <ArraySegment <byte> > data, SequenceNumber userRecord, SequenceNumber previousRecord, RecordAppendOptions recordAppendOptions, AsyncCallback callback, object state) { return(BeginAppend( data, userRecord, previousRecord, recordAppendOptions, null, callback, state)); }
public SequenceNumber Append( IList <ArraySegment <byte> > data, SequenceNumber nextUndoRecord, SequenceNumber previousRecord, RecordAppendOptions recordAppendOptions) { if (data == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentNull("data")); } if ((this.access & FileAccess.Write) == 0) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.NotSupported(SR.NotSupported_ReadOnly)); } if (recordAppendOptions > (RecordAppendOptions.ForceAppend | RecordAppendOptions.ForceFlush) || recordAppendOptions < RecordAppendOptions.None) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentOutOfRange("recordAppendOptions")); } SequenceNumber sn; bool forceFlush = (recordAppendOptions & RecordAppendOptions.ForceFlush) != 0; try { sn = frsHelper.Append(data, nextUndoRecord, previousRecord, forceFlush); } catch (SequenceFullException) { RaiseTailPinnedEvent(); if (this.RetryAppend) { sn = frsHelper.Append(data, nextUndoRecord, previousRecord, forceFlush); } else { throw; } } return(sn); }
public static Task<SequenceNumber> AppendAsync( this LogRecordSequence sequence, ArraySegment<byte> data, SequenceNumber nextUndoRecord, SequenceNumber previousRecord, RecordAppendOptions recordAppendOptions) { return Task.Factory.FromAsync( (callback, state) => ((LogRecordSequence)state).BeginAppend( data, nextUndoRecord, previousRecord, recordAppendOptions, callback, state), sequence.EndAppend, sequence); }
public static Task <SequenceNumber> AppendAsync( this LogRecordSequence sequence, ArraySegment <byte> data, SequenceNumber nextUndoRecord, SequenceNumber previousRecord, RecordAppendOptions recordAppendOptions) { return (Task.Factory.FromAsync( (callback, state) => ((LogRecordSequence)state).BeginAppend( data, nextUndoRecord, previousRecord, recordAppendOptions, callback, state), sequence.EndAppend, sequence)); }
public static Task<SequenceNumber> AppendAsync( this LogRecordSequence sequence, IList<ArraySegment<byte>> data, SequenceNumber userRecord, SequenceNumber previousRecord, RecordAppendOptions recordAppendOptions, ReservationCollection reservationCollection) { return Task.Factory.FromAsync( (callback, state) => ((LogRecordSequence)state).BeginAppend( data, userRecord, previousRecord, recordAppendOptions, reservationCollection, callback, state), sequence.EndAppend, sequence); }
public static Task <SequenceNumber> AppendAsync( this LogRecordSequence sequence, IList <ArraySegment <byte> > data, SequenceNumber userRecord, SequenceNumber previousRecord, RecordAppendOptions recordAppendOptions, ReservationCollection reservationCollection) { return (Task.Factory.FromAsync( (callback, state) => ((LogRecordSequence)state).BeginAppend( data, userRecord, previousRecord, recordAppendOptions, reservationCollection, callback, state), sequence.EndAppend, sequence)); }
public Task<SequenceNumber> Append( IList<ArraySegment<byte>> record, SequenceNumber nextUndoRecord, SequenceNumber previousRecord, RecordAppendOptions options) { this.EnsureAvailableSpace(); return this.log.AppendAsync(record, nextUndoRecord, previousRecord, options); }
public SequenceNumber Append( IList<ArraySegment<byte>> data, SequenceNumber nextUndoRecord, SequenceNumber previousRecord, RecordAppendOptions recordAppendOptions) { if (data == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentNull("data")); } if ((this.access & FileAccess.Write) == 0) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.NotSupported(SR.NotSupported_ReadOnly)); } if (recordAppendOptions > (RecordAppendOptions.ForceAppend | RecordAppendOptions.ForceFlush) || recordAppendOptions < RecordAppendOptions.None) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentOutOfRange("recordAppendOptions")); } SequenceNumber sn; bool forceFlush = (recordAppendOptions & RecordAppendOptions.ForceFlush) != 0; try { sn = frsHelper.Append(data, nextUndoRecord, previousRecord, forceFlush); } catch (SequenceFullException) { RaiseTailPinnedEvent(); if (this.RetryAppend) { sn = frsHelper.Append(data, nextUndoRecord, previousRecord, forceFlush); } else { throw; } } return sn; }
public SequenceNumber Append( ArraySegment<byte> data, SequenceNumber nextUndoRecord, SequenceNumber previousRecord, RecordAppendOptions recordAppendOptions) { return Append(new ArraySegment<byte>[] { data }, nextUndoRecord, previousRecord, recordAppendOptions); }
public SequenceNumber Append( IList<ArraySegment<byte>> data, SequenceNumber nextUndoRecord, SequenceNumber previousRecord, RecordAppendOptions recordAppendOptions, ReservationCollection reservations) { int size = 0; if (reservations == null) { return Append(data, nextUndoRecord, previousRecord, recordAppendOptions); } if (data == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentNull("data")); } FileReservationCollection reservationCollection = reservations as FileReservationCollection; if (reservationCollection == null || !reservationCollection.IsMyCollection(this)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentInvalid(SR.LogRecSeq_InvalidReservationCollection)); } for (int i = 0; i < data.Count; i++) { size += data[i].Count; } long reservation = reservationCollection.GetBestMatchingReservation(size); if (reservation < 0) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ReservationNotFound()); } bool throwing = true; try { SequenceNumber returnValue = this.Append(data, nextUndoRecord, previousRecord, recordAppendOptions); throwing = false; return returnValue; } finally { if (throwing) { reservationCollection.Add(reservation); } } }
public IAsyncResult BeginReserveAndAppend( ArraySegment<byte> data, SequenceNumber nextUndoRecord, SequenceNumber previousRecord, RecordAppendOptions recordAppendOptions, ReservationCollection reservationCollection, long[] reservations, AsyncCallback callback, object state) { return BeginReserveAndAppend(new ArraySegment<byte>[] { data }, nextUndoRecord, previousRecord, recordAppendOptions, reservationCollection, reservations, callback, state); }
public IAsyncResult BeginReserveAndAppend( IList<ArraySegment<byte>> data, SequenceNumber nextUndoRecord, SequenceNumber previousRecord, RecordAppendOptions recordAppendOptions, ReservationCollection reservationCollection, long[] reservations, AsyncCallback callback, object state) { SequenceNumber result = ReserveAndAppend(data, nextUndoRecord, previousRecord, recordAppendOptions, reservationCollection, reservations); return new FileRecordSequenceCompletedAsyncResult(result, callback, state, Work.ReserveAndAppend); }
public SequenceNumber ReserveAndAppend( ArraySegment<byte> data, SequenceNumber nextUndoRecord, SequenceNumber previousRecord, RecordAppendOptions recordAppendOptions, ReservationCollection reservationCollection, params long[] reservations) { return ReserveAndAppend(new ArraySegment<byte>[] { data }, nextUndoRecord, previousRecord, recordAppendOptions, reservationCollection, reservations); }
public SequenceNumber ReserveAndAppend( IList<ArraySegment<byte>> data, SequenceNumber nextUndoRecord, SequenceNumber previousRecord, RecordAppendOptions recordAppendOptions, ReservationCollection reservationCollection, params long[] reservations) { if (reservationCollection == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentNull("reservationCollection")); } if (reservations == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentNull("reservations")); } FileReservationCollection fileResCollection = null; fileResCollection = reservationCollection as FileReservationCollection; if (fileResCollection == null || !fileResCollection.IsMyCollection(this)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentInvalid(SR.LogRecSeq_InvalidReservationCollection)); } foreach (long reservationSize in reservations) { if (reservationSize < 0) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentOutOfRange("reservations")); } foreach (long reservationSize in reservations) { fileResCollection.Add(reservationSize); } bool throwing = true; try { SequenceNumber returnValue = Append(data, nextUndoRecord, previousRecord, recordAppendOptions); throwing = false; return returnValue; } finally { if (throwing && fileResCollection != null) { foreach (long reservationSize in reservations) { fileResCollection.Remove(reservationSize); } } } }