/
leadership.go
39 lines (32 loc) · 1.06 KB
/
leadership.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// Copyright 2015 Canonical Ltd.
// Licensed under the AGPLv3, see LICENCE file for details.
package state
import (
"fmt"
"github.com/juju/errors"
"github.com/juju/mgo/v3/txn"
jujutxn "github.com/juju/txn/v3"
"github.com/juju/juju/core/leadership"
)
func removeLeadershipSettingsOp(applicationId string) txn.Op {
return removeSettingsOp(settingsC, leadershipSettingsKey(applicationId))
}
func leadershipSettingsKey(applicationId string) string {
return fmt.Sprintf("a#%s#leader", applicationId)
}
// buildTxnWithLeadership returns a transaction source
// that reasserts application leadership continuity.
func buildTxnWithLeadership(buildTxn jujutxn.TransactionSource, token leadership.Token) jujutxn.TransactionSource {
return func(attempt int) ([]txn.Op, error) {
if err := token.Check(); err != nil {
return nil, errors.Annotatef(err, "checking leadership continuity")
}
ops, err := buildTxn(attempt)
if err == jujutxn.ErrNoOperations {
return nil, jujutxn.ErrNoOperations
} else if err != nil {
return nil, errors.Trace(err)
}
return ops, nil
}
}