Documentation ¶
Overview ¶
Package ingest contains the ingestion system for horizon. This system takes data produced by the connected stellar-core database, transforms it and inserts it into the horizon database.
Index ¶
- Constants
- type Cursor
- func (c *Cursor) BeforeAndAfter(target xdr.LedgerKey) (before *xdr.LedgerEntry, after *xdr.LedgerEntry, err error)
- func (c *Cursor) InLedger() bool
- func (c *Cursor) InOperation() bool
- func (c *Cursor) InTransaction() bool
- func (c *Cursor) Ledger() *core.LedgerHeader
- func (c *Cursor) LedgerID() int64
- func (c *Cursor) LedgerRange() (start int64, end int64)
- func (c *Cursor) LedgerSequence() int32
- func (c *Cursor) NextLedger() bool
- func (c *Cursor) NextOp() bool
- func (c *Cursor) NextTx() bool
- func (c *Cursor) Operation() *xdr.Operation
- func (c *Cursor) OperationChanges() xdr.LedgerEntryChanges
- func (c *Cursor) OperationCount() int
- func (c *Cursor) OperationID() int64
- func (c *Cursor) OperationOrder() int32
- func (c *Cursor) OperationResult() *xdr.OperationResultTr
- func (c *Cursor) OperationSourceAccount() xdr.AccountId
- func (c *Cursor) OperationType() xdr.OperationType
- func (c *Cursor) Operations() []xdr.Operation
- func (c *Cursor) SuccessfulLedgerOperationCount() (ret int)
- func (c *Cursor) SuccessfulTransactionCount() (ret int)
- func (c *Cursor) Transaction() *core.Transaction
- func (c *Cursor) TransactionFee() *core.TransactionFee
- func (c *Cursor) TransactionID() int64
- func (c *Cursor) TransactionMetaBundle() *meta.Bundle
- func (c *Cursor) TransactionSourceAccount() xdr.AccountId
- type EffectIngestion
- type IngesterMetrics
- type Ingestion
- func (ingest *Ingestion) Clear(start int64, end int64) error
- func (ingest *Ingestion) ClearAll() error
- func (ingest *Ingestion) Close() error
- func (ingest *Ingestion) Effect(aid int64, opid int64, order int, typ history.EffectType, details interface{}) error
- func (ingest *Ingestion) Flush() error
- func (ingest *Ingestion) Ledger(id int64, header *core.LedgerHeader, txs int, ops int) error
- func (ingest *Ingestion) Operation(id int64, txid int64, order int32, source xdr.AccountId, typ xdr.OperationType, ...) error
- func (ingest *Ingestion) OperationParticipants(op int64, aids []xdr.AccountId) error
- func (ingest *Ingestion) Rollback() (err error)
- func (ingest *Ingestion) Start() (err error)
- func (ingest *Ingestion) Trade(opid int64, order int32, buyer xdr.AccountId, trade xdr.ClaimOfferAtom) error
- func (ingest *Ingestion) Transaction(id int64, tx *core.Transaction, fee *core.TransactionFee) error
- func (ingest *Ingestion) TransactionParticipants(tx int64, aids []xdr.AccountId) error
- type LedgerBundle
- type Session
- type System
Constants ¶
const ( // CurrentVersion reflects the latest version of the ingestion // algorithm. As rows are ingested into the horizon database, this version is // used to tag them. In the future, any breaking changes introduced by a // developer should be accompanied by an increase in this value. // // Scripts, that have yet to be ported to this codebase can then be leveraged // to re-ingest old data with the new algorithm, providing a seamless // transition when the ingested data's structure changes. CurrentVersion = 9 )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Cursor ¶
type Cursor struct { // FirstLedger is the beginning of the range of ledgers (inclusive) that will // attempt to be ingested in this session. FirstLedger int32 // LastLedger is the end of the range of ledgers (inclusive) that will // attempt to be ingested in this session. LastLedger int32 // DB is the stellar-core db that data is ingested from. DB *db.Session Metrics *IngesterMetrics // Err is the error that caused this iteration to fail, if any. Err error // contains filtered or unexported fields }
Cursor iterates through a stellar core database's ledgers
func (*Cursor) BeforeAndAfter ¶
func (c *Cursor) BeforeAndAfter(target xdr.LedgerKey) ( before *xdr.LedgerEntry, after *xdr.LedgerEntry, err error, )
BeforeAndAfter loads the ledger entry for `target` before the current operation was applied and after the operation was applied.
func (*Cursor) InOperation ¶
InOperation returns true if the cursor is on a operation. Will return false after advancing to a new transaction but before advancing on to the transaciton's first operation.
func (*Cursor) InTransaction ¶
InTransaction returns true if the cursor is pointing to a transaction. This will return false after advancing to a new ledger but prior to advancing into the ledger's first transaction.
func (*Cursor) Ledger ¶
func (c *Cursor) Ledger() *core.LedgerHeader
Ledger returns the current ledger
func (*Cursor) LedgerRange ¶
LedgerRange returns the beginning and end of id values that map to the current ledger. Useful for clearing a ledgers worth of data.
func (*Cursor) LedgerSequence ¶
LedgerSequence returns the current ledger's sequence
func (*Cursor) NextLedger ¶
NextLedger advances `c` to the next ledger in the iteration, loading a new LedgerBundle from the core database. Returns false if an error occurs or the iteration is complete.
func (*Cursor) NextOp ¶
NextOp advances `c` to the next operation in the current transaction. Returns false if the current transaction has nothing left to visit.
func (*Cursor) NextTx ¶
NextTx advances `c` to the next transaction in the current ledger. Returns false if the current ledger has no transactions left to visit.
func (*Cursor) OperationChanges ¶
func (c *Cursor) OperationChanges() xdr.LedgerEntryChanges
OperationChanges returns all of LedgerEntryChanges that occurred in the course of applying the current operation.
func (*Cursor) OperationCount ¶
OperationCount returns the count of operations in the current transaction
func (*Cursor) OperationID ¶
OperationID returns the current operations id, as used by the history system.
func (*Cursor) OperationOrder ¶
OperationOrder returns the order of the current operation amongst the current transaction's operations.
func (*Cursor) OperationResult ¶
func (c *Cursor) OperationResult() *xdr.OperationResultTr
OperationResult returns the current operation's result record
func (*Cursor) OperationSourceAccount ¶
OperationSourceAccount returns the current operation's effective source account (i.e. default's to the transaction's source account).
func (*Cursor) OperationType ¶
func (c *Cursor) OperationType() xdr.OperationType
OperationType returns the current operation type
func (*Cursor) Operations ¶
Operations returns the current transactions operations.
func (*Cursor) SuccessfulLedgerOperationCount ¶
SuccessfulLedgerOperationCount returns the count of operations in the current ledger
func (*Cursor) SuccessfulTransactionCount ¶
SuccessfulTransactionCount returns the count of transactions in the current ledger that succeeded.
func (*Cursor) Transaction ¶
func (c *Cursor) Transaction() *core.Transaction
Transaction returns the current transaction
func (*Cursor) TransactionFee ¶
func (c *Cursor) TransactionFee() *core.TransactionFee
TransactionFee returns the txfeehistory row for the current transaction.
func (*Cursor) TransactionID ¶
TransactionID returns the current tranaction's id, as used by the history system.
func (*Cursor) TransactionMetaBundle ¶
TransactionMetaBundle provides easier access to the meta data regarding the application of the current transaction.
func (*Cursor) TransactionSourceAccount ¶
TransactionSourceAccount returns the current transaction's source account id
type EffectIngestion ¶
type EffectIngestion struct { Dest *Ingestion OperationID int64 // contains filtered or unexported fields }
EffectIngestion is a helper struct to smooth the ingestion of effects. this struct will track what the correct operation to use and order to use when adding effects into an ingestion.
func (*EffectIngestion) Add ¶
func (ei *EffectIngestion) Add(aid xdr.AccountId, typ history.EffectType, details interface{}) bool
Add writes an effect to the database while automatically tracking the index to use.
func (*EffectIngestion) Finish ¶
func (ei *EffectIngestion) Finish() error
Finish marks this ingestion as complete, returning any error that was recorded.
type IngesterMetrics ¶
type IngesterMetrics struct { ClearLedgerTimer metrics.Timer IngestLedgerTimer metrics.Timer LoadLedgerTimer metrics.Timer }
IngesterMetrics tracks all the metrics for the ingestion subsystem
type Ingestion ¶
type Ingestion struct { // DB is the sql connection to be used for writing any rows into the horizon // database. DB *db.Session // contains filtered or unexported fields }
Ingestion receives write requests from a Session
func (*Ingestion) Clear ¶
Clear removes a range of data from the history database, exclusive of the end id provided.
func (*Ingestion) Effect ¶
func (ingest *Ingestion) Effect(aid int64, opid int64, order int, typ history.EffectType, details interface{}) error
Effect adds a new row into the `history_effects` table.
func (*Ingestion) Flush ¶
Flush writes the currently buffered rows to the db, and if successful starts a new transaction.
func (*Ingestion) Operation ¶
func (ingest *Ingestion) Operation( id int64, txid int64, order int32, source xdr.AccountId, typ xdr.OperationType, details map[string]interface{}, ) error
Operation ingests the provided operation data into a new row in the `history_operations` table
func (*Ingestion) OperationParticipants ¶
OperationParticipants ingests the provided accounts `aids` as participants of operation with id `op`, creating a new row in the `history_operation_participants` table.
func (*Ingestion) Trade ¶
func (ingest *Ingestion) Trade( opid int64, order int32, buyer xdr.AccountId, trade xdr.ClaimOfferAtom, ) error
Trade records a trade into the history_trades table
func (*Ingestion) Transaction ¶
func (ingest *Ingestion) Transaction( id int64, tx *core.Transaction, fee *core.TransactionFee, ) error
Transaction ingests the provided transaction data into a new row in the `history_transactions` table
func (*Ingestion) TransactionParticipants ¶
TransactionParticipants ingests the provided account ids as participants of transaction with id `tx`, creating a new row in the `history_transaction_participants` table.
type LedgerBundle ¶
type LedgerBundle struct { Sequence int32 Header core.LedgerHeader TransactionFees []core.TransactionFee Transactions []core.Transaction }
LedgerBundle represents a single ledger's worth of novelty created by one ledger close
type Session ¶
type Session struct { Cursor *Cursor Ingestion *Ingestion // Network is the passphrase for the network being imported Network string // StellarCoreURL is the http endpoint of the stellar-core that data is being // ingested from. StellarCoreURL string // ClearExisting causes the session to clear existing data from the horizon db // when the session is run. ClearExisting bool // SkipCursorUpdate causes the session to skip // reporting the "last imported ledger" cursor to // stellar-core SkipCursorUpdate bool // Metrics is a reference to where the session should record its metric information Metrics *IngesterMetrics // Err is the error that caused this session to fail, if any. Err error // Ingested is the number of ledgers that were successfully ingested during // this session. Ingested int }
Session represents a single attempt at ingesting data into the history database.
func NewSession ¶
NewSession initialize a new ingestion session, from `first` to `last` using `i`.
type System ¶
type System struct { // HorizonDB is the connection to the horizon database that ingested data will // be written to. HorizonDB *db.Session // CoreDB is the stellar-core db that data is ingested from. CoreDB *db.Session Metrics IngesterMetrics // Network is the passphrase for the network being imported Network string // StellarCoreURL is the http endpoint of the stellar-core that data is being // ingested from. StellarCoreURL string // SkipCursorUpdate causes the ingestor to skip // reporting the "last imported ledger" cursor to // stellar-core SkipCursorUpdate bool // contains filtered or unexported fields }
System represents the data ingestion subsystem of horizon.
func New ¶
New initializes the ingester, causing it to begin polling the stellar-core database for now ledgers and ingesting data into the horizon database.
func (*System) ClearAll ¶
ClearAll removes all previously ingested historical data from the horizon database.
func (*System) ReingestAll ¶
ReingestAll re-ingests all ledgers
func (*System) ReingestOutdated ¶
ReingestOutdated finds old ledgers and reimports them.
func (*System) ReingestRange ¶
ReingestRange reingests a range of ledgers, from `start` to `end`, inclusive.
func (*System) ReingestSingle ¶
ReingestSingle re-ingests a single ledger
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package participants contains functions to derive a set of "participant" addresses for various data structures in the Stellar network's ledger.
|
Package participants contains functions to derive a set of "participant" addresses for various data structures in the Stellar network's ledger. |