[ 
https://issues.apache.org/jira/browse/SOLR-15960?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17808337#comment-17808337
 ] 

ASF subversion and git services commented on SOLR-15960:
--------------------------------------------------------

Commit 6ef158102b689b9260a8ca4eeca55a7d06220dca in solr's branch 
refs/heads/branch_9x from pjmcarthur
[ https://gitbox.apache.org/repos/asf?p=solr.git;h=6ef158102b6 ]

 SOLR-15960:  Fix EnvUtils.camelCaseToDotsMap thread-safety (#2204)

* Use ConcurrentHashMap and use computeIfAbsent

Co-authored-by: Paul McArthur <pmcarthur-apa...@proton.me>
Co-authored-by: David Smiley <dsmi...@apache.org>

> Unified use of system properties and environment variables
> ----------------------------------------------------------
>
>                 Key: SOLR-15960
>                 URL: https://issues.apache.org/jira/browse/SOLR-15960
>             Project: Solr
>          Issue Type: Improvement
>            Reporter: Jan Høydahl
>            Assignee: Jan Høydahl
>            Priority: Major
>             Fix For: 9.5
>
>          Time Spent: 9h 20m
>  Remaining Estimate: 0h
>
> We have a lot of boiler-plate code in Solr related to resolving configuration 
> from config-files, system properties and environment variables.
> The main pattern so far has been to load a config from an xml file, which 
> uses system property variables like {{{}$\{myVar{}}}}. All the environment 
> variables that we expose in {{solr.in.sh}} are converted to system.properties 
> in {{bin/solr}} and inside of Solr we only care about sys.props. This has 
> served us quite well, but is also has certain disadvantages:
>  * Naming mismatches. You have one config name in the xml file, one as system 
> property and yet another for environment variable.
>  * Duplicate code to deal with type conversion, and converting comma 
> separated lists from env.var into Java lists
>  * Every new config option needs to touch {{{}bin/solr{}}}, {{bin/solr.cmd}} 
> and often more.
> In the world of containers and k8s, we want to configure almost every aspect 
> of an app using environment variables. It is sometimes also more secure than 
> passing sys.props on the cmdline since they won't show up in a "ps".
> So this is a proposal to unify all Solr's configs in a more structured way
>  * Make naming a convention. All env.variable should be uppercase with format 
> {{SOLR_X_Y}} and all sys.propos should be lowercase with the format 
> {{solr.x.y}}. Perhaps {{solr.camelCase}} should map to {{SOLR_CAMEL_CASE}}, 
> or we discourage camel case in favour of dots.
>  * Add a central {{ConfigResolver}} class to Solr that can answer e.g. 
> {{getInt("solr.my.number")}} and it would return either prop 
> {{solr.my.number}} or {{SOLR_MY_NUMBER}}. Similar for String, bool etc, and 
> with fallback-values
>  * List support, e.g. {{getListOfStrings("solr.modules")}} and it would 
> return a {{List<String>}} from either {{solr.modules}} or {{SOLR_MODULES}}, 
> supporting comma-separated, custom separator and why not also json list 
> format ["foo","bar"]?
> A pitfall of using environment variables directly is testing, since env.vars 
> are immutable. I suggest we solve this by reading all {{SOLR_*}} 
> env.variables on startup and inserting them into a static, mutable map 
> somewhere which is the single source of truth for env.vars. Then we can ban 
> the use of {{System.getenv()}}.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org
For additional commands, e-mail: issues-h...@solr.apache.org

Reply via email to