Skip to content

Commit ebb0897

Browse files
Merge pull request #7 from Kaushal1011/hardik
Merging changes from hardik
2 parents 65fcb94 + 8c4daf7 commit ebb0897

File tree

5 files changed

+160
-108
lines changed

5 files changed

+160
-108
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,5 @@ target/
1212
.bsp
1313

1414
lightbend.sbt
15+
16+
metals.sbt

src/main/scala/com/distcomp/common/Messages.scala

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,9 @@ object ElectionProtocol {
163163
case object StartElection extends Message
164164

165165
case object StartNextRound extends Message
166+
166167
case object wakeUpPhase extends Message
168+
167169
case object Winner extends Message
168170

169171
case class VictoryMessage(leaderId: String) extends Message
@@ -192,19 +194,25 @@ object DolevKlaweRodehProtocol {
192194

193195
}
194196

195-
object TreeElectionProtocol{
197+
object TreeElectionProtocol {
196198
case class ElectionMessageTE(candidateId: String, from: ActorRef[Message]) extends Message
199+
197200
case class WakeUpPhaseMessage(fromNodeId: String, node: ActorRef[Message]) extends Message
198-
// case object Initiate extends Message
199-
// case class wakeUpPhaseMessage(candidateId: String, from: ActorRef[Message]) extends Message
200-
case object WakeUpPhase extends Message
201-
case class MakeParent(nodeId:String, from: ActorRef[Message], maxChild: String, maxChildRef: ActorRef[Message]) extends Message
202-
case class Decide(nodeId:String, from: ActorRef[Message], maxChild: String, maxChildRef:ActorRef[Message]) extends Message
201+
202+
// case object Initiate extends Message
203+
// case class wakeUpPhaseMessage(candidateId: String, from: ActorRef[Message]) extends Message
204+
case object WakeUpPhase extends Message
205+
206+
case class MakeParent(nodeId: String, from: ActorRef[Message], maxChild: String, maxChildRef: ActorRef[Message]) extends Message
207+
208+
case class Decide(nodeId: String, from: ActorRef[Message], maxChild: String, maxChildRef: ActorRef[Message]) extends Message
203209
}
204210

205211
object TreeProtocol {
206-
case class MakeParent(nodeId:String, from: ActorRef[Message]) extends Message
207-
case class Decide(nodeId:String, from: ActorRef[Message]) extends Message
212+
case class MakeParent(nodeId: String, from: ActorRef[Message]) extends Message
213+
214+
case class Decide(nodeId: String, from: ActorRef[Message]) extends Message
215+
208216
case object Initiate extends Message
209217

210218
}
@@ -223,9 +231,12 @@ object BrachaMessages {
223231

224232
final case class Done(override val from: ActorRef[Message]) extends WaitForMessage
225233

226-
final case class StartDetection() extends Message
227234

228-
final case class EnableBrachaBehaviour(outgoingRequests: mutable.Set[ActorRef[Message]]) extends Message
235+
final case class StartDetection(isInitiator: Boolean, sleepTime: Int = 500) extends Message
236+
237+
final case class ActivateNode(outgoingRequests: mutable.Set[ActorRef[Message]]) extends Message
238+
239+
final case class StartProcessing() extends Message
229240

230241
final case class getStatus(override val from: ActorRef[Message]) extends WaitForMessage
231242

src/main/scala/com/distcomp/common/NodeActor.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ object NodeActor {
124124
EchoElection(context.self.path.name, edges.keySet, edges, simulator, timestamp)
125125
case "bracha-toueg" =>
126126
context.log.info("Switching to Bracha Toueg Algorithm")
127-
BrachaToueg(context.self.path.name)
127+
BrachaToueg(context.self.path.name, edges.keySet)
128128

129129
case "chandy-misra" =>
130130
context.log.info("Switching the algorithm to Chandy-Misra in nodeActor")

src/main/scala/com/distcomp/common/SimulatorActor.scala

Lines changed: 36 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,12 @@ package com.distcomp.common
22

33
import akka.actor.typed.{ActorRef, Behavior}
44
import akka.actor.typed.scaladsl.{ActorContext, Behaviors}
5-
import com.distcomp.common.BrachaMessages.EnableBrachaBehaviour
5+
import com.distcomp.common.BrachaMessages.{ActivateNode, StartProcessing}
66
import com.distcomp.common.SimulatorProtocol._
77
import com.distcomp.common.SpanningTreeProtocol.InitiateSpanningTree
88
import com.distcomp.common.MutexProtocol._
99
import com.distcomp.common.ElectionProtocol._
1010
import com.distcomp.common.FranklinProtocol.SetRandomNodeId
11-
1211
import com.distcomp.common.TreeElectionProtocol._
1312
//import com.distcomp.common.TreeProtocol.WakeUpPhase
1413
import com.distcomp.common.TreeProtocol._
@@ -51,16 +50,16 @@ object SimulatorActor {
5150

5251
// Function to handle algorithm execution logic for each distributed algorithm
5352
private def executeAlgorithm(
54-
step: SimulationStep,
55-
nodes: Set[ActorRef[Message]],
56-
numInitiators: Int,
57-
additional: Int,
58-
context: ActorContext[SimulatorMessage],
59-
readyNodes: Set[String],
60-
simulationSteps: List[SimulationStep],
61-
intialiser: ActorRef[Message],
62-
numNodes: Option[Int] = None
63-
): Behavior[SimulatorMessage] = {
53+
step: SimulationStep,
54+
nodes: Set[ActorRef[Message]],
55+
numInitiators: Int,
56+
additional: Int,
57+
context: ActorContext[SimulatorMessage],
58+
readyNodes: Set[String],
59+
simulationSteps: List[SimulationStep],
60+
intialiser: ActorRef[Message],
61+
numNodes: Option[Int] = None
62+
): Behavior[SimulatorMessage] = {
6463
step.algorithm match {
6564
case "ricart-agarwala" =>
6665
Thread.sleep(1000)
@@ -269,7 +268,7 @@ object SimulatorActor {
269268

270269
Thread.sleep(2000)
271270
// randomly take x initiators and send initate message to start election
272-
nodes.take(numInitiators).foreach(node => node ! wakeUpPhase )
271+
nodes.take(numInitiators).foreach(node => node ! wakeUpPhase)
273272

274273
behaviorAfterInit(nodes, readyNodes, simulationSteps, intialiser, 1)
275274

@@ -300,7 +299,11 @@ object SimulatorActor {
300299
}
301300

302301
for (no <- nodes) {
303-
no ! EnableBrachaBehaviour(dependencies(no))
302+
no ! ActivateNode(dependencies(no))
303+
}
304+
305+
for (no <- nodes) {
306+
no ! StartProcessing()
304307
}
305308

306309
behaviorAfterInit(nodes, readyNodes, simulationSteps, intialiser, 1)
@@ -311,28 +314,28 @@ object SimulatorActor {
311314
// randomly take x initiators and send initate message to start election
312315
nodes.take(numInitiators).foreach(node => node ! WakeUpPhase)
313316

314-
behaviorAfterInit(nodes,readyNodes,simulationSteps,intialiser,1)
317+
behaviorAfterInit(nodes, readyNodes, simulationSteps, intialiser, 1)
315318

316319
case "tree" =>
317320
context.log.info("Executing Tree Algorithm")
318321
Thread.sleep(1000)
319322
// shuffle the nodes
320323

321-
nodes.foreach(node => node ! Initiate )
324+
nodes.foreach(node => node ! Initiate)
322325

323-
behaviorAfterInit(nodes,readyNodes,simulationSteps,intialiser,1)
326+
behaviorAfterInit(nodes, readyNodes, simulationSteps, intialiser, 1)
324327

325328
case "chandy-misra" =>
326329
Thread.sleep(1000)
327330
context.log.info("Executing Chandy-Misra Algorithm")
328331
nodes.take(1).foreach(node => node ! StartRouting(node.path.name))
329-
behaviorAfterInit(nodes, readyNodes, simulationSteps, intialiser,1)
332+
behaviorAfterInit(nodes, readyNodes, simulationSteps, intialiser, 1)
330333

331334
case "merlin-segall" =>
332335

333336
context.log.info("Waiting for spanning tree to complete.")
334337
nodes.take(1).foreach(node => node ! InitiateSpanningTree)
335-
behaviorAfterInit(nodes, readyNodes, simulationSteps, intialiser,1, Some(readyNodes.size))
338+
behaviorAfterInit(nodes, readyNodes, simulationSteps, intialiser, 1, Some(readyNodes.size))
336339

337340
case "toueg" =>
338341
context.log.info("Executing Toueg Algorithm")
@@ -343,20 +346,20 @@ object SimulatorActor {
343346
val pivots = shuffledNodes.zipWithIndex.map { case (node, index) => index -> node }.toMap
344347

345348
nodes.foreach(node => node ! SetAllNodes(nodes))
346-
Thread.sleep(1000)
349+
Thread.sleep(1000)
347350

348351
nodes.foreach(node => node ! StartRoutingT(nodes, pivots))
349352

350353

351-
behaviorAfterInit(nodes, readyNodes, simulationSteps, intialiser,nodes.size)
354+
behaviorAfterInit(nodes, readyNodes, simulationSteps, intialiser, nodes.size)
352355

353356
case "frederickson" =>
354357
Thread.sleep(1000)
355358
context.log.info("Executing Frederickson Algorithm")
356359
nodes.take(1).foreach(node => node ! StartRouting(node.path.name))
357360

358-
behaviorAfterInit(nodes, readyNodes, simulationSteps, intialiser,1)
359-
//
361+
behaviorAfterInit(nodes, readyNodes, simulationSteps, intialiser, 1)
362+
//
360363

361364
case _ =>
362365
context.log.info("Algorithm not recognized in Simulator .")
@@ -404,13 +407,13 @@ object SimulatorActor {
404407

405408
// Behavior after all nodes are registered and ready to start simulation
406409
private def behaviorAfterInit(
407-
nodes: Set[ActorRef[Message]],
408-
readyNodes: Set[String],
409-
simulationSteps: List[SimulationStep],
410-
intialiser: ActorRef[Message],
411-
repliesToWait: Int = 0,
412-
numNodes: Option[Int] = None
413-
): Behavior[SimulatorMessage] =
410+
nodes: Set[ActorRef[Message]],
411+
readyNodes: Set[String],
412+
simulationSteps: List[SimulationStep],
413+
intialiser: ActorRef[Message],
414+
repliesToWait: Int = 0,
415+
numNodes: Option[Int] = None
416+
): Behavior[SimulatorMessage] =
414417
Behaviors.receive { (context, message) =>
415418
message match {
416419
case RegisterNode(node, nodeId) =>
@@ -428,7 +431,7 @@ object SimulatorActor {
428431
val numInitiators = step.additionalParameters.getOrElse("initiators", 1)
429432
val additional = step.additionalParameters.getOrElse("additional", 0)
430433
executeAlgorithm(step, nodes, numInitiators, additional, context, updatedReadyNodes, simulationSteps, intialiser, numNodes)
431-
}else {
434+
} else {
432435
behaviorAfterInit(nodes, updatedReadyNodes, simulationSteps, intialiser, repliesToWait)
433436
}
434437

@@ -498,7 +501,7 @@ object SimulatorActor {
498501
val step = remainingSteps.head
499502
context.log.info(s"Initialising network for step: $step")
500503
Thread.sleep(500)
501-
intialiser ! SetupNetwork(step.dotFilePath, step.isDirected, step.createRing, step.createClique,step.createBinTree, step.enableFailureDetector ,context.self)
504+
intialiser ! SetupNetwork(step.dotFilePath, step.isDirected, step.createRing, step.createClique, step.createBinTree, step.enableFailureDetector, context.self)
502505

503506
behaviorAfterInit(Set.empty, Set.empty, remainingSteps, intialiser, 1)
504507
}
@@ -520,7 +523,7 @@ object SimulatorActor {
520523
simulationSteps.headOption.foreach { step =>
521524
intialiser ! SetupNetwork(step.dotFilePath, step.isDirected, step.createRing, step.createClique, step.createBinTree, step.enableFailureDetector, context.self)
522525
}
523-
behaviorAfterInit(nodes, readyNodes, simulationSteps, intialiser,1)
526+
behaviorAfterInit(nodes, readyNodes, simulationSteps, intialiser, 1)
524527

525528
case RegisterNode(node, nodeId) =>
526529
behavior(nodes + node, readyNodes, simulationSteps)

0 commit comments

Comments
 (0)