Fixes for tracebacks on the receiving end
This commit is contained in:
parent
29984ace33
commit
cb4b13bce7
@ -161,7 +161,7 @@ class SegmentBase(object):
|
|||||||
segment = DataSegment(segno, total_segs, msg_seq_num, master_sha)
|
segment = DataSegment(segno, total_segs, msg_seq_num, master_sha)
|
||||||
elif seg_type == SegmentBase._SEGMENT_TYPE_RETRANSMIT:
|
elif seg_type == SegmentBase._SEGMENT_TYPE_RETRANSMIT:
|
||||||
segment = RetransmitSegment(segno, total_segs, msg_seq_num, master_sha)
|
segment = RetransmitSegment(segno, total_segs, msg_seq_num, master_sha)
|
||||||
elif set_type == SegmentBase._SEGMENT_TYPE_ACK:
|
elif seg_type == SegmentBase._SEGMENT_TYPE_ACK:
|
||||||
segment = AckSegment(segno, total_segs, msg_seq_num, master_sha)
|
segment = AckSegment(segno, total_segs, msg_seq_num, master_sha)
|
||||||
else:
|
else:
|
||||||
raise ValueError("Segment has invalid type.")
|
raise ValueError("Segment has invalid type.")
|
||||||
@ -333,7 +333,7 @@ class AckSegment(SegmentBase):
|
|||||||
# 2: acked message sequence number
|
# 2: acked message sequence number
|
||||||
# 20: acked message total data sha1
|
# 20: acked message total data sha1
|
||||||
# 4: acked message source IP address
|
# 4: acked message source IP address
|
||||||
_ACK_DATA_TEMPLATE = "! H20sI"
|
_ACK_DATA_TEMPLATE = "! H20s4s"
|
||||||
_ACK_DATA_LEN = struct.calcsize(_ACK_DATA_TEMPLATE)
|
_ACK_DATA_LEN = struct.calcsize(_ACK_DATA_TEMPLATE)
|
||||||
|
|
||||||
def data_template():
|
def data_template():
|
||||||
@ -357,7 +357,7 @@ class AckSegment(SegmentBase):
|
|||||||
if not ack_master_sha or type(ack_master_sha) != type("") or len(ack_master_sha) != 20:
|
if not ack_master_sha or type(ack_master_sha) != type("") or len(ack_master_sha) != 20:
|
||||||
raise ValueError("Ack message SHA1 checksum invalid.")
|
raise ValueError("Ack message SHA1 checksum invalid.")
|
||||||
if type(ack_addr) != type(""):
|
if type(ack_addr) != type(""):
|
||||||
raise ValueError("Ack message invalid address.")
|
raise ValueError("Ack message invalid address type.")
|
||||||
try:
|
try:
|
||||||
foo = socket.inet_aton(ack_addr)
|
foo = socket.inet_aton(ack_addr)
|
||||||
except socket.error:
|
except socket.error:
|
||||||
@ -744,7 +744,6 @@ class MostlyReliablePipe(object):
|
|||||||
self._incoming[msg_key] = Message((addr[0], self._port), msg_seq_num, msg_sha, nsegs)
|
self._incoming[msg_key] = Message((addr[0], self._port), msg_seq_num, msg_sha, nsegs)
|
||||||
# Acknowledge the message if it didn't come from us
|
# Acknowledge the message if it didn't come from us
|
||||||
if addr[0] not in self._local_ips:
|
if addr[0] not in self._local_ips:
|
||||||
print "Sending ack for msg (%s %s) from %s)" % (msg_seq_num, msg_sha, addr[0])
|
|
||||||
ack_key = (msg_seq_num, msg_sha, addr[0])
|
ack_key = (msg_seq_num, msg_sha, addr[0])
|
||||||
if not self._acks.has_key(ack_key):
|
if not self._acks.has_key(ack_key):
|
||||||
self._send_ack_for_message(msg_seq_num, msg_sha, addr[0])
|
self._send_ack_for_message(msg_seq_num, msg_sha, addr[0])
|
||||||
@ -839,7 +838,8 @@ class MostlyReliablePipe(object):
|
|||||||
def _send_ack_for_message(self, ack_msg_seq_num, ack_msg_sha, ack_addr):
|
def _send_ack_for_message(self, ack_msg_seq_num, ack_msg_sha, ack_addr):
|
||||||
"""Send an ack segment for a message."""
|
"""Send an ack segment for a message."""
|
||||||
msg_seq_num = self._next_msg_seq()
|
msg_seq_num = self._next_msg_seq()
|
||||||
ack = AckSegment.new_from_parts(self._remote_addr, msg_seq_num,
|
full_remote_addr = (self._remote_addr, self._port)
|
||||||
|
ack = AckSegment.new_from_parts(full_remote_addr, msg_seq_num,
|
||||||
ack_msg_seq_num, ack_msg_sha, ack_addr)
|
ack_msg_seq_num, ack_msg_sha, ack_addr)
|
||||||
self._outgoing.append(ack)
|
self._outgoing.append(ack)
|
||||||
self._schedule_send_worker()
|
self._schedule_send_worker()
|
||||||
@ -859,7 +859,6 @@ class MostlyReliablePipe(object):
|
|||||||
return
|
return
|
||||||
ack_key = (ack_msg_seq_num, ack_master_sha, ack_addr)
|
ack_key = (ack_msg_seq_num, ack_master_sha, ack_addr)
|
||||||
if not self._acks.has_key(ack_key):
|
if not self._acks.has_key(ack_key):
|
||||||
print "Got ack for msg (%s %s) originally from %s" % (ack_msg_seq_num, ack_master_sha, ack_addr)
|
|
||||||
self._acks[ack_key] = time.time()
|
self._acks[ack_key] = time.time()
|
||||||
|
|
||||||
def set_drop_probability(self, prob=4):
|
def set_drop_probability(self, prob=4):
|
||||||
|
Loading…
Reference in New Issue
Block a user