Documentation ¶
Overview ¶
Package api defines the interface exporting the upgrade infrastructure's functionality.
Index ¶
Constants ¶
View Source
const ( // ModuleName is the upgrade module name. ModuleName = "upgrade" // UpgradeMethInternal is the internal upgrade method, // where the node binary itself has the migration code. UpgradeMethInternal = "internal" // LogEventStartupUpgrade is a log event value that signals the startup upgrade handler was called. LogEventStartupUpgrade = "dummy-migration/startup-upgrade" // LogEventConsensusUpgrade is a log event value that signals the consensus upgrade handler was called. LogEventConsensusUpgrade = "dummy-migration/consensus-upgrade" )
Variables ¶
View Source
var ( // ErrStopForUpgrade is the error returned by the consensus upgrade function when it detects that // the consensus layer has reached the scheduled shutdown epoch and should be interrupted. ErrStopForUpgrade = errors.New(ModuleName, 1, "upgrade: reached upgrade epoch") // ErrUpgradePending is the error returned when there is a pending upgrade and the node detects that it is // not the one performing it. ErrUpgradePending = errors.New(ModuleName, 2, "upgrade: this binary is scheduled to be replaced") // ErrNewTooSoon is the error returned when the node started isn't the pre-upgrade version and the upgrade // epoch hasn't been reached yet. ErrNewTooSoon = errors.New(ModuleName, 3, "upgrade: running different binary before reaching the upgrade epoch") // ErrInvalidResumingVersion is the error returned when the running node's version is different from the one that // started performing the upgrade. ErrInvalidResumingVersion = errors.New(ModuleName, 4, "upgrade: node restarted mid-upgrade with different version") // ErrAlreadyPending is the error returned from SubmitDescriptor when there is already an upgrade pending. ErrAlreadyPending = errors.New(ModuleName, 5, "upgrade: an upgrade is already pending, can not submit new descriptor") // ErrUpgradeInProgress is the error returned from CancelUpgrade when the upgrade being cancelled is already in progress. ErrUpgradeInProgress = errors.New(ModuleName, 6, "upgrade: can not cancel upgrade in progress") )
Functions ¶
This section is empty.
Types ¶
type Backend ¶
type Backend interface { // SubmitDescriptor submits the serialized descriptor to the upgrade manager // which then schedules and manages the upgrade. SubmitDescriptor(context.Context, *Descriptor) error // CancelUpgrade cancels a pending upgrade, unless it is already in progress. CancelUpgrade(context.Context) error // StartupUpgrade performs the startup portion of the upgrade. // It is idempotent with respect to the current upgrade descriptor. StartupUpgrade() error // ConsensusUpgrade performs the consensus portion of the upgrade. // It is idempotent with respect to the current upgrade descriptor. ConsensusUpgrade(interface{}, epochtime.EpochTime, int64) error // Close cleans up any upgrader state and database handles. Close() }
Backend defines the interface for upgrade managers.
type Descriptor ¶
type Descriptor struct { // Name is the name of the upgrade. It should be derived from the node version. Name string `json:"name"` // Method is the upgrade method that should be used for this upgrade. Method string `json:"method"` // Identifier is a hash of the binary to be used for upgrading. // Upgrade methods other than "internal" may have differently formatted identifiers. Identifier string `json:"identifier"` // Epoch is the epoch at which the upgrade should happen. Epoch epochtime.EpochTime `json:"epoch"` }
Descriptor describes an upgrade.
func (Descriptor) IsValid ¶
func (d Descriptor) IsValid() bool
IsValid checks if the upgrade descriptor is valid.
type PendingUpgrade ¶
type PendingUpgrade struct { // Descriptor is the upgrade descriptor describing the upgrade. Descriptor *Descriptor `json:"descriptor"` // SubmittingVersion is the version of the node used to submit the descriptor. SubmittingVersion string `json:"submitting_version"` // RunningVersion is the version of the node trying to execute the descriptor. RunningVersion string `json:"running_version"` // UpgradeHeight is the height at which the upgrade epoch was reached // (or InvalidUpgradeHeight if it hasn't been reached yet). UpgradeHeight int64 `json:"upgrade_height"` // LastCompletedStage is the last upgrade stage that was successfully completed. LastCompletedStage UpgradeStage `json:"last_completed_stage"` }
PendingUpgrade describes a currently pending upgrade and includes the submitted upgrade descriptor.
func (PendingUpgrade) HasAnyStages ¶
func (pu PendingUpgrade) HasAnyStages() bool
HasAnyStages checks if any stages were completed at all.
func (PendingUpgrade) HasStage ¶
func (pu PendingUpgrade) HasStage(stage UpgradeStage) bool
HasStage checks if a given stage has been completed or not.
func (PendingUpgrade) IsCompleted ¶
func (pu PendingUpgrade) IsCompleted() bool
IsCompleted checks if all upgrade stages were already completed.
func (*PendingUpgrade) PushStage ¶
func (pu *PendingUpgrade) PushStage(stage UpgradeStage)
PushStage marks the given stage as completed.
type UpgradeStage ¶
type UpgradeStage uint64
UpgradeStage is used in the upgrade descriptor to store completed stages.
const ( // UpgradeStageStartup is the startup upgrade stage, executed at the beginning of node startup. UpgradeStageStartup UpgradeStage = 1 // UpgradeStageConsensus is the upgrade stage carried out during consensus events. UpgradeStageConsensus UpgradeStage = 2 // InvalidUpgradeHeight means the upgrade epoch hasn't been reached yet. InvalidUpgradeHeight = int64(0) )
Click to show internal directories.
Click to hide internal directories.