Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2013-05-19 14:31:34 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2013-05-19 14:31:34 (GMT)
commite24c754fb67f2783711a2300e3bc9513fabfa440 (patch)
tree5a536d11a10855c21d3b50be698d040cc7a26027
parent3a0fb013d65373ab7002093f1782fe580502bc07 (diff)
Do not send remote request if cloned resources
-rwxr-xr-xsugar-network-sync (renamed from misc/sugar-network-sync)0
-rw-r--r--sugar_network/client/commands.py28
-rwxr-xr-xtests/integration/master_personal.py8
-rwxr-xr-xtests/integration/master_slave.py8
-rwxr-xr-xtests/integration/node_client.py6
-rwxr-xr-xtests/integration/node_packages.py14
-rwxr-xr-xtests/units/client/online_commands.py50
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']))