lucene-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hoss Man (JIRA)" <>
Subject [jira] [Updated] (SOLR-1725) Script based UpdateRequestProcessorFactory
Date Fri, 29 Jun 2012 02:19:44 GMT


Hoss Man updated SOLR-1725:

    Attachment: SOLR-1725.patch

Updated patch with lots of changes, here's the notes i kept as i went along...

* updated patch to trunk
* added classloader to ScriptEngineManager constructor
* fixed InputStreamReader to use UTF-8
* fixed Reader usage to ensure it's closed
* fixed file extension parsing using commons-io
* renamed some test files to make it more clear at a glance what they were for
* more tests and asserts to verify that changes are working (including adding field values)
* added logic to allow script functions to return "false" to end processing of this command
* fixed init to call super.init
* removed splitting of string "scripts" init param, replaced with multivalued "script" init
* generallize "params" to allow any init param type (not just NamedList)
* add support for forcing engine name
* add details about supported engines if we can't fine one by extension/name
* updated javadocs

Things i still want to deal with:

* make test assume() javascript/js engine is available - from what i can tell JREs aren't
required to support it
* check engine(s) & scripts exist in inform
* add tests of bad configs (bad engine name, bad extension)
* polish javadocs
* deal with problem of processor functions that don't exist in script.

The last one is a biggee.  from what i can tell, the ScriptEngine api doesn't give us any
sort of "reflection" and the more i think about it, the more silently ignoring when a function
doesn't exist seems like a really bad idea -- what if the script has a function name with
a typo in it? what if a stray "cat" command causes someome to accidently truncate a script
file to 0 bytes? (so it's still a legal script, but doesn't have any functions?)  ... i think
we should fail hard if any method used isn't found -- so people have to implement every method
that they use (ie: if you never use "rollback" it's no big deal that you don't have a processRollback(...)

> Script based UpdateRequestProcessorFactory
> ------------------------------------------
>                 Key: SOLR-1725
>                 URL:
>             Project: Solr
>          Issue Type: New Feature
>          Components: update
>    Affects Versions: 1.4
>            Reporter: Uri Boness
>            Assignee: Erik Hatcher
>              Labels: UpdateProcessor
>             Fix For: 4.1
>         Attachments: SOLR-1725-rev1.patch, SOLR-1725.patch, SOLR-1725.patch, SOLR-1725.patch,
SOLR-1725.patch, SOLR-1725.patch, SOLR-1725.patch, SOLR-1725.patch, SOLR-1725.patch, SOLR-1725.patch,
> A script based UpdateRequestProcessorFactory (Uses JDK6 script engine support). The main
goal of this plugin is to be able to configure/write update processors without the need to
write and package Java code.
> The update request processor factory enables writing update processors in scripts located
in {{solr.solr.home}} directory. The functory accepts one (mandatory) configuration parameter
named {{scripts}} which accepts a comma-separated list of file names. It will look for these
files under the {{conf}} directory in solr home. When multiple scripts are defined, their
execution order is defined by the lexicographical order of the script file name (so {{scriptA.js}}
will be executed before {{scriptB.js}}).
> The script language is resolved based on the script file extension (that is, a *.js files
will be treated as a JavaScript script), therefore an extension is mandatory.
> Each script file is expected to have one or more methods with the same signature as the
methods in the {{UpdateRequestProcessor}} interface. It is *not* required to define all methods,
only those hat are required by the processing logic.
> The following variables are define as global variables for each script:
>  * {{req}} - The SolrQueryRequest
>  * {{rsp}}- The SolrQueryResponse
>  * {{logger}} - A logger that can be used for logging purposes in the script

This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:!default.jspa
For more information on JIRA, see:


To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message