| Total Lines | 31 |
| Duplicated Lines | 0 % |
| Changes | 0 | ||
| 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 |