diff options
author | Aleksey Lim <alsroot@sugarlabs.org> | 2013-05-19 14:31:34 (GMT) |
---|---|---|
committer | Aleksey Lim <alsroot@sugarlabs.org> | 2013-05-19 14:31:34 (GMT) |
commit | e24c754fb67f2783711a2300e3bc9513fabfa440 (patch) | |
tree | 5a536d11a10855c21d3b50be698d040cc7a26027 | |
parent | 3a0fb013d65373ab7002093f1782fe580502bc07 (diff) |
Do not send remote request if cloned resources
-rwxr-xr-x | sugar-network-sync (renamed from misc/sugar-network-sync) | 0 | ||||
-rw-r--r-- | sugar_network/client/commands.py | 28 | ||||
-rwxr-xr-x | tests/integration/master_personal.py | 8 | ||||
-rwxr-xr-x | tests/integration/master_slave.py | 8 | ||||
-rwxr-xr-x | tests/integration/node_client.py | 6 | ||||
-rwxr-xr-x | tests/integration/node_packages.py | 14 | ||||
-rwxr-xr-x | tests/units/client/online_commands.py | 50 |
7 files changed, 72 insertions, 42 deletions
diff --git a/misc/sugar-network-sync b/sugar-network-sync index 8d19813..8d19813 100755 --- a/misc/sugar-network-sync +++ b/sugar-network-sync diff --git a/sugar_network/client/commands.py b/sugar_network/client/commands.py index e4daefe..e99235c 100644 --- a/sugar_network/client/commands.py +++ b/sugar_network/client/commands.py @@ -485,23 +485,27 @@ class ClientCommands(db.CommandsProcessor, Commands, journal.Commands): def _proxy_get(self, request, response): document = request['document'] - mixin = None - - if self._inline.is_set() and document in ('context', 'artifact'): - reply = request.setdefault('reply', ['guid']) - mixin = set(reply) & _LOCAL_PROPS - if mixin: - # Otherwise there is no way to mixin _LOCAL_PROPS - if 'guid' not in request and 'guid' not in reply: - reply.append('guid') - if document == 'context' and 'type' not in reply: - reply.append('type') + if not self._inline.is_set() or \ + document not in ('context', 'artifact'): + return self._node_call(request, response) + + request_guid = request.get('guid') + if request_guid and self._home.volume[document].exists(request_guid): + return self._home.call(request, response) + + reply = request.setdefault('reply', ['guid']) + mixin = set(reply) & _LOCAL_PROPS + if mixin: + # Otherwise there is no way to mixin _LOCAL_PROPS + if 'guid' not in request and 'guid' not in reply: + reply.append('guid') + if document == 'context' and 'type' not in reply: + reply.append('type') result = self._node_call(request, response) if not mixin: return result - request_guid = request.get('guid') if request_guid: items = [result] else: diff --git a/tests/integration/master_personal.py b/tests/integration/master_personal.py index be2c509..44fcefe 100755 --- a/tests/integration/master_personal.py +++ b/tests/integration/master_personal.py @@ -11,7 +11,7 @@ from os.path import exists, join, dirname, abspath import rrdtool -from __init__ import tests +from __init__ import tests, src_root from sugar_network.client import Client from sugar_network.toolkit.rrd import Rrd @@ -29,7 +29,7 @@ class MasterPersonalTest(tests.Test): self.touch(('master/db/master', 'localhost:8100')) - self.master_pid = self.popen(['sugar-network-node', '-F', 'start', + self.master_pid = self.popen([join(src_root, 'sugar-network-node'), '-F', 'start', '--port=8100', '--data-root=master/db', '--cachedir=master/tmp', '-DDD', '--rundir=master/run', '--files-root=master/files', '--stats-root=master/stats', '--stats-user', '--stats-user-step=1', @@ -37,7 +37,7 @@ class MasterPersonalTest(tests.Test): '--index-flush-threshold=1', '--pull-timeout=1', '--obs-url=', ]) - self.client_pid = self.popen(['sugar-network-client', '-F', 'start', + self.client_pid = self.popen([join(src_root, 'sugar-network-client'), '-F', 'start', '--api-url=http://localhost:8100', '--cachedir=client/tmp', '-DDD', '--rundir=client/run', '--server-mode', '--layers=pilot', '--local-root=client', '--activity-dirs=client/activities', @@ -110,7 +110,7 @@ class MasterPersonalTest(tests.Test): }, cmd='stats-upload') # Clone initial dump from master - pid = self.popen('V=1 sugar-network-sync mnt/sugar-network-sync http://localhost:8100', shell=True) + pid = self.popen('V=1 %s mnt/sugar-network-sync http://localhost:8100' % join(src_root, 'sugar-network-sync'), shell=True) self.waitpid(pid, 0) # Import cloned data on client trigger = self.wait_for_events(client, event='sync_complete') diff --git a/tests/integration/master_slave.py b/tests/integration/master_slave.py index 17e108d..3497730 100755 --- a/tests/integration/master_slave.py +++ b/tests/integration/master_slave.py @@ -11,7 +11,7 @@ from os.path import exists, join, dirname, abspath import rrdtool -from __init__ import tests +from __init__ import tests, src_root from sugar_network.client import Client from sugar_network.toolkit.rrd import Rrd @@ -29,7 +29,7 @@ class MasterSlaveTest(tests.Test): self.touch(('master/db/master', 'localhost:8100')) - self.master_pid = self.popen(['sugar-network-node', '-F', 'start', + self.master_pid = self.popen([join(src_root, 'sugar-network-node'), '-F', 'start', '--port=8100', '--data-root=master/db', '--cachedir=master/tmp', '-DDD', '--rundir=master/run', '--files-root=master/files', '--stats-root=master/stats', '--stats-user', '--stats-user-step=1', @@ -37,7 +37,7 @@ class MasterSlaveTest(tests.Test): '--index-flush-threshold=1', '--pull-timeout=1', '--obs-url=', ]) - self.slave_pid = self.popen(['sugar-network-node', '-F', 'start', + self.slave_pid = self.popen([join(src_root, 'sugar-network-node'), '-F', 'start', '--api-url=http://localhost:8100', '--port=8101', '--data-root=slave/db', '--cachedir=slave/tmp', '-DDD', '--rundir=slave/run', '--files-root=slave/files', @@ -223,7 +223,7 @@ class MasterSlaveTest(tests.Test): }, cmd='stats-upload') # Clone initial dump from master - pid = self.popen('V=1 sugar-network-sync sync1/sugar-network-sync http://localhost:8100', shell=True) + pid = self.popen('V=1 %s sync1/sugar-network-sync http://localhost:8100' % join(src_root, 'sugar-network-sync'), shell=True) self.waitpid(pid, 0) # Import cloned data on slave slave.post(cmd='offline-sync', path=tests.tmpdir + '/sync1/sugar-network-sync') diff --git a/tests/integration/node_client.py b/tests/integration/node_client.py index a4993d7..f39142a 100755 --- a/tests/integration/node_client.py +++ b/tests/integration/node_client.py @@ -6,7 +6,7 @@ import json import signal import shutil import zipfile -from os.path import exists +from os.path import exists, join from __init__ import tests, src_root @@ -23,7 +23,7 @@ class NodeClientTest(tests.Test): util.cptree(src_root + '/tests/data/node', 'node') self.client_pid = None - self.node_pid = self.popen(['sugar-network-node', '-F', 'start', + self.node_pid = self.popen([join(src_root, 'sugar-network-node'), '-F', 'start', '--port=8100', '--data-root=node', '--cachedir=tmp', '-DDD', '--rundir=run', '--stats-node-step=0', ]) @@ -111,7 +111,7 @@ class NodeClientTest(tests.Test): cmd = ['sugar-network', '--local-root=client', '--ipc-port=5101', '--api-url=http://localhost:8100', '-DDD'] + cmd if '--anonymous' not in cmd and not self.client_pid: - self.client_pid = self.popen(['sugar-network-client', + self.client_pid = self.popen([join(src_root, 'sugar-network-client'), '-DDDF', 'start', '--activity-dirs=client/Activities', '--local-root=client', '--mounts-root=mnt', '--cachedir=tmp', '--ipc-port=5101', diff --git a/tests/integration/node_packages.py b/tests/integration/node_packages.py index 9120564..e12d1c9 100755 --- a/tests/integration/node_packages.py +++ b/tests/integration/node_packages.py @@ -12,7 +12,7 @@ from os.path import exists, join, dirname, abspath import rrdtool -from __init__ import tests +from __init__ import tests, src_root from sugar_network import db, client from sugar_network.client import Client, IPCClient @@ -68,7 +68,7 @@ class NodePackagesSlaveTest(tests.Test): # From master self.touch(('master/db/master', 'localhost:8100')) - self.pids.append(self.popen(['sugar-network-node', '-F', 'start', + self.pids.append(self.popen([join(src_root, 'sugar-network-node'), '-F', 'start', '--port=8100', '--data-root=master/db', '--cachedir=master/tmp', '-DDD', '--rundir=master/run', '--files-root=master/files', '--stats-root=master/stats', '--stats-user', '--stats-user-step=1', @@ -99,7 +99,7 @@ class NodePackagesSlaveTest(tests.Test): 'package_content', urllib2.urlopen('http://localhost:8100/packages/presolve:OLPC-11.3.1/rpm').read()) - pid = self.popen(['sugar-network-client', '-F', 'start', + pid = self.popen([join(src_root, 'sugar-network-client'), '-F', 'start', '--api-url=http://localhost:8100', '--cachedir=master.client/tmp', '-DDD', '--rundir=master.client/run', '--layers=pilot', '--local-root=master.client', '--activity-dirs=master.client/activities', @@ -117,7 +117,7 @@ class NodePackagesSlaveTest(tests.Test): # From slave - self.pids.append(self.popen(['sugar-network-node', '-F', 'start', + self.pids.append(self.popen([join(src_root, 'sugar-network-node'), '-F', 'start', '--api-url=http://localhost:8100', '--port=8101', '--data-root=slave/db', '--cachedir=slave/tmp', '-DDD', '--rundir=slave/run', '--files-root=slave/files', @@ -137,7 +137,7 @@ class NodePackagesSlaveTest(tests.Test): 'package_content', urllib2.urlopen('http://localhost:8101/packages/presolve:OLPC-11.3.1/rpm').read()) - pid = self.popen(['sugar-network-client', '-F', 'start', + pid = self.popen([join(src_root, 'sugar-network-client'), '-F', 'start', '--api-url=http://localhost:8101', '--cachedir=master.client/tmp', '-DDD', '--rundir=master.client/run', '--layers=pilot', '--local-root=master.client', '--activity-dirs=master.client/activities', @@ -156,7 +156,7 @@ class NodePackagesSlaveTest(tests.Test): # From personal slave os.makedirs('client/mnt/disk/sugar-network') - self.pids.append(self.popen(['sugar-network-client', '-F', 'start', + self.pids.append(self.popen([join(src_root, 'sugar-network-client'), '-F', 'start', '--api-url=http://localhost:8100', '--cachedir=client/tmp', '-DDD', '--rundir=client/run', '--server-mode', '--layers=pilot', '--local-root=client', '--activity-dirs=client/activities', @@ -170,7 +170,7 @@ class NodePackagesSlaveTest(tests.Test): if ipc.get(cmd='status')['route'] == 'offline': self.wait_for_events(ipc, event='inline', state='online').wait() - pid = self.popen('V=1 sugar-network-sync sync/sugar-network-sync http://localhost:8100', shell=True) + pid = self.popen('V=1 %s sync/sugar-network-sync http://localhost:8100' % join(src_root, 'sugar-network-sync'), shell=True) self.waitpid(pid, 0) trigger = self.wait_for_events(ipc, event='sync_complete') os.rename('sync', 'client/mnt/sync') diff --git a/tests/units/client/online_commands.py b/tests/units/client/online_commands.py index 3d44fda..f0d1c77 100755 --- a/tests/units/client/online_commands.py +++ b/tests/units/client/online_commands.py @@ -107,7 +107,7 @@ class OnlineCommandsTest(tests.Test): assert exists('Activities/TestActivitry/activity/activity.info') assert not exists('Activities/TestActivitry_1/activity/activity.info') self.assertEqual( - {'clone': 2, 'type': ['activity']}, + {'clone': 2}, ipc.get(['context', context], reply=['clone'])) ipc.put(['context', context], 2, cmd='clone') @@ -116,7 +116,7 @@ class OnlineCommandsTest(tests.Test): assert exists('Activities/TestActivitry/activity/activity.info') assert not exists('Activities/TestActivitry_1/activity/activity.info') self.assertEqual( - {'clone': 2, 'type': ['activity']}, + {'clone': 2}, ipc.get(['context', context], reply=['clone'])) ipc.put(['context', context], 1, cmd='clone', force=1) @@ -125,7 +125,7 @@ class OnlineCommandsTest(tests.Test): assert exists('Activities/TestActivitry/activity/activity.info') assert exists('Activities/TestActivitry_1/activity/activity.info') self.assertEqual( - {'clone': 2, 'type': ['activity']}, + {'clone': 2}, ipc.get(['context', context], reply=['clone'])) ipc.put(['context', context], 0, cmd='clone') @@ -134,7 +134,7 @@ class OnlineCommandsTest(tests.Test): assert not exists('Activities/TestActivitry/activity/activity.info') assert not exists('Activities/TestActivitry_1/activity/activity.info') self.assertEqual( - {'clone': 0, 'type': ['activity']}, + {'clone': 0}, ipc.get(['context', context], reply=['clone'])) ipc.put(['context', context], 1, cmd='clone') @@ -142,7 +142,7 @@ class OnlineCommandsTest(tests.Test): assert exists('Activities/TestActivitry/activity/activity.info') self.assertEqual( - {'clone': 2, 'type': ['activity']}, + {'clone': 2}, ipc.get(['context', context], reply=['clone'])) trigger = self.wait_for_events(ipc, event='inline', state='offline') @@ -228,7 +228,7 @@ class OnlineCommandsTest(tests.Test): assert exists('Activities/TestActivitry/activity/activity.info') self.assertEqual( - {'clone': 2, 'type': ['activity']}, + {'clone': 2}, ipc.get(['context', context], reply=['clone'])) def test_clone_Content(self): @@ -397,18 +397,18 @@ class OnlineCommandsTest(tests.Test): ipc.put(['context', context], True, cmd='favorite') coroutine.sleep(.5) self.assertEqual( - {'favorite': True, 'type': ['activity']}, + {'favorite': True}, ipc.get(['context', context], reply=['favorite'])) ipc.put(['context', context], False, cmd='favorite') self.assertEqual( - {'favorite': False, 'type': ['activity']}, + {'favorite': False}, ipc.get(['context', context], reply=['favorite'])) ipc.put(['context', context], True, cmd='favorite') coroutine.sleep(.5) self.assertEqual( - {'favorite': True, 'type': ['activity']}, + {'favorite': True}, ipc.get(['context', context], reply=['favorite'])) trigger = self.wait_for_events(ipc, event='inline', state='offline') @@ -867,7 +867,7 @@ class OnlineCommandsTest(tests.Test): [{'guid': context, 'favorite': True, 'clone': 2, 'type': ['activity']}], ipc.get(['context'], reply=['favorite', 'clone'])['result']) self.assertEqual( - {'favorite': True, 'clone': 2, 'type': ['activity']}, + {'favorite': True, 'clone': 2}, ipc.get(['context', context], reply=['favorite', 'clone'])) def test_Proxy_Content(self): @@ -942,6 +942,32 @@ class OnlineCommandsTest(tests.Test): {'favorite': True, 'clone': 2}, ipc.get(['artifact', guid], reply=['favorite', 'clone'])) + def test_Proxy_NoNeedlessRemoteRequests(self): + home_volume = self.start_online_client() + ipc = IPCClient() + + guid = ipc.post(['context'], { + 'type': 'content', + 'title': 'remote', + 'summary': 'summary', + 'description': 'description', + }) + self.assertEqual( + {'title': 'remote'}, + ipc.get(['context', guid], reply=['title'])) + + home_volume['context'].create({ + 'guid': guid, + 'type': 'activity', + 'title': 'local', + 'summary': 'summary', + 'description': 'description', + 'favorite': True, + }) + self.assertEqual( + {'title': 'local'}, + ipc.get(['context', guid], reply=['title'])) + def test_HomeVolumeEvents(self): self.home_volume = self.start_online_client() ipc = IPCClient() @@ -989,7 +1015,7 @@ class OnlineCommandsTest(tests.Test): ipc.put(['context', context1], 2, cmd='clone') trigger.wait() self.assertEqual( - {'clone': 2, 'type': ['activity']}, + {'clone': 2}, ipc.get(['context', context1], reply=['clone'])) context2 = ipc.post(['context'], { @@ -1002,7 +1028,7 @@ class OnlineCommandsTest(tests.Test): ipc.put(['context', context2], True, cmd='favorite') trigger.wait() self.assertEqual( - {'favorite': True, 'type': ['activity']}, + {'favorite': True}, ipc.get(['context', context2], reply=['favorite'])) |