mirror of
https://github.com/status-im/consul.git
synced 2025-02-19 17:14:37 +00:00
consul: reduce the scope of various transactions
This commit is contained in:
parent
7326a74e65
commit
3897a23db2
@ -240,7 +240,8 @@ func (s *StateStore) Nodes() (uint64, structs.Nodes) {
|
|||||||
|
|
||||||
// EnsureService is used to ensure a given node exposes a service
|
// EnsureService is used to ensure a given node exposes a service
|
||||||
func (s *StateStore) EnsureService(index uint64, node string, ns *structs.NodeService) error {
|
func (s *StateStore) EnsureService(index uint64, node string, ns *structs.NodeService) error {
|
||||||
tx, err := s.tables.StartTxn(false)
|
tables := MDBTables{s.nodeTable, s.serviceTable}
|
||||||
|
tx, err := tables.StartTxn(false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(fmt.Errorf("Failed to start txn: %v", err))
|
panic(fmt.Errorf("Failed to start txn: %v", err))
|
||||||
}
|
}
|
||||||
@ -277,23 +278,24 @@ func (s *StateStore) EnsureService(index uint64, node string, ns *structs.NodeSe
|
|||||||
|
|
||||||
// NodeServices is used to return all the services of a given node
|
// NodeServices is used to return all the services of a given node
|
||||||
func (s *StateStore) NodeServices(name string) (uint64, *structs.NodeServices) {
|
func (s *StateStore) NodeServices(name string) (uint64, *structs.NodeServices) {
|
||||||
tx, err := s.tables.StartTxn(true)
|
tables := MDBTables{s.nodeTable, s.serviceTable}
|
||||||
|
tx, err := tables.StartTxn(true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(fmt.Errorf("Failed to start txn: %v", err))
|
panic(fmt.Errorf("Failed to start txn: %v", err))
|
||||||
}
|
}
|
||||||
defer tx.Abort()
|
defer tx.Abort()
|
||||||
return s.parseNodeServices(tx, name)
|
return s.parseNodeServices(tables, tx, name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// parseNodeServices is used to get the services belonging to a
|
// parseNodeServices is used to get the services belonging to a
|
||||||
// node, using a given txn
|
// node, using a given txn
|
||||||
func (s *StateStore) parseNodeServices(tx *MDBTxn, name string) (uint64, *structs.NodeServices) {
|
func (s *StateStore) parseNodeServices(tables MDBTables, tx *MDBTxn, name string) (uint64, *structs.NodeServices) {
|
||||||
ns := &structs.NodeServices{
|
ns := &structs.NodeServices{
|
||||||
Services: make(map[string]*structs.NodeService),
|
Services: make(map[string]*structs.NodeService),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the maximum index
|
// Get the maximum index
|
||||||
index, err := s.tables.LastIndexTxn(tx)
|
index, err := tables.LastIndexTxn(tx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(fmt.Errorf("Failed to get last index: %v", err))
|
panic(fmt.Errorf("Failed to get last index: %v", err))
|
||||||
}
|
}
|
||||||
@ -333,7 +335,8 @@ func (s *StateStore) parseNodeServices(tx *MDBTxn, name string) (uint64, *struct
|
|||||||
|
|
||||||
// DeleteNodeService is used to delete a node service
|
// DeleteNodeService is used to delete a node service
|
||||||
func (s *StateStore) DeleteNodeService(index uint64, node, id string) error {
|
func (s *StateStore) DeleteNodeService(index uint64, node, id string) error {
|
||||||
tx, err := s.tables.StartTxn(false)
|
tables := MDBTables{s.serviceTable, s.checkTable}
|
||||||
|
tx, err := tables.StartTxn(false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(fmt.Errorf("Failed to start txn: %v", err))
|
panic(fmt.Errorf("Failed to start txn: %v", err))
|
||||||
}
|
}
|
||||||
@ -360,7 +363,8 @@ func (s *StateStore) DeleteNodeService(index uint64, node, id string) error {
|
|||||||
|
|
||||||
// DeleteNode is used to delete a node and all it's services
|
// DeleteNode is used to delete a node and all it's services
|
||||||
func (s *StateStore) DeleteNode(index uint64, node string) error {
|
func (s *StateStore) DeleteNode(index uint64, node string) error {
|
||||||
tx, err := s.tables.StartTxn(false)
|
tables := MDBTables{s.nodeTable, s.serviceTable, s.checkTable}
|
||||||
|
tx, err := tables.StartTxn(false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(fmt.Errorf("Failed to start txn: %v", err))
|
panic(fmt.Errorf("Failed to start txn: %v", err))
|
||||||
}
|
}
|
||||||
@ -416,13 +420,14 @@ func (s *StateStore) Services() (uint64, map[string][]string) {
|
|||||||
|
|
||||||
// ServiceNodes returns the nodes associated with a given service
|
// ServiceNodes returns the nodes associated with a given service
|
||||||
func (s *StateStore) ServiceNodes(service string) (uint64, structs.ServiceNodes) {
|
func (s *StateStore) ServiceNodes(service string) (uint64, structs.ServiceNodes) {
|
||||||
tx, err := s.tables.StartTxn(true)
|
tables := MDBTables{s.nodeTable, s.serviceTable}
|
||||||
|
tx, err := tables.StartTxn(true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(fmt.Errorf("Failed to start txn: %v", err))
|
panic(fmt.Errorf("Failed to start txn: %v", err))
|
||||||
}
|
}
|
||||||
defer tx.Abort()
|
defer tx.Abort()
|
||||||
|
|
||||||
idx, err := s.tables.LastIndexTxn(tx)
|
idx, err := tables.LastIndexTxn(tx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(fmt.Errorf("Failed to get last index: %v", err))
|
panic(fmt.Errorf("Failed to get last index: %v", err))
|
||||||
}
|
}
|
||||||
@ -433,13 +438,14 @@ func (s *StateStore) ServiceNodes(service string) (uint64, structs.ServiceNodes)
|
|||||||
|
|
||||||
// ServiceTagNodes returns the nodes associated with a given service matching a tag
|
// ServiceTagNodes returns the nodes associated with a given service matching a tag
|
||||||
func (s *StateStore) ServiceTagNodes(service, tag string) (uint64, structs.ServiceNodes) {
|
func (s *StateStore) ServiceTagNodes(service, tag string) (uint64, structs.ServiceNodes) {
|
||||||
tx, err := s.tables.StartTxn(true)
|
tables := MDBTables{s.nodeTable, s.serviceTable}
|
||||||
|
tx, err := tables.StartTxn(true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(fmt.Errorf("Failed to start txn: %v", err))
|
panic(fmt.Errorf("Failed to start txn: %v", err))
|
||||||
}
|
}
|
||||||
defer tx.Abort()
|
defer tx.Abort()
|
||||||
|
|
||||||
idx, err := s.tables.LastIndexTxn(tx)
|
idx, err := tables.LastIndexTxn(tx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(fmt.Errorf("Failed to get last index: %v", err))
|
panic(fmt.Errorf("Failed to get last index: %v", err))
|
||||||
}
|
}
|
||||||
@ -479,7 +485,8 @@ func (s *StateStore) EnsureCheck(index uint64, check *structs.HealthCheck) error
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Start the txn
|
// Start the txn
|
||||||
tx, err := s.tables.StartTxn(false)
|
tables := MDBTables{s.nodeTable, s.serviceTable, s.checkTable}
|
||||||
|
tx, err := tables.StartTxn(false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(fmt.Errorf("Failed to start txn: %v", err))
|
panic(fmt.Errorf("Failed to start txn: %v", err))
|
||||||
}
|
}
|
||||||
@ -569,13 +576,14 @@ func parseHealthChecks(idx uint64, res []interface{}, err error) (uint64, struct
|
|||||||
// CheckServiceNodes returns the nodes associated with a given service, along
|
// CheckServiceNodes returns the nodes associated with a given service, along
|
||||||
// with any associated check
|
// with any associated check
|
||||||
func (s *StateStore) CheckServiceNodes(service string) (uint64, structs.CheckServiceNodes) {
|
func (s *StateStore) CheckServiceNodes(service string) (uint64, structs.CheckServiceNodes) {
|
||||||
tx, err := s.tables.StartTxn(true)
|
tables := MDBTables{s.nodeTable, s.serviceTable, s.checkTable}
|
||||||
|
tx, err := tables.StartTxn(true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(fmt.Errorf("Failed to start txn: %v", err))
|
panic(fmt.Errorf("Failed to start txn: %v", err))
|
||||||
}
|
}
|
||||||
defer tx.Abort()
|
defer tx.Abort()
|
||||||
|
|
||||||
idx, err := s.tables.LastIndexTxn(tx)
|
idx, err := tables.LastIndexTxn(tx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(fmt.Errorf("Failed to get last index: %v", err))
|
panic(fmt.Errorf("Failed to get last index: %v", err))
|
||||||
}
|
}
|
||||||
@ -587,13 +595,14 @@ func (s *StateStore) CheckServiceNodes(service string) (uint64, structs.CheckSer
|
|||||||
// CheckServiceNodes returns the nodes associated with a given service, along
|
// CheckServiceNodes returns the nodes associated with a given service, along
|
||||||
// with any associated checks
|
// with any associated checks
|
||||||
func (s *StateStore) CheckServiceTagNodes(service, tag string) (uint64, structs.CheckServiceNodes) {
|
func (s *StateStore) CheckServiceTagNodes(service, tag string) (uint64, structs.CheckServiceNodes) {
|
||||||
tx, err := s.tables.StartTxn(true)
|
tables := MDBTables{s.nodeTable, s.serviceTable, s.checkTable}
|
||||||
|
tx, err := tables.StartTxn(true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(fmt.Errorf("Failed to start txn: %v", err))
|
panic(fmt.Errorf("Failed to start txn: %v", err))
|
||||||
}
|
}
|
||||||
defer tx.Abort()
|
defer tx.Abort()
|
||||||
|
|
||||||
idx, err := s.tables.LastIndexTxn(tx)
|
idx, err := tables.LastIndexTxn(tx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(fmt.Errorf("Failed to get last index: %v", err))
|
panic(fmt.Errorf("Failed to get last index: %v", err))
|
||||||
}
|
}
|
||||||
@ -686,7 +695,7 @@ func (s *StateSnapshot) Nodes() structs.Nodes {
|
|||||||
|
|
||||||
// NodeServices is used to return all the services of a given node
|
// NodeServices is used to return all the services of a given node
|
||||||
func (s *StateSnapshot) NodeServices(name string) *structs.NodeServices {
|
func (s *StateSnapshot) NodeServices(name string) *structs.NodeServices {
|
||||||
_, res := s.store.parseNodeServices(s.tx, name)
|
_, res := s.store.parseNodeServices(s.store.tables, s.tx, name)
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user