Skip to content

Commit 7c4e481

Browse files
committed
Re-send messages in critical path to other nodes
1 parent eafd4e5 commit 7c4e481

7 files changed

Lines changed: 62 additions & 23 deletions

File tree

pkg/accountability/simpleacc/accountability.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ func NewReconfigurableModule(mc ModuleConfig, paramsTemplate ModuleParams, logge
125125
// Fill in instance-specific parameters.
126126
moduleParams := paramsTemplate
127127
moduleParams.Membership = accParams.Membership
128+
moduleParams.RetentionIndex = accParams.RetentionIndex
128129

129130
// Create a new instance of the multisig collector.
130131
accountabilityModule, err := NewModule(

pkg/accountability/simpleacc/common/common.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import (
66
"github.com/filecoin-project/mir/pkg/logging"
77
accpbtypes "github.com/filecoin-project/mir/pkg/pb/accountabilitypb/types"
88
trantorpbtypes "github.com/filecoin-project/mir/pkg/pb/trantorpb/types"
9+
timertypes "github.com/filecoin-project/mir/pkg/timer/types"
10+
tt "github.com/filecoin-project/mir/pkg/trantor/types"
911
t "github.com/filecoin-project/mir/pkg/types"
1012
)
1113

@@ -17,15 +19,18 @@ type ModuleConfig struct {
1719
Ordering t.ModuleID // provides Predecisions
1820
App t.ModuleID // receives Decisions and/or PoMs
1921
Crypto t.ModuleID // provides cryptographic primitives
22+
Timer t.ModuleID // provides Timing primitives
2023
Net t.ModuleID // provides network primitives
2124
}
2225

2326
// ModuleParams sets the values for the parameters of an instance of the protocol.
2427
// All replicas are expected to use identical module parameters.
2528
type ModuleParams struct {
26-
Membership *trantorpbtypes.Membership // the list of participating nodes
29+
Membership *trantorpbtypes.Membership // The list of participating nodes.
2730
LightCertificates bool
28-
PomsHandler func(m dsl.Module, // function to be called when PoMs detected
31+
ResendFrequency timertypes.Duration // Frequency with which messages in the critical path are re-sent
32+
RetentionIndex tt.RetentionIndex
33+
PoMsHandler func(m dsl.Module, // Function to be called when PoMs detected.
2934
mc *ModuleConfig,
3035
params *ModuleParams,
3136
state *incommon.State,

pkg/accountability/simpleacc/internal/poms/poms.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ func HandlePoMs(
9393
logger.Log(logging.LevelWarn, "Found valid PoMs! sending...")
9494

9595
// Handle PoMs according to the application's logic defined when creating the accountability factory
96-
params.PomsHandler(m, mc, params, state, state.UnhandledPoMs, logger)
96+
params.PoMsHandler(m, mc, params, state, state.UnhandledPoMs, logger)
9797

9898
for _, pom := range state.UnhandledPoMs {
9999
state.HandledPoMs[pom.NodeId] = pom

pkg/accountability/simpleacc/internal/predecisions/predecisions.go

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ package predecisions
33
import (
44
"reflect"
55

6+
eventpbdsl "github.com/filecoin-project/mir/pkg/pb/eventpb/dsl"
7+
eventpbtypes "github.com/filecoin-project/mir/pkg/pb/eventpb/types"
8+
69
"github.com/filecoin-project/mir/pkg/accountability/simpleacc/internal/certificates/lightcertificates"
710
isspbdsl "github.com/filecoin-project/mir/pkg/pb/isspb/dsl"
811
isspbtypes "github.com/filecoin-project/mir/pkg/pb/isspb/types"
@@ -19,6 +22,7 @@ import (
1922
cryptopbdsl "github.com/filecoin-project/mir/pkg/pb/cryptopb/dsl"
2023
cryptopbtypes "github.com/filecoin-project/mir/pkg/pb/cryptopb/types"
2124
transportpbdsl "github.com/filecoin-project/mir/pkg/pb/transportpb/dsl"
25+
transportpbevents "github.com/filecoin-project/mir/pkg/pb/transportpb/events"
2226
t "github.com/filecoin-project/mir/pkg/types"
2327
"github.com/filecoin-project/mir/pkg/util/maputil"
2428
"github.com/filecoin-project/mir/pkg/util/membutil"
@@ -79,7 +83,13 @@ func IncludePredecisions(
7983
state.LocalPredecision.SignedPredecision.Signature = signature
8084

8185
// Broadcast signed predecision to all participants (including oneself).
82-
transportpbdsl.SendMessage(m, mc.Net, accpbmsgs.SignedPredecision(mc.Self, sr.data, signature), maputil.GetKeys(params.Membership.Nodes))
86+
eventpbdsl.TimerRepeat(m,
87+
mc.Timer,
88+
[]*eventpbtypes.Event{transportpbevents.SendMessage(mc.Net, accpbmsgs.SignedPredecision(mc.Self, sr.data, signature), maputil.GetKeys(params.Membership.Nodes))},
89+
params.ResendFrequency,
90+
params.RetentionIndex,
91+
)
92+
8393
return nil
8494
})
8595

@@ -230,13 +240,16 @@ func decide(m dsl.Module, mc *common.ModuleConfig, params *common.ModuleParams,
230240
}
231241

232242
// Find the actual predecision from other nodes
233-
transportpbdsl.SendMessage(
234-
m,
235-
mc.Net,
236-
accpbmsgs.RequestSBMessage(mc.Self,
237-
predecision),
238-
state.PredecisionNodeIDs[string(predecision)])
239-
243+
eventpbdsl.TimerRepeat(m,
244+
mc.Timer,
245+
[]*eventpbtypes.Event{transportpbevents.SendMessage(
246+
mc.Net,
247+
accpbmsgs.RequestSBMessage(mc.Self,
248+
predecision),
249+
state.PredecisionNodeIDs[string(predecision)])},
250+
params.ResendFrequency,
251+
params.RetentionIndex,
252+
)
240253
}
241254

242255
func finishWithDecision(

pkg/pb/accountabilitypb/accountabilitypb.pb.go

Lines changed: 21 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/pb/accountabilitypb/types/types.mir.go

Lines changed: 9 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

protos/accountabilitypb/accountabilitypb.proto

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ message FullCertificate {
6363
message InstanceParams {
6464
option (mir.struct) = true;
6565

66-
trantorpb.Membership membership = 3;
66+
trantorpb.Membership membership = 1;
67+
uint64 retention_index = 2 [(mir.type) = "github.com/filecoin-project/mir/pkg/trantor/types.RetentionIndex"];
6768
}
6869

6970

0 commit comments

Comments
 (0)