Skip to content

Commit a0a7fa9

Browse files
committed
iNG-1507: Add handling for guardrail errors 0x36 to 0x38 for XDCR
1 parent 991cf5e commit a0a7fa9

2 files changed

Lines changed: 45 additions & 0 deletions

File tree

gateway/dataimpl/server_v1/errorhandler.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1124,6 +1124,39 @@ func (e ErrorHandler) NewVbUuidDivergenceStatus(ctx context.Context, baseErr err
11241124
return st
11251125
}
11261126

1127+
func (e ErrorHandler) NewRateLimitBucketResidentRatioTooLowStatus(ctx context.Context, baseErr error, bucketName, scopeName, collectionName, docId string) *status.Status {
1128+
st := e.newStatus(ctx, codes.ResourceExhausted,
1129+
fmt.Sprintf("The bucket resident ratio is too low to write '%s' to '%s/%s/%s'.",
1130+
docId, bucketName, scopeName, collectionName))
1131+
st = e.tryAttachStatusDetails(st, &epb.ErrorInfo{
1132+
Reason: "RATE_LIMIT_BUCKET_RESIDENT_RATIO_TOO_LOW",
1133+
})
1134+
st = e.tryAttachExtraContext(st, baseErr)
1135+
return st
1136+
}
1137+
1138+
func (e ErrorHandler) NewRateLimitBucketDataSizeTooBigStatus(ctx context.Context, baseErr error, bucketName, scopeName, collectionName, docId string) *status.Status {
1139+
st := e.newStatus(ctx, codes.ResourceExhausted,
1140+
fmt.Sprintf("The bucket data size is too big to write '%s' to '%s/%s/%s'.",
1141+
docId, bucketName, scopeName, collectionName))
1142+
st = e.tryAttachStatusDetails(st, &epb.ErrorInfo{
1143+
Reason: "RATE_LIMIT_BUCKET_DATA_SIZE_TOO_BIG",
1144+
})
1145+
st = e.tryAttachExtraContext(st, baseErr)
1146+
return st
1147+
}
1148+
1149+
func (e ErrorHandler) NewRateLimitBucketDiskSpaceTooLowStatus(ctx context.Context, baseErr error, bucketName, scopeName, collectionName, docId string) *status.Status {
1150+
st := e.newStatus(ctx, codes.ResourceExhausted,
1151+
fmt.Sprintf("Not enough bucket disk space to write '%s' to '%s/%s/%s'.",
1152+
docId, bucketName, scopeName, collectionName))
1153+
st = e.tryAttachStatusDetails(st, &epb.ErrorInfo{
1154+
Reason: "RATE_LIMIT_BUCKET_DISK_SPACE_TOO_LOW",
1155+
})
1156+
st = e.tryAttachExtraContext(st, baseErr)
1157+
return st
1158+
}
1159+
11271160
func (e ErrorHandler) NewUnimplementedServerVersionStatus(ctx context.Context) *status.Status {
11281161
st := e.newStatus(ctx,
11291162
codes.Unimplemented,

gateway/dataimpl/server_v1/xdcrserver.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -807,6 +807,12 @@ func (s *XdcrServer) PushDocument(
807807
return nil, s.errorHandler.NewValueTooLargeStatus(ctx, err, in.BucketName, in.ScopeName, in.CollectionName, in.Key, false).Err()
808808
} else if errors.Is(err, gocbcorex.ErrVbucketUUIDMismatch) {
809809
return nil, s.errorHandler.NewVbUuidDivergenceStatus(ctx, err, in.BucketName, in.ScopeName, in.CollectionName, in.Key).Err()
810+
} else if errors.Is(err, memdx.ErrRateLimitedBucketResidentRatioTooLow) {
811+
return nil, s.errorHandler.NewRateLimitBucketResidentRatioTooLowStatus(ctx, err, in.BucketName, in.ScopeName, in.CollectionName, in.Key).Err()
812+
} else if errors.Is(err, memdx.ErrRateLimitedBucketDataSizeTooBig) {
813+
return nil, s.errorHandler.NewRateLimitBucketDataSizeTooBigStatus(ctx, err, in.BucketName, in.ScopeName, in.CollectionName, in.Key).Err()
814+
} else if errors.Is(err, memdx.ErrRateLimitedBucketDiskSpaceTooLow) {
815+
return nil, s.errorHandler.NewRateLimitBucketDiskSpaceTooLowStatus(ctx, err, in.BucketName, in.ScopeName, in.CollectionName, in.Key).Err()
810816
}
811817
return nil, s.errorHandler.NewGenericStatus(ctx, err).Err()
812818
}
@@ -874,6 +880,12 @@ func (s *XdcrServer) PushDocument(
874880
return nil, s.errorHandler.NewValueTooLargeStatus(ctx, err, in.BucketName, in.ScopeName, in.CollectionName, in.Key, false).Err()
875881
} else if errors.Is(err, gocbcorex.ErrVbucketUUIDMismatch) {
876882
return nil, s.errorHandler.NewVbUuidDivergenceStatus(ctx, err, in.BucketName, in.ScopeName, in.CollectionName, in.Key).Err()
883+
} else if errors.Is(err, memdx.ErrRateLimitedBucketResidentRatioTooLow) {
884+
return nil, s.errorHandler.NewRateLimitBucketResidentRatioTooLowStatus(ctx, err, in.BucketName, in.ScopeName, in.CollectionName, in.Key).Err()
885+
} else if errors.Is(err, memdx.ErrRateLimitedBucketDataSizeTooBig) {
886+
return nil, s.errorHandler.NewRateLimitBucketDataSizeTooBigStatus(ctx, err, in.BucketName, in.ScopeName, in.CollectionName, in.Key).Err()
887+
} else if errors.Is(err, memdx.ErrRateLimitedBucketDiskSpaceTooLow) {
888+
return nil, s.errorHandler.NewRateLimitBucketDiskSpaceTooLowStatus(ctx, err, in.BucketName, in.ScopeName, in.CollectionName, in.Key).Err()
877889
}
878890
return nil, s.errorHandler.NewGenericStatus(ctx, err).Err()
879891
}

0 commit comments

Comments
 (0)