Uploaded image for project: 'Solr'
  1. Solr
  2. SOLR-14268

Re-creating deleted Managed Stopwords lists results in error

    XMLWordPrintableJSON

Details

    Description

      Creating a Managed Stopwords list that has the same name as a previously deleted list results in an error if the core has been reloaded after deleting the list. Going through the same flow with Managed Synonyms doesn't result in this unexpected behaviour.

      On a newly started standalone Solr with the techproducts core:

      curl -X PUT -H 'Content-type:application/json' --data-binary \
      '{"class":"org.apache.solr.rest.schema.analysis.ManagedWordSetResource"}' \
      http://localhost:8983/solr/techproducts/schema/analysis/stopwords/testlist
      curl -X DELETE http://localhost:8983/solr/techproducts/schema/analysis/stopwords/testlist
      curl http://localhost:8983/solr/admin/cores?action=RELOAD\&core=techproducts
      curl -X PUT -H 'Content-type:application/json' --data-binary \
      '{"class":"org.apache.solr.rest.schema.analysis.ManagedWordSetResource"}' \
      http://localhost:8983/solr/techproducts/schema/analysis/stopwords/testlist
      

      The second PUT request results in a status 500 with error msg "java.util.LinkedHashMap cannot be cast to java.util.List".

      {
       "responseHeader":{
       "status":500,
       "QTime":2},
       "error":{
       "msg":"java.util.LinkedHashMap cannot be cast to java.util.List",
       "trace":"java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to java.util.List\r\n\tat org.apache.solr.rest.schema.analysis.ManagedWordSetResource.applyUpdatesToManagedData(ManagedWordSetResource.java:163)\r\n\tat org.apache.solr.rest.ManagedResource.doPut(ManagedResource.java:395)\r\n\tat org.apache.solr.rest.RestManager$ManagedEndpoint.put(RestManager.java:343)\r\n\tat org.restlet.resource.ServerResource.doHandle(ServerResource.java:447)\r\n\tat org.restlet.resource.ServerResource.doConditionalHandle(ServerResource.java:359)\r\n\tat org.restlet.resource.ServerResource.handle(ServerResource.java:1044)\r\n\tat org.restlet.resource.Finder.handle(Finder.java:236)\r\n\tat org.restlet.routing.Filter.doHandle(Filter.java:150)\r\n\tat org.restlet.routing.Filter.handle(Filter.java:197)\r\n\tat org.restlet.routing.Router.doHandle(Router.java:422)\r\n\tat org.restlet.routing.Router.handle(Router.java:639)\r\n\tat org.restlet.routing.Filter.doHandle(Filter.java:150)\r\n\tat org.restlet.routing.Filter.handle(Filter.java:197)\r\n\tat org.restlet.routing.Filter.doHandle(Filter.java:150)\r\n\tat org.restlet.routing.Filter.handle(Filter.java:197)\r\n\tat org.restlet.routing.Filter.doHandle(Filter.java:150)\r\n\tat org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:140)\r\n\tat org.restlet.routing.Filter.handle(Filter.java:197)\r\n\tat org.restlet.routing.Filter.doHandle(Filter.java:150)\r\n\tat org.restlet.routing.Filter.handle(Filter.java:197)\r\n\tat org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:202)\r\n\tat org.restlet.engine.application.ApplicationHelper.handle(ApplicationHelper.java:75)\r\n\tat org.restlet.Application.handle(Application.java:385)\r\n\tat org.restlet.routing.Filter.doHandle(Filter.java:150)\r\n\tat org.restlet.routing.Filter.handle(Filter.java:197)\r\n\tat org.restlet.routing.Router.doHandle(Router.java:422)\r\n\tat org.restlet.routing.Router.handle(Router.java:639)\r\n\tat org.restlet.routing.Filter.doHandle(Filter.java:150)\r\n\tat org.restlet.routing.Filter.handle(Filter.java:197)\r\n\tat org.restlet.routing.Router.doHandle(Router.java:422)\r\n\tat org.restlet.routing.Router.handle(Router.java:639)\r\n\tat org.restlet.routing.Filter.doHandle(Filter.java:150)\r\n\tat org.restlet.routing.Filter.handle(Filter.java:197)\r\n\tat org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:202)\r\n\tat org.restlet.Component.handle(Component.java:408)\r\n\tat org.restlet.Server.handle(Server.java:507)\r\n\tat org.restlet.engine.connector.ServerHelper.handle(ServerHelper.java:63)\r\n\tat org.restlet.engine.adapter.HttpServerHelper.handle(HttpServerHelper.java:143)\r\n\tat org.restlet.ext.servlet.ServerServlet.service(ServerServlet.java:1117)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:790)\r\n\tat org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:876)\r\n\tat org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:542)\r\n\tat org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)\r\n\tat org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:566)\r\n\tat org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)\r\n\tat org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)\r\n\tat org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1711)\r\n\tat org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)\r\n\tat org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1347)\r\n\tat org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)\r\n\tat org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:480)\r\n\tat org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1678)\r\n\tat org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)\r\n\tat org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1249)\r\n\tat org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)\r\n\tat org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:227)\r\n\tat org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:78)\r\n\tat org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:428)\r\n\tat org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:351)\r\n\tat org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1602)\r\n\tat org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:540)\r\n\tat org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)\r\n\tat org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)\r\n\tat org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)\r\n\tat org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)\r\n\tat org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1711)\r\n\tat org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)\r\n\tat org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1347)\r\n\tat org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)\r\n\tat org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:480)\r\n\tat org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1678)\r\n\tat org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)\r\n\tat org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1249)\r\n\tat org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)\r\n\tat org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:220)\r\n\tat org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:152)\r\n\tat org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)\r\n\tat org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:335)\r\n\tat org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)\r\n\tat org.eclipse.jetty.server.Server.handle(Server.java:505)\r\n\tat org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:370)\r\n\tat org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:267)\r\n\tat org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)\r\n\tat org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)\r\n\tat org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)\r\n\tat org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333)\r\n\tat org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310)\r\n\tat org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168)\r\n\tat org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126)\r\n\tat org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366)\r\n\tat org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:781)\r\n\tat org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:917)\r\n\tat java.lang.Thread.run(Unknown Source)\r\n",
       "code":500}}
      

      Similar requests for synonyms work fine, no matter how many times I repeat the CREATE/DELETE/RELOAD cycle:

      curl -X PUT -H 'Content-type:application/json' --data-binary \
      '{"class":"org.apache.solr.rest.schema.analysis.ManagedSynonymGraphFilterFactory$SynonymManager"}' \
      http://localhost:8983/solr/techproducts/schema/analysis/synonyms/testmap
      curl -X DELETE http://localhost:8983/solr/techproducts/schema/analysis/synonyms/testmap
      curl http://localhost:8983/solr/admin/cores?action=RELOAD\&core=techproducts
      curl -X PUT -H 'Content-type:application/json' --data-binary \
      '{"class":"org.apache.solr.rest.schema.analysis.ManagedSynonymGraphFilterFactory$SynonymManager"}' \
      http://localhost:8983/solr/techproducts/schema/analysis/synonyms/testmap 

      Reloading after creating the Stopwords list but not after deleting it works without error too on a fresh techproducts core (you'll have to remove the directory from disk and create the core again after running the previous commands).

      curl -X PUT -H 'Content-type:application/json' --data-binary \
      '{"class":"org.apache.solr.rest.schema.analysis.ManagedWordSetResource"}' \
      http://localhost:8983/solr/techproducts/schema/analysis/stopwords/testlist
      curl http://localhost:8983/solr/admin/cores?action=RELOAD\&core=techproducts
      curl -X DELETE http://localhost:8983/solr/techproducts/schema/analysis/stopwords/testlist
      curl -X PUT -H 'Content-type:application/json' --data-binary \
      '{"class":"org.apache.solr.rest.schema.analysis.ManagedWordSetResource"}' \
      http://localhost:8983/solr/techproducts/schema/analysis/stopwords/testlist
      

      And even curiouser, when doing a CREATE/DELETE for Stopwords, then a CREATE/DELETE for Synonyms, and only then a RELOAD of the core, the cycle can be completed twice. (Again, on a freshly created techproducts core.) Only the third attempt to create a list results in an error. Synonyms can still be created and deleted repeatedly after this.

      curl -X PUT -H 'Content-type:application/json' --data-binary \
      '{"class":"org.apache.solr.rest.schema.analysis.ManagedWordSetResource"}' \
      http://localhost:8983/solr/techproducts/schema/analysis/stopwords/testlist
      curl -X DELETE http://localhost:8983/solr/techproducts/schema/analysis/stopwords/testlist
      curl -X PUT -H 'Content-type:application/json' --data-binary \
      '{"class":"org.apache.solr.rest.schema.analysis.ManagedSynonymGraphFilterFactory$SynonymManager"}' \
      http://localhost:8983/solr/techproducts/schema/analysis/synonyms/testmap
      curl -X DELETE http://localhost:8983/solr/techproducts/schema/analysis/synonyms/testmap
      curl http://localhost:8983/solr/admin/cores?action=RELOAD\&core=techproducts
      curl -X PUT -H 'Content-type:application/json' --data-binary \
      '{"class":"org.apache.solr.rest.schema.analysis.ManagedWordSetResource"}' \
      http://localhost:8983/solr/techproducts/schema/analysis/stopwords/testlist
      curl -X DELETE http://localhost:8983/solr/techproducts/schema/analysis/stopwords/testlist
      curl -X PUT -H 'Content-type:application/json' --data-binary \
      '{"class":"org.apache.solr.rest.schema.analysis.ManagedSynonymGraphFilterFactory$SynonymManager"}' \
      http://localhost:8983/solr/techproducts/schema/analysis/synonyms/testmap
      curl -X DELETE http://localhost:8983/solr/techproducts/schema/analysis/synonyms/testmap
      curl http://localhost:8983/solr/admin/cores?action=RELOAD\&core=techproducts
      curl -X PUT -H 'Content-type:application/json' --data-binary \
      '{"class":"org.apache.solr.rest.schema.analysis.ManagedWordSetResource"}' \
      http://localhost:8983/solr/techproducts/schema/analysis/stopwords/testlist
      

      The same successes/errors occur when running each cycle against a different core if the cores share the same configset.

      Attachments

        Activity

          People

            Unassigned Unassigned
            thomascorthals Thomas Corthals
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated: