summaryrefslogtreecommitdiff
path: root/vendor/github.com/hashicorp/terraform/vendor/github.com/hashicorp/raft/future.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/hashicorp/terraform/vendor/github.com/hashicorp/raft/future.go')
-rw-r--r--vendor/github.com/hashicorp/terraform/vendor/github.com/hashicorp/raft/future.go289
1 files changed, 0 insertions, 289 deletions
diff --git a/vendor/github.com/hashicorp/terraform/vendor/github.com/hashicorp/raft/future.go b/vendor/github.com/hashicorp/terraform/vendor/github.com/hashicorp/raft/future.go
deleted file mode 100644
index fac59a5c..00000000
--- a/vendor/github.com/hashicorp/terraform/vendor/github.com/hashicorp/raft/future.go
+++ /dev/null
@@ -1,289 +0,0 @@
-package raft
-
-import (
- "fmt"
- "io"
- "sync"
- "time"
-)
-
-// Future is used to represent an action that may occur in the future.
-type Future interface {
- // Error blocks until the future arrives and then
- // returns the error status of the future.
- // This may be called any number of times - all
- // calls will return the same value.
- // Note that it is not OK to call this method
- // twice concurrently on the same Future instance.
- Error() error
-}
-
-// IndexFuture is used for future actions that can result in a raft log entry
-// being created.
-type IndexFuture interface {
- Future
-
- // Index holds the index of the newly applied log entry.
- // This must not be called until after the Error method has returned.
- Index() uint64
-}
-
-// ApplyFuture is used for Apply and can return the FSM response.
-type ApplyFuture interface {
- IndexFuture
-
- // Response returns the FSM response as returned
- // by the FSM.Apply method. This must not be called
- // until after the Error method has returned.
- Response() interface{}
-}
-
-// ConfigurationFuture is used for GetConfiguration and can return the
-// latest configuration in use by Raft.
-type ConfigurationFuture interface {
- IndexFuture
-
- // Configuration contains the latest configuration. This must
- // not be called until after the Error method has returned.
- Configuration() Configuration
-}
-
-// SnapshotFuture is used for waiting on a user-triggered snapshot to complete.
-type SnapshotFuture interface {
- Future
-
- // Open is a function you can call to access the underlying snapshot and
- // its metadata. This must not be called until after the Error method
- // has returned.
- Open() (*SnapshotMeta, io.ReadCloser, error)
-}
-
-// errorFuture is used to return a static error.
-type errorFuture struct {
- err error
-}
-
-func (e errorFuture) Error() error {
- return e.err
-}
-
-func (e errorFuture) Response() interface{} {
- return nil
-}
-
-func (e errorFuture) Index() uint64 {
- return 0
-}
-
-// deferError can be embedded to allow a future
-// to provide an error in the future.
-type deferError struct {
- err error
- errCh chan error
- responded bool
-}
-
-func (d *deferError) init() {
- d.errCh = make(chan error, 1)
-}
-
-func (d *deferError) Error() error {
- if d.err != nil {
- // Note that when we've received a nil error, this
- // won't trigger, but the channel is closed after
- // send so we'll still return nil below.
- return d.err
- }
- if d.errCh == nil {
- panic("waiting for response on nil channel")
- }
- d.err = <-d.errCh
- return d.err
-}
-
-func (d *deferError) respond(err error) {
- if d.errCh == nil {
- return
- }
- if d.responded {
- return
- }
- d.errCh <- err
- close(d.errCh)
- d.responded = true
-}
-
-// There are several types of requests that cause a configuration entry to
-// be appended to the log. These are encoded here for leaderLoop() to process.
-// This is internal to a single server.
-type configurationChangeFuture struct {
- logFuture
- req configurationChangeRequest
-}
-
-// bootstrapFuture is used to attempt a live bootstrap of the cluster. See the
-// Raft object's BootstrapCluster member function for more details.
-type bootstrapFuture struct {
- deferError
-
- // configuration is the proposed bootstrap configuration to apply.
- configuration Configuration
-}
-
-// logFuture is used to apply a log entry and waits until
-// the log is considered committed.
-type logFuture struct {
- deferError
- log Log
- response interface{}
- dispatch time.Time
-}
-
-func (l *logFuture) Response() interface{} {
- return l.response
-}
-
-func (l *logFuture) Index() uint64 {
- return l.log.Index
-}
-
-type shutdownFuture struct {
- raft *Raft
-}
-
-func (s *shutdownFuture) Error() error {
- if s.raft == nil {
- return nil
- }
- s.raft.waitShutdown()
- if closeable, ok := s.raft.trans.(WithClose); ok {
- closeable.Close()
- }
- return nil
-}
-
-// userSnapshotFuture is used for waiting on a user-triggered snapshot to
-// complete.
-type userSnapshotFuture struct {
- deferError
-
- // opener is a function used to open the snapshot. This is filled in
- // once the future returns with no error.
- opener func() (*SnapshotMeta, io.ReadCloser, error)
-}
-
-// Open is a function you can call to access the underlying snapshot and its
-// metadata.
-func (u *userSnapshotFuture) Open() (*SnapshotMeta, io.ReadCloser, error) {
- if u.opener == nil {
- return nil, nil, fmt.Errorf("no snapshot available")
- } else {
- // Invalidate the opener so it can't get called multiple times,
- // which isn't generally safe.
- defer func() {
- u.opener = nil
- }()
- return u.opener()
- }
-}
-
-// userRestoreFuture is used for waiting on a user-triggered restore of an
-// external snapshot to complete.
-type userRestoreFuture struct {
- deferError
-
- // meta is the metadata that belongs with the snapshot.
- meta *SnapshotMeta
-
- // reader is the interface to read the snapshot contents from.
- reader io.Reader
-}
-
-// reqSnapshotFuture is used for requesting a snapshot start.
-// It is only used internally.
-type reqSnapshotFuture struct {
- deferError
-
- // snapshot details provided by the FSM runner before responding
- index uint64
- term uint64
- snapshot FSMSnapshot
-}
-
-// restoreFuture is used for requesting an FSM to perform a
-// snapshot restore. Used internally only.
-type restoreFuture struct {
- deferError
- ID string
-}
-
-// verifyFuture is used to verify the current node is still
-// the leader. This is to prevent a stale read.
-type verifyFuture struct {
- deferError
- notifyCh chan *verifyFuture
- quorumSize int
- votes int
- voteLock sync.Mutex
-}
-
-// configurationsFuture is used to retrieve the current configurations. This is
-// used to allow safe access to this information outside of the main thread.
-type configurationsFuture struct {
- deferError
- configurations configurations
-}
-
-// Configuration returns the latest configuration in use by Raft.
-func (c *configurationsFuture) Configuration() Configuration {
- return c.configurations.latest
-}
-
-// Index returns the index of the latest configuration in use by Raft.
-func (c *configurationsFuture) Index() uint64 {
- return c.configurations.latestIndex
-}
-
-// vote is used to respond to a verifyFuture.
-// This may block when responding on the notifyCh.
-func (v *verifyFuture) vote(leader bool) {
- v.voteLock.Lock()
- defer v.voteLock.Unlock()
-
- // Guard against having notified already
- if v.notifyCh == nil {
- return
- }
-
- if leader {
- v.votes++
- if v.votes >= v.quorumSize {
- v.notifyCh <- v
- v.notifyCh = nil
- }
- } else {
- v.notifyCh <- v
- v.notifyCh = nil
- }
-}
-
-// appendFuture is used for waiting on a pipelined append
-// entries RPC.
-type appendFuture struct {
- deferError
- start time.Time
- args *AppendEntriesRequest
- resp *AppendEntriesResponse
-}
-
-func (a *appendFuture) Start() time.Time {
- return a.start
-}
-
-func (a *appendFuture) Request() *AppendEntriesRequest {
- return a.args
-}
-
-func (a *appendFuture) Response() *AppendEntriesResponse {
- return a.resp
-}