Hi Renaud,

I apologize for a typo. I have the jars in directory called "lib" instead of 
"Lib".(Mistyped while I posted).

I have also added the Encrypted codec Jar to the directory  -  
[$SolrDir]\server\solr-webapp\webapp\WEB-INF\lib  and all of a sudden it seems 
to be working fine now.

I don’t really understand this behavior of Solr as per Solr wiki all external 
jars should be in [Solr_Core\ instance Dir.]\lib and when I check logs indeed 
it is loading the jar from this directory.

INFO  (coreLoadExecutor-6-thread-1) [   ] o.a.s.c.SolrResourceLoader new 
SolrResourceLoader for directory: 'C:\solr-6.0.0\solr-6.0.0\server\solr\demo'
1190 INFO  (coreLoadExecutor-6-thread-2) [   ] o.a.s.c.SolrResourceLoader new 
SolrResourceLoader for directory: 'C:\solr-6.0.0\solr-6.0.0\server\solr\test'
1190 INFO  (coreLoadExecutor-6-thread-1) [   ] o.a.s.c.SolrResourceLoader JNDI 
not configured for solr (NoInitialContextEx)
1190 INFO  (coreLoadExecutor-6-thread-2) [   ] o.a.s.c.SolrResourceLoader JNDI 
not configured for solr (NoInitialContextEx)
1190 INFO  (coreLoadExecutor-6-thread-1) [   ] o.a.s.c.SolrResourceLoader using 
system property solr.solr.home: C:\solr-6.0.0\solr-6.0.0\server\solr
1190 INFO  (coreLoadExecutor-6-thread-2) [   ] o.a.s.c.SolrResourceLoader using 
system property solr.solr.home: C:\solr-6.0.0\solr-6.0.0\server\solr
1191 INFO  (coreLoadExecutor-6-thread-2) [   ] o.a.s.c.SolrResourceLoader 
Adding 
'file:/C:/solr-6.0.0/solr-6.0.0/server/solr/test/lib/SecureCodec-SecureCodecSNAPSHOT.jar'
 to classloader
1206 INFO  (main) [   ] o.e.j.s.h.ContextHandler Started 
o.e.j.w.WebAppContext@a67c67e{/solr,file:///C:/solr-6.0.0/solr-6.0.0/server/solr-webapp/webapp/,AVAILABLE}{C:\solr-6.0.0\solr-6.0.0\server/solr-webapp/webapp

After Indexing I get   _6_EncryptedLucene50_0.doc ; _6_EncryptedLucene50_0.Pos 
;  _6_EncryptedLucene50_0.Tim ; _6_EncryptedLucene50_0.Tip etc. so I assume 
Solr is working fine and performing indexing with Encrypted codec.


build lucene/solr trunk and applied the latest patch to the Branch 6_x and 
after compiling all seems to be working fine now.


Thanks,
Mohit






-----Original Message-----
From: Renaud Delbru [mailto:renaud@siren.solutions] 
Sent: Tuesday, June 21, 2016 11:39 AM
To: solr-user@lucene.apache.org
Subject: Re: Encryption to Solr indexes – Using Custom Codec

Hi,

maybe it is the way you created the jar ? Why not applying the patch to 
lucene/solr trunk and use ant jar instead to get the codecs jar created for you 
?
Also, I think the directory where you put the jars should be called "lib" 
instead of "Lib".
you can try also to use the lib directives in your solrconfig.xml [1]

[1]
https://cwiki.apache.org/confluence/display/solr/Lib+Directives+in+SolrConfig

--
Renaud Delbru

On 20/06/16 15:42, Sidana, Mohit wrote:
> Hello,
>
> As Part of my studies I am exploring the solutions which can be used 
> for Lucene/Solr Index encryption.
>
> I found the patch open on Apache JIRA- Codec for index-level 
> encryption <https://issues.apache.org/jira/browse/LUCENE-6966>(LUCENE-6966).
> https://issues.apache.org/jira/browse/LUCENE-6966 and I am currently 
> trying to test this Custom codec with Solr to perform secure search 
> over some sensitive records.
>
> I've decided to follow the path described in Solr wiki, setting up 
> Simple Text Codec and further tried to use Encrypted codec Source.
>
> *Here are the additional details.*
>
> I've created a basic jar file out of this source code (Build it as a 
> jar from Eclipse using Maven Plugin).
>
> The Solr installation I'm using to test this is the Solr 6.0.0 
> unzipped, and started via its embedded Jetty server and using the single core.
>
> I've placed my jar with the codec in [My_Core\ instance Dir.]\ Lib
>
> In:
>
> [$SolrDir]\Solr\ My_Core \conf\*solrconfig.xml*
>
> I've added the following lines:
>
> |<lib dir="./lib/" regex=".*\.jar"/> |||
>
> |<codecFactory class="solr.SchemaCodecFactory"/>|
>
> Then in the *schema.xml* file, I've declared some field and field 
> Types that should use this codec:
>
> |<field name="City" type="strings"/>|||
>
> |  <field name="Country" type="strings"/>|
>
> |  <field name="Name" type="strings"/>|
>
> |  <field name="Payment" type="strings"/>|
>
> |  <field name="Price" type="tlongs"/>|
>
> |  <field name="Product" type="strings"/>|
>
> |  <field name="State" type="strings"/>|
>
> ||
>
> |<!-- set the per field posting format as below -->|
>
> |<fieldType name="strings" class="solr.StrField" sortMissingLast="true"
> docValues="true" multiValued="true" 
> postingsFormat="EncryptedLucene50"/>|
>
> |<fieldType name="tlongs" class="solr.TrieLongField"
> positionIncrementGap="0" docValues="true" multiValued="true"
> precisionStep="8" postingsFormat="EncryptedLucene50"/>|
>
> I'm pretty sure I've followed all the steps described in Solr Wiki; 
> however, when I actually try to use custom codec implementation (named 
> "Encrypted Codec") to index some sample CSV data using simple post 
> tool
>
> java -Dtype=text/csv -Durl=http://localhost:8983/solr/My_Core /update 
> -jar  post.jar  Sales.csv
>
> and I have also tried doing the same with SolrJ but I have faced the 
> same error.
>
> SolrClient _server_=
> *new*HttpSolrClient("http://localhost:8983/solr/My_Core ");
>
>                SolrInputDocument doc= *new*SolrInputDocument();
>
> doc.addField("id", "1234");
>
> doc.addField("name", "A lovely summer holiday");
>
> *try*{
>
> server.add(doc);
>
> server.commit();
>
>                       System.*/out/*.println("Document added!");
>
>                } *catch*(SolrServerException | IOException e) {
>
> e.printStackTrace();
>
>                }
>
>         }
>
> }
>
> I get the attached errors in Solr log.
>
> org.apache.solr.common.SolrException: Exception writing document id
> b3e01ada-d0f1-4ddf-ad6a-2828bfe619a3 to the index; possible analysis error.
>
>                  at
> org.apache.solr.update.DirectUpdateHandler2.addDoc(DirectUpdateHandler
> 2.java:181)
>
>                  at
> org.apache.solr.update.processor.RunUpdateProcessor.processAdd(RunUpda
> teProcessorFactory.java:68)
>
>                  at
> org.apache.solr.update.processor.UpdateRequestProcessor.processAdd(Upd
> ateRequestProcessor.java:48)
>
>                  at
> org.apache.solr.update.processor.AddSchemaFieldsUpdateProcessorFactory
> $AddSchemaFieldsUpdateProcessor.processAdd(AddSchemaFieldsUpdateProces
> sorFactory.java:335)
>
>                  at
> org.apache.solr.update.processor.UpdateRequestProcessor.processAdd(Upd
> ateRequestProcessor.java:48)
>
>                  at
> org.apache.solr.update.processor.FieldMutatingUpdateProcessor.processA
> dd(FieldMutatingUpdateProcessor.java:117)
>
>                  at
> org.apache.solr.update.processor.UpdateRequestProcessor.processAdd(Upd
> ateRequestProcessor.java:48)
>
>                  at
> org.apache.solr.update.processor.FieldMutatingUpdateProcessor.processA
> dd(FieldMutatingUpdateProcessor.java:117)
>
>                  at
> org.apache.solr.update.processor.UpdateRequestProcessor.processAdd(Upd
> ateRequestProcessor.java:48)
>
>                  at
> org.apache.solr.update.processor.FieldMutatingUpdateProcessor.processA
> dd(FieldMutatingUpdateProcessor.java:117)
>
>                  at
> org.apache.solr.update.processor.UpdateRequestProcessor.processAdd(Upd
> ateRequestProcessor.java:48)
>
>                  at
> org.apache.solr.update.processor.FieldMutatingUpdateProcessor.processA
> dd(FieldMutatingUpdateProcessor.java:117)
>
>                  at
> org.apache.solr.update.processor.UpdateRequestProcessor.processAdd(Upd
> ateRequestProcessor.java:48)
>
>                  at
> org.apache.solr.update.processor.FieldNameMutatingUpdateProcessorFacto
> ry$1.processAdd(FieldNameMutatingUpdateProcessorFactory.java:74)
>
>                  at
> org.apache.solr.update.processor.UpdateRequestProcessor.processAdd(Upd
> ateRequestProcessor.java:48)
>
>                  at
> org.apache.solr.update.processor.FieldMutatingUpdateProcessor.processA
> dd(FieldMutatingUpdateProcessor.java:117)
>
>                  at
> org.apache.solr.update.processor.UpdateRequestProcessor.processAdd(Upd
> ateRequestProcessor.java:48)
>
>                  at
> org.apache.solr.update.processor.DistributedUpdateProcessor.doLocalAdd
> (DistributedUpdateProcessor.java:936)
>
>                  at
> org.apache.solr.update.processor.DistributedUpdateProcessor.versionAdd
> (DistributedUpdateProcessor.java:1091)
>
>                  at
> org.apache.solr.update.processor.DistributedUpdateProcessor.processAdd
> (DistributedUpdateProcessor.java:714)
>
>                  at
> org.apache.solr.update.processor.LogUpdateProcessorFactory$LogUpdatePr
> ocessor.processAdd(LogUpdateProcessorFactory.java:103)
>
>                  at
> org.apache.solr.update.processor.UpdateRequestProcessor.processAdd(Upd
> ateRequestProcessor.java:48)
>
>                  at
> org.apache.solr.update.processor.AbstractDefaultValueUpdateProcessorFa
> ctory$DefaultValueUpdateProcessor.processAdd(AbstractDefaultValueUpdat
> eProcessorFactory.java:93)
>
>                  at
> org.apache.solr.handler.loader.CSVLoaderBase.doAdd(CSVLoaderBase.java:
> 391)
>
>                  at
> org.apache.solr.handler.loader.SingleThreadedCSVLoader.addDoc(CSVLoade
> r.java:43)
>
>                  at
> org.apache.solr.handler.loader.CSVLoaderBase.load(CSVLoaderBase.java:3
> 60)
>
>                  at
> org.apache.solr.handler.loader.CSVLoader.load(CSVLoader.java:30)
>
>                  at
> org.apache.solr.handler.UpdateRequestHandler$1.load(UpdateRequestHandl
> er.java:94)
>
>                  at
> org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(Con
> tentStreamHandlerBase.java:69)
>
>                  at
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandle
> rBase.java:155)
>
>                  at
> org.apache.solr.core.SolrCore.execute(SolrCore.java:2033)
>
>                  at
> org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:652)
>
>                  at
> org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:460)
>
>                  at
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter
> .java:229)
>
>                  at
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter
> .java:184)
>
>                  at
> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletH
> andler.java:1668)
>
>                  at
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:
> 581)
>
>                  at
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.ja
> va:143)
>
>                  at
> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java
> :548)
>
>                  at
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandle
> r.java:226)
>
>                  at
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandle
> r.java:1160)
>
>                  at
> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:5
> 11)
>
>                  at
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler
> .java:185)
>
>                  at
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler
> .java:1092)
>
>                  at
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.ja
> va:141)
>
>                  at
> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(Conte
> xtHandlerCollection.java:213)
>
>                  at
> org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerColle
> ction.java:119)
>
>                  at
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.
> java:134)
>
>                  at 
> org.eclipse.jetty.server.Server.handle(Server.java:518)
>
>                  at
> org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:308)
>
>                  at
> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java
> :244)
>
>                  at
> org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(Abstrac
> tConnection.java:273)
>
>                  at
> org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
>
>                  at
> org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint
> .java:93)
>
>                  at
> org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAn
> dRun(ExecuteProduceConsume.java:246)
>
>                  at
> org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(Execu
> teProduceConsume.java:156)
>
>                  at
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool
> .java:654)
>
>                  at
> org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.
> java:572)
>
>                  at java.lang.Thread.run(Thread.java:745)
>
> Caused by: org.apache.lucene.store.AlreadyClosedException: this 
> IndexWriter is closed
>
>                  at
> org.apache.lucene.index.IndexWriter.ensureOpen(IndexWriter.java:724)
>
>                  at
> org.apache.lucene.index.IndexWriter.ensureOpen(IndexWriter.java:738)
>
>                  at
> org.apache.lucene.index.IndexWriter.updateDocument(IndexWriter.java:14
> 88)
>
>                  at
> org.apache.solr.update.DirectUpdateHandler2.doNormalUpdate(DirectUpdat
> eHandler2.java:282)
>
>                  at
> org.apache.solr.update.DirectUpdateHandler2.addDoc0(DirectUpdateHandle
> r2.java:214)
>
>                  at
> org.apache.solr.update.DirectUpdateHandler2.addDoc(DirectUpdateHandler
> 2.java:169)
>
>                  ... 58 more
>
> Caused by: java.lang.NoClassDefFoundError:
> org/apache/lucene/codecs/encrypted/DummyCipherFactory
>
>                  at
> org.apache.lucene.codecs.encrypted.DummyEncryptedLucene60Codec$DummyEn
> cryptedLucene50PostingsFormat.getCipherFactory(DummyEncryptedLucene60C
> odec.java:67)
>
>                  at
> org.apache.lucene.codecs.encrypted.EncryptedLucene50PostingsFormat.fie
> ldsConsumer(EncryptedLucene50PostingsFormat.java:479)
>
>                  at
> org.apache.lucene.codecs.perfield.PerFieldPostingsFormat$FieldsWriter.
> write(PerFieldPostingsFormat.java:196)
>
>                  at
> org.apache.lucene.index.FreqProxTermsWriter.flush(FreqProxTermsWriter.
> java:107)
>
>                  at
> org.apache.lucene.index.DefaultIndexingChain.flush(DefaultIndexingChai
> n.java:134)
>
>                  at
> org.apache.lucene.index.DocumentsWriterPerThread.flush(DocumentsWriter
> PerThread.java:423)
>
>                  at
> org.apache.lucene.index.DocumentsWriter.doFlush(DocumentsWriter.java:5
> 02)
>
>                  at
> org.apache.lucene.index.DocumentsWriter.flushAllThreads(DocumentsWrite
> r.java:614)
>
>                  at
> org.apache.lucene.index.IndexWriter.prepareCommitInternal(IndexWriter.
> java:2815)
>
>                  at
> org.apache.lucene.index.IndexWriter.commitInternal(IndexWriter.java:29
> 89)
>
>                  at
> org.apache.lucene.index.IndexWriter.commit(IndexWriter.java:2956)
>
>                  at
> org.apache.solr.update.DirectUpdateHandler2.commit(DirectUpdateHandler
> 2.java:619)
>
>                  at
> org.apache.solr.update.UpdateLog$LogReplayer.doReplay(UpdateLog.java:1
> 453)
>
>                  at
> org.apache.solr.update.UpdateLog$LogReplayer.run(UpdateLog.java:1256)
>
>                  at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511
> )
>
>                  at 
> java.util.concurrent.FutureTask.run(FutureTask.java:266)
>
>                  at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511
> )
>
>                  at 
> java.util.concurrent.FutureTask.run(FutureTask.java:266)
>
>                  at
> org.apache.solr.common.util.ExecutorUtil$MDCAwareThreadPoolExecutor.la
> mbda$execute$0(ExecutorUtil.java:229)
>
>                  at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.j
> ava:1142)
>
>                  at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.
> java:617)
>
>                  ... 1 more
>
> Caused by: java.lang.ClassNotFoundException:
> org.apache.lucene.codecs.encrypted.DummyCipherFactory
>
>                  at
> java.net.URLClassLoader.findClass(URLClassLoader.java:381)
>
>                  at 
> java.lang.ClassLoader.loadClass(ClassLoader.java:424)
>
>                  at
> java.net.FactoryURLClassLoader.loadClass(URLClassLoader.java:814)
>
>                  at 
> java.lang.ClassLoader.loadClass(ClassLoader.java:357)
>
>                  ... 22 more
>
>  From the output I assume that Solr is not picking up the jar with 
> this custom codec, and I don't get why?
>
> What I find strange is that, I have also tried to run this codec with 
> Lucene and eclipse by writing some code for indexing and searching and 
> same codec jar is working just fine.
>
>                       System.*/out/*.println("Indexing to directory 
> '"+
> indexPath+ "'...");
>
>                       Directory dir=
> FSDirectory./open/(Paths./get/(indexPath));
>
>                       Analyzer analyzer= *new*StandardAnalyzer();
>
>                       IndexWriterConfig iwc= 
> *new*IndexWriterConfig(analyzer);
>
> // set encrypted codec //This encrypted Codec is being used for 
> indexing
>
> iwc.setCodec(*new*DummyEncryptedLucene60Codec());
>
> *if*(create) {
>
> // Create a new index in the directory, removing any
>
> // previously indexed documents:
>
> iwc.setOpenMode(OpenMode.*/CREATE/*);
>
>                       } *else*{
>
> // Add new documents to an existing index:
>
> iwc.setOpenMode(OpenMode.*/CREATE_OR_APPEND/*);
>
>                       }
>
>                       IndexWriter writer= *new*IndexWriter(dir, iwc);
>
> /indexDocs/(writer, docDir);
>
> writer.close();
>
> I'm guessing that As Solr uses Java SPI options to load this codec 
> which loads things differently, and there's something missing...?
>
> My question is, what might I be doing wrong here or  what's missing so 
> that codec jar can be picked up by Solr?
>
> Thanks.
>

Reply via email to