def test_list_pods_by_tenant(self): pod1, _ = az_ag.get_pod_by_az_tenant(self.context, FAKE_AZ + FAKE_AZ, FAKE_TENANT_ID) pods = az_ag.list_pods_by_tenant(self.context, FAKE_TENANT_ID) self.assertEqual(pod1, None) self.assertEqual(len(pods), 0) # TODO(joehuang): tenant bound to multiple pods in one AZ # schedule one pod2, _ = az_ag.get_pod_by_az_tenant(self.context, FAKE_AZ, FAKE_TENANT_ID) pods = az_ag.list_pods_by_tenant(self.context, FAKE_TENANT_ID) self.assertDictEqual(pods[0], pod2)
def _get_all(self, context): # TODO(joehuang): query optimization for pagination, sort, etc ret = [] pods = az_ag.list_pods_by_tenant(context, self.tenant_id) for pod in pods: if pod['pod_name'] == '': continue query = urlparse.urlsplit(request.url).query query_filters = urlparse.parse_qsl(query) skip_pod = False for k, v in query_filters: if k == 'availability_zone' and v != pod['az_name']: skip_pod = True break if skip_pod: continue s_ctx = hclient.get_pod_service_ctx( context, request.url, pod['pod_name'], s_type=cons.ST_CINDER) if s_ctx['b_url'] == '': LOG.error(_LE("bottom pod endpoint incorrect %s") % pod['pod_name']) continue # TODO(joehuang): convert header and body content resp = hclient.forward_req(context, 'GET', request.headers, s_ctx['b_url'], request.body) if resp.status_code == 200: routings = db_api.get_bottom_mappings_by_tenant_pod( context, self.tenant_id, pod['pod_id'], cons.RT_VOLUME ) b_ret_body = jsonutils.loads(resp.content) if b_ret_body.get('volumes'): for vol in b_ret_body['volumes']: if not routings.get(vol['id']): b_ret_body['volumes'].remove(vol) continue vol['availability_zone'] = pod['az_name'] ret.extend(b_ret_body['volumes']) return ret
def _get_all(self, context): # TODO(joehuang): query optimization for pagination, sort, etc ret = [] pods = az_ag.list_pods_by_tenant(context, self.tenant_id) for pod in pods: if pod['pod_name'] == '': continue query = urlparse.urlsplit(request.url).query query_filters = urlparse.parse_qsl(query) skip_pod = False for k, v in query_filters: if k == 'availability_zone' and v != pod['az_name']: skip_pod = True break if skip_pod: continue s_ctx = hclient.get_pod_service_ctx(context, request.url, pod['pod_name'], s_type=cons.ST_CINDER) if s_ctx['b_url'] == '': LOG.error( _LE("bottom pod endpoint incorrect %s") % pod['pod_name']) continue # TODO(joehuang): get the release of top and bottom t_release = cons.R_MITAKA b_release = cons.R_MITAKA b_headers = hclient.convert_header(t_release, b_release, request.headers) resp = hclient.forward_req(context, 'GET', b_headers, s_ctx['b_url'], request.body) if resp.status_code == 200: routings = db_api.get_bottom_mappings_by_tenant_pod( context, self.tenant_id, pod['pod_id'], cons.RT_VOLUME) b_ret_body = jsonutils.loads(resp.content) if b_ret_body.get('volumes'): for vol in b_ret_body['volumes']: if not routings.get(vol['id']): b_ret_body['volumes'].remove(vol) continue vol['availability_zone'] = pod['az_name'] ret.extend(b_ret_body['volumes']) return ret
def test_get_pod_by_az_tenant(self): pod1, _ = az_ag.get_pod_by_az_tenant(self.context, FAKE_AZ + FAKE_AZ, FAKE_TENANT_ID) self.assertIsNone(pod1) pods = az_ag.list_pods_by_tenant(self.context, FAKE_TENANT_ID) self.assertEqual(len(pods), 0) # schedule one pod2, _ = az_ag.get_pod_by_az_tenant(self.context, FAKE_AZ, FAKE_TENANT_ID) pod_bindings = core.query_resource(self.context, models.PodBinding, [{'key': 'tenant_id', 'comparator': 'eq', 'value': FAKE_TENANT_ID}], []) self.assertIsNotNone(pod_bindings) if pod_bindings[0]['pod_id'] == FAKE_SITE_ID: self.assertEqual(pod2['pod_name'], FAKE_SITE_NAME) self.assertEqual(pod2['pod_id'], FAKE_SITE_ID) self.assertEqual(pod2['az_name'], FAKE_AZ) else: self.assertEqual(pod2['pod_name'], FAKE_SITE_NAME_2) self.assertEqual(pod2['pod_id'], FAKE_SITE_ID_2) self.assertEqual(pod2['az_name'], FAKE_AZ) # scheduled one should always be bound pod3, _ = az_ag.get_pod_by_az_tenant(self.context, FAKE_AZ, FAKE_TENANT_ID) self.assertEqual(pod2['pod_name'], pod3['pod_name']) self.assertEqual(pod2['pod_id'], pod3['pod_id']) self.assertEqual(pod2['az_name'], pod3['az_name'])
def test_get_pod_by_az_tenant(self): pod1, _ = az_ag.get_pod_by_az_tenant(self.context, FAKE_AZ + FAKE_AZ, FAKE_TENANT_ID) self.assertEqual(pod1, None) pods = az_ag.list_pods_by_tenant(self.context, FAKE_TENANT_ID) self.assertEqual(len(pods), 0) # schedule one pod2, _ = az_ag.get_pod_by_az_tenant(self.context, FAKE_AZ, FAKE_TENANT_ID) pod_bindings = core.query_resource(self.context, models.PodBinding, [{'key': 'tenant_id', 'comparator': 'eq', 'value': FAKE_TENANT_ID}], []) self.assertIsNotNone(pod_bindings) if pod_bindings[0]['pod_id'] == FAKE_SITE_ID: self.assertEqual(pod2['pod_name'], FAKE_SITE_NAME) self.assertEqual(pod2['pod_id'], FAKE_SITE_ID) self.assertEqual(pod2['az_name'], FAKE_AZ) else: self.assertEqual(pod2['pod_name'], FAKE_SITE_NAME_2) self.assertEqual(pod2['pod_id'], FAKE_SITE_ID_2) self.assertEqual(pod2['az_name'], FAKE_AZ) # scheduled one should always be bound pod3, _ = az_ag.get_pod_by_az_tenant(self.context, FAKE_AZ, FAKE_TENANT_ID) self.assertEqual(pod2['pod_name'], pod3['pod_name']) self.assertEqual(pod2['pod_id'], pod3['pod_id']) self.assertEqual(pod2['az_name'], pod3['az_name'])