Passed
Pull Request — master (#2583)
by Tolga
03:10
created

internal/storage/proxies/circuitbreaker/bundle_reader.go   A

Size/Duplication

Total Lines 31
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 17
dl 0
loc 31
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A circuitbreaker.*BundleReader.Read 0 8 3
A circuitbreaker.NewBundleReader 0 2 1
1
package circuitbreaker
2
3
import (
4
	"context"
5
6
	"github.com/sony/gobreaker"
7
8
	"github.com/Permify/permify/internal/storage"
9
	base "github.com/Permify/permify/pkg/pb/base/v1"
10
)
11
12
// BundleReader - Add circuit breaker behaviour to bundle reader
13
type BundleReader struct {
14
	delegate storage.BundleReader
15
	cb       *gobreaker.CircuitBreaker
16
}
17
18
// NewBundleReader - Add circuit breaker behaviour to new bundle reader
19
func NewBundleReader(delegate storage.BundleReader, cb *gobreaker.CircuitBreaker) *BundleReader {
20
	return &BundleReader{delegate: delegate, cb: cb}
21
}
22
23
// Read - Reads bundles from the repository
24
func (r *BundleReader) Read(ctx context.Context, tenantID, name string) (bundle *base.DataBundle, err error) {
25
	response, err := r.cb.Execute(func() (interface{}, error) {
26
		return r.delegate.Read(ctx, tenantID, name)
27
	})
28
	if err != nil {
29
		return nil, err
30
	}
31
	return response.(*base.DataBundle), nil
32
}
33