diff --git a/rally/common/plugin/plugin.py b/rally/common/plugin/plugin.py index 3605307a96..43df1d63c3 100644 --- a/rally/common/plugin/plugin.py +++ b/rally/common/plugin/plugin.py @@ -13,6 +13,8 @@ # License for the specific language governing permissions and limitations # under the License. +import sys + from rally.common.plugin import discover from rally.common.plugin import info from rally.common.plugin import meta @@ -142,13 +144,17 @@ class Plugin(meta.MetaMixin, info.InfoMixin): @classmethod def _set_name_and_namespace(cls, name, namespace): try: - Plugin.get(name, namespace=namespace) + existing_plugin = Plugin.get(name, namespace=namespace) except exceptions.PluginNotFound: cls._meta_set("name", name) cls._meta_set("namespace", namespace) else: - raise exceptions.PluginWithSuchNameExists(name=name, - namespace=namespace) + raise exceptions.PluginWithSuchNameExists( + name=name, namespace=namespace, + existing_path=( + sys.modules[existing_plugin.__module__].__file__), + new_path=sys.modules[cls.__module__].__file__ + ) @classmethod def _set_deprecated(cls, reason, rally_version): diff --git a/rally/exceptions.py b/rally/exceptions.py index 852fc43ec4..d7b3d5839a 100644 --- a/rally/exceptions.py +++ b/rally/exceptions.py @@ -90,7 +90,9 @@ class PluginNotFound(NotFoundException): class PluginWithSuchNameExists(RallyException): msg_fmt = _("Plugin with such name: %(name)s already exists in " - "%(namespace)s namespace") + "%(namespace)s namespace. It's module allocates at " + "%(existing_path)s. You are trying to add plugin whose module " + "allocates at %(new_path)s.") class NoSuchConfigField(NotFoundException):