Noble Paul created SOLR-14688: --------------------------------- Summary: Make Streaming expressions a first party package Key: SOLR-14688 URL: https://issues.apache.org/jira/browse/SOLR-14688 Project: Solr Issue Type: Improvement Security Level: Public (Default Security Level. Issues are Public) Reporter: Noble Paul
This will be an implicit package. What it means is, that the package will be preinstalled and the streaming handler will be registered implicitly as it is done today. Behind the scenes it will be loaded from a package. h1. How do we achieve this? h2. step 1 Ensure that the classes of streaming expressions are packaged into a jar of its own. h2. step 2 These jars should be put into a directory {{<SOLR_HOME>/files/_trusted_/solr-jars}} in our distro h2. step 3 add an implicit {{packages.json}} as follows. This will be present in our jars itself. The packages.json in ZK will be merged with the implicit one to get the final one. for instance. if the {{packages.json}} in ZK has a package called {{expressible/8.7}} it will override the implicit one. But I assume that the newly configured ones will have say newer versions (say {{8.7.1}} etc) {code:java} { "packages" : { "expressible" : [ { "version" : "8.7", "files": ["/_trusted_/solr-jars/streaming-expressions-8.7.jar"] }] } } {code} h2. step 4 change our {{ImplicitPlugins.json}} and modify the section for /stream as follows {code:java} {"/stream": { "class": "expressible:org.apache.solr.handler.StreamHandler", "useParams":"_STREAM", "invariants": { "distrib": false } }} {code} This ensures that the {{StreamHandler}} is always loaded from the package {{expressible}} h2. What happens to users who are upgrading from {{8.6}} ? There are no external changes to any configuration anywhere, all the changes are internal. So, if a user switch to {{8.7}} everything will continue to work as if nothing has changed. h2. So what's the point? A user will be able to install a new versions of {{expressible}} package to their cluster using the package manager. So, the {{packages.json}} in ZK will look as follows. {code:java} { "packages" : { "expressible" : [ { "version" : "8.7.1", "files": ["/expressible/streaming-expressions-8.7.1.jar"] },{ "version" : "8.8", "files": ["/expressible/streaming-expressions-8.8.jar"] },{ "version" : "8.9", "files": ["/expressible/streaming-expressions-8.9.jar"] } ] } } {code} This means the user has the choice of installing and using {{8.7}} or {{8.7.1}} or even more versions. Also note that the jars are living under a folder {{/expressible}}. This means it's is not a specially trusted jar. It should be published with a proper signature and the user should trust those keys by adding a repository h2. does the package loading system need to change? Yes, we should stop requiring a signature for any jars under {{_trusted_/jars}} directory. -- This message was sent by Atlassian Jira (v8.3.4#803005) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org For additional commands, e-mail: issues-h...@lucene.apache.org