Skip to content
This repository was archived by the owner on May 13, 2022. It is now read-only.

Commit d610247

Browse files
author
Silas Davis
committed
Fix various issues with burrow deploy and Deploy tests
Allow Deploy jobs to mark themselves as not suitable for parallel execution Signed-off-by: Silas Davis <[email protected]>
1 parent f8aa2d5 commit d610247

File tree

38 files changed

+333
-402
lines changed

38 files changed

+333
-402
lines changed

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ PROTO_GO_FILES_REAL = $(shell find . -type f -name '*.pb.go' -print)
8484
PROTO_TS_FILES = $(patsubst %.proto, %.pb.ts, $(PROTO_FILES))
8585

8686
.PHONY: protobuf
87-
protobuf: $(PROTO_GO_FILES) ${PROTO_TS_FILES} fix
87+
protobuf: $(PROTO_GO_FILES) $(PROTO_TS_FILES) fix
8888

8989
# Implicit compile rule for GRPC/proto files (note since pb.go files no longer generated
9090
# in same directory as proto file this just regenerates everything

acm/validator/cache.go

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"math/big"
55

66
"github.com/hyperledger/burrow/crypto"
7+
"github.com/hyperledger/burrow/util"
78
)
89

910
// Cache is just a Ring with no memory
@@ -22,6 +23,7 @@ func (vc *Cache) Reset(backend Iterable) {
2223
}
2324

2425
func (vc *Cache) Flush(output Writer, backend Iterable) error {
26+
util.Debugf("Flushing validators...")
2527
err := vc.Delta.IterateValidators(func(id crypto.Addressable, power *big.Int) error {
2628
_, err := output.SetPower(id.GetPublicKey(), power)
2729
return err

cmd/burrow/commands/tx.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010
"github.com/hyperledger/burrow/config/source"
1111
"github.com/hyperledger/burrow/deploy/def"
1212
"github.com/hyperledger/burrow/deploy/jobs"
13-
"github.com/hyperledger/burrow/deploy/util"
1413
"github.com/hyperledger/burrow/logging"
1514
"github.com/hyperledger/burrow/txs/payload"
1615
cli "github.com/jawher/mow.cli"
@@ -217,7 +216,7 @@ func makeTx(client *def.Client, tx payload.Payload) (string, error) {
217216
return "", err
218217
}
219218

220-
util.ReadTxSignAndBroadcast(txe, err, logger)
219+
jobs.LogTxExecution(txe, logger)
221220
if err != nil {
222221
return "", err
223222
}

deploy/def/client.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,7 @@ func (c *Client) UpdateAccount(arg *GovArg, logger *logging.Logger) (*payload.Go
359359
}
360360
update := &spec.TemplateAccount{
361361
Permissions: arg.Permissions,
362-
Roles: arg.Permissions,
362+
Roles: arg.Roles,
363363
}
364364
if arg.Address != "" {
365365
addr, err := c.ParseAddress(arg.Address, logger)
@@ -369,7 +369,7 @@ func (c *Client) UpdateAccount(arg *GovArg, logger *logging.Logger) (*payload.Go
369369
update.Address = &addr
370370
}
371371
if arg.PublicKey != "" {
372-
pubKey, err := publicKeyFromString(arg.PublicKey)
372+
pubKey, err := PublicKeyFromString(arg.PublicKey)
373373
if err != nil {
374374
return nil, fmt.Errorf("could not parse publicKey: %v", err)
375375
}
@@ -427,7 +427,7 @@ func (c *Client) PublicKeyFromAddress(address *crypto.Address) (*crypto.PublicKe
427427
return &pubKey, nil
428428
}
429429

430-
func publicKeyFromString(publicKey string) (crypto.PublicKey, error) {
430+
func PublicKeyFromString(publicKey string) (crypto.PublicKey, error) {
431431
bs, err := hex.DecodeString(publicKey)
432432
if err != nil {
433433
return crypto.PublicKey{}, fmt.Errorf("could not parse public key string %s as hex: %v", publicKey, err)

deploy/def/deploy.go

-15
Original file line numberDiff line numberDiff line change
@@ -39,18 +39,3 @@ func (args *DeployArgs) Validate() error {
3939
)
4040
}
4141

42-
type Playbook struct {
43-
Filename string
44-
Account string
45-
Jobs []*Job
46-
Path string `mapstructure:"-" json:"-" yaml:"-" toml:"-"`
47-
BinPath string `mapstructure:"-" json:"-" yaml:"-" toml:"-"`
48-
// If we're in a proposal or meta job, reference our parent script
49-
Parent *Playbook `mapstructure:"-" json:"-" yaml:"-" toml:"-"`
50-
}
51-
52-
func (pkg *Playbook) Validate() error {
53-
return validation.ValidateStruct(pkg,
54-
validation.Field(&pkg.Jobs),
55-
)
56-
}

deploy/def/playbook.go

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package def
2+
3+
import "github.com/go-ozzo/ozzo-validation"
4+
5+
type Playbook struct {
6+
Filename string
7+
Account string
8+
// Prevent this playbook from running at the same time as other playbooks
9+
NoParallel bool `mapstructure:"no-parallel,omitempty" json:"no-parallel,omitempty" yaml:"no-parallel,omitempty" toml:"no-parallel,omitempty"`
10+
Jobs []*Job
11+
Path string `mapstructure:"-" json:"-" yaml:"-" toml:"-"`
12+
BinPath string `mapstructure:"-" json:"-" yaml:"-" toml:"-"`
13+
// If we're in a proposal or meta job, reference our parent script
14+
Parent *Playbook `mapstructure:"-" json:"-" yaml:"-" toml:"-"`
15+
}
16+
17+
func (pkg *Playbook) Validate() error {
18+
return validation.ValidateStruct(pkg,
19+
validation.Field(&pkg.Jobs),
20+
)
21+
}

deploy/jobs/job_manager.go

+10-10
Original file line numberDiff line numberDiff line change
@@ -155,12 +155,12 @@ func doJobs(playbook *def.Playbook, args *def.DeployArgs, client *def.Client, lo
155155
if err != nil {
156156
return err
157157
}
158-
err = UpdateAccountJob(job.UpdateAccount, playbook.Account, tx, client, logger)
158+
err = UpdateAccountJob(tx, client, logger)
159159

160160
// Util jobs
161161
case *def.Account:
162162
announce(job.Name, "Account", logger)
163-
job.Result, err = SetAccountJob(job.Account, args, playbook, logger)
163+
job.Result, err = SetAccountJob(job.Account, playbook, logger)
164164
case *def.Set:
165165
announce(job.Name, "Set", logger)
166166
job.Result, err = SetValJob(job.Set, args, logger)
@@ -172,7 +172,7 @@ func doJobs(playbook *def.Playbook, args *def.DeployArgs, client *def.Client, lo
172172
if err != nil {
173173
return err
174174
}
175-
job.Result, err = SendJob(job.Send, tx, playbook.Account, client, logger)
175+
job.Result, err = SendJob(tx, client, logger)
176176
if err != nil {
177177
return err
178178
}
@@ -182,7 +182,7 @@ func doJobs(playbook *def.Playbook, args *def.DeployArgs, client *def.Client, lo
182182
if err != nil {
183183
return err
184184
}
185-
job.Result, err = BondJob(job.Bond, tx, playbook.Account, client, logger)
185+
job.Result, err = BondJob(tx, client, logger)
186186
if err != nil {
187187
return err
188188
}
@@ -192,7 +192,7 @@ func doJobs(playbook *def.Playbook, args *def.DeployArgs, client *def.Client, lo
192192
if err != nil {
193193
return err
194194
}
195-
job.Result, err = UnbondJob(job.Unbond, tx, playbook.Account, client, logger)
195+
job.Result, err = UnbondJob(tx, client, logger)
196196
if err != nil {
197197
return err
198198
}
@@ -202,7 +202,7 @@ func doJobs(playbook *def.Playbook, args *def.DeployArgs, client *def.Client, lo
202202
if err != nil {
203203
return err
204204
}
205-
job.Result, err = RegisterNameJob(job.RegisterName, args, playbook, txs, client, logger)
205+
job.Result, err = RegisterNameJob(txs, client, logger)
206206
if err != nil {
207207
return err
208208
}
@@ -212,7 +212,7 @@ func doJobs(playbook *def.Playbook, args *def.DeployArgs, client *def.Client, lo
212212
if err != nil {
213213
return err
214214
}
215-
job.Result, err = PermissionJob(job.Permission, playbook.Account, tx, client, logger)
215+
job.Result, err = PermissionJob(tx, client, logger)
216216
if err != nil {
217217
return err
218218
}
@@ -222,7 +222,7 @@ func doJobs(playbook *def.Playbook, args *def.DeployArgs, client *def.Client, lo
222222
if err != nil {
223223
return err
224224
}
225-
job.Result, err = IdentifyJob(job.Identify, tx, playbook.Account, client, logger)
225+
job.Result, err = IdentifyJob(tx, client, logger)
226226
if err != nil {
227227
return err
228228
}
@@ -234,15 +234,15 @@ func doJobs(playbook *def.Playbook, args *def.DeployArgs, client *def.Client, lo
234234
if ferr != nil {
235235
return ferr
236236
}
237-
job.Result, err = DeployJob(job.Deploy, args, playbook, client, txs, contracts, logger)
237+
job.Result, err = DeployJob(job.Deploy, playbook, client, txs, contracts, logger)
238238

239239
case *def.Call:
240240
announce(job.Name, "Call", logger)
241241
CallTx, ferr := FormulateCallJob(job.Call, args, playbook, client, logger)
242242
if ferr != nil {
243243
return ferr
244244
}
245-
job.Result, job.Variables, err = CallJob(job.Call, CallTx, args, playbook, client, logger)
245+
job.Result, job.Variables, err = CallJob(job.Call, CallTx, playbook, client, logger)
246246
case *def.Build:
247247
announce(job.Name, "Build", logger)
248248
var resp *compilers.Response

deploy/jobs/jobs_contracts.go

+15-23
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import (
1919
hex "github.com/tmthrgd/go-hex"
2020
)
2121

22-
var errCodeMissing = fmt.Errorf("error: no binary code found in contract. Contract may be abstract due to missing function body or inherited function signatures not matching.")
22+
var errCodeMissing = fmt.Errorf("error: no binary code found in contract. Contract may be abstract due to missing function body or inherited function signatures not matching")
2323

2424
func BuildJob(build *def.Build, deployScript *def.Playbook, resp *compilers.Response, logger *logging.Logger) (result string, err error) {
2525
// assemble contract
@@ -46,10 +46,8 @@ func BuildJob(build *def.Build, deployScript *def.Playbook, resp *compilers.Resp
4646
if binP == "" {
4747
binP = deployScript.BinPath
4848
} else {
49-
if _, err := os.Stat(binP); os.IsNotExist(err) {
50-
if err := os.Mkdir(binP, 0775); err != nil {
51-
return "", err
52-
}
49+
if err := os.MkdirAll(binP, 0775); err != nil {
50+
return "", err
5351
}
5452
}
5553

@@ -79,10 +77,8 @@ func BuildJob(build *def.Build, deployScript *def.Playbook, resp *compilers.Resp
7977
dir := filepath.Dir(build.Store)
8078
file := filepath.Base(build.Store)
8179

82-
if _, err := os.Stat(dir); os.IsNotExist(err) {
83-
if err := os.Mkdir(dir, 0775); err != nil {
84-
return "", err
85-
}
80+
if err := os.MkdirAll(dir, 0775); err != nil {
81+
return "", err
8682
}
8783

8884
err = res.Contract.Save(dir, file)
@@ -275,17 +271,17 @@ func FormulateDeployJob(deploy *def.Deploy, do *def.DeployArgs, deployScript *de
275271
return
276272
}
277273

278-
func DeployJob(deploy *def.Deploy, do *def.DeployArgs, script *def.Playbook, client *def.Client, txs []*payload.CallTx, contracts []*compilers.ResponseItem, logger *logging.Logger) (result string, err error) {
274+
func DeployJob(deploy *def.Deploy, script *def.Playbook, client *def.Client, txs []*payload.CallTx, contracts []*compilers.ResponseItem, logger *logging.Logger) (result string, err error) {
279275
// saving contract
280276
// additional data may be sent along with the contract
281277
// these are naively added to the end of the contract code using standard
282278
// mint packing
283279

284280
for i, tx := range txs {
285281
// Sign, broadcast, display
286-
contractAddress, err := deployFinalize(do, client, tx, logger)
282+
contractAddress, err := deployFinalize(client, tx, logger)
287283
if err != nil {
288-
return "", fmt.Errorf("Error finalizing contract deploy %s: %v", deploy.Contract, err)
284+
return "", fmt.Errorf("error finalizing contract deploy %s: %w", deploy.Contract, err)
289285
}
290286

291287
// saving contract/library abi at abi/address
@@ -467,8 +463,8 @@ func FormulateCallJob(call *def.Call, do *def.DeployArgs, deployScript *def.Play
467463
packedBytes, funcSpec, err = abi.EncodeFunctionCallFromFile(call.Destination, deployScript.BinPath, call.Function, logger, callDataArray...)
468464
}
469465
if err != nil {
470-
err = util.ABIErrorHandler(err, call, nil, logger)
471-
return
466+
return nil, fmt.Errorf("error in FormulateCallJob with %v: %w",
467+
call, err)
472468
}
473469
}
474470

@@ -494,14 +490,12 @@ func FormulateCallJob(call *def.Call, do *def.DeployArgs, deployScript *def.Play
494490
}, logger)
495491
}
496492

497-
func CallJob(call *def.Call, tx *payload.CallTx, do *def.DeployArgs, playbook *def.Playbook, client *def.Client, logger *logging.Logger) (string, []*abi.Variable, error) {
498-
var err error
493+
func CallJob(call *def.Call, tx *payload.CallTx, playbook *def.Playbook, client *def.Client, logger *logging.Logger) (string, []*abi.Variable, error) {
499494

500495
// Sign, broadcast, display
501496
txe, err := client.SignAndBroadcast(tx, logger)
502497
if err != nil {
503-
var err = util.ChainErrorHandler(payload.InputsString(tx.GetInputs()), err, logger)
504-
return "", nil, err
498+
return "", nil, fmt.Errorf("error in CallJob with %v: %w", call, err)
505499
}
506500

507501
if txe.Exception != nil {
@@ -561,16 +555,14 @@ func CallJob(call *def.Call, tx *payload.CallTx, do *def.DeployArgs, playbook *d
561555
return result, call.Variables, nil
562556
}
563557

564-
func deployFinalize(do *def.DeployArgs, client *def.Client, tx payload.Payload, logger *logging.Logger) (*crypto.Address, error) {
558+
func deployFinalize(client *def.Client, tx payload.Payload, logger *logging.Logger) (*crypto.Address, error) {
565559
txe, err := client.SignAndBroadcast(tx, logger)
566560
if err != nil {
567-
return nil, util.ChainErrorHandler(payload.InputsString(tx.GetInputs()), err, logger)
568-
}
569-
570-
if err := util.ReadTxSignAndBroadcast(txe, err, logger); err != nil {
571561
return nil, err
572562
}
573563

564+
LogTxExecution(txe, logger)
565+
574566
// The contructor can generate events
575567
logEvents(txe, client, logger)
576568

deploy/jobs/jobs_governance.go

+14-9
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ func FormulateUpdateAccountJob(gov *def.UpdateAccount, account string, client *d
4040
arg.Address = gov.Target
4141
} else {
4242
arg.PublicKey = gov.Target
43+
pk, err := def.PublicKeyFromString(gov.Target)
44+
if err != nil {
45+
panic(err)
46+
}
47+
arg.Address = pk.GetAddress().String()
4348
}
4449

4550
tx, err := client.UpdateAccount(arg, logger)
@@ -50,13 +55,13 @@ func FormulateUpdateAccountJob(gov *def.UpdateAccount, account string, client *d
5055
return tx, util.Variables(arg), nil
5156
}
5257

53-
func UpdateAccountJob(gov *def.UpdateAccount, account string, tx *payload.GovTx, client *def.Client, logger *logging.Logger) error {
58+
func UpdateAccountJob(tx *payload.GovTx, client *def.Client, logger *logging.Logger) error {
5459
txe, err := client.SignAndBroadcast(tx, logger)
5560
if err != nil {
56-
return util.ChainErrorHandler(account, err, logger)
61+
return fmt.Errorf("error in UpdateAccountJob with payload %v: %w", tx, err)
5762
}
5863

59-
util.ReadTxSignAndBroadcast(txe, err, logger)
64+
LogTxExecution(txe, logger)
6065
if err != nil {
6166
return err
6267
}
@@ -82,14 +87,14 @@ func FormulateBondJob(bond *def.Bond, account string, client *def.Client, logger
8287
return client.Bond(arg, logger)
8388
}
8489

85-
func BondJob(bond *def.Bond, tx *payload.BondTx, account string, client *def.Client, logger *logging.Logger) (string, error) {
90+
func BondJob(tx *payload.BondTx, client *def.Client, logger *logging.Logger) (string, error) {
8691
// Sign, broadcast, display
8792
txe, err := client.SignAndBroadcast(tx, logger)
8893
if err != nil {
89-
return "", util.ChainErrorHandler(account, err, logger)
94+
return "", fmt.Errorf("error in BondJob with payload %v: %w", tx, err)
9095
}
9196

92-
util.ReadTxSignAndBroadcast(txe, err, logger)
97+
LogTxExecution(txe, logger)
9398
if err != nil {
9499
return "", err
95100
}
@@ -114,14 +119,14 @@ func FormulateUnbondJob(unbond *def.Unbond, account string, client *def.Client,
114119
return client.Unbond(arg, logger)
115120
}
116121

117-
func UnbondJob(bond *def.Unbond, tx *payload.UnbondTx, account string, client *def.Client, logger *logging.Logger) (string, error) {
122+
func UnbondJob(tx *payload.UnbondTx, client *def.Client, logger *logging.Logger) (string, error) {
118123
// Sign, broadcast, display
119124
txe, err := client.SignAndBroadcast(tx, logger)
120125
if err != nil {
121-
return "", util.ChainErrorHandler(account, err, logger)
126+
return "", fmt.Errorf("error in UnbondJob with payload %v: %w", tx, err)
122127
}
123128

124-
util.ReadTxSignAndBroadcast(txe, err, logger)
129+
LogTxExecution(txe, logger)
125130
if err != nil {
126131
return "", err
127132
}

deploy/jobs/jobs_proposal.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -242,8 +242,7 @@ func ProposalJob(prop *def.Proposal, do *def.DeployArgs, parentScript *def.Playb
242242

243243
txe, err := client.SignAndBroadcast(proposalTx, logger)
244244
if err != nil {
245-
var err = util.ChainErrorHandler(proposalTx.Input.Address.String(), err, logger)
246-
return "", err
245+
return "", fmt.Errorf("error in ProposalJob with proposal %v: %w", prop, err)
247246
}
248247

249248
result := fmt.Sprintf("%X", txe.Receipt.TxHash)

deploy/jobs/jobs_test_jobs.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ func QueryContractJob(query *def.QueryContract, do *def.DeployArgs, script *def.
3434
data = hex.EncodeToString(packedBytes)
3535
}
3636
if err != nil {
37-
var err = util.ABIErrorHandler(err, nil, query, logger)
38-
return "", nil, err
37+
return "", nil, fmt.Errorf("error in QueryContractJob with %v: %w",
38+
query, err)
3939
}
4040

4141
logger.InfoMsg("Query contract",

0 commit comments

Comments
 (0)