我们线上solr版本是6.6.4,此版本 RunExecutableListener 默认是不开启得 。
之前线上api操作solr 报错。原以为是必须开启这个东西 (因为solrconfig.xml 中并没有指定任何关于这个类得地方)。
Critical security fix: Fix for a 0-day exploit (CVE-2017-12629), details: https://s.apache.org/FJDl.
RunExecutableListener has been disabled by default (can be enabled by -Dsolr.enableRunExecutableListener=true)
and resolving external entities in the XML query parser (defType=xmlparser or {!xmlparser ... }) is disabled by default.
然而线下环境与线上版本是一致得却一直没有这个问题,我也一直很困惑。始终找不到具体原因,最终采用折中方案,启动solr得时候开启RunExecutableListener。-Dsolr.enableRunExecutableListener=true
直到昨天线上报 Cannot run program "regsvr32.exe": error=2, No such file or directory 这个错误,
在 这篇文章里有所发现 传送门
找到了问题所在,是api配置问题导致得。
Config API可以操作solrconfig.xml使用类似REST的API调用的各个方面。
此功能默认启用,在SolrCloud和独立模式下的工作方式类似。可以使用此API更改许多常用的编辑属性(如缓存大小和提交设置)和请求处理程序定义。
使用此API时,solrconfig.xml不会更改。相反,所有已编辑的配置都存储在一个名为的文件中configoverlay.json。中的值configoverlay.json覆盖中的值solrconfig.xml。
API入口点
/config:检索或修改配置。GET检索和POST执行命令
/config/overlay:configoverlay.json单独检索详细信息
/config/params:允许创建可以覆盖或取代其中定义的参数的参数集solrconfig.xml。有关更多详细信息,请参阅请求参数API部分。
我比对了下线下solr product 与线上product得差异 发现 线下并没有configoverlay.json 文件. 猜测肯定是这个出现得问题。但并不知道这个文件是如何产生得(有待研究)。
查看线上configoverlay.json 发现 基本上所有操作都是基于 RunExecutableListener 。那可以肯定是这里得问题了。
决定删除这个文件,并重启solr。
Cannot run program "regsvr32.exe": error=2, No such file or directory
这个错误已经没有了。