Skip to content

Commit

Permalink
Merge pull request #12881 from LianaHarris360/content_request_reserve…
Browse files Browse the repository at this point in the history
…d_handling

Update content request handling to only use reserved locations representing Studio
  • Loading branch information
rtibbles authored Nov 26, 2024
2 parents aa94087 + 6217708 commit 0d22d5d
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 3 deletions.
12 changes: 11 additions & 1 deletion kolibri/core/content/test/utils/test_content_request.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
from kolibri.core.discovery.models import ConnectionStatus
from kolibri.core.discovery.models import NetworkLocation
from kolibri.core.discovery.utils.network.errors import NetworkError
from kolibri.core.discovery.well_known import CENTRAL_CONTENT_BASE_INSTANCE_ID


_module = "kolibri.core.content.utils.content_request."
Expand Down Expand Up @@ -589,12 +590,21 @@ def test_no_peers__connection_status(self):
instance = PreferredDevices([netloc.instance_id])
self.assertEqual(len(list(instance)), 0)

def test_one_peer__reserved__connection_status(self):
def test_no_peer__reserved__connection_status(self):
netloc = self._create_network_location(
location_type="reserved",
connection_status=ConnectionStatus.ConnectionFailure,
)
instance = PreferredDevices([netloc.instance_id])
self.assertEqual(len(list(instance)), 0)

def test__peer__studio__reserved__connection_status(self):
netloc = self._create_network_location(
location_type="reserved",
connection_status=ConnectionStatus.ConnectionFailure,
instance_id=CENTRAL_CONTENT_BASE_INSTANCE_ID,
)
instance = PreferredDevices([netloc.instance_id])
peers = list(instance)
self.assertEqual(len(peers), 1)
self.assertEqual(peers[0].instance_id, netloc.instance_id)
Expand Down
8 changes: 6 additions & 2 deletions kolibri/core/content/utils/content_request.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
from kolibri.core.discovery.utils.network.client import NetworkClient
from kolibri.core.discovery.utils.network.connections import capture_connection_state
from kolibri.core.discovery.utils.network.errors import NetworkLocationResponseFailure
from kolibri.core.discovery.well_known import CENTRAL_CONTENT_BASE_INSTANCE_ID
from kolibri.core.utils.urls import reverse_path
from kolibri.utils.conf import OPTIONS
from kolibri.utils.data import bytes_for_humans
Expand Down Expand Up @@ -267,8 +268,11 @@ def _get_and_validate_peer(self, instance_id):
)
)
return None
# ensure peer is available, unless reserved
if not peer.reserved and peer.connection_status != ConnectionStatus.Okay:
# ensure peer is available, unless it's Studio
if (
not instance_id == CENTRAL_CONTENT_BASE_INSTANCE_ID
and peer.connection_status != ConnectionStatus.Okay
):
logger.debug("Peer {} is not available".format(instance_id))
return None
# ensure version is applicable according to filter
Expand Down

0 comments on commit 0d22d5d

Please sign in to comment.