You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-user@lucene.apache.org by Dean Thompson <dt...@mspoke.com> on 2008/12/04 21:38:06 UTC

Is there a clean way to determine whether a core exists?

The ping command gives me a 500 status if the core exists, or a 404 if  
it doesn't.  For example, when I hit

     http://doom:8983/solr/content_item_representations_20081201/admin/ping

I see

     HTTP ERROR: 500

     INTERNAL_SERVER_ERROR

     RequestURI=/solr/admin/ping

     Powered by Jetty://

(Obviously I'm using Jetty.  Moving to Tomcat is on our list.)

I could depend on this behavior, but that seems ugly, so I decided to  
try a "probe query" instead.

I am using the Solrj client library.  Unfortunately, for core non- 
existence or any other problem, Solrj uses an unhelpful catch-all  
exception:

     /** Exception to catch all types of communication / parsing  
issues associated with talking to SOLR
       *
       * @version $Id: SolrServerException.java 555343 2007-07-11  
17:46:25Z hossman $
       * @since solr 1.3
       */
     public class SolrServerException extends Exception {
         ...
     }

So I have wound up, thus far, with the following code:

     private boolean solrCoreExists(String url)
         throws SolrException, MalformedURLException,  
SolrServerException
     {
         try {
             SolrQuery solrQuery = new SolrQuery();
             solrQuery.setQuery("xyzzy=plugh");
             new CommonsHttpSolrServer(url).query(solrQuery);
             return true;
         } catch (SolrServerException e) {
             if (e.getCause() != null &&  
e.getCause().getMessage().startsWith("Not Found")) {
                 return false;
             } else {
                 throw e;
             }
         }
     }

Hopefully there's a better solution?

Dean


Re: Is there a clean way to determine whether a core exists?

Posted by Dean Thompson <dt...@mspoke.com>.
Wow -- thanks for all the help!!  With everyone's help, I did end up  
in a *much* better place:

     private static boolean solrCoreExists(String coreName, String  
solrRootUrl) throws IOException, SolrServerException
     {
         CommonsHttpSolrServer adminServer = new  
CommonsHttpSolrServer(solrRootUrl);
         CoreAdminResponse status =  
CoreAdminRequest.getStatus(coreName, adminServer);

         return status.getCoreStatus(coreName).get("instanceDir") !=  
null;
     }


On Dec 5, 2008, at 1:09 AM, Ryan McKinley wrote:

> yes:
> http://localhost:8983/solr/admin/cores?action=STATUS
>
> will give you a list of running cores.  However that is not easy to  
> check with a simple status != 404
>
> see:
> http://wiki.apache.org/solr/CoreAdmin
>
>
> On Dec 4, 2008, at 11:46 PM, Chris Hostetter wrote:
>
>>
>> : Subject: Is there a clean way to determine whether a core exists?
>>
>> doesn't the CoreAdminHandler's STATUS feature make this easy?
>>
>>
>>
>>
>> -Hoss
>>
>


Re: Is there a clean way to determine whether a core exists?

Posted by Ryan McKinley <ry...@gmail.com>.
yes:
http://localhost:8983/solr/admin/cores?action=STATUS

will give you a list of running cores.  However that is not easy to  
check with a simple status != 404

see:
http://wiki.apache.org/solr/CoreAdmin


On Dec 4, 2008, at 11:46 PM, Chris Hostetter wrote:

>
> : Subject: Is there a clean way to determine whether a core exists?
>
> doesn't the CoreAdminHandler's STATUS feature make this easy?
>
>
>
>
> -Hoss
>


Re: Is there a clean way to determine whether a core exists?

Posted by Noble Paul നോബിള്‍ नोब्ळ् <no...@gmail.com>.
SOLR-880 is an issue raised for the same

On Fri, Dec 5, 2008 at 10:16 AM, Chris Hostetter
<ho...@fucit.org> wrote:
>
> : Subject: Is there a clean way to determine whether a core exists?
>
> doesn't the CoreAdminHandler's STATUS feature make this easy?
>
>
>
>
> -Hoss
>
>



-- 
--Noble Paul

Re: Is there a clean way to determine whether a core exists?

Posted by Chris Hostetter <ho...@fucit.org>.
: Subject: Is there a clean way to determine whether a core exists?

doesn't the CoreAdminHandler's STATUS feature make this easy?




-Hoss


Re: Is there a clean way to determine whether a core exists?

Posted by Ryan McKinley <ry...@gmail.com>.
On Dec 4, 2008, at 3:57 PM, Dean Thompson wrote:

> Thanks for the quick response, Ryan!
>
> Actually, my admin/ping call gives me a 404 if the core doesn't  
> exist, which seemed reasonable.  I get the 500 if the core *did*  
> exist.

aaah -- check what ping query you have configured and make sure that  
is a valid query.  If you use the example one and then change your  
schema it may be referencing fields that don't exist and give you the  
500


>
>
> Thanks for the suggestion of using the select URL, but that gives me:
>
> java.lang.NullPointerException
> 	at org.apache.solr.common.util.StrUtils.splitSmart(StrUtils.java:37)


This is a really stupid error we need to fix -- it should actually  
say: missing required parameter "q"
https://issues.apache.org/jira/browse/SOLR-435


ryan

Re: Is there a clean way to determine whether a core exists?

Posted by Dean Thompson <dt...@mspoke.com>.
Thanks for the quick response, Ryan!

Actually, my admin/ping call gives me a 404 if the core doesn't exist,  
which seemed reasonable.  I get the 500 if the core *did* exist.

Thanks for the suggestion of using the select URL, but that gives me:

HTTP ERROR: 500

null

java.lang.NullPointerException
	at org.apache.solr.common.util.StrUtils.splitSmart(StrUtils.java:37)
	at  
org.apache.solr.search.OldLuceneQParser.parse(LuceneQParserPlugin.java: 
104)
	at org.apache.solr.search.QParser.getQuery(QParser.java:88)
	at  
org 
.apache 
.solr.handler.component.QueryComponent.prepare(QueryComponent.java:82)
	at  
org 
.apache 
.solr 
.handler.component.SearchHandler.handleRequestBody(SearchHandler.java: 
148)
	at  
org 
.apache 
.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java: 
131)
	at org.apache.solr.core.SolrCore.execute(SolrCore.java:1204)
	at  
org 
.apache 
.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:303)
	at  
org 
.apache 
.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:232)
	at org.mortbay.jetty.servlet.ServletHandler 
$CachedChain.doFilter(ServletHandler.java:1089)
	at  
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365)
	at  
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java: 
216)
	at  
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
	at  
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java: 
405)
	at  
org 
.mortbay 
.jetty 
.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java: 
211)
	at  
org 
.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java: 
114)
	at  
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
	at org.mortbay.jetty.Server.handle(Server.java:285)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java: 
502)
	at org.mortbay.jetty.HttpConnection 
$RequestHandler.headerComplete(HttpConnection.java:821)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:513)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:208)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:378)
	at org.mortbay.jetty.bio.SocketConnector 
$Connection.run(SocketConnector.java:226)
	at org.mortbay.thread.BoundedThreadPool 
$PoolThread.run(BoundedThreadPool.java:442)

RequestURI=/solr/content_item_representations_20081201/select

On Dec 4, 2008, at 3:48 PM, Ryan McKinley wrote:

> http://doom:8983/solr/content_item_representations_20081201/select


Re: Is there a clean way to determine whether a core exists?

Posted by Ryan McKinley <ry...@gmail.com>.
what about just calling:
http://doom:8983/solr/content_item_representations_20081201/select

That should give you a 404 if it does not exist.

the admin stuff will behave funny if the core does not exist (perhaps  
you can file a JIRA issue for that)

ryan


On Dec 4, 2008, at 3:38 PM, Dean Thompson wrote:

> The ping command gives me a 500 status if the core exists, or a 404  
> if it doesn't.  For example, when I hit
>
>    http://doom:8983/solr/content_item_representations_20081201/admin/ping
>
> I see
>
>    HTTP ERROR: 500
>
>    INTERNAL_SERVER_ERROR
>
>    RequestURI=/solr/admin/ping
>
>    Powered by Jetty://
>
> (Obviously I'm using Jetty.  Moving to Tomcat is on our list.)
>
> I could depend on this behavior, but that seems ugly, so I decided  
> to try a "probe query" instead.
>
> I am using the Solrj client library.  Unfortunately, for core non- 
> existence or any other problem, Solrj uses an unhelpful catch-all  
> exception:
>
>    /** Exception to catch all types of communication / parsing  
> issues associated with talking to SOLR
>      *
>      * @version $Id: SolrServerException.java 555343 2007-07-11  
> 17:46:25Z hossman $
>      * @since solr 1.3
>      */
>    public class SolrServerException extends Exception {
>        ...
>    }
>
> So I have wound up, thus far, with the following code:
>
>    private boolean solrCoreExists(String url)
>        throws SolrException, MalformedURLException,  
> SolrServerException
>    {
>        try {
>            SolrQuery solrQuery = new SolrQuery();
>            solrQuery.setQuery("xyzzy=plugh");
>            new CommonsHttpSolrServer(url).query(solrQuery);
>            return true;
>        } catch (SolrServerException e) {
>            if (e.getCause() != null &&  
> e.getCause().getMessage().startsWith("Not Found")) {
>                return false;
>            } else {
>                throw e;
>            }
>        }
>    }
>
> Hopefully there's a better solution?
>
> Dean
>