You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aurora.apache.org by wf...@apache.org on 2014/10/16 02:31:02 UTC
git commit: Remove use of the getVersion RPC from the client.
Repository: incubator-aurora
Updated Branches:
refs/heads/master 253cb7370 -> 797b8152b
Remove use of the getVersion RPC from the client.
Bugs closed: AURORA-142
Reviewed at https://reviews.apache.org/r/26714/
Project: http://git-wip-us.apache.org/repos/asf/incubator-aurora/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-aurora/commit/797b8152
Tree: http://git-wip-us.apache.org/repos/asf/incubator-aurora/tree/797b8152
Diff: http://git-wip-us.apache.org/repos/asf/incubator-aurora/diff/797b8152
Branch: refs/heads/master
Commit: 797b8152b5341dcdba1bb81046e4d7f489a6cd81
Parents: 253cb73
Author: Bill Farner <wf...@apache.org>
Authored: Wed Oct 15 17:24:02 2014 -0700
Committer: Bill Farner <wf...@apache.org>
Committed: Wed Oct 15 17:24:02 2014 -0700
----------------------------------------------------------------------
.../aurora/client/api/scheduler_client.py | 12 +-
.../apache/aurora/client/api/test_restarter.py | 21 +-
.../aurora/client/api/test_scheduler_client.py | 224 +++++++++++--------
.../apache/aurora/client/api/test_updater.py | 42 +++-
.../aurora/client/cli/test_api_from_cli.py | 5 -
.../aurora/client/fake_scheduler_proxy.py | 2 +-
6 files changed, 184 insertions(+), 122 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/797b8152/src/main/python/apache/aurora/client/api/scheduler_client.py
----------------------------------------------------------------------
diff --git a/src/main/python/apache/aurora/client/api/scheduler_client.py b/src/main/python/apache/aurora/client/api/scheduler_client.py
index 7f1c82b..696dc3b 100644
--- a/src/main/python/apache/aurora/client/api/scheduler_client.py
+++ b/src/main/python/apache/aurora/client/api/scheduler_client.py
@@ -30,7 +30,7 @@ from apache.aurora.common.cluster import Cluster
from apache.aurora.common.transport import TRequestsTransport
from gen.apache.aurora.api import AuroraAdmin, ReadOnlyScheduler
-from gen.apache.aurora.api.constants import CURRENT_API_VERSION
+from gen.apache.aurora.api.constants import THRIFT_API_VERSION
from gen.apache.aurora.api.ttypes import ResponseCode
try:
@@ -264,11 +264,6 @@ class SchedulerProxy(object):
if not self._client:
raise self.TimeoutError('Timed out trying to connect to scheduler at %s' % self.cluster.name)
- server_version = self._client.getVersion().result.getVersionResult
- if server_version != CURRENT_API_VERSION:
- raise self.APIVersionError("Client Version: %s, Server Version: %s" %
- (CURRENT_API_VERSION, server_version))
-
def __getattr__(self, method_name):
# If the method does not exist, getattr will return AttributeError for us.
method = getattr(AuroraAdmin.Client, method_name)
@@ -279,8 +274,6 @@ class SchedulerProxy(object):
def method_wrapper(*args):
with self._lock:
start = time.time()
- # TODO(wfarner): The while loop causes failed unit tests to spin for the retry
- # period (currently 10 minutes). Figure out a better approach.
while not self._terminating.is_set() and (
time.time() - start) < self.RPC_MAXIMUM_WAIT.as_(Time.SECONDS):
@@ -295,6 +288,9 @@ class SchedulerProxy(object):
if resp is not None and resp.responseCode == ResponseCode.ERROR_TRANSIENT:
raise self.TransientError(", ".join(
[m for m in resp.details] if resp.details else []))
+ if resp.serverInfo.thriftAPIVersion != THRIFT_API_VERSION:
+ raise self.APIVersionError("Client Version: %s, Server Version: %s" %
+ (THRIFT_API_VERSION, resp.serverInfo.thriftAPIVersion))
return resp
except (TTransport.TTransportException, self.TimeoutError, self.TransientError) as e:
if not self._terminating.is_set():
http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/797b8152/src/test/python/apache/aurora/client/api/test_restarter.py
----------------------------------------------------------------------
diff --git a/src/test/python/apache/aurora/client/api/test_restarter.py b/src/test/python/apache/aurora/client/api/test_restarter.py
index f1bf545..2b264de 100644
--- a/src/test/python/apache/aurora/client/api/test_restarter.py
+++ b/src/test/python/apache/aurora/client/api/test_restarter.py
@@ -19,8 +19,10 @@ from apache.aurora.client.api.restarter import Restarter
from apache.aurora.client.api.updater_util import UpdaterConfig
from apache.aurora.client.fake_scheduler_proxy import FakeSchedulerProxy
from apache.aurora.common.aurora_job_key import AuroraJobKey
+from apache.aurora.common.cluster import Cluster
from gen.apache.aurora.api.AuroraSchedulerManager import Client as scheduler_client
+from gen.apache.aurora.api.constants import THRIFT_API_VERSION
from gen.apache.aurora.api.ttypes import (
AssignedTask,
Response,
@@ -29,11 +31,12 @@ from gen.apache.aurora.api.ttypes import (
ScheduledTask,
ScheduleStatus,
ScheduleStatusResult,
+ ServerInfo,
TaskConfig
)
SESSION_KEY = 'test_session'
-CLUSTER = 'smfd'
+CLUSTER = 'east'
JOB = AuroraJobKey(CLUSTER, 'johndoe', 'test', 'test_job')
HEALTH_CHECK_INTERVAL_SECONDS = 5
UPDATER_CONFIG = UpdaterConfig(
@@ -56,11 +59,18 @@ class TestRestarter(MoxTestBase):
self.lock = None
self.restarter = Restarter(
- JOB, UPDATER_CONFIG, HEALTH_CHECK_INTERVAL_SECONDS,
- FakeSchedulerProxy(CLUSTER, self.mock_scheduler, SESSION_KEY), self.mock_instance_watcher)
+ JOB,
+ UPDATER_CONFIG,
+ HEALTH_CHECK_INTERVAL_SECONDS,
+ FakeSchedulerProxy(
+ Cluster(name=CLUSTER),
+ self.mock_scheduler,
+ SESSION_KEY),
+ self.mock_instance_watcher)
def mock_restart_instances(self, instances, lock=None):
response = Response(responseCode=ResponseCode.OK, messageDEPRECATED='test')
+ response.serverInfo = ServerInfo(thriftAPIVersion=THRIFT_API_VERSION)
self.mock_scheduler.restartShards(
JOB.to_thrift(),
@@ -98,6 +108,7 @@ class TestRestarter(MoxTestBase):
assignedTask=AssignedTask(task=TaskConfig(), instanceId=i)
))
response = Response(responseCode=ResponseCode.OK, messageDEPRECATED='test')
+ response.serverInfo = ServerInfo(thriftAPIVersion=THRIFT_API_VERSION)
response.result = Result()
response.result.scheduleStatusResult = ScheduleStatusResult(tasks=tasks)
@@ -113,6 +124,7 @@ class TestRestarter(MoxTestBase):
def mock_status_no_active_task(self):
response = Response(responseCode=ResponseCode.INVALID_REQUEST, messageDEPRECATED='test')
+ response.serverInfo = ServerInfo(thriftAPIVersion=THRIFT_API_VERSION)
self.mock_scheduler.getTasksWithoutConfigs(IgnoreArg()).AndReturn(response)
def test_restart_no_instance_active(self):
@@ -124,7 +136,7 @@ class TestRestarter(MoxTestBase):
def mock_restart_fails(self):
response = Response(responseCode=ResponseCode.ERROR, messageDEPRECATED='test error')
-
+ response.serverInfo = ServerInfo(thriftAPIVersion=THRIFT_API_VERSION)
self.mock_scheduler.restartShards(
JOB.to_thrift(),
IgnoreArg(),
@@ -141,6 +153,7 @@ class TestRestarter(MoxTestBase):
def mock_restart_watch_fails(self, instances):
response = Response(responseCode=ResponseCode.OK, messageDEPRECATED='test')
+ response.serverInfo = ServerInfo(thriftAPIVersion=THRIFT_API_VERSION)
self.mock_scheduler.restartShards(
JOB.to_thrift(),
http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/797b8152/src/test/python/apache/aurora/client/api/test_scheduler_client.py
----------------------------------------------------------------------
diff --git a/src/test/python/apache/aurora/client/api/test_scheduler_client.py b/src/test/python/apache/aurora/client/api/test_scheduler_client.py
index d78e7dc..e97bb2a 100644
--- a/src/test/python/apache/aurora/client/api/test_scheduler_client.py
+++ b/src/test/python/apache/aurora/client/api/test_scheduler_client.py
@@ -30,7 +30,7 @@ from apache.aurora.common.transport import TRequestsTransport
import gen.apache.aurora.api.AuroraAdmin as AuroraAdmin
import gen.apache.aurora.api.AuroraSchedulerManager as AuroraSchedulerManager
-from gen.apache.aurora.api.constants import CURRENT_API_VERSION, DEFAULT_ENVIRONMENT
+from gen.apache.aurora.api.constants import DEFAULT_ENVIRONMENT, THRIFT_API_VERSION
from gen.apache.aurora.api.ttypes import (
Hosts,
JobConfiguration,
@@ -42,9 +42,9 @@ from gen.apache.aurora.api.ttypes import (
ResourceAggregate,
Response,
ResponseCode,
- Result,
RewriteConfigsRequest,
ScheduleStatus,
+ ServerInfo,
SessionKey,
TaskQuery
)
@@ -52,6 +52,7 @@ from gen.apache.aurora.api.ttypes import (
ROLE = 'foorole'
JOB_NAME = 'barjobname'
JOB_KEY = JobKey(role=ROLE, environment=DEFAULT_ENVIRONMENT, name=JOB_NAME)
+DEFAULT_RESPONSE = Response(serverInfo=ServerInfo(thriftAPIVersion=THRIFT_API_VERSION))
def test_coverage():
@@ -88,11 +89,6 @@ class TestSchedulerProxyInjection(unittest.TestCase):
self.mock_scheduler_client)
self.mock_scheduler_client.get_thrift_client().AndReturn(self.mock_thrift_client)
- version_resp = Response(responseCode=ResponseCode.OK)
- version_resp.result = Result(getVersionResult=CURRENT_API_VERSION)
-
- self.mock_thrift_client.getVersion().AndReturn(version_resp)
-
def tearDown(self):
self.mox.UnsetStubs()
self.mox.VerifyAll()
@@ -101,187 +97,230 @@ class TestSchedulerProxyInjection(unittest.TestCase):
return TestSchedulerProxy(Cluster(name='local'))
def test_startCronJob(self):
- self.mock_thrift_client.startCronJob(IsA(JobKey), IsA(SessionKey))
+ self.mock_thrift_client.startCronJob(IsA(JobKey), IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
self.make_scheduler_proxy().startCronJob(JOB_KEY)
def test_createJob(self):
- self.mock_thrift_client.createJob(IsA(JobConfiguration), IsA(SessionKey))
+ self.mock_thrift_client.createJob(
+ IsA(JobConfiguration),
+ IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
self.make_scheduler_proxy().createJob(JobConfiguration())
def test_replaceCronTemplate(self):
- self.mock_thrift_client.replaceCronTemplate(IsA(JobConfiguration), IsA(Lock), IsA(SessionKey))
+ self.mock_thrift_client.replaceCronTemplate(
+ IsA(JobConfiguration),
+ IsA(Lock),
+ IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
self.make_scheduler_proxy().replaceCronTemplate(JobConfiguration(), Lock())
def test_scheduleCronJob(self):
- self.mock_thrift_client.scheduleCronJob(IsA(JobConfiguration), IsA(SessionKey))
+ self.mock_thrift_client.scheduleCronJob(
+ IsA(JobConfiguration),
+ IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
self.make_scheduler_proxy().scheduleCronJob(JobConfiguration())
def test_descheduleCronJob(self):
- self.mock_thrift_client.descheduleCronJob(IsA(JobKey), IsA(SessionKey))
+ self.mock_thrift_client.descheduleCronJob(
+ IsA(JobKey),
+ IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
self.make_scheduler_proxy().descheduleCronJob(JOB_KEY)
def test_populateJobConfig(self):
- self.mock_thrift_client.populateJobConfig(IsA(JobConfiguration))
+ self.mock_thrift_client.populateJobConfig(IsA(JobConfiguration)).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
self.make_scheduler_proxy().populateJobConfig(JobConfiguration())
def test_restartShards(self):
- self.mock_thrift_client.restartShards(IsA(JobKey), IgnoreArg(), IsA(SessionKey))
+ self.mock_thrift_client.restartShards(
+ IsA(JobKey),
+ IgnoreArg(),
+ IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
self.make_scheduler_proxy().restartShards(JOB_KEY, set([0]))
def test_getTasksStatus(self):
- self.mock_thrift_client.getTasksStatus(IsA(TaskQuery))
+ self.mock_thrift_client.getTasksStatus(IsA(TaskQuery)).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
self.make_scheduler_proxy().getTasksStatus(TaskQuery())
def test_getJobs(self):
- self.mock_thrift_client.getJobs(IgnoreArg())
+ self.mock_thrift_client.getJobs(IgnoreArg()).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
self.make_scheduler_proxy().getJobs(ROLE)
def test_killTasks(self):
- self.mock_thrift_client.killTasks(IsA(TaskQuery), IsA(SessionKey))
+ self.mock_thrift_client.killTasks(IsA(TaskQuery), IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
self.make_scheduler_proxy().killTasks(TaskQuery())
def test_getQuota(self):
- self.mock_thrift_client.getQuota(IgnoreArg())
+ self.mock_thrift_client.getQuota(IgnoreArg()).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
self.make_scheduler_proxy().getQuota(ROLE)
- def test_startMaintenance(self):
- self.mock_thrift_client.startMaintenance(IsA(Hosts), IsA(SessionKey))
+ def test_api_version_mismatch(self):
+ resp = Response(serverInfo=ServerInfo(thriftAPIVersion=THRIFT_API_VERSION + 1))
+ self.mock_thrift_client.getQuota(IgnoreArg()).AndReturn(resp)
self.mox.ReplayAll()
- self.make_scheduler_proxy().startMaintenance(Hosts())
+ with pytest.raises(scheduler_client.SchedulerProxy.ThriftInternalError):
+ self.make_scheduler_proxy().getQuota(ROLE)
- def test_drainHosts(self):
- self.mock_thrift_client.drainHosts(IsA(Hosts), IsA(SessionKey))
+ def test_addInstances(self):
+ self.mock_thrift_client.addInstances(
+ IsA(JobKey),
+ IgnoreArg(),
+ IsA(Lock),
+ IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
- self.make_scheduler_proxy().drainHosts(Hosts())
+ self.make_scheduler_proxy().addInstances(JobKey(), {}, Lock())
- def test_maintenanceStatus(self):
- self.mock_thrift_client.maintenanceStatus(IsA(Hosts), IsA(SessionKey))
+ def test_acquireLock(self):
+ self.mock_thrift_client.acquireLock(IsA(Lock), IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
- self.make_scheduler_proxy().maintenanceStatus(Hosts())
+ self.make_scheduler_proxy().acquireLock(Lock())
- def test_endMaintenance(self):
- self.mock_thrift_client.endMaintenance(IsA(Hosts), IsA(SessionKey))
+ def test_releaseLock(self):
+ self.mock_thrift_client.releaseLock(
+ IsA(Lock),
+ IsA(LockValidation),
+ IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
- self.make_scheduler_proxy().endMaintenance(Hosts())
+ self.make_scheduler_proxy().releaseLock(Lock(), LockValidation())
- def test_getVersion(self):
- self.mock_thrift_client.getVersion()
+ def test_getJobUpdateSummaries(self):
+ self.mock_thrift_client.getJobUpdateSummaries(IsA(JobUpdateQuery)).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
- self.make_scheduler_proxy().getVersion()
+ self.make_scheduler_proxy().getJobUpdateSummaries(JobUpdateQuery())
- def test_addInstances(self):
- self.mock_thrift_client.addInstances(IsA(JobKey), IgnoreArg(), IsA(Lock), IsA(SessionKey))
+ def test_getJobUpdateDetails(self):
+ self.mock_thrift_client.getJobUpdateDetails('update_id').AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
- self.make_scheduler_proxy().addInstances(JobKey(), {}, Lock())
+ self.make_scheduler_proxy().getJobUpdateDetails('update_id')
- def test_acquireLock(self):
- self.mock_thrift_client.acquireLock(IsA(Lock), IsA(SessionKey))
+ def test_startJobUpdate(self):
+ self.mock_thrift_client.startJobUpdate(
+ IsA(JobUpdateRequest),
+ IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
- self.make_scheduler_proxy().acquireLock(Lock())
+ self.make_scheduler_proxy().startJobUpdate(JobUpdateRequest())
- def test_releaseLock(self):
- self.mock_thrift_client.releaseLock(IsA(Lock), IsA(LockValidation), IsA(SessionKey))
+ def test_pauseJobUpdate(self):
+ self.mock_thrift_client.pauseJobUpdate('update_id', IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
- self.make_scheduler_proxy().releaseLock(Lock(), LockValidation())
+ self.make_scheduler_proxy().pauseJobUpdate('update_id')
+
+ def test_resumeJobUpdate(self):
+ self.mock_thrift_client.resumeJobUpdate(
+ 'update_id',
+ IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
+ self.mox.ReplayAll()
+ self.make_scheduler_proxy().resumeJobUpdate('update_id')
+
+ def test_abortJobUpdate(self):
+ self.mock_thrift_client.abortJobUpdate('update_id', IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
+ self.mox.ReplayAll()
+ self.make_scheduler_proxy().abortJobUpdate('update_id')
class TestSchedulerProxyAdminInjection(TestSchedulerProxyInjection):
+ def test_startMaintenance(self):
+ self.mock_thrift_client.startMaintenance(
+ IsA(Hosts),
+ IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
+ self.mox.ReplayAll()
+ self.make_scheduler_proxy().startMaintenance(Hosts())
+
+ def test_drainHosts(self):
+ self.mock_thrift_client.drainHosts(IsA(Hosts), IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
+ self.mox.ReplayAll()
+ self.make_scheduler_proxy().drainHosts(Hosts())
+
+ def test_maintenanceStatus(self):
+ self.mock_thrift_client.maintenanceStatus(
+ IsA(Hosts),
+ IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
+ self.mox.ReplayAll()
+ self.make_scheduler_proxy().maintenanceStatus(Hosts())
+
+ def test_endMaintenance(self):
+ self.mock_thrift_client.endMaintenance(IsA(Hosts), IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
+ self.mox.ReplayAll()
+ self.make_scheduler_proxy().endMaintenance(Hosts())
+
def test_setQuota(self):
- self.mock_thrift_client.setQuota(IgnoreArg(), IsA(ResourceAggregate), IsA(SessionKey))
+ self.mock_thrift_client.setQuota(
+ IgnoreArg(),
+ IsA(ResourceAggregate),
+ IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
self.make_scheduler_proxy().setQuota(ROLE, ResourceAggregate())
def test_forceTaskState(self):
- self.mock_thrift_client.forceTaskState('taskid', IgnoreArg(), IsA(SessionKey))
+ self.mock_thrift_client.forceTaskState(
+ 'taskid',
+ IgnoreArg(),
+ IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
self.make_scheduler_proxy().forceTaskState('taskid', ScheduleStatus.LOST)
def test_performBackup(self):
- self.mock_thrift_client.performBackup(IsA(SessionKey))
+ self.mock_thrift_client.performBackup(IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
self.make_scheduler_proxy().performBackup()
def test_listBackups(self):
- self.mock_thrift_client.listBackups(IsA(SessionKey))
+ self.mock_thrift_client.listBackups(IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
self.make_scheduler_proxy().listBackups()
def test_stageRecovery(self):
- self.mock_thrift_client.stageRecovery(IsA(TaskQuery), IsA(SessionKey))
+ self.mock_thrift_client.stageRecovery(
+ IsA(TaskQuery),
+ IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
self.make_scheduler_proxy().stageRecovery(TaskQuery())
def test_queryRecovery(self):
- self.mock_thrift_client.queryRecovery(IsA(TaskQuery), IsA(SessionKey))
+ self.mock_thrift_client.queryRecovery(
+ IsA(TaskQuery),
+ IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
self.make_scheduler_proxy().queryRecovery(TaskQuery())
def test_deleteRecoveryTasks(self):
- self.mock_thrift_client.deleteRecoveryTasks(IsA(TaskQuery), IsA(SessionKey))
+ self.mock_thrift_client.deleteRecoveryTasks(
+ IsA(TaskQuery),
+ IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
self.make_scheduler_proxy().deleteRecoveryTasks(TaskQuery())
def test_commitRecovery(self):
- self.mock_thrift_client.commitRecovery(IsA(SessionKey))
+ self.mock_thrift_client.commitRecovery(IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
self.make_scheduler_proxy().commitRecovery()
def test_unloadRecovery(self):
- self.mock_thrift_client.unloadRecovery(IsA(SessionKey))
+ self.mock_thrift_client.unloadRecovery(IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
self.make_scheduler_proxy().unloadRecovery()
def test_snapshot(self):
- self.mock_thrift_client.snapshot(IsA(SessionKey))
+ self.mock_thrift_client.snapshot(IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
self.make_scheduler_proxy().snapshot()
def test_rewriteConfigs(self):
- self.mock_thrift_client.rewriteConfigs(IsA(RewriteConfigsRequest), IsA(SessionKey))
+ self.mock_thrift_client.rewriteConfigs(
+ IsA(RewriteConfigsRequest),
+ IsA(SessionKey)).AndReturn(DEFAULT_RESPONSE)
self.mox.ReplayAll()
self.make_scheduler_proxy().rewriteConfigs(RewriteConfigsRequest())
- def test_getJobUpdateSummaries(self):
- self.mock_thrift_client.getJobUpdateSummaries(IsA(JobUpdateQuery))
- self.mox.ReplayAll()
- self.make_scheduler_proxy().getJobUpdateSummaries(JobUpdateQuery())
-
- def test_getJobUpdateDetails(self):
- self.mock_thrift_client.getJobUpdateDetails('update_id')
- self.mox.ReplayAll()
- self.make_scheduler_proxy().getJobUpdateDetails('update_id')
-
- def test_startJobUpdate(self):
- self.mock_thrift_client.startJobUpdate(IsA(JobUpdateRequest), IsA(SessionKey))
- self.mox.ReplayAll()
- self.make_scheduler_proxy().startJobUpdate(JobUpdateRequest())
-
- def test_pauseJobUpdate(self):
- self.mock_thrift_client.pauseJobUpdate('update_id', IsA(SessionKey))
- self.mox.ReplayAll()
- self.make_scheduler_proxy().pauseJobUpdate('update_id')
-
- def test_resumeJobUpdate(self):
- self.mock_thrift_client.resumeJobUpdate('update_id', IsA(SessionKey))
- self.mox.ReplayAll()
- self.make_scheduler_proxy().resumeJobUpdate('update_id')
-
- def test_abortJobUpdate(self):
- self.mock_thrift_client.abortJobUpdate('update_id', IsA(SessionKey))
- self.mox.ReplayAll()
- self.make_scheduler_proxy().abortJobUpdate('update_id')
-
@pytest.mark.parametrize('scheme', ('http', 'https'))
def test_url_when_not_connected_and_cluster_has_no_proxy_url(scheme):
@@ -347,19 +386,18 @@ def test_connect_scheduler(mock_client):
@mock.patch('apache.aurora.client.api.scheduler_client.SchedulerClient',
spec=scheduler_client.SchedulerClient)
-def test_transient_error(client):
+@mock.patch('threading._Event.wait')
+def test_transient_error(_, client):
mock_scheduler_client = mock.Mock(spec=scheduler_client.SchedulerClient)
mock_thrift_client = mock.Mock(spec=AuroraAdmin.Client)
- version_resp = Response(responseCode=ResponseCode.OK)
- version_resp.result = Result(getVersionResult=CURRENT_API_VERSION)
- mock_thrift_client.getVersion.return_value = version_resp
mock_thrift_client.killTasks.side_effect = [
- Response(responseCode=ResponseCode.ERROR_TRANSIENT, details=["message1", "message2"]),
- Response(responseCode=ResponseCode.ERROR_TRANSIENT),
- Response(responseCode=ResponseCode.OK)]
-
- mock_thrift_client.killTasks.return_value = Response(
- responseCode=ResponseCode.OK, messageDEPRECATED="ok")
+ Response(responseCode=ResponseCode.ERROR_TRANSIENT,
+ details=["message1", "message2"],
+ serverInfo=DEFAULT_RESPONSE.serverInfo),
+ Response(responseCode=ResponseCode.ERROR_TRANSIENT,
+ serverInfo=DEFAULT_RESPONSE.serverInfo),
+ Response(responseCode=ResponseCode.OK,
+ serverInfo=DEFAULT_RESPONSE.serverInfo)]
mock_scheduler_client.get_thrift_client.return_value = mock_thrift_client
client.get.return_value = mock_scheduler_client
http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/797b8152/src/test/python/apache/aurora/client/api/test_updater.py
----------------------------------------------------------------------
diff --git a/src/test/python/apache/aurora/client/api/test_updater.py b/src/test/python/apache/aurora/client/api/test_updater.py
index e8eaa9e..f0e45e3 100644
--- a/src/test/python/apache/aurora/client/api/test_updater.py
+++ b/src/test/python/apache/aurora/client/api/test_updater.py
@@ -26,9 +26,10 @@ from apache.aurora.client.api.scheduler_mux import SchedulerMux
from apache.aurora.client.api.updater import Updater
from apache.aurora.client.fake_scheduler_proxy import FakeSchedulerProxy
from apache.aurora.common.aurora_job_key import AuroraJobKey
+from apache.aurora.common.cluster import Cluster
from gen.apache.aurora.api.AuroraSchedulerManager import Client as scheduler_client
-from gen.apache.aurora.api.constants import ACTIVE_STATES
+from gen.apache.aurora.api.constants import ACTIVE_STATES, THRIFT_API_VERSION
from gen.apache.aurora.api.ttypes import (
AcquireLockResult,
AddInstancesConfig,
@@ -49,6 +50,7 @@ from gen.apache.aurora.api.ttypes import (
Result,
ScheduledTask,
ScheduleStatusResult,
+ ServerInfo,
TaskConfig,
TaskConstraint,
TaskQuery,
@@ -63,6 +65,8 @@ if 'UPDATER_DEBUG' in environ:
LogOptions.set_stderr_log_level('DEBUG')
log.init('test_updater')
+SERVER_INFO = ServerInfo(thriftAPIVersion=THRIFT_API_VERSION)
+
class FakeConfig(object):
def __init__(self, role, name, env, update_config):
@@ -141,7 +145,9 @@ class UpdaterTest(TestCase):
self._job_monitor = MockObject(JobMonitor)
self._scheduler_mux = FakeSchedulerMux()
self._scheduler = MockObject(scheduler_client)
- self._scheduler_proxy = FakeSchedulerProxy('test-cluster', self._scheduler, self._session_key)
+ self._scheduler_proxy = FakeSchedulerProxy(Cluster(name='test-cluster'),
+ self._scheduler,
+ self._session_key)
self._quota_check = MockObject(QuotaCheck)
self.init_updater(deepcopy(self.UPDATE_CONFIG))
self._num_cpus = 1.0
@@ -182,14 +188,16 @@ class UpdaterTest(TestCase):
def expect_populate(self, job_config, response_code=None):
response_code = ResponseCode.OK if response_code is None else response_code
- resp = Response(responseCode=response_code, messageDEPRECATED='test')
+ resp = Response(responseCode=response_code, messageDEPRECATED='test', serverInfo=SERVER_INFO)
result = set([deepcopy(job_config.taskConfig)])
resp.result = Result(populateJobResult=PopulateJobResult(populatedDEPRECATED=result))
self._scheduler.populateJobConfig(job_config).AndReturn(resp)
def expect_get_tasks(self, tasks, ignore_ids=None, response_code=None):
response_code = ResponseCode.OK if response_code is None else response_code
- response = Response(responseCode=response_code, messageDEPRECATED='test')
+ response = Response(responseCode=response_code,
+ messageDEPRECATED='test',
+ serverInfo=SERVER_INFO)
scheduled = []
for index, task in enumerate(tasks):
if not ignore_ids or index not in ignore_ids:
@@ -200,13 +208,15 @@ class UpdaterTest(TestCase):
def expect_cron_replace(self, job_config, response_code=None):
response_code = ResponseCode.OK if response_code is None else response_code
- resp = Response(responseCode=response_code, messageDEPRECATED='test')
+ resp = Response(responseCode=response_code, messageDEPRECATED='test', serverInfo=SERVER_INFO)
self._scheduler.replaceCronTemplate(job_config, self._lock, self._session_key).AndReturn(resp)
def expect_restart(self, instance_ids, response_code=None):
for i in instance_ids:
response_code = ResponseCode.OK if response_code is None else response_code
- response = Response(responseCode=response_code, messageDEPRECATED='test')
+ response = Response(responseCode=response_code,
+ messageDEPRECATED='test',
+ serverInfo=SERVER_INFO)
self._scheduler.restartShards(
self._job_key,
[i],
@@ -216,7 +226,9 @@ class UpdaterTest(TestCase):
def expect_kill(self, instance_ids, response_code=None, monitor_result=True, skip_monitor=False):
for i in instance_ids:
response_code = ResponseCode.OK if response_code is None else response_code
- response = Response(responseCode=response_code, messageDEPRECATED='test')
+ response = Response(responseCode=response_code,
+ messageDEPRECATED='test',
+ serverInfo=SERVER_INFO)
query = TaskQuery(jobKeys=[self._job_key],
statuses=ACTIVE_STATES,
instanceIds=frozenset([int(i)]))
@@ -239,7 +251,9 @@ class UpdaterTest(TestCase):
def expect_add(self, instance_ids, task_config, response_code=None):
for i in instance_ids:
response_code = ResponseCode.OK if response_code is None else response_code
- response = Response(responseCode=response_code, messageDEPRECATED='test')
+ response = Response(responseCode=response_code,
+ messageDEPRECATED='test',
+ serverInfo=SERVER_INFO)
add_config = AddInstancesConfig(
key=self._job_key,
taskConfig=task_config,
@@ -266,13 +280,17 @@ class UpdaterTest(TestCase):
def expect_start(self, response_code=None):
response_code = ResponseCode.OK if response_code is None else response_code
- response = Response(responseCode=response_code, messageDEPRECATED='test')
+ response = Response(responseCode=response_code,
+ messageDEPRECATED='test',
+ serverInfo=SERVER_INFO)
response.result = Result(acquireLockResult=AcquireLockResult(lock=self._lock))
self._scheduler.acquireLock(LockKey(job=self._job_key), self._session_key).AndReturn(response)
def expect_finish(self, response_code=None):
response_code = ResponseCode.OK if response_code is None else response_code
- response = Response(responseCode=response_code, messageDEPRECATED='test')
+ response = Response(responseCode=response_code,
+ messageDEPRECATED='test',
+ serverInfo=SERVER_INFO)
self._scheduler.releaseLock(
self._lock,
LockValidation.CHECKED,
@@ -280,7 +298,9 @@ class UpdaterTest(TestCase):
def expect_quota_check(self, num_released, num_acquired, response_code=None, prod=True):
response_code = ResponseCode.OK if response_code is None else response_code
- response = Response(responseCode=response_code, messageDEPRECATED='test')
+ response = Response(responseCode=response_code,
+ messageDEPRECATED='test',
+ serverInfo=SERVER_INFO)
released = CapacityRequest(ResourceAggregate(
numCpus=num_released * self._num_cpus,
ramMb=num_released * self._num_ram,
http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/797b8152/src/test/python/apache/aurora/client/cli/test_api_from_cli.py
----------------------------------------------------------------------
diff --git a/src/test/python/apache/aurora/client/cli/test_api_from_cli.py b/src/test/python/apache/aurora/client/cli/test_api_from_cli.py
index a2b28ba..95aa649 100644
--- a/src/test/python/apache/aurora/client/cli/test_api_from_cli.py
+++ b/src/test/python/apache/aurora/client/cli/test_api_from_cli.py
@@ -22,7 +22,6 @@ from apache.aurora.client.cli.client import AuroraCommandLine
from apache.aurora.client.cli.util import AuroraClientCommandTest
from gen.apache.aurora.api import AuroraAdmin
-from gen.apache.aurora.api.constants import CURRENT_API_VERSION
from gen.apache.aurora.api.ttypes import (
AssignedTask,
GetJobsResult,
@@ -138,9 +137,6 @@ class TestApiFromCLI(AuroraClientCommandTest):
mock_thrift_client = Mock(spec=AuroraAdmin.Client)
mock_scheduler_client.get_thrift_client.return_value = mock_thrift_client
- version_resp = Response(responseCode=ResponseCode.OK)
- version_resp.result = Result(getVersionResult=CURRENT_API_VERSION)
- mock_thrift_client.getVersion.return_value = version_resp
mock_thrift_client.getTasksWithoutConfigs.side_effect = IOError("Uh-Oh")
with contextlib.nested(
patch('apache.aurora.client.api.scheduler_client.SchedulerClient.get',
@@ -153,6 +149,5 @@ class TestApiFromCLI(AuroraClientCommandTest):
# exception, which results in the command failing with an error code.
result = cmd.execute(['job', 'status', 'west/bozo/test/hello'])
assert result == EXIT_UNKNOWN_ERROR
- mock_thrift_client.getVersion.assert_called_once_with()
mock_thrift_client.getTasksWithoutConfigs.assert_called_with(
TaskQuery(jobKeys=[JobKey(role='bozo', environment='test', name='hello')]))
http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/797b8152/src/test/python/apache/aurora/client/fake_scheduler_proxy.py
----------------------------------------------------------------------
diff --git a/src/test/python/apache/aurora/client/fake_scheduler_proxy.py b/src/test/python/apache/aurora/client/fake_scheduler_proxy.py
index 12e70e9..183d2d6 100644
--- a/src/test/python/apache/aurora/client/fake_scheduler_proxy.py
+++ b/src/test/python/apache/aurora/client/fake_scheduler_proxy.py
@@ -19,7 +19,7 @@ from apache.aurora.client.api.scheduler_client import SchedulerProxy
class FakeSchedulerProxy(SchedulerProxy):
def __init__(self, cluster, scheduler, session_key):
- self._cluster = cluster
+ SchedulerProxy.__init__(self, cluster, verbose=True)
self._scheduler = scheduler
self._session_key = session_key
self._lock = RLock()