Return-Path: X-Original-To: apmail-lucene-commits-archive@www.apache.org Delivered-To: apmail-lucene-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 6D99910926 for ; Fri, 7 Mar 2014 20:51:23 +0000 (UTC) Received: (qmail 16227 invoked by uid 500); 7 Mar 2014 20:51:23 -0000 Mailing-List: contact commits-help@lucene.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@lucene.apache.org Delivered-To: mailing list commits@lucene.apache.org Received: (qmail 15938 invoked by uid 99); 7 Mar 2014 20:51:22 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 07 Mar 2014 20:51:22 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED,NORMAL_HTTP_TO_IP X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 07 Mar 2014 20:51:13 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id E39332388A56; Fri, 7 Mar 2014 20:50:50 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1575397 [3/3] - in /lucene/dev/branches/lucene5487: ./ dev-tools/ dev-tools/idea/solr/contrib/dataimporthandler/ dev-tools/idea/solr/contrib/map-reduce/ dev-tools/scripts/ lucene/ lucene/analysis/ lucene/analysis/common/ lucene/analysis/co... Date: Fri, 07 Mar 2014 20:50:47 -0000 To: commits@lucene.apache.org From: mikemccand@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20140307205050.E39332388A56@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Modified: lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/BlockCacheKey.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/BlockCacheKey.java?rev=1575397&r1=1575396&r2=1575397&view=diff ============================================================================== --- lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/BlockCacheKey.java (original) +++ lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/BlockCacheKey.java Fri Mar 7 20:50:45 2014 @@ -16,12 +16,23 @@ package org.apache.solr.store.blockcache * See the License for the specific language governing permissions and * limitations under the License. */ - +/** + * @lucene.experimental + */ public class BlockCacheKey implements Cloneable { private long block; private int file; + private String path; + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + public long getBlock() { return block; } @@ -44,9 +55,10 @@ public class BlockCacheKey implements Cl int result = 1; result = prime * result + (int) (block ^ (block >>> 32)); result = prime * result + file; + result = prime * result + ((path == null) ? 0 : path.hashCode()); return result; } - + @Override public boolean equals(Object obj) { if (this == obj) return true; @@ -55,9 +67,12 @@ public class BlockCacheKey implements Cl BlockCacheKey other = (BlockCacheKey) obj; if (block != other.block) return false; if (file != other.file) return false; + if (path == null) { + if (other.path != null) return false; + } else if (!path.equals(other.path)) return false; return true; } - + @Override public BlockCacheKey clone() { try { Modified: lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/BlockCacheLocation.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/BlockCacheLocation.java?rev=1575397&r1=1575396&r2=1575397&view=diff ============================================================================== --- lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/BlockCacheLocation.java (original) +++ lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/BlockCacheLocation.java Fri Mar 7 20:50:45 2014 @@ -19,6 +19,9 @@ package org.apache.solr.store.blockcache import java.util.concurrent.atomic.AtomicBoolean; +/** + * @lucene.experimental + */ public class BlockCacheLocation { private int block; Modified: lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/BlockDirectory.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/BlockDirectory.java?rev=1575397&r1=1575396&r2=1575397&view=diff ============================================================================== --- lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/BlockDirectory.java (original) +++ lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/BlockDirectory.java Fri Mar 7 20:50:45 2014 @@ -34,6 +34,9 @@ import org.apache.solr.store.hdfs.HdfsDi import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * @lucene.experimental + */ public class BlockDirectory extends Directory { public static Logger LOG = LoggerFactory.getLogger(BlockDirectory.class); @@ -82,11 +85,11 @@ public class BlockDirectory extends Dire private Directory directory; private int blockSize; private String dirName; - private Cache cache; + private final Cache cache; private Set blockCacheFileTypes; private final boolean blockCacheReadEnabled; private final boolean blockCacheWriteEnabled; - + public BlockDirectory(String dirName, Directory directory, Cache cache, Set blockCacheFileTypes, boolean blockCacheReadEnabled, boolean blockCacheWriteEnabled) throws IOException { @@ -265,6 +268,15 @@ public class BlockDirectory extends Dire return dirName + "/" + name; } + /** + * Expert: mostly for tests + * + * @lucene.experimental + */ + public Cache getCache() { + return cache; + } + @Override public void copy(Directory to, String src, String dest, IOContext context) throws IOException { @@ -383,4 +395,13 @@ public class BlockDirectory extends Dire return directory; } + + public boolean isBlockCacheReadEnabled() { + return blockCacheReadEnabled; + } + + public boolean isBlockCacheWriteEnabled() { + return blockCacheWriteEnabled; + } + } Modified: lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/BlockDirectoryCache.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/BlockDirectoryCache.java?rev=1575397&r1=1575396&r2=1575397&view=diff ============================================================================== --- lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/BlockDirectoryCache.java (original) +++ lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/BlockDirectoryCache.java Fri Mar 7 20:50:45 2014 @@ -21,17 +21,31 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; +/** + * @lucene.experimental + */ public class BlockDirectoryCache implements Cache { - private BlockCache blockCache; + private final BlockCache blockCache; private AtomicInteger counter = new AtomicInteger(); private Map names = new ConcurrentHashMap(); + private String path; private Metrics metrics; - public BlockDirectoryCache(BlockCache blockCache, Metrics metrics) { + public BlockDirectoryCache(BlockCache blockCache, String path, Metrics metrics) { this.blockCache = blockCache; + this.path = path; this.metrics = metrics; } + /** + * Expert: mostly for tests + * + * @lucene.experimental + */ + public BlockCache getBlockCache() { + return blockCache; + } + @Override public void delete(String name) { names.remove(name); @@ -46,6 +60,7 @@ public class BlockDirectoryCache impleme names.put(name, file); } BlockCacheKey blockCacheKey = new BlockCacheKey(); + blockCacheKey.setPath(path); blockCacheKey.setBlock(blockId); blockCacheKey.setFile(file); blockCache.store(blockCacheKey, blockOffset, buffer, offset, length); @@ -59,6 +74,7 @@ public class BlockDirectoryCache impleme return false; } BlockCacheKey blockCacheKey = new BlockCacheKey(); + blockCacheKey.setPath(path); blockCacheKey.setBlock(blockId); blockCacheKey.setFile(file); boolean fetch = blockCache.fetch(blockCacheKey, b, blockOffset, off, Modified: lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/BlockLocks.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/BlockLocks.java?rev=1575397&r1=1575396&r2=1575397&view=diff ============================================================================== --- lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/BlockLocks.java (original) +++ lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/BlockLocks.java Fri Mar 7 20:50:45 2014 @@ -21,6 +21,9 @@ import java.util.concurrent.atomic.Atomi import org.apache.lucene.util.LongBitSet; +/** + * @lucene.experimental + */ public class BlockLocks { private AtomicLongArray bits; Modified: lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/BufferStore.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/BufferStore.java?rev=1575397&r1=1575396&r2=1575397&view=diff ============================================================================== --- lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/BufferStore.java (original) +++ lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/BufferStore.java Fri Mar 7 20:50:45 2014 @@ -22,7 +22,9 @@ import java.util.concurrent.BlockingQueu import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; - +/** + * @lucene.experimental + */ public class BufferStore implements Store { private static final Store EMPTY = new Store() { Modified: lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/Cache.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/Cache.java?rev=1575397&r1=1575396&r2=1575397&view=diff ============================================================================== --- lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/Cache.java (original) +++ lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/Cache.java Fri Mar 7 20:50:45 2014 @@ -17,6 +17,9 @@ package org.apache.solr.store.blockcache * limitations under the License. */ +/** + * @lucene.experimental + */ public interface Cache { /** Modified: lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/CachedIndexOutput.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/CachedIndexOutput.java?rev=1575397&r1=1575396&r2=1575397&view=diff ============================================================================== --- lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/CachedIndexOutput.java (original) +++ lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/CachedIndexOutput.java Fri Mar 7 20:50:45 2014 @@ -21,10 +21,11 @@ import java.io.IOException; import org.apache.lucene.store.IndexOutput; -/* +/** * Cache the blocks as they are written. The cache file name is the name of * the file until the file is closed, at which point the cache is updated * to include the last modified date (which is unknown until that point). + * @lucene.experimental */ public class CachedIndexOutput extends ReusedBufferedIndexOutput { private final BlockDirectory directory; Modified: lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/CustomBufferedIndexInput.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/CustomBufferedIndexInput.java?rev=1575397&r1=1575396&r2=1575397&view=diff ============================================================================== --- lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/CustomBufferedIndexInput.java (original) +++ lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/CustomBufferedIndexInput.java Fri Mar 7 20:50:45 2014 @@ -23,6 +23,9 @@ import java.io.IOException; import org.apache.lucene.store.IndexInput; import org.apache.lucene.store.IndexOutput; +/** + * @lucene.experimental + */ public abstract class CustomBufferedIndexInput extends IndexInput { public static final int BUFFER_SIZE = 32768; Modified: lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/Metrics.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/Metrics.java?rev=1575397&r1=1575396&r2=1575397&view=diff ============================================================================== --- lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/Metrics.java (original) +++ lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/Metrics.java Fri Mar 7 20:50:45 2014 @@ -29,6 +29,9 @@ import org.apache.hadoop.metrics.Metrics import org.apache.hadoop.metrics.Updater; import org.apache.hadoop.metrics.jvm.JvmMetrics; +/** + * @lucene.experimental + */ public class Metrics implements Updater { public static class MethodCall { Modified: lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/ReusedBufferedIndexOutput.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/ReusedBufferedIndexOutput.java?rev=1575397&r1=1575396&r2=1575397&view=diff ============================================================================== --- lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/ReusedBufferedIndexOutput.java (original) +++ lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/ReusedBufferedIndexOutput.java Fri Mar 7 20:50:45 2014 @@ -21,6 +21,9 @@ import java.io.IOException; import org.apache.lucene.store.IndexOutput; +/** + * @lucene.experimental + */ public abstract class ReusedBufferedIndexOutput extends IndexOutput { public static final int BUFFER_SIZE = 1024; Modified: lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/Store.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/Store.java?rev=1575397&r1=1575396&r2=1575397&view=diff ============================================================================== --- lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/Store.java (original) +++ lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/blockcache/Store.java Fri Mar 7 20:50:45 2014 @@ -17,6 +17,9 @@ package org.apache.solr.store.blockcache * limitations under the License. */ +/** + * @lucene.experimental + */ public interface Store { byte[] takeBuffer(int bufferSize); Modified: lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/hdfs/HdfsFileReader.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/hdfs/HdfsFileReader.java?rev=1575397&r1=1575396&r2=1575397&view=diff ============================================================================== --- lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/hdfs/HdfsFileReader.java (original) +++ lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/hdfs/HdfsFileReader.java Fri Mar 7 20:50:45 2014 @@ -28,6 +28,9 @@ import org.apache.lucene.store.DataInput import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * @lucene.experimental + */ public class HdfsFileReader extends DataInput { public static Logger LOG = LoggerFactory.getLogger(HdfsFileReader.class); Modified: lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/hdfs/HdfsFileWriter.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/hdfs/HdfsFileWriter.java?rev=1575397&r1=1575396&r2=1575397&view=diff ============================================================================== --- lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/hdfs/HdfsFileWriter.java (original) +++ lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/hdfs/HdfsFileWriter.java Fri Mar 7 20:50:45 2014 @@ -32,6 +32,9 @@ import org.apache.lucene.store.DataOutpu import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * @lucene.experimental + */ public class HdfsFileWriter extends DataOutput implements Closeable { public static Logger LOG = LoggerFactory.getLogger(HdfsFileWriter.class); Modified: lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/hdfs/NullIndexOutput.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/hdfs/NullIndexOutput.java?rev=1575397&r1=1575396&r2=1575397&view=diff ============================================================================== --- lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/hdfs/NullIndexOutput.java (original) +++ lucene/dev/branches/lucene5487/solr/core/src/java/org/apache/solr/store/hdfs/NullIndexOutput.java Fri Mar 7 20:50:45 2014 @@ -21,6 +21,9 @@ import java.io.IOException; import org.apache.lucene.store.IndexOutput; +/** + * @lucene.experimental + */ public class NullIndexOutput extends IndexOutput { private long pos; Modified: lucene/dev/branches/lucene5487/solr/core/src/test-files/solr/collection1/conf/schema11.xml URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5487/solr/core/src/test-files/solr/collection1/conf/schema11.xml?rev=1575397&r1=1575396&r2=1575397&view=diff ============================================================================== --- lucene/dev/branches/lucene5487/solr/core/src/test-files/solr/collection1/conf/schema11.xml (original) +++ lucene/dev/branches/lucene5487/solr/core/src/test-files/solr/collection1/conf/schema11.xml Fri Mar 7 20:50:45 2014 @@ -287,6 +287,16 @@ valued. --> class="solr.ExternalFileField"/> + + + + + + + + + + @@ -324,6 +334,9 @@ valued. --> + + + ${solr.hdfs.blockcache.enabled:true} + + ${solr.hdfs.blockcache.global:true} Modified: lucene/dev/branches/lucene5487/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5487/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java?rev=1575397&r1=1575396&r2=1575397&view=diff ============================================================================== --- lucene/dev/branches/lucene5487/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java (original) +++ lucene/dev/branches/lucene5487/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java Fri Mar 7 20:50:45 2014 @@ -626,7 +626,7 @@ public class ZkStateReader { } /** - * Returns the baseURL corrisponding to a given node's nodeName -- + * Returns the baseURL corresponding to a given node's nodeName -- * NOTE: does not (currently) imply that the nodeName (or resulting * baseURL) exists in the cluster. * @lucene.experimental Modified: lucene/dev/branches/lucene5487/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5487/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java?rev=1575397&r1=1575396&r2=1575397&view=diff ============================================================================== --- lucene/dev/branches/lucene5487/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java (original) +++ lucene/dev/branches/lucene5487/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java Fri Mar 7 20:50:45 2014 @@ -1428,122 +1428,13 @@ public abstract class AbstractFullDistri return rsp; } - abstract class StopableThread extends Thread { + static abstract class StopableThread extends Thread { public StopableThread(String name) { super(name); } public abstract void safeStop(); } - class StopableIndexingThread extends StopableThread { - private volatile boolean stop = false; - protected final String id; - protected final List deletes = new ArrayList(); - protected Set addFails = new HashSet(); - protected Set deleteFails = new HashSet(); - protected boolean doDeletes; - private int numCycles; - - public StopableIndexingThread(String id, boolean doDeletes) { - this(id, doDeletes, -1); - } - - public StopableIndexingThread(String id, boolean doDeletes, int numCycles) { - super("StopableIndexingThread"); - this.id = id; - this.doDeletes = doDeletes; - this.numCycles = numCycles; - setDaemon(true); - } - - @Override - public void run() { - int i = 0; - int numDone = 0; - int numDeletes = 0; - int numAdds = 0; - - while (true && !stop) { - if (numCycles != -1) { - if (numDone > numCycles) { - break; - } - } - ++numDone; - String id = this.id + "-" + i; - ++i; - boolean addFailed = false; - - if (doDeletes && random().nextBoolean() && deletes.size() > 0) { - String delete = deletes.remove(0); - try { - numDeletes++; - UpdateRequest req = new UpdateRequest(); - req.deleteById(delete); - req.setParam("CONTROL", "TRUE"); - req.process(controlClient); - - cloudClient.deleteById(delete); - } catch (Exception e) { - System.err.println("REQUEST FAILED:"); - e.printStackTrace(); - if (e instanceof SolrServerException) { - System.err.println("ROOT CAUSE:"); - ((SolrServerException) e).getRootCause().printStackTrace(); - } - deleteFails.add(id); - } - } - - try { - numAdds++; - indexr("id", id, i1, 50, t1, - "to come to the aid of their country."); - } catch (Exception e) { - addFailed = true; - System.err.println("REQUEST FAILED:"); - e.printStackTrace(); - if (e instanceof SolrServerException) { - System.err.println("ROOT CAUSE:"); - ((SolrServerException) e).getRootCause().printStackTrace(); - } - addFails.add(id); - } - - if (!addFailed && doDeletes && random().nextBoolean()) { - deletes.add(id); - } - - try { - Thread.currentThread().sleep(random().nextInt(100)); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - } - - System.err.println("added docs:" + numAdds + " with " + (addFails.size() + deleteFails.size()) + " fails" - + " deletes:" + numDeletes); - } - - @Override - public void safeStop() { - stop = true; - } - - public Set getAddFails() { - return addFails; - } - - public Set getDeleteFails() { - return deleteFails; - } - - public int getFailCount() { - return addFails.size() + deleteFails.size(); - } - - }; - class StopableSearchThread extends StopableThread { private volatile boolean stop = false; protected final AtomicInteger queryFails = new AtomicInteger();