@ -67,11 +67,14 @@ func (h *writeHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
// checkAppendExemplarError modifies the AppendExamplar's returned error based on the error cause.
func ( h * writeHandler ) checkAppendExemplarError ( err error , e exemplar . Exemplar , outOfOrderErrs * int ) error {
unwrapedErr := errors . Unwrap ( err )
unwrappedErr := errors . Unwrap ( err )
if unwrappedErr == nil {
unwrappedErr = err
}
switch {
case errors . Is ( unwrapedErr , storage . ErrNotFound ) :
case errors . Is ( unwrapp edErr , storage . ErrNotFound ) :
return storage . ErrNotFound
case errors . Is ( unwrapedErr , storage . ErrOutOfOrderExemplar ) :
case errors . Is ( unwrapp edErr , storage . ErrOutOfOrderExemplar ) :
* outOfOrderErrs ++
level . Debug ( h . logger ) . Log ( "msg" , "Out of order exemplar" , "exemplar" , fmt . Sprintf ( "%+v" , e ) )
return nil
@ -98,8 +101,11 @@ func (h *writeHandler) write(ctx context.Context, req *prompb.WriteRequest) (err
for _ , s := range ts . Samples {
_ , err = app . Append ( 0 , labels , s . Timestamp , s . Value )
if err != nil {
unwrapedErr := errors . Unwrap ( err )
if errors . Is ( unwrapedErr , storage . ErrOutOfOrderSample ) || errors . Is ( unwrapedErr , storage . ErrOutOfBounds ) || errors . Is ( unwrapedErr , storage . ErrDuplicateSampleForTimestamp ) {
unwrappedErr := errors . Unwrap ( err )
if unwrappedErr == nil {
unwrappedErr = err
}
if errors . Is ( err , storage . ErrOutOfOrderSample ) || errors . Is ( unwrappedErr , storage . ErrOutOfBounds ) || errors . Is ( unwrappedErr , storage . ErrDuplicateSampleForTimestamp ) {
level . Error ( h . logger ) . Log ( "msg" , "Out of order sample from remote write" , "err" , err . Error ( ) , "series" , labels . String ( ) , "timestamp" , s . Timestamp )
}
return err
@ -123,6 +129,9 @@ func (h *writeHandler) write(ctx context.Context, req *prompb.WriteRequest) (err
_ , err = app . AppendHistogram ( 0 , labels , hp . Timestamp , hs )
if err != nil {
unwrappedErr := errors . Unwrap ( err )
if unwrappedErr == nil {
unwrappedErr = err
}
// Althogh AppendHistogram does not currently return ErrDuplicateSampleForTimestamp there is
// a note indicating its inclusion in the future.
if errors . Is ( unwrappedErr , storage . ErrOutOfOrderSample ) || errors . Is ( unwrappedErr , storage . ErrOutOfBounds ) || errors . Is ( unwrappedErr , storage . ErrDuplicateSampleForTimestamp ) {