ensure test messages avoid the chain
This commit is contained in:
parent
deae3ad05f
commit
9f9af40d3b
@ -37,6 +37,11 @@ var wdPostCmd = &cli.Command{
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// wdPostTaskCmd writes to harmony_task and wdpost_partition_tasks, then waits for the result.
|
||||||
|
// It is intended to be used to test the windowpost scheduler.
|
||||||
|
// The end of the compute task puts the task_id onto wdpost_proofs, which is read by the submit task.
|
||||||
|
// The submit task will not send test tasks to the chain, and instead will write the result to harmony_test.
|
||||||
|
// The result is read by this command, and printed to stdout.
|
||||||
var wdPostTaskCmd = &cli.Command{
|
var wdPostTaskCmd = &cli.Command{
|
||||||
Name: "task",
|
Name: "task",
|
||||||
Aliases: []string{"scheduled", "schedule", "async", "asynchronous"},
|
Aliases: []string{"scheduled", "schedule", "async", "asynchronous"},
|
||||||
@ -113,6 +118,9 @@ var wdPostTaskCmd = &cli.Command{
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This command is intended to be used to verify PoSt compute performance.
|
||||||
|
// It will not send any messages to the chain. Since it can compute any deadline, output may be incorrectly timed for the chain.
|
||||||
|
// The entire processing happens in this process while you wait. It does not use the scheduler.
|
||||||
var wdPostHereCmd = &cli.Command{
|
var wdPostHereCmd = &cli.Command{
|
||||||
Name: "here",
|
Name: "here",
|
||||||
Aliases: []string{"cli"},
|
Aliases: []string{"cli"},
|
||||||
|
@ -4,4 +4,5 @@ CREATE TABLE harmony_test (
|
|||||||
primary key,
|
primary key,
|
||||||
options text,
|
options text,
|
||||||
result text
|
result text
|
||||||
);
|
);
|
||||||
|
ALTER TABLE wdpost_proofs ADD COLUMN test_task_id bigint;
|
@ -21,7 +21,7 @@ var log = logging.Logger("lpmessage")
|
|||||||
|
|
||||||
type str string // makes ctx value collissions impossible
|
type str string // makes ctx value collissions impossible
|
||||||
|
|
||||||
var CtxTaskID str = "task_id"
|
var CtxTestTaskID str = "task_id"
|
||||||
|
|
||||||
type SenderAPI interface {
|
type SenderAPI interface {
|
||||||
StateAccountKey(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error)
|
StateAccountKey(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error)
|
||||||
@ -106,7 +106,7 @@ func (s *Sender) Send(ctx context.Context, msg *types.Message, mss *api.MessageS
|
|||||||
|
|
||||||
var idCount int
|
var idCount int
|
||||||
err = s.db.QueryRow(ctx, `SELECT COUNT(*) FROM harmony_test WHERE task_id=$1`,
|
err = s.db.QueryRow(ctx, `SELECT COUNT(*) FROM harmony_test WHERE task_id=$1`,
|
||||||
ctx.Value(CtxTaskID)).Scan(&idCount)
|
ctx.Value(CtxTestTaskID)).Scan(&idCount)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return cid.Undef, xerrors.Errorf("reading harmony_test: %w", err)
|
return cid.Undef, xerrors.Errorf("reading harmony_test: %w", err)
|
||||||
}
|
}
|
||||||
@ -163,7 +163,7 @@ func (s *Sender) Send(ctx context.Context, msg *types.Message, mss *api.MessageS
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return false, xerrors.Errorf("marshaling message: %w", err)
|
return false, xerrors.Errorf("marshaling message: %w", err)
|
||||||
}
|
}
|
||||||
id := ctx.Value(CtxTaskID)
|
id := ctx.Value(CtxTestTaskID)
|
||||||
tx.Exec(`UPDATE harmony_test SET result=$1 WHERE task_id=$2`, string(data), id)
|
tx.Exec(`UPDATE harmony_test SET result=$1 WHERE task_id=$2`, string(data), id)
|
||||||
log.Infof("SKIPPED sending test message to chain. Query harmony_test WHERE task_id= %v", id)
|
log.Infof("SKIPPED sending test message to chain. Query harmony_test WHERE task_id= %v", id)
|
||||||
return true, nil // nothing committed
|
return true, nil // nothing committed
|
||||||
|
@ -161,6 +161,14 @@ func (t *WdPostTask) Do(taskID harmonytask.TaskID, stillOwned func() bool) (done
|
|||||||
return false, xerrors.Errorf("marshaling PoSt: %w", err)
|
return false, xerrors.Errorf("marshaling PoSt: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
testTaskID := 0
|
||||||
|
testTaskIDCt := 0
|
||||||
|
if err = t.db.QueryRow(context.Background(), `SELECT COUNT(*) FROM harmony_test WHERE task_id = $1`, taskID).Scan(&testTaskIDCt); err != nil {
|
||||||
|
return false, xerrors.Errorf("querying for test task: %w", err)
|
||||||
|
}
|
||||||
|
if testTaskIDCt == 1 {
|
||||||
|
testTaskID = int(taskID)
|
||||||
|
}
|
||||||
// Insert into wdpost_proofs table
|
// Insert into wdpost_proofs table
|
||||||
n, err := t.db.Exec(context.Background(),
|
n, err := t.db.Exec(context.Background(),
|
||||||
`INSERT INTO wdpost_proofs (
|
`INSERT INTO wdpost_proofs (
|
||||||
@ -170,15 +178,18 @@ func (t *WdPostTask) Do(taskID harmonytask.TaskID, stillOwned func() bool) (done
|
|||||||
partition,
|
partition,
|
||||||
submit_at_epoch,
|
submit_at_epoch,
|
||||||
submit_by_epoch,
|
submit_by_epoch,
|
||||||
proof_params)
|
proof_params,
|
||||||
VALUES ($1, $2, $3, $4, $5, $6, $7)`,
|
test_task_id)
|
||||||
|
VALUES ($1, $2, $3, $4, $5, $6, $7, $8)`,
|
||||||
spID,
|
spID,
|
||||||
pps,
|
pps,
|
||||||
deadline.Index,
|
deadline.Index,
|
||||||
partIdx,
|
partIdx,
|
||||||
deadline.Open,
|
deadline.Open,
|
||||||
deadline.Close,
|
deadline.Close,
|
||||||
msgbuf.Bytes())
|
msgbuf.Bytes(),
|
||||||
|
testTaskID,
|
||||||
|
)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("WdPostTask.Do() failed to insert into wdpost_proofs: %v", err)
|
log.Errorf("WdPostTask.Do() failed to insert into wdpost_proofs: %v", err)
|
||||||
|
@ -78,11 +78,12 @@ func (w *WdPostSubmitTask) Do(taskID harmonytask.TaskID, stillOwned func() bool)
|
|||||||
var pps, submitAtEpoch, submitByEpoch abi.ChainEpoch
|
var pps, submitAtEpoch, submitByEpoch abi.ChainEpoch
|
||||||
var earlyParamBytes []byte
|
var earlyParamBytes []byte
|
||||||
var dbTask uint64
|
var dbTask uint64
|
||||||
|
var testTaskID uint64
|
||||||
|
|
||||||
err = w.db.QueryRow(
|
err = w.db.QueryRow(
|
||||||
context.Background(), `SELECT sp_id, proving_period_start, deadline, partition, submit_at_epoch, submit_by_epoch, proof_params, submit_task_id
|
context.Background(), `SELECT sp_id, proving_period_start, deadline, partition, submit_at_epoch, submit_by_epoch, proof_params, submit_task_id, test_task_id
|
||||||
FROM wdpost_proofs WHERE submit_task_id = $1`, taskID,
|
FROM wdpost_proofs WHERE submit_task_id = $1`, taskID,
|
||||||
).Scan(&spID, &pps, &deadline, &partition, &submitAtEpoch, &submitByEpoch, &earlyParamBytes, &dbTask)
|
).Scan(&spID, &pps, &deadline, &partition, &submitAtEpoch, &submitByEpoch, &earlyParamBytes, &dbTask, &testTaskID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, xerrors.Errorf("query post proof: %w", err)
|
return false, xerrors.Errorf("query post proof: %w", err)
|
||||||
}
|
}
|
||||||
@ -149,7 +150,7 @@ func (w *WdPostSubmitTask) Do(taskID harmonytask.TaskID, stillOwned func() bool)
|
|||||||
return false, xerrors.Errorf("preparing proof message: %w", err)
|
return false, xerrors.Errorf("preparing proof message: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx := context.WithValue(context.Background(), lpmessage.CtxTaskID, taskID)
|
ctx := context.WithValue(context.Background(), lpmessage.CtxTestTaskID, testTaskID)
|
||||||
smsg, err := w.sender.Send(ctx, msg, mss, "wdpost")
|
smsg, err := w.sender.Send(ctx, msg, mss, "wdpost")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, xerrors.Errorf("sending proof message: %w", err)
|
return false, xerrors.Errorf("sending proof message: %w", err)
|
||||||
|
Loading…
Reference in New Issue
Block a user