You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@couchdb.apache.org by "Paul Joseph Davis (JIRA)" <ji...@apache.org> on 2011/01/27 18:00:48 UTC

[jira] Commented: (COUCHDB-1046) support load of external erlang modules in couchdb.

    [ https://issues.apache.org/jira/browse/COUCHDB-1046?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12987648#action_12987648 ] 

Paul Joseph Davis commented on COUCHDB-1046:
--------------------------------------------

Two things concern me about this code.

First bit is I don't see why we'd need to specify a daemon in a plugin section and then deal with that. We've already got a section in the config starting daemons and plugins are free to define their own sections in the INI.

The second bit is dynamically adding code paths to the Erlang VM. Specifically, they're never getting removed when the plugin goes away and even if we could do that, what happens to code running that was loaded from a path that is about to be deleted? I'd rather stick to the config tool that lets people install their code into the $PREFIX/couchdb/erlang/lib directory and keep the static code paths that we already use.

> support load of external erlang modules in couchdb. 
> ----------------------------------------------------
>
>                 Key: COUCHDB-1046
>                 URL: https://issues.apache.org/jira/browse/COUCHDB-1046
>             Project: CouchDB
>          Issue Type: New Feature
>          Components: Database Core
>            Reporter: Benoit Chesneau
>             Fix For: 1.2
>
>         Attachments: couchdb-plugins-01.patch
>
>
> If you want to add external modules in CouchDB and load them , you need to set the ERL_FLAGS environnement variable to the path of a module. 
> The attached patch allows couchdb to load plugins from plugin key in couchdb section. It add needed path to the code path, so the vm can find modules.
> ex:
>    [couchdb]
>    plugins = plugin1, plugin2
>  Each plugin can have its own section where it set the binaries patch, eventually if a service need to be added to the supervision you can set the module and function to load like in daemon section and tel if it's a supervisor or simple service.
> It also allows couchdb to load a plugin service (gen_server or such) to the supervision. You can choose if the service is a simple daemon or a supervisor.
>  ex:
>    [plugin1]
>    code_path = /path/to/plugin1/ebin
>    daemon = {module, function, [Args]}
>    supervisor = false
> Let me know what you think about it. This patch is really useful here and allows me to dynamically load modules I want. Also it eases the integration of external module. For ex I can load my couchapp_ng modules with this lines in local.ini : 
>     [couchdb]
>     plugins = couchapp-ng
>     [couchapp-ng]
>     code_path=/Users/benoitc/work/couchapp_ng/ebin
>     daemon = {couchapp_ng_routes, start_link, []}
>     [httpd_design_handlers]
>     _app = {couchapp_ng_httpd, handle_app_req}
>     [couchapp_ng_handlers]
>     rewrite = {couchapp_ng_handlers, rewrite_handler}
>     proxy = {couchapp_ng_handlers, proxy_handler}
> and can do the same with geocouch etc. Tested here with these modules.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.