Skip to content

Sometimes partialView.merge raises an IndexError exception #11

@robzenn92

Description

@robzenn92

Sometimes PartialView.py raises an exception in merge while Cyclon container is running.
The exception raised is the following:

[2017-12-13,17:16:13.464 - ERROR] base.py:131 | run_job - Job "Cyclon.shuffle_partial_view (trigger: interval[0:00:15], next run at: 2017-12-13 17:16:28 CET)" raised an exception
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/apscheduler/executors/base.py", line 125, in run_job
    retval = job.func(*job.args, **job.kwargs)
  File "/usr/src/cyclon_project/api/cyclon.py", line 101, in shuffle_partial_view
    self.partialView.merge(neighbors, received_partial_view)
  File "/usr/src/partialView/partialView.py", line 127, in merge
    i += 1 if self.add_peer(unknown[i]) else 0
IndexError: list index out of range

More info in the following stack trace.

[2017-12-13,17:15:58.510 - INFO] cyclon.py:78 | shuffle_partial_view - My partialView:
{'ip': '172.17.0.6', 'limit': 3, 'peer_list': [{'age': 1, 'ip': '172.17.0.8'}, {'age': 2, 'ip': '172.17.0.5'}, {'age': 2, 'ip': '172.17.0.9'}], 'shuffle_length': 3, 'size': 3}
[2017-12-13,17:15:58.511 - INFO] cyclon.py:81 | shuffle_partial_view - Selected oldest: 172.17.0.5
[2017-12-13,17:15:58.513 - INFO] cyclon.py:84 | shuffle_partial_view - Selected neighbors:
{'ip': '172.17.0.6', 'limit': 3, 'peer_list': [{'age': 2, 'ip': '172.17.0.9'}, {'age': 1, 'ip': '172.17.0.8'}], 'shuffle_length': 3, 'size': 2}
[2017-12-13,17:15:58.513 - INFO] cyclon.py:87 | shuffle_partial_view - Selected neighbors + myself (will be sent to 172.17.0.5):
{'ip': '172.17.0.6', 'limit': 3, 'peer_list': [{'age': 2, 'ip': '172.17.0.9'}, {'age': 1, 'ip': '172.17.0.8'}, {'age': 0, 'ip': '172.17.0.6'}], 'shuffle_length': 3, 'size': 3}
[2017-12-13,17:15:58.514 - INFO] cyclon.py:110 | send_message - I am sending Message:
{'source': 'http://172.17.0.6:5000', 'destination': 'http://172.17.0.5:5000', 'data': {'ip': '172.17.0.6', 'limit': 3, 'peer_list': [{'age': 2, 'ip': '172.17.0.9'}, {'age': 1, 'ip': '172.17.0.8'}, {'age': 0, 'ip': '172.17.0.6'}], 'shuffle_length': 3, 'size': 3}}
[2017-12-13,17:15:58.519 - INFO] cyclon.py:112 | send_message - I got the following response:
<Response [200]>
[2017-12-13,17:15:58.520 - INFO] cyclon.py:94 | shuffle_partial_view - I received (from 172.17.0.5):
{'ip': '172.17.0.5', 'limit': 3, 'peer_list': [{'age': 2, 'ip': '172.17.0.8'}, {'age': 8, 'ip': '172.17.0.2'}, {'age': 2, 'ip': '172.17.0.6'}], 'shuffle_length': 3, 'size': 3}
[2017-12-13,17:15:58.520 - INFO] cyclon.py:98 | shuffle_partial_view - My partialView after removing oldest:
{'ip': '172.17.0.6', 'limit': 3, 'peer_list': [{'age': 1, 'ip': '172.17.0.8'}, {'age': 2, 'ip': '172.17.0.9'}], 'shuffle_length': 3, 'size': 2}
[2017-12-13,17:15:58.520 - INFO] cyclon.py:102 | shuffle_partial_view - My partialView after merging:
{'ip': '172.17.0.6', 'limit': 3, 'peer_list': [{'age': 1, 'ip': '172.17.0.8'}, {'age': 2, 'ip': '172.17.0.9'}, {'age': 8, 'ip': '172.17.0.2'}], 'shuffle_length': 3, 'size': 3}
[2017-12-13,17:15:58.520 - INFO] base.py:135 | run_job - Job "Cyclon.shuffle_partial_view (trigger: interval[0:00:15], next run at: 2017-12-13 17:16:13 CET)" executed successfully
[2017-12-13,17:15:59.759 - INFO] views.py:75 | get_k_view - {'ip': '172.17.0.6', 'limit': 3, 'peer_list': [{'age': 1, 'ip': '172.17.0.8'}, {'age': 2, 'ip': '172.17.0.9'}, {'age': 8, 'ip': '172.17.0.2'}], 'shuffle_length': 3, 'size': 3}
[2017-12-13,17:16:13.456 - INFO] base.py:123 | run_job - Running job "Cyclon.shuffle_partial_view (trigger: interval[0:00:15], next run at: 2017-12-13 17:16:13 CET)" (scheduled at 2017-12-13 17:16:13.445482+01:00)
[2017-12-13,17:16:13.456 - INFO] cyclon.py:74 | shuffle_partial_view - Shuffling
[2017-12-13,17:16:13.456 - INFO] cyclon.py:78 | shuffle_partial_view - My partialView:
{'ip': '172.17.0.6', 'limit': 3, 'peer_list': [{'age': 2, 'ip': '172.17.0.8'}, {'age': 3, 'ip': '172.17.0.9'}], 'shuffle_length': 3, 'size': 2}
[2017-12-13,17:16:13.456 - INFO] cyclon.py:81 | shuffle_partial_view - Selected oldest: 172.17.0.9
[2017-12-13,17:16:13.457 - INFO] cyclon.py:84 | shuffle_partial_view - Selected neighbors:
{'ip': '172.17.0.6', 'limit': 2, 'peer_list': [{'age': 2, 'ip': '172.17.0.8'}], 'shuffle_length': 2, 'size': 1}
[2017-12-13,17:16:13.457 - INFO] cyclon.py:87 | shuffle_partial_view - Selected neighbors + myself (will be sent to 172.17.0.9):
{'ip': '172.17.0.6', 'limit': 2, 'peer_list': [{'age': 2, 'ip': '172.17.0.8'}, {'age': 0, 'ip': '172.17.0.6'}], 'shuffle_length': 2, 'size': 2}
[2017-12-13,17:16:13.457 - INFO] cyclon.py:110 | send_message - I am sending Message:
{'source': 'http://172.17.0.6:5000', 'destination': 'http://172.17.0.9:5000', 'data': {'ip': '172.17.0.6', 'limit': 2, 'peer_list': [{'age': 2, 'ip': '172.17.0.8'}, {'age': 0, 'ip': '172.17.0.6'}], 'shuffle_length': 2, 'size': 2}}
[2017-12-13,17:16:13.463 - INFO] cyclon.py:112 | send_message - I got the following response:
<Response [200]>
[2017-12-13,17:16:13.463 - INFO] cyclon.py:94 | shuffle_partial_view - I received (from 172.17.0.9):
{'ip': '172.17.0.9', 'limit': 1, 'peer_list': [{'age': 2, 'ip': '172.17.0.7'}], 'shuffle_length': 1, 'size': 1}
[2017-12-13,17:16:13.463 - INFO] cyclon.py:98 | shuffle_partial_view - My partialView after removing oldest:
{'ip': '172.17.0.6', 'limit': 3, 'peer_list': [{'age': 2, 'ip': '172.17.0.8'}], 'shuffle_length': 3, 'size': 1}
[2017-12-13,17:16:13.464 - ERROR] base.py:131 | run_job - Job "Cyclon.shuffle_partial_view (trigger: interval[0:00:15], next run at: 2017-12-13 17:16:28 CET)" raised an exception
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/apscheduler/executors/base.py", line 125, in run_job
    retval = job.func(*job.args, **job.kwargs)
  File "/usr/src/cyclon_project/api/cyclon.py", line 101, in shuffle_partial_view
    self.partialView.merge(neighbors, received_partial_view)
  File "/usr/src/partialView/partialView.py", line 127, in merge
    i += 1 if self.add_peer(unknown[i]) else 0
IndexError: list index out of range

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions