The very first thing I'd do is go to Solr 4.4. There have been
a lot of improvements in this code in the intervening 3
versions.

If the problem still occurs in 4.4, it'll get a lot more attention
than 4.1....

FWIW,
Erick


On Fri, Aug 9, 2013 at 7:32 PM, Greg Preston <gpres...@marinsoftware.com>wrote:

> Howdy,
>
> I'm trying to test shard splitting, and it's not working for me.  I've got
> a 4 node cloud with a single collection and 2 shards.
>
> I've indexed 170k small documents, and I'm using the compositeId router,
> with an internal "client id" as the shard key, with 4 distinct values
> across the data set.  For my testing, the values of the shard keys are 1
> through 4.  Before splitting, shard1 contains 100k docs (all of the docs
> for shard keys 1 and 4) and shard2 contains 70k docs (all of the docs for
> shard keys 2 and 3).
>
> In prod, we're going to have thousands of unique shard keys, but for now,
> I'm testing at a smaller scale.  I attempt to split shard2 with
>
> http://host0:8983/solr/admin/collections?action=SPLITSHARD&collection=coll&shard=shard2
>
> I understand the shard splitting is on hash range, not document count, and
> it shouldn't split up documents within a single shard key, so I'm ok with
> it if both shard keys end up in the same sub-shard.
>
> I see the following in the logs:
>
> 689524 [qtp259549756-119] ERROR org.apache.solr.servlet.SolrDispatchFilter
>  – null:java.lang.RuntimeException: java.lang.IllegalArgumentException:
> maxValue must be non-negative (got: -1)
>         at
>
> org.apache.solr.handler.admin.CoreAdminHandler.handleSplitAction(CoreAdminHandler.java:290)
>         at
>
> org.apache.solr.handler.admin.CoreAdminHandler.handleRequestBody(CoreAdminHandler.java:186)
>         at
>
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135)
>         at
>
> org.apache.solr.servlet.SolrDispatchFilter.handleAdminRequest(SolrDispatchFilter.java:611)
>         at
>
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:209)
>         at
>
> org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:158)
>         at
>
> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1419)
>         at
> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455)
>         at
>
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
>         at
> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557)
>         at
>
> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
>         at
>
> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1075)
>         at
> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:384)
>         at
>
> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
>         at
>
> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1009)
>         at
>
> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
>         at
>
> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)
>         at
>
> org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)
>         at
>
> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
>         at org.eclipse.jetty.server.Server.handle(Server.java:368)
>         at
>
> org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
>         at
>
> org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53)
>         at
>
> org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:953)
>         at
>
> org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1014)
>         at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:861)
>         at
> org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)
>         at
>
> org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72)
>         at
>
> org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264)
>         at
>
> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
>         at
>
> org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
>         at java.lang.Thread.run(Thread.java:662)
> Caused by: java.lang.IllegalArgumentException: maxValue must be
> non-negative (got: -1)
>         at
> org.apache.lucene.util.packed.PackedInts.bitsRequired(PackedInts.java:1184)
>         at
>
> org.apache.lucene.codecs.lucene42.Lucene42DocValuesConsumer.addNumericField(Lucene42DocValuesConsumer.java:140)
>         at
>
> org.apache.lucene.codecs.lucene42.Lucene42DocValuesConsumer.addNumericField(Lucene42DocValuesConsumer.java:92)
>         at
>
> org.apache.lucene.codecs.DocValuesConsumer.mergeNumericField(DocValuesConsumer.java:112)
>         at
> org.apache.lucene.index.SegmentMerger.mergeNorms(SegmentMerger.java:221)
>         at
> org.apache.lucene.index.SegmentMerger.merge(SegmentMerger.java:119)
>         at
> org.apache.lucene.index.IndexWriter.addIndexes(IndexWriter.java:2488)
>         at
> org.apache.solr.update.SolrIndexSplitter.split(SolrIndexSplitter.java:125)
>         at
>
> org.apache.solr.update.DirectUpdateHandler2.split(DirectUpdateHandler2.java:766)
>         at
>
> org.apache.solr.handler.admin.CoreAdminHandler.handleSplitAction(CoreAdminHandler.java:284)
>         ... 30 more
>
>
>
> I thought maybe there was an issue with performing a split where all docs
> go to one sub-shard, so I wiped everything clean and re-indexed the same
> data using default routing (no shard key).  Now when I perform a split, I
> get a replication error on the second replica of both sub-shards:
>
> 453616 [RecoveryThread] WARN  org.apache.solr.update.PeerSync  – PeerSync:
> core=coll_shard2_0_replica2 url=http://host2:8983/solr  exception talking
> to http://host1:8983/solr/coll_shard2_0_replica1/, failed
> org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException:
> Server at http://host1:8983/solr/coll_shard2_0_replica1 returned non ok
> status:404, message:Not Found
>         at
>
> org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:385)
>         at
>
> org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:180)
>         at
>
> org.apache.solr.handler.component.HttpShardHandler$1.call(HttpShardHandler.java:156)
>         at
>
> org.apache.solr.handler.component.HttpShardHandler$1.call(HttpShardHandler.java:119)
>         at
> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>         at java.util.concurrent.FutureTask.run(FutureTask.java:138)
>         at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
>         at
> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>         at java.util.concurrent.FutureTask.run(FutureTask.java:138)
>         at
>
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>         at
>
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>         at java.lang.Thread.run(Thread.java:662)
>
>
> if I browse to http://host1:8983/solr/coll_shard2_0_replica1<
> http://solrcloud1:8983/solr/#/marin_shard2_0_replica1>
> I
> do get a 404, but
> http://host1:8983/solr/#/coll_shard2_0_replica1<
> http://solrcloud1:8983/solr/#/marin_shard2_0_replica1>
> does
> bring up the admin UI for that core.
>
> I've been running solr cloud 4.1.0 for a while now, and our prod cloud has
> ~1.8 billion docs indexed into 3 shards.  I'd really like to get splitting
> working so we can add more hardware.
>
> Any ideas?
>
> -Greg
>

Reply via email to