示例#1
0
    def test_get_group_members(self):
        proc_info = system_info.get_process_info()
        member_id = get_member_id()

        # 1. Group doesn't exist
        resp = self.app.get('/v1/service_registry/groups/doesnt-exist/members', expect_errors=True)
        self.assertEqual(resp.status_int, 404)
        self.assertEqual(resp.json['faultstring'], 'Group with ID "doesnt-exist" not found.')

        # 2. Group exists and has a single member
        resp = self.app.get('/v1/service_registry/groups/mock_service/members')
        self.assertEqual(resp.status_int, 200)
        self.assertEqual(resp.json, {
            'members': [
                {
                    'group_id': 'mock_service',
                    'member_id': member_id.decode('utf-8'),
                    'capabilities': {
                        'key1': 'value1',
                        'name': 'mock_service',
                        'hostname': proc_info['hostname'],
                        'pid': proc_info['pid']
                    }
                }
            ]
        })
示例#2
0
def register_service_in_service_registry(service, capabilities=None, start_heart=True):
    """
    Register provided service in the service registry and start the heartbeat process.

    :param service: Service name which will also be used for a group name (e.g. "api").
    :type service: ``str``

    :param capabilities: Optional metadata associated with the service.
    :type capabilities: ``dict``
    """
    # NOTE: It's important that we pass start_heart=True to start the hearbeat process
    coordinator = coordination.get_coordinator(start_heart=start_heart)

    member_id = coordination.get_member_id()

    # 1. Create a group with the name of the service
    if not isinstance(service, six.binary_type):
        group_id = service.encode('utf-8')
    else:
        group_id = service

    try:
        coordinator.create_group(group_id).get()
    except GroupAlreadyExist:
        pass

    # Include common capabilities such as hostname and process ID
    proc_info = system_info.get_process_info()
    capabilities['hostname'] = proc_info['hostname']
    capabilities['pid'] = proc_info['pid']

    # 1. Join the group as a member
    LOG.debug('Joining service registry group "%s" as member_id "%s" with capabilities "%s"' %
              (group_id, member_id, capabilities))
    return coordinator.join_group(group_id, capabilities=capabilities).get()
示例#3
0
    def test_get_group_members(self):
        proc_info = system_info.get_process_info()
        member_id = get_member_id()

        # 1. Group doesn't exist
        resp = self.app.get('/v1/service_registry/groups/doesnt-exist/members',
                            expect_errors=True)
        self.assertEqual(resp.status_int, 404)
        self.assertEqual(resp.json['faultstring'],
                         'Group with ID "doesnt-exist" not found.')

        # 2. Group exists and has a single member
        resp = self.app.get('/v1/service_registry/groups/mock_service/members')
        self.assertEqual(resp.status_int, 200)
        self.assertEqual(
            resp.json, {
                'members': [{
                    'group_id': 'mock_service',
                    'member_id': member_id.decode('utf-8'),
                    'capabilities': {
                        'key1': 'value1',
                        'name': 'mock_service',
                        'hostname': proc_info['hostname'],
                        'pid': proc_info['pid']
                    }
                }]
            })
示例#4
0
def register_service_in_service_registry(service, capabilities=None, start_heart=True):
    """
    Register provided service in the service registry and start the heartbeat process.

    :param service: Service name which will also be used for a group name (e.g. "api").
    :type service: ``str``

    :param capabilities: Optional metadata associated with the service.
    :type capabilities: ``dict``
    """
    # NOTE: It's important that we pass start_heart=True to start the hearbeat process
    coordinator = coordination.get_coordinator(start_heart=start_heart)

    member_id = coordination.get_member_id()

    # 1. Create a group with the name of the service
    if not isinstance(service, six.binary_type):
        group_id = service.encode('utf-8')
    else:
        group_id = service

    try:
        coordinator.create_group(group_id).get()
    except GroupAlreadyExist:
        pass

    # Include common capabilities such as hostname and process ID
    proc_info = system_info.get_process_info()
    capabilities['hostname'] = proc_info['hostname']
    capabilities['pid'] = proc_info['pid']

    # 1. Join the group as a member
    LOG.debug('Joining service registry group "%s" as member_id "%s" with capabilities "%s"' %
              (group_id, member_id, capabilities))
    return coordinator.join_group(group_id, capabilities=capabilities).get()
示例#5
0
    def test_get_group_members(self):
        proc_info = system_info.get_process_info()
        member_id = get_member_id()

        # 1. Group doesn't exist
        resp = self.app.get("/v1/service_registry/groups/doesnt-exist/members",
                            expect_errors=True)
        self.assertEqual(resp.status_int, 404)
        self.assertEqual(resp.json["faultstring"],
                         'Group with ID "doesnt-exist" not found.')

        # 2. Group exists and has a single member
        resp = self.app.get("/v1/service_registry/groups/mock_service/members")
        self.assertEqual(resp.status_int, 200)
        self.assertEqual(
            resp.json,
            {
                "members": [{
                    "group_id": "mock_service",
                    "member_id": member_id.decode("utf-8"),
                    "capabilities": {
                        "key1": "value1",
                        "name": "mock_service",
                        "hostname": proc_info["hostname"],
                        "pid": proc_info["pid"],
                    },
                }]
            },
        )
示例#6
0
def deregister_service(service, start_heart=True):

    if not isinstance(service, six.binary_type):
        group_id = service.encode("utf-8")
    else:
        group_id = service

    coordinator = coordination.get_coordinator(start_heart=start_heart)

    member_id = coordination.get_member_id()
    LOG.debug(
        'Leaving service registry group "%s" as member_id "%s"' % (group_id, member_id)
    )
    try:
        coordinator.leave_group(group_id).get()
    except (GroupNotCreated, MemberNotJoined):
        pass