'Execute SMI-S Method.'

@lockutils.synchronized('ETERNUS-SMIS-exec', 'cinder-', True)
def _exec_eternus_service(self, classname, instanceNameList, **param_dict):

    LOG.debug('_exec_eternus_service,    classname:    %(a)s,    instanceNameList:    %(b)s,    parameters:    %(c)s.', {'a': classname, 'b': instanceNameList, 'c': param_dict})
    try:
        (rc, retdata) = self.conn.InvokeMethod(classname, instanceNameList, **param_dict)
    except Exception:
        if (rc is None):
            msg = (_('_exec_eternus_service,    classname:    %(classname)s,    InvokeMethod,    cannot    connect    to    ETERNUS.') % {'classname': classname})
            LOG.error(msg)
            raise exception.VolumeBackendAPIException(data=msg)
    if ('Job' in retdata):
        rc = self._wait_for_job_complete(self.conn, retdata)
    errordesc = RETCODE_dic.get(six.text_type(rc), UNDEF_MSG)
    ret = (rc, errordesc, retdata)
    LOG.debug('_exec_eternus_service,    classname:    %(a)s,    instanceNameList:    %(b)s,    parameters:    %(c)s,    Return    code:    %(rc)s,    Error:    %(errordesc)s,    Retrun    data:    %(retdata)s.', {'a': classname, 'b': instanceNameList, 'c': param_dict, 'rc': rc, 'errordesc': errordesc, 'retdata': retdata})
    return ret
