9f8f258d4d
This patch removes duplicate internal copies of constants in the structs package which are also defined in the api package. The api.KVOp type with all its values for the TXN endpoint and the api.HealthXXX constants are now used throughout the codebase. This resulted in some circular dependencies in the testutil package which have been resolved by copying code and constants and moving the WaitForLeader function into a separate testrpc package.
88 lines
1.9 KiB
Go
88 lines
1.9 KiB
Go
package structs
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/hashicorp/consul/api"
|
|
)
|
|
|
|
// TxnKVOp is used to define a single operation on the KVS inside a
|
|
// transaction
|
|
type TxnKVOp struct {
|
|
Verb api.KVOp
|
|
DirEnt DirEntry
|
|
}
|
|
|
|
// TxnKVResult is used to define the result of a single operation on the KVS
|
|
// inside a transaction.
|
|
type TxnKVResult *DirEntry
|
|
|
|
// TxnOp is used to define a single operation inside a transaction. Only one
|
|
// of the types should be filled out per entry.
|
|
type TxnOp struct {
|
|
KV *TxnKVOp
|
|
}
|
|
|
|
// TxnOps is a list of operations within a transaction.
|
|
type TxnOps []*TxnOp
|
|
|
|
// TxnRequest is used to apply multiple operations to the state store in a
|
|
// single transaction
|
|
type TxnRequest struct {
|
|
Datacenter string
|
|
Ops TxnOps
|
|
WriteRequest
|
|
}
|
|
|
|
func (r *TxnRequest) RequestDatacenter() string {
|
|
return r.Datacenter
|
|
}
|
|
|
|
// TxnReadRequest is used as a fast path for read-only transactions that don't
|
|
// modify the state store.
|
|
type TxnReadRequest struct {
|
|
Datacenter string
|
|
Ops TxnOps
|
|
QueryOptions
|
|
}
|
|
|
|
func (r *TxnReadRequest) RequestDatacenter() string {
|
|
return r.Datacenter
|
|
}
|
|
|
|
// TxnError is used to return information about an error for a specific
|
|
// operation.
|
|
type TxnError struct {
|
|
OpIndex int
|
|
What string
|
|
}
|
|
|
|
// Error returns the string representation of an atomic error.
|
|
func (e TxnError) Error() string {
|
|
return fmt.Sprintf("op %d: %s", e.OpIndex, e.What)
|
|
}
|
|
|
|
// TxnErrors is a list of TxnError entries.
|
|
type TxnErrors []*TxnError
|
|
|
|
// TxnResult is used to define the result of a given operation inside a
|
|
// transaction. Only one of the types should be filled out per entry.
|
|
type TxnResult struct {
|
|
KV TxnKVResult
|
|
}
|
|
|
|
// TxnResults is a list of TxnResult entries.
|
|
type TxnResults []*TxnResult
|
|
|
|
// TxnResponse is the structure returned by a TxnRequest.
|
|
type TxnResponse struct {
|
|
Results TxnResults
|
|
Errors TxnErrors
|
|
}
|
|
|
|
// TxnReadResponse is the structure returned by a TxnReadRequest.
|
|
type TxnReadResponse struct {
|
|
TxnResponse
|
|
QueryMeta
|
|
}
|