Hi Mark Miller It's great that you have fixed the bug. By the way,there is another point i want to remind you which I posted it before.I am just posting it again. Please check it again.whether is the autoCreated check here is fit?
IAfter I create a new core with explicite shard and coreNodeName successfully when I fixed the bug,I can not create a replica for above new core also with explicite coreNodeName and the same shard and collection ,the Request url as following: http://10.7.23.122:8080/solr/admin/cores?action=CREATE&name=Test1&shard=Test&collection.configName=myconf&schema=schema.xml&config=solrconfigLocal_default.xml&collection=defaultcol&coreNodeName=Test1 It responses an error: <response> <lst name="responseHeader"> <int name="status">400</int> <int name="QTime">29</int> </lst> <lst name="error"> <str name="msg">Error CREATEing SolrCore 'Test1': Test1 is removed</str> <int name="code">400</int> </lst> </response> I find out that in the src class in org.apache.solr.cloud.ZkController line 1369~ 1384: As the code says,when I indicate a coreNodeName and collection explicitly,it goes to check a 'autoCreated' property of the Collection which I have already created. My question :Why does it need to check the 'autoCreated' property,any jira about this 'autoCreated' property? How can I make through the check? [1]--------------------------- ---------------------------------------------------------------------------------- try { if(cd.getCloudDescriptor().getCollectionName() !=null && cd.getCloudDescriptor().getCoreNodeName() != null ) { //we were already registered if(zkStateReader.getClusterState().hasCollection(cd.getCloudDescriptor().getCollectionName())){ DocCollection coll = zkStateReader.getClusterState().getCollection(cd.getCloudDescriptor().getCollectionName()); if(!"true".equals(coll.getStr("autoCreated"))){ Slice slice = coll.getSlice(cd.getCloudDescriptor().getShardId()); if(slice != null){ if(slice.getReplica(cd.getCloudDescriptor().getCoreNodeName()) == null) { log.info("core_removed This core is removed from ZK"); throw new SolrException(ErrorCode.NOT_FOUND,coreNodeName +" is removed"); } } } } } -------------------------------------------------------------------------------------------------------------- 2013/12/27 YouPeng Yang <yypvsxf19870...@gmail.com> > Hi Mark > > I have filed a jira about the NPE: > https://issues.apache.org/jira/browse/SOLR-5580 > > > 2013/12/27 YouPeng Yang <yypvsxf19870...@gmail.com> > >> Hi Mark. >> >> Thanks for your reply. >> >> I will file a JIRA issue about the NPE. >> >> By the way,would you look through the Question 2. After I create a new >> core with explicite shard and coreNodeName successfully,I can not create a >> replica for above new core also with explicite coreNodeName and the same >> shard and collection >> Request url as following: >> >> http://10.7.23.122:8080/solr/admin/cores?action=CREATE&name=Test1&shard=Test&collection.configName=myconf&schema=schema.xml&config=solrconfigLocal_default.xml&collection=defaultcol&coreNodeName=Test1 >> >> It responses an error: >> >> <response> >> <lst name="responseHeader"> >> <int name="status">400</int> >> <int name="QTime">29</int> >> </lst> >> <lst name="error"> >> <str name="msg">Error CREATEing SolrCore 'Test1': Test1 is >> removed</str> >> <int name="code">400</int> >> </lst> >> </response> >> >> I find out that in the src class in org.apache.solr.cloud. >> ZkController line 1369~ 1384: >> As the code says,when I indicate a coreNodeName and collection >> explicitly,it goes to check a 'autoCreated' property of the Collection >> which I have already created. >> >> My question :Why does it need to check the 'autoCreated' property,any >> jira about this 'autoCreated' property? How can I make through the check? >> >> >> [1]------------------------------------------------------------------------------------------------------------- >> try { >> if(cd.getCloudDescriptor().getCollectionName() !=null && >> cd.getCloudDescriptor().getCoreNodeName() != null ) { >> //we were already registered >> >> >> >> if(zkStateReader.getClusterState().hasCollection(cd.getCloudDescriptor().getCollectionName())){ >> DocCollection coll = >> >> >> zkStateReader.getClusterState().getCollection(cd.getCloudDescriptor().getCollectionName()); >> if(!"true".equals(coll.getStr("autoCreated"))){ >> Slice slice = >> coll.getSlice(cd.getCloudDescriptor().getShardId()); >> if(slice != null){ >> >> if(slice.getReplica(cd.getCloudDescriptor().getCoreNodeName()) >> == null) { >> log.info("core_removed This core is removed from ZK"); >> throw new SolrException(ErrorCode.NOT_FOUND,coreNodeName +" >> is removed"); >> } >> } >> } >> } >> } >> >> >> -------------------------------------------------------------------------------------------------------------- >> >> >> Regards >> >> >> 2013/12/27 Mark Miller <markrmil...@gmail.com> >> >>> If you are seeing an NPE there, sounds like you are on to something. >>> Please file a JIRA issue. >>> >>> - Mark >>> >>> > On Dec 26, 2013, at 1:29 AM, YouPeng Yang <yypvsxf19870...@gmail.com> >>> wrote: >>> > >>> > Hi >>> > Merry Christmas. >>> > >>> > Before this mail,I am in trouble with a weird problem for a few days >>> > when to create a new core with both explicite shard and coreNodeName. >>> And I >>> > have posted a few mails in the mailist,no one ever gives any >>> > suggestions,maybe they did not encounter the same problem. >>> > I have to go through the srcs to check out the reason. Thanks god, I >>> find >>> > it. The reason to the problem,maybe be a bug, so I would like to >>> report it >>> > hoping to get your endorsement and confirmation. >>> > >>> > >>> > In class org.apache.solr.cloud.Overseer the Line 360: >>> > --------------------------------------------------------------------- >>> > if (sliceName !=null && collectionExists && >>> > !"true".equals(state.getCollection(collection).getStr("autoCreated"))) >>> { >>> > Slice slice = state.getSlice(collection, sliceName); >>> > if (slice.getReplica(coreNodeName) == null) { >>> > log.info("core_deleted . Just return"); >>> > return state; >>> > } >>> > } >>> > --------------------------------------------------------------------- >>> > the slice needs to be checked null .because I create a new core with >>> both >>> > explicite shard and coreNodeName, the state.getSlice(collection, >>> > sliceName) may return a null.So it needs to be checked ,or there will >>> be >>> > an NullpointException >>> > --------------------------------------------------------------------- >>> > if (sliceName !=null && collectionExists && >>> > !"true".equals(state.getCollection(collection).getStr("autoCreated"))) >>> { >>> > Slice slice = state.getSlice(collection, sliceName); >>> > if (*slice != null &&* slice.getReplica(coreNodeName) == >>> null) { >>> > log.info("core_deleted . Just return"); >>> > return state; >>> > } >>> > } >>> > --------------------------------------------------------------------- >>> > >>> > *Querstion 1*: Is this OK with the whole solr project,I have no aware >>> > about the influences about the change,as right now ,it goes right. >>> Please >>> > make confirm about this. >>> > >>> > After I fixed this prolem,I can create a core with the request: >>> > http://10.7.23.122:8080/solr/admin/cores?action=CREATE&name=Test& >>> > *shard=Test* >>> > >>> &collection.configName=myconf&schema=schema.xml&config=solrconfigLocal_default.xml&collection=defaultcol& >>> > *coreNodeName=Test* >>> > >>> > However when I create a replica within the same shard Test: >>> > http://10.7.23.122:8080/solr/admin/cores?action=CREATE&*name=Test1*& >>> > *shard=Test* >>> > >>> &collection.configName=myconf&schema=schema.xml&config=solrconfigLocal_default.xml&collection=defaultcol& >>> > *coreNodeName=Test1* >>> > >>> > It response an error: >>> > <response> >>> > <lst name="responseHeader"> >>> > <int name="status">400</int> >>> > <int name="QTime">29</int> >>> > </lst> >>> > <lst name="error"> >>> > <str name="msg">Error CREATEing SolrCore 'Test1': Test1 is >>> > removed</str> >>> > <int name="code">400</int> >>> > </lst> >>> > </response> >>> > >>> > I aslo find the reason the in the class >>> org.apache.solr.cloud.ZkController >>> > line 1369~ 1384[1] >>> > As the src here,it needs to check the autoCreated within an existing >>> > collection >>> > when the coreNodeName and shard were assigned manully. the autoCreated >>> > property of a collection is not equal with true, it throws an exeption. >>> > >>> > *Question2*: Why does it need to check the 'autoCreated', and how >>> could >>> > I go through this check, or Is this another bug? >>> > >>> > >>> > >>> > >>> > >>> [1]------------------------------------------------------------------------------------------------------------- >>> > try { >>> > if(cd.getCloudDescriptor().getCollectionName() !=null && >>> > cd.getCloudDescriptor().getCoreNodeName() != null ) { >>> > //we were already registered >>> > >>> > >>> if(zkStateReader.getClusterState().hasCollection(cd.getCloudDescriptor().getCollectionName())){ >>> > DocCollection coll = >>> > >>> zkStateReader.getClusterState().getCollection(cd.getCloudDescriptor().getCollectionName()); >>> > if(!"true".equals(coll.getStr("autoCreated"))){ >>> > Slice slice = >>> > coll.getSlice(cd.getCloudDescriptor().getShardId()); >>> > if(slice != null){ >>> > >>> if(slice.getReplica(cd.getCloudDescriptor().getCoreNodeName()) >>> > == null) { >>> > log.info("core_removed This core is removed from ZK"); >>> > throw new SolrException(ErrorCode.NOT_FOUND,coreNodeName >>> +" >>> > is removed"); >>> > } >>> > } >>> > } >>> > } >>> > } >>> > >>> -------------------------------------------------------------------------------------------------------------- >>> >> >> >