Documentation ¶
Index ¶
- Constants
- Variables
- func GormTransaction(ctx context.Context, db *gorm.DB, fc func(tx *gorm.DB) error, ...) (err error)
- func IsSerializationAnomaly(err error) bool
- func NewEventBroadcaster(uri string, minReconnectInterval time.Duration, ...) *eventBroadcaster
- type AdvisoryLocker
- type Event
- type EventBroadcaster
- type NullAdvisoryLocker
- type Subscription
Constants ¶
View Source
const ( AdvisoryLockClassID_EthBroadcaster int32 = 0 AdvisoryLockClassID_JobSpawner int32 = 1 AdvisoryLockClassID_EthConfirmer int32 = 2 // ORM takes lock on 1027321974924625846 which splits into ClassID 239192036, ObjID 2840971190 AdvisoryLockClassID_ORM int32 = 239192036 AdvisoryLockObjectID_EthConfirmer int32 = 0 )
NOTE: All advisory lock class IDs used by the Seerlink application MUST be kept here to avoid accidental re-use
View Source
const ( ChannelJobCreated = "insert_on_jobs" ChannelJobDeleted = "delete_from_jobs" ChannelRunStarted = "pipeline_run_started" ChannelRunCompleted = "pipeline_run_completed" // Postgres channel to listen for new eth_txes ChannelInsertOnEthTx = "insert_on_eth_txes" )
View Source
const ( // LockTimeout controls the max time we will wait for any kind of database lock. // It's good to set this to _something_ because waiting for locks forever is really bad. LockTimeout = 1 * time.Minute // IdleInTxSessionTimeout controls the max time we leave a transaction open and idle. // It's good to set this to _something_ because leaving transactions open forever is really bad. IdleInTxSessionTimeout = 1 * time.Hour )
NOTE: In an ideal world the timeouts below would be set to something sane in the postgres configuration by the user. Since we do not live in an ideal world, it is necessary to override them here.
They cannot easily be set at a session level due to how Go's connection pooling works.
Variables ¶
View Source
var ( DefaultSqlTxOptions = sql.TxOptions{ Isolation: sql.LevelReadCommitted, } )
Functions ¶
func GormTransaction ¶
func IsSerializationAnomaly ¶
Types ¶
type AdvisoryLocker ¶
type AdvisoryLocker interface { Unlock(ctx context.Context, classID int32, objectID int32) error WithAdvisoryLock(ctx context.Context, classID int32, objectID int32, f func() error) error Close() error }
func NewAdvisoryLock ¶
func NewAdvisoryLock(uri string) AdvisoryLocker
type EventBroadcaster ¶
type EventBroadcaster interface { Start() error Stop() error Subscribe(channel, payloadFilter string) (Subscription, error) Notify(channel string, payload string) error NotifyInsideGormTx(tx *gorm.DB, channel string, payload string) error }
EventBroadcaster opaquely manages a collection of Postgres event listeners and broadcasts events to subscribers (with an optional payload filter).
type NullAdvisoryLocker ¶
type NullAdvisoryLocker struct {
// contains filtered or unexported fields
}
func (*NullAdvisoryLocker) Close ¶
func (n *NullAdvisoryLocker) Close() error
func (*NullAdvisoryLocker) WithAdvisoryLock ¶
type Subscription ¶
type Subscription interface { Events() <-chan Event Close() // contains filtered or unexported methods }
Subscription represents a subscription to a Postgres event channel
Source Files ¶
Click to show internal directories.
Click to hide internal directories.