10000 Assignment 3: some changes not yet done · rpytel1/distributed-algorithms@37563a2 · GitHub
[go: up one dir, main page]

Skip to content

Commit 37563a2

Browse files
author
rpytel1
committed
Assignment 3: some changes not yet done
1 parent 4a42e88 commit 37563a2

File tree

1 file changed

+81
-32
lines changed

1 file changed

+81
-32
lines changed

Assignment3/src/assignment3/node/Node.java

Lines changed: 81 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,17 @@ public void wakeUp() throws RemoteException {
5757
@Override
5858
public void run() {
5959
try {
60-
nodes[edge.getReceiver(id)].receive(msg, edge);
60+
int receiverId = edge.getReceiver(id);
61+
Thread.sleep(10);
62+
nodes[receiverId].receive(msg, edge);
6163
} catch (RemoteException e) {
6264
e.printStackTrace();
65+
} catch (InterruptedException e) {
66+
e.printStackTrace();
6367
}
6468
}
6569
},
66-
10
70+
0
6771
);
6872
}
6973

@@ -148,6 +152,7 @@ public void run() {
148152
10
149153
);
150154
if (state == NodeState.FIND) {
155+
System.out.println(id + ": Connect Incrementing findcount");
151156
findCount.getAndIncrement();
152157
}
153158
} else {
@@ -159,13 +164,16 @@ public void run() {
159164
@Override
160165
public void run() {
161166
try {
162-
nodes[id].receiveConnect(message, link);
167+
Thread.sleep(300);
168+
nodes[id].receive(message, link);
163169
} catch (RemoteException e) {
164170
e.printStackTrace();
171+
} catch (InterruptedException e) {
172+
e.printStackTrace();
165173
}
166174
}
167175
},
168-
300);
176+
0);
169177
} else {
170178
// the merging case: l == l' and MOE == MOE'
171179
Message msg = new Message(MessageType.INITIATE, level + 1, link.getWeight(), NodeState.FIND);
@@ -175,16 +183,17 @@ public void run() {
175183
@Override
176184
public void run() {
177185
try {
178-
Thread.sleep(30);//It is added to preserve order of messages sended from certain node
179-
nodes[link.getReceiver(id)].receive(msg, link);
186+
int receiverId = link.getReceiver(id);
187+
Thread.sleep(40);//It is added to preserve order of messages sended from certain node
188+
nodes[receiverId].receive(msg, link);
180189
} catch (RemoteException e) {
181190
e.printStackTrace();
182191
} catch (InterruptedException e) {
183192
e.printStackTrace();
184193
}
185194
}
186195
},
187-
10);
196+
0);
188197
}
189198
}
190199
}
@@ -198,25 +207,29 @@ private synchronized void receiveInitiate(Message message, Link link) throws Rem
198207
bestEdge = null;
199208
weightBestAdjacent = Double.POSITIVE_INFINITY;
200209

201-
for (Link adjescentLink : this.links) {//TODO: Not sure if this is the correct one list of links
210+
for (Link adjescentLink : this.links) {
202211
if (adjescentLink.compareTo(link) != 0 && adjescentLink.getState() == LinkState.IN_MST) {
203212
Message msg = new Message(MessageType.INITIATE, level, fragmentName, state);
204213
System.out.println(id + ": Sending Initiate to " + adjescentLink.getReceiver(id));
205-
Link copy = new Link(adjescentLink);
206214
new java.util.Timer().schedule(
207215
new java.util.TimerTask() {
208216
@Override
209217
public void run() {
210218
try {
219+
Link copy = new Link(adjescentLink);
220+
Thread.sleep(10);
211221
nodes[copy.getReceiver(id)].receive(msg, copy);
212222
} catch (RemoteException e) {
213223
e.printStackTrace();
224+
} catch (InterruptedException e) {
225+
e.printStackTrace();
214226
}
215227
}
216228
},
217-
10
229+
0
218230
);
219231
if (state == NodeState.FIND) {
232+
System.out.println(id + ": Initiate Incrementing findcount");
220233
findCount.getAndIncrement();
221234
// the messages sent
222235
}
@@ -232,20 +245,23 @@ private synchronized void test() throws RemoteException {
232245
if (links.stream().anyMatch(p -> p.getState() == LinkState.CANDIDATE_IN_MST)) {
233246
testEdge = links.stream().filter(p -> p.getState() == LinkState.CANDIDATE_IN_MST).min(new LinkComparator()).get();
234247
Message msg = new Message(MessageType.TEST, level, fragmentName);
235-
Link copy = new Link(testEdge);
236248
System.out.println(id + ":Sending Receive test to " + testEdge.getReceiver(id));
249+
int reciverID = testEdge.getReceiver(id);
237250
new java.util.Timer().schedule(
238251
new java.util.TimerTask() {
239252
@Override
240253
public void run() {
241254
try {
242-
nodes[copy.getReceiver(id)].receive(msg, testEdge);
255+
Thread.sleep(10);
256+
nodes[reciverID].receive(msg, testEdge);
243257
} catch (RemoteException e) {
244258
e.printStackTrace();
259+
} catch (InterruptedException e) {
260+
e.printStackTrace();
245261
}
246262
}
247263
},
248-
10
264+
0
249265
);
250266
} else {
251267
if (testEdge != null) {
@@ -272,13 +288,16 @@ public synchronized void receiveTest(Message message, Link link) throws RemoteEx
272288
@Override
273289
public void run() {
274290
try {
291+
Thread.sleep(300);
275292
nodes[id].receiveTest(message, link);
276293
} catch (RemoteException e) {
277294
e.printStackTrace();
295+
} catch (InterruptedException e) {
296+
e.printStackTrace();
278297
}
279298
}
280299
},
281-
300);
300+
0);
282301
// receiving again with a delay
283302
} else {
284303
// if the name of the fragment is different then a possible MOE is identified
@@ -291,13 +310,16 @@ public void run() {
291310
@Override
292311
public void run() {
293312
try {
313+
Thread.sleep(10);
294314
nodes[link.getReceiver(id)].receive(msg, link);
295315
} catch (RemoteException e) {
296316
e.printStackTrace();
317+
} catch (InterruptedException e) {
318+
e.printStackTrace();
297319
}
298320
}
299321
},
300-
10
322+
0
301323
);
302324
} else {
303325
if (link.getState() == LinkState.CANDIDATE_IN_MST) {
@@ -307,20 +329,24 @@ public void run() {
307329
// if the node hasn't set this edge as testEdge then it sends a reject
308330
// because they are in the same fragment with the sender
309331
if (link.compareTo(testEdge) != 0) {
310-
System.out.println(id + ":Sending Reject to " + link.getReceiver(id));
311-
Message msg = new Message(MessageType.REJECT);
332+
312333
new java.util.Timer().schedule(
313334
new java.util.TimerTask() {
314335
@Override
315336
public void run() {
316337
try {
338+
System.out.println(id + ":Sending Reject to " + link.getReceiver(id));
339+
Message msg = new Message(MessageType.REJECT);
340+
Thread.sleep(10);
317341
nodes[link.getReceiver(id)].receive(msg, link);
318342
} catch (RemoteException e) {
319343
e.printStackTrace();
344+
} catch (InterruptedException e) {
345+
e.printStackTrace();
320346
}
321347
}
322348
},
323-
10
349+
0
324350
);
325351
} else {
326352
test();
@@ -341,6 +367,7 @@ private synchronized void receiveReject(Message message, Link link) throws Remot
341367

342368
private synchronized void receiveAccept(Message message, Link link) throws RemoteException {
343369
System.out.println(id + ":Receive Accept from " + link.getReceiver(id));
370+
System.out.println(id + ": Changing test edge from" + link.getReceiver(id) + " to null");
344371
testEdge = null;
345372
System.out.println(id + ": Accept " + link.getWeight() + " " + weightBestAdjacent);
346373
if (link.getWeight() < weightBestAdjacent) {
@@ -352,6 +379,9 @@ private synchronized void receiveAccept(Message message, Link link) throws Remot
352379

353380
private synchronized void report() throws RemoteException {
354381
System.out.println(id + ":Report find_count:" + findCount.get() + " testEdge:" + testEdge);
382+
if (testEdge != null) {
383+
System.out.println(id + ": " + testEdge.getReceiver(id) + " " + testEdge.getWeight());
384+
}
355385
if (findCount.get() == 0 && testEdge == null) {
356386
this.state = NodeState.FOUND;
357387
Message msg = new Message(MessageType.REPORT, weightBestAdjacent);
@@ -361,22 +391,27 @@ private synchronized void report() throws RemoteException {
361391
@Override
362392
public void run() {
363393
try {
364-
nodes[inBranch.getReceiver(id)].receive(msg, inBranch);
394+
int receiverId = inBranch.getReceiver(id);
395+
Thread.sleep(10);
396+
nodes[receiverId].receive(msg, inBranch);
365397
} catch (RemoteException e) {
366398
e.printStackTrace();
399+
} catch (InterruptedException e) {
400+
e.printStackTrace();
367401
}
368402
}
369403
},
370-
10
404+
0
371405
);
372406
}
373407
}
374408

375409
@Override
376410
public synchronized void receiveReport(Message message, Link link) throws RemoteException {
377-
System.out.println(id + ":Receive Report from " + link.getReceiver(id)+" state:"+state);
378-
System.out.println(findCount.get());
411+
System.out.println(id + ":Receive Report from " + link.getReceiver(id) + " state:" + state + " find_count:" + findCount);
412+
System.out.println(id + " " + link.getWeight() + " " + inBranch.getWeight());
379413
if (link.compareTo(inBranch) != 0) {
414+
System.out.println(id + ": Decrementing findcount");
380415
findCount.getAndDecrement();
381416
System.out.println(id + ": Report " + message.getWeight() + " " + weightBestAdjacent);
382417
if (message.getWeight() < weightBestAdjacent) {
@@ -388,18 +423,22 @@ public synchronized void receiveReport(Message message, Link link) throws Remote
388423
} else {
389424
if (this.state == NodeState.FIND) {
390425
// TODO: append message to the message queue
426+
System.out.println("Adding report to the queue");
391427
new java.util.Timer().schedule(
392428
new java.util.TimerTask() {
393429
@Override
394430
public void run() {
395431
try {
396-
nodes[id].receiveReport(message, link);
432+
Thread.sleep(500);
433+
nodes[id].receive(message, link);
397434
} catch (RemoteException e) {
398435
e.printStackTrace();
436+
} catch (InterruptedException e) {
437+
e.printStackTrace();
399438
}
400439
}
401440
},
402-
500);
441+
0);
403442
} else {
404443
if (message.getWeight() > weightBestAdjacent)
405444
changeRoot();
@@ -414,7 +453,7 @@ public void run() {
414453
}
415454
}
416455

417-
private synchronized void changeRoot() throws RemoteException {
456+
private void changeRoot() throws RemoteException {
418457
System.out.println(id + ":Change Root");
419458

420459
if (bestEdge.getState() == LinkState.IN_MST) {
@@ -425,34 +464,44 @@ private synchronized void changeRoot() throws RemoteException {
425464
@Override
426465
public void run() {
427466
try {
428-
System.out.println(id + ":Sending change root to " + bestEdge.getReceiver(id));
429-
nodes[bestEdge.getReceiver(id)].receiveChangeRoot(msg, bestEdge);
467+
int receiverId = bestEdge.getReceiver(id);
468+
Thread.sleep(10);
469+
System.out.println(id + ":Sending change root to " + receiverId);
470+
nodes[receiverId].receive(msg, bestEdge);
430471

431472
} catch (RemoteException e) {
432473
e.printStackTrace();
474+
} catch (InterruptedException e) {
475+
e.printStackTrace();
433476
}
434477
}
435478
},
436-
10
479+
0
437480
);
438481
} else {
439482
Message msg = new Message(MessageType.CONNECT, level);
440483
// TODO: check if bestEdge is adjacent to the node
484+
System.out.println(id + ":Sending connect message " + bestEdge.getReceiver(id));
441485
new java.util.Timer().schedule(
442486
new java.util.TimerTask() {
443487
@Override
444488
public void run() {
445489
try {
446-
nodes[bestEdge.getReceiver(id)].receiveChangeRoot(msg, bestEdge);
447-
System.out.println(id + ": changing bestEdge to " + bestEdge.getReceiver(id) + " to IN_MST");
448-
bestEdge.setState(LinkState.IN_MST);
490+
Link copy = new Link(bestEdge);
491+
int receiverId = copy.getReceiver(id);
492+
Thread.sleep(10);
493+
nodes[receiverId].receive(msg, copy);
449494
} catch (RemoteException e) {
450495
e.printStackTrace();
496+
} catch (InterruptedException e) {
497+
e.printStackTrace();
451498
}
452499
}
453500
},
454-
10
501+
0
455502
);
503+
System.out.println(id + ": changing bestEdge to " + bestEdge.getReceiver(id) + " to IN_MST");
504+
bestEdge.setState(LinkState.IN_MST);
456505

457506
}
458507
}

0 commit comments

Comments
 (0)
0