mirror of
https://github.com/pgsty/minio.git
synced 2026-07-20 04:30:26 +03:00
Generalize the event store using go generics (#16910)
This commit is contained in:
@@ -35,6 +35,7 @@ import (
|
||||
|
||||
"github.com/minio/minio/internal/event"
|
||||
"github.com/minio/minio/internal/logger"
|
||||
"github.com/minio/minio/internal/store"
|
||||
"github.com/minio/pkg/certs"
|
||||
xnet "github.com/minio/pkg/net"
|
||||
)
|
||||
@@ -96,7 +97,7 @@ type WebhookTarget struct {
|
||||
args WebhookArgs
|
||||
transport *http.Transport
|
||||
httpClient *http.Client
|
||||
store Store
|
||||
store store.Store[event.Event]
|
||||
loggerOnce logger.LogOnce
|
||||
cancel context.CancelFunc
|
||||
cancelCh <-chan struct{}
|
||||
@@ -107,6 +108,11 @@ func (target *WebhookTarget) ID() event.TargetID {
|
||||
return target.id
|
||||
}
|
||||
|
||||
// Name - returns the Name of the target.
|
||||
func (target *WebhookTarget) Name() string {
|
||||
return target.ID().String()
|
||||
}
|
||||
|
||||
// IsActive - Return true if target is up and active
|
||||
func (target *WebhookTarget) IsActive() (bool, error) {
|
||||
if err := target.init(); err != nil {
|
||||
@@ -127,7 +133,7 @@ func (target *WebhookTarget) isActive() (bool, error) {
|
||||
req, err := http.NewRequestWithContext(ctx, http.MethodHead, target.args.Endpoint.String(), nil)
|
||||
if err != nil {
|
||||
if xnet.IsNetworkOrHostDown(err, false) {
|
||||
return false, errNotConnected
|
||||
return false, store.ErrNotConnected
|
||||
}
|
||||
return false, err
|
||||
}
|
||||
@@ -142,7 +148,7 @@ func (target *WebhookTarget) isActive() (bool, error) {
|
||||
resp, err := target.httpClient.Do(req)
|
||||
if err != nil {
|
||||
if xnet.IsNetworkOrHostDown(err, true) {
|
||||
return false, errNotConnected
|
||||
return false, store.ErrNotConnected
|
||||
}
|
||||
return false, err
|
||||
}
|
||||
@@ -165,7 +171,7 @@ func (target *WebhookTarget) Save(eventData event.Event) error {
|
||||
err := target.send(eventData)
|
||||
if err != nil {
|
||||
if xnet.IsNetworkOrHostDown(err, false) {
|
||||
return errNotConnected
|
||||
return store.ErrNotConnected
|
||||
}
|
||||
}
|
||||
return err
|
||||
@@ -235,7 +241,7 @@ func (target *WebhookTarget) Send(eventKey string) error {
|
||||
|
||||
if err := target.send(eventData); err != nil {
|
||||
if xnet.IsNetworkOrHostDown(err, false) {
|
||||
return errNotConnected
|
||||
return store.ErrNotConnected
|
||||
}
|
||||
return err
|
||||
}
|
||||
@@ -274,7 +280,7 @@ func (target *WebhookTarget) initWebhook() error {
|
||||
return err
|
||||
}
|
||||
if !yes {
|
||||
return errNotConnected
|
||||
return store.ErrNotConnected
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -284,11 +290,11 @@ func (target *WebhookTarget) initWebhook() error {
|
||||
func NewWebhookTarget(ctx context.Context, id string, args WebhookArgs, loggerOnce logger.LogOnce, transport *http.Transport) (*WebhookTarget, error) {
|
||||
ctx, cancel := context.WithCancel(ctx)
|
||||
|
||||
var store Store
|
||||
var queueStore store.Store[event.Event]
|
||||
if args.QueueDir != "" {
|
||||
queueDir := filepath.Join(args.QueueDir, storePrefix+"-webhook-"+id)
|
||||
store = NewQueueStore(queueDir, args.QueueLimit)
|
||||
if err := store.Open(); err != nil {
|
||||
queueStore = store.NewQueueStore[event.Event](queueDir, args.QueueLimit, event.StoreExtension)
|
||||
if err := queueStore.Open(); err != nil {
|
||||
cancel()
|
||||
return nil, fmt.Errorf("unable to initialize the queue store of Webhook `%s`: %w", id, err)
|
||||
}
|
||||
@@ -299,13 +305,13 @@ func NewWebhookTarget(ctx context.Context, id string, args WebhookArgs, loggerOn
|
||||
args: args,
|
||||
loggerOnce: loggerOnce,
|
||||
transport: transport,
|
||||
store: store,
|
||||
store: queueStore,
|
||||
cancel: cancel,
|
||||
cancelCh: ctx.Done(),
|
||||
}
|
||||
|
||||
if target.store != nil {
|
||||
streamEventsFromStore(target.store, target, target.cancelCh, target.loggerOnce)
|
||||
store.StreamItems(target.store, target, target.cancelCh, target.loggerOnce)
|
||||
}
|
||||
|
||||
return target, nil
|
||||
|
||||
Reference in New Issue
Block a user