mirror of
https://github.com/minio/minio.git
synced 2025-11-20 18:06:10 -05:00
Generalize the event store using go generics (#16910)
This commit is contained in:
@@ -34,6 +34,7 @@ import (
|
||||
|
||||
"github.com/minio/minio/internal/event"
|
||||
"github.com/minio/minio/internal/logger"
|
||||
"github.com/minio/minio/internal/store"
|
||||
xnet "github.com/minio/pkg/net"
|
||||
)
|
||||
|
||||
@@ -145,7 +146,7 @@ type PostgreSQLTarget struct {
|
||||
deleteStmt *sql.Stmt
|
||||
insertStmt *sql.Stmt
|
||||
db *sql.DB
|
||||
store Store
|
||||
store store.Store[event.Event]
|
||||
firstPing bool
|
||||
connString string
|
||||
loggerOnce logger.LogOnce
|
||||
@@ -157,6 +158,11 @@ func (target *PostgreSQLTarget) ID() event.TargetID {
|
||||
return target.id
|
||||
}
|
||||
|
||||
// Name - returns the Name of the target.
|
||||
func (target *PostgreSQLTarget) Name() string {
|
||||
return target.ID().String()
|
||||
}
|
||||
|
||||
// Store returns any underlying store if set.
|
||||
func (target *PostgreSQLTarget) Store() event.TargetStore {
|
||||
return target.store
|
||||
@@ -173,7 +179,7 @@ func (target *PostgreSQLTarget) IsActive() (bool, error) {
|
||||
func (target *PostgreSQLTarget) isActive() (bool, error) {
|
||||
if err := target.db.Ping(); err != nil {
|
||||
if IsConnErr(err) {
|
||||
return false, errNotConnected
|
||||
return false, store.ErrNotConnected
|
||||
}
|
||||
return false, err
|
||||
}
|
||||
@@ -198,7 +204,7 @@ func (target *PostgreSQLTarget) Save(eventData event.Event) error {
|
||||
|
||||
// IsConnErr - To detect a connection error.
|
||||
func IsConnErr(err error) bool {
|
||||
return IsConnRefusedErr(err) || err.Error() == "sql: database is closed" || err.Error() == "sql: statement is closed" || err.Error() == "invalid connection"
|
||||
return xnet.IsConnRefusedErr(err) || err.Error() == "sql: database is closed" || err.Error() == "sql: statement is closed" || err.Error() == "invalid connection"
|
||||
}
|
||||
|
||||
// send - sends an event to the PostgreSQL.
|
||||
@@ -255,7 +261,7 @@ func (target *PostgreSQLTarget) Send(eventKey string) error {
|
||||
if !target.firstPing {
|
||||
if err := target.executeStmts(); err != nil {
|
||||
if IsConnErr(err) {
|
||||
return errNotConnected
|
||||
return store.ErrNotConnected
|
||||
}
|
||||
return err
|
||||
}
|
||||
@@ -273,7 +279,7 @@ func (target *PostgreSQLTarget) Send(eventKey string) error {
|
||||
|
||||
if err := target.send(eventData); err != nil {
|
||||
if IsConnErr(err) {
|
||||
return errNotConnected
|
||||
return store.ErrNotConnected
|
||||
}
|
||||
return err
|
||||
}
|
||||
@@ -357,7 +363,7 @@ func (target *PostgreSQLTarget) initPostgreSQL() error {
|
||||
|
||||
err = target.db.Ping()
|
||||
if err != nil {
|
||||
if !(IsConnRefusedErr(err) || IsConnResetErr(err)) {
|
||||
if !(xnet.IsConnRefusedErr(err) || xnet.IsConnResetErr(err)) {
|
||||
target.loggerOnce(context.Background(), err, target.ID().String())
|
||||
}
|
||||
} else {
|
||||
@@ -378,7 +384,7 @@ func (target *PostgreSQLTarget) initPostgreSQL() error {
|
||||
return err
|
||||
}
|
||||
if !yes {
|
||||
return errNotConnected
|
||||
return store.ErrNotConnected
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -407,11 +413,11 @@ func NewPostgreSQLTarget(id string, args PostgreSQLArgs, loggerOnce logger.LogOn
|
||||
}
|
||||
connStr := strings.Join(params, " ")
|
||||
|
||||
var store Store
|
||||
var queueStore store.Store[event.Event]
|
||||
if args.QueueDir != "" {
|
||||
queueDir := filepath.Join(args.QueueDir, storePrefix+"-postgresql-"+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 {
|
||||
return nil, fmt.Errorf("unable to initialize the queue store of PostgreSQL `%s`: %w", id, err)
|
||||
}
|
||||
}
|
||||
@@ -420,14 +426,14 @@ func NewPostgreSQLTarget(id string, args PostgreSQLArgs, loggerOnce logger.LogOn
|
||||
id: event.TargetID{ID: id, Name: "postgresql"},
|
||||
args: args,
|
||||
firstPing: false,
|
||||
store: store,
|
||||
store: queueStore,
|
||||
connString: connStr,
|
||||
loggerOnce: loggerOnce,
|
||||
quitCh: make(chan struct{}),
|
||||
}
|
||||
|
||||
if target.store != nil {
|
||||
streamEventsFromStore(target.store, target, target.quitCh, target.loggerOnce)
|
||||
store.StreamItems(target.store, target, target.quitCh, target.loggerOnce)
|
||||
}
|
||||
|
||||
return target, nil
|
||||
|
||||
Reference in New Issue
Block a user