Skip to content
Snippets Groups Projects
Commit 44fb8460 authored by Jeffrey Zhang's avatar Jeffrey Zhang
Browse files

Fix proposer sort error

parent f4713cc5
No related branches found
No related tags found
No related merge requests found
......@@ -45,6 +45,7 @@ class ProposedPriorityMessage(Message):
class AgreedPriorityMessage(Message):
transaction_ID: str
agreed_priority: int
proposer: str
def receive_action(self, td: TransactionDeliverer) -> bool:
td.process_agreed_priority_message(self)
......
......@@ -64,16 +64,7 @@ class TransactionDeliverer:
queue_item = _Transaction_Message_Queue_Item(proposed_priority, self.node_name, transaction_message, 1)
self.transactions_queue.append(queue_item)
try:
self.transactions_queue.sort()
except Exception:
print("Duplicate!")
for item in self.transactions_queue:
if item.priority == queue_item.priority and item.proposer == queue_item.proposer and item.transaction_message != queue_item.transaction_message:
print(queue_item)
print(item)
raise Exception
self.transactions_queue.sort()
self.transactions_id_map[transaction_message.transaction_ID] = queue_item
transaction_messages = {client_name: replace(transaction_message, receiver=client_name)
......@@ -99,27 +90,9 @@ class TransactionDeliverer:
queue_item = _Transaction_Message_Queue_Item(proposed_priority, self.node_name, transaction_message, 1)
# For debug purposes
"""
for item in self.transactions_queue:
if item.priority == proposed_priority and item.proposer == self.node_name:
print("Comparison FAIL!")
print(queue_item)
print(item)
"""
self.transactions_queue.append(queue_item)
try:
self.transactions_queue.sort()
except Exception:
print("Duplicate!")
for item in self.transactions_queue:
if item.priority == queue_item.priority and item.proposer == queue_item.proposer and item.transaction_message != queue_item.transaction_message:
print(queue_item)
print(item)
raise Exception
self.transactions_queue.sort()
self.transactions_id_map[transaction_message.transaction_ID] = queue_item
def process_proposed_priority_message(self, proposed_priority_message: ProposedPriorityMessage):
......@@ -129,21 +102,19 @@ class TransactionDeliverer:
(proposed_priority_message.proposed_priority, proposed_priority_message.sender)
)
try:
self.transactions_queue.sort()
except Exception:
print("Duplicate!")
for item in self.transactions_queue:
if item.priority == queue_item.priority and item.proposer == queue_item.proposer and item.transaction_message != queue_item.transaction_message:
print(queue_item)
print(item)
raise Exception
self.transactions_queue.sort()
queue_item.priority_confirmations+=1
# Plus 1 since client sockets does not include the node itself
if queue_item.priority_confirmations == len(self.client_sockets) + 1:
agreed_priority_message = AgreedPriorityMessage(str(uuid4()), self.node_name,self.node_name,proposed_priority_message.transaction_ID,queue_item.priority)
agreed_priority_message = AgreedPriorityMessage(
str(uuid4()),
self.node_name,
self.node_name,
proposed_priority_message.transaction_ID,
queue_item.priority,
queue_item.proposer
)
agreed_priority_messages = {client_name: replace(agreed_priority_message, receiver=client_name)
for client_name in self.client_sockets.keys()
......@@ -157,20 +128,10 @@ class TransactionDeliverer:
def process_agreed_priority_message(self, agreed_priority_message: AgreedPriorityMessage):
queue_item = self.transactions_id_map[agreed_priority_message.transaction_ID]
# TODO - the comparison tie error is introduced here!
# Because we don't also update the proposer!
queue_item.priority = agreed_priority_message.agreed_priority
queue_item.proposer = agreed_priority_message.proposer
try:
self.transactions_queue.sort()
except Exception:
print("Duplicate!")
for item in self.transactions_queue:
if item.priority == queue_item.priority and item.proposer == queue_item.proposer and item.transaction_message != queue_item.transaction_message:
print(queue_item)
print(item)
raise Exception
self.transactions_queue.sort()
queue_item.transaction_message.deliverable = True
while len(self.transactions_queue) > 0 and self.transactions_queue[0].transaction_message.deliverable:
......
3
node1 localhost 4201
node2 localhost 4202
node3 localhost 4203
\ No newline at end of file
4
node1 localhost 4211
node2 localhost 4212
node3 localhost 4213
node4 localhost 4214
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment