[ https://issues.apache.org/jira/browse/SOLR-12859?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Chris M. Hostetter updated SOLR-12859: -------------------------------------- Attachment: SOLR-12859.patch Status: Open (was: Open) I've been looking into this – starting with a bunch of work to beef up the existing (SolrCloud) {{DistribDocExpirationUpdateProcessorTest}} to also test a cluster with BasicAuth enabled (and to test multiple replicas with multiple docs that need to expire – originally the test only expired 1 doc and was focused on ensuring there weren't unneccessary deletes on unafected shards, but that ment that with basic auth neabled it qas frequently getting lucky and passing) Once I had a reliably BasicAuth + DocExpirationUpdateProcessorFactory test in place, i started digging into the logs and realized that the {{isSolrServerThread()}} logic isn't the problem... {{isSolrServerThread()}} is getting "properly" (i guess?) set on the {{ErrorReportingConcurrentUpdateSolrClient}} instances used by {{DistribUpdateProcessor}} (by way of using the {{Http2SolrClient}} from {{UpdateShardHandler}} under the covers) ... but that never comes into play, because of the user Principal check... {code:java} private Optional<String> generateToken() { SolrRequestInfo reqInfo = getRequestInfo(); String usr; if (reqInfo != null) { Principal principal = reqInfo.getUserPrincipal(); if (principal == null) { log.debug("principal is null"); //this had a request but not authenticated //so we don't not need to set a principal return Optional.empty(); } else { usr = principal.getName(); } } else { if (!isSolrThread()) { ... {code} The Runnable used in {{DocExpirationUpdateProcessor}} has to create a {{LocalSolrQueryRequest}} – *AND* set the {{SolrRequestInfo}} for the thread – in order to play nice with the UpdateProcessor chain, but because it does that, {{PKIAuthenticationPlugin}} never looks at {{isSolrThread()}} ... first it says "hey, this has a SolrRequest, so the only thing we care about is the UserPrincipal from that SolrRequest" and never goes any farther then that. ---- My initial reaction was to "swap" the order of the Principle/isSolrThread() checks – but w/o a better understanding of why {{isSolrThread()}} exists that seems risky (especially since AFAICT, every {{SolrClient}} used for distributed Solr requests will return "true" for {{isSolrThread()}} – meaning PKI would probably completely stop forwarding credentials if we did that? So for now, the attached patch includes the best straw man solution I could think of to fix the problem and minimize the surface area of the patch: * LocalSolrQueryRequest now supports setting a Principal * DocExpirationUpdateProcessorFactory now sets a Principal user of {{PKIAuthenticationPlugin.NODE_IS_USER}} (ie: {{'$'}} ) ** which is what PKI's {{generateToken()}} uses when {{isSolrThread()}} is true anyway I'm not a huge fan of this solution, but it's the best I've been able to come up with ... any concerns / alternative suggestions? > DocExpirationUpdateProcessorFactory does not work with BasicAuth > ---------------------------------------------------------------- > > Key: SOLR-12859 > URL: https://issues.apache.org/jira/browse/SOLR-12859 > Project: Solr > Issue Type: Bug > Affects Versions: 7.5 > Reporter: Varun Thacker > Priority: Major > Attachments: SOLR-12859.patch > > > I setup a cluster with basic auth and then wanted to use Solr's TTL feature ( > DocExpirationUpdateProcessorFactory ) to auto-delete documents. > > Turns out it doesn't work when Basic Auth is enabled. I get the following > stacktrace from the logs > {code:java} > 2018-10-12 22:06:38.967 ERROR (autoExpireDocs-42-thread-1) [ ] > o.a.s.u.p.DocExpirationUpdateProcessorFactory Runtime error in periodic > deletion of expired docs: Async exception during distributed update: Error > from server at http://192.168.0.8:8983/solr/gettingstarted_shard2_replica_n6: > require authentication > request: > http://192.168.0.8:8983/solr/gettingstarted_shard2_replica_n6/update?update.distrib=TOLEADER&distrib.from=http%3A%2F%2F192.168.0.8%3A8983%2Fsolr%2Fgettingstarted_shard1_replica_n2%2F&wt=javabin&version=2 > org.apache.solr.update.processor.DistributedUpdateProcessor$DistributedUpdatesAsyncException: > Async exception during distributed update: Error from server at > http://192.168.0.8:8983/solr/gettingstarted_shard2_replica_n6: require > authentication > request: > http://192.168.0.8:8983/solr/gettingstarted_shard2_replica_n6/update?update.distrib=TOLEADER&distrib.from=http%3A%2F%2F192.168.0.8%3A8983%2Fsolr%2Fgettingstarted_shard1_replica_n2%2F&wt=javabin&version=2 > at > org.apache.solr.update.processor.DistributedUpdateProcessor.doFinish(DistributedUpdateProcessor.java:964) > ~[solr-core-7.5.0.jar:7.5.0 b5bf70b7e32d7ddd9742cc821d471c5fabd4e3df - > jimczi - 2018-09-18 13:07:55] > at > org.apache.solr.update.processor.DistributedUpdateProcessor.finish(DistributedUpdateProcessor.java:1976) > ~[solr-core-7.5.0.jar:7.5.0 b5bf70b7e32d7ddd9742cc821d471c5fabd4e3df - > jimczi - 2018-09-18 13:07:55] > at > org.apache.solr.update.processor.LogUpdateProcessorFactory$LogUpdateProcessor.finish(LogUpdateProcessorFactory.java:182) > ~[solr-core-7.5.0.jar:7.5.0 b5bf70b7e32d7ddd9742cc821d471c5fabd4e3df - > jimczi - 2018-09-18 13:07:55] > at > org.apache.solr.update.processor.UpdateRequestProcessor.finish(UpdateRequestProcessor.java:80) > ~[solr-core-7.5.0.jar:7.5.0 b5bf70b7e32d7ddd9742cc821d471c5fabd4e3df - > jimczi - 2018-09-18 13:07:55] > at > org.apache.solr.update.processor.UpdateRequestProcessor.finish(UpdateRequestProcessor.java:80) > ~[solr-core-7.5.0.jar:7.5.0 b5bf70b7e32d7ddd9742cc821d471c5fabd4e3df - > jimczi - 2018-09-18 13:07:55] > at > org.apache.solr.update.processor.UpdateRequestProcessor.finish(UpdateRequestProcessor.java:80) > ~[solr-core-7.5.0.jar:7.5.0 b5bf70b7e32d7ddd9742cc821d471c5fabd4e3df - > jimczi - 2018-09-18 13:07:55] > at > org.apache.solr.update.processor.UpdateRequestProcessor.finish(UpdateRequestProcessor.java:80) > ~[solr-core-7.5.0.jar:7.5.0 b5bf70b7e32d7ddd9742cc821d471c5fabd4e3df - > jimczi - 2018-09-18 13:07:55] > at > org.apache.solr.update.processor.UpdateRequestProcessor.finish(UpdateRequestProcessor.java:80) > ~[solr-core-7.5.0.jar:7.5.0 b5bf70b7e32d7ddd9742cc821d471c5fabd4e3df - > jimczi - 2018-09-18 13:07:55] > at > org.apache.solr.update.processor.UpdateRequestProcessor.finish(UpdateRequestProcessor.java:80) > ~[solr-core-7.5.0.jar:7.5.0 b5bf70b7e32d7ddd9742cc821d471c5fabd4e3df - > jimczi - 2018-09-18 13:07:55] > at > org.apache.solr.update.processor.UpdateRequestProcessor.finish(UpdateRequestProcessor.java:80) > ~[solr-core-7.5.0.jar:7.5.0 b5bf70b7e32d7ddd9742cc821d471c5fabd4e3df - > jimczi - 2018-09-18 13:07:55] > at > org.apache.solr.update.processor.UpdateRequestProcessor.finish(UpdateRequestProcessor.java:80) > ~[solr-core-7.5.0.jar:7.5.0 b5bf70b7e32d7ddd9742cc821d471c5fabd4e3df - > jimczi - 2018-09-18 13:07:55] > at > org.apache.solr.update.processor.UpdateRequestProcessor.finish(UpdateRequestProcessor.java:80) > ~[solr-core-7.5.0.jar:7.5.0 b5bf70b7e32d7ddd9742cc821d471c5fabd4e3df - > jimczi - 2018-09-18 13:07:55] > at > org.apache.solr.update.processor.UpdateRequestProcessor.finish(UpdateRequestProcessor.java:80) > ~[solr-core-7.5.0.jar:7.5.0 b5bf70b7e32d7ddd9742cc821d471c5fabd4e3df - > jimczi - 2018-09-18 13:07:55] > at > org.apache.solr.update.processor.UpdateRequestProcessor.finish(UpdateRequestProcessor.java:80) > ~[solr-core-7.5.0.jar:7.5.0 b5bf70b7e32d7ddd9742cc821d471c5fabd4e3df - > jimczi - 2018-09-18 13:07:55] > at > org.apache.solr.update.processor.DocExpirationUpdateProcessorFactory$DeleteExpiredDocsRunnable.run(DocExpirationUpdateProcessorFactory.java:419) > [solr-core-7.5.0.jar:7.5.0 b5bf70b7e32d7ddd9742cc821d471c5fabd4e3df - jimczi > - 2018-09-18 13:07:55] > at > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) > [?:1.8.0_112] > at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) > [?:1.8.0_112] > at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) > [?:1.8.0_112] > at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) > [?:1.8.0_112] > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) > [?:1.8.0_112] > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > [?:1.8.0_112] > at java.lang.Thread.run(Thread.java:745) [?:1.8.0_112]{code} > -- 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