Thanks - that is more bad code that needs to be removed. I'll reopen that issue and add to it.
- Mark On Sun, Dec 29, 2013 at 8:56 AM, YouPeng Yang <yypvsxf19870...@gmail.com>wrote: > 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"); > >>> > } > >>> > } > >>> > } > >>> > } > >>> > } > >>> > > >>> > -------------------------------------------------------------------------------------------------------------- > >>> > >> > >> > > > -- - Mark