'Add new server to the group.'

def HandleServerAdd(self):

    if (not self.MASTER):
        return self._EmptyResponse(constants.RESPONSE_NOT_MASTER_SERVER)
    if (not self.MASTER.AllRegistered()):
        return self._EmptyResponse(constants.RESPONSE_DATA_SERVERS_UNREACHABLE)
    if self.MASTER.IsRebalancing():
        return self._EmptyResponse(constants.RESPONSE_MASTER_IS_REBALANCING)
    (addr, port) = self._UnpackNewServer()
    logging.info('Adding    new    server    %s:%d', addr, port)
    server = self.MASTER.AddServer(addr, port)
    if self.MASTER.SyncMapping(skip=[server]):
        body = self.MAPPING.SerializeToString()
        self._Response(constants.RESPONSE_OK, body)
    else:
        return self._EmptyResponse(constants.RESPONSE_INCOMPLETE_SYNC)
