Merge branch '1.5.1-SNAPSHOT' into 1.6.0-SNAPSHOT

Conflicts:
        
core/src/main/java/org/apache/accumulo/core/client/impl/MultiTableBatchWriterImpl.java


Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo
Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/45fbee69
Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/45fbee69
Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/45fbee69

Branch: refs/heads/master
Commit: 45fbee6937549048c74fe176f201c246de0f5e0a
Parents: 0b8cca0 6b87c87
Author: Josh Elser <els...@apache.org>
Authored: Sun Nov 17 22:08:31 2013 -0500
Committer: Josh Elser <els...@apache.org>
Committed: Sun Nov 17 22:26:13 2013 -0500

----------------------------------------------------------------------
 .../client/impl/MultiTableBatchWriterImpl.java  | 168 ++++--
 .../accumulo/core/client/impl/Tables.java       |   7 +
 .../test/MultiTableBatchWriterTest.java         | 539 +++++++++++++++++++
 3 files changed, 679 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/accumulo/blob/45fbee69/core/src/main/java/org/apache/accumulo/core/client/impl/MultiTableBatchWriterImpl.java
----------------------------------------------------------------------
diff --cc 
core/src/main/java/org/apache/accumulo/core/client/impl/MultiTableBatchWriterImpl.java
index 0d2d44d,49c02d9..7eea455
--- 
a/core/src/main/java/org/apache/accumulo/core/client/impl/MultiTableBatchWriterImpl.java
+++ 
b/core/src/main/java/org/apache/accumulo/core/client/impl/MultiTableBatchWriterImpl.java
@@@ -65,32 -78,60 +78,60 @@@ public class MultiTableBatchWriterImpl 
      public void flush() {
        throw new UnsupportedOperationException("Must flush all tables, can not 
flush an individual table");
      }
-     
+ 
+   }
+ 
+   /**
+    * CacheLoader which will look up the internal table ID for a given table 
name.
+    */
+   private class TableNameToIdLoader extends CacheLoader<String,String> {
+ 
+     @Override
+     public String load(String tableName) throws Exception {
+       String tableId = Tables.getNameToIdMap(instance).get(tableName);
+ 
+       if (tableId == null)
+         throw new TableNotFoundException(tableId, tableName, null);
+ 
+       if (Tables.getTableState(instance, tableId) == TableState.OFFLINE)
+         throw new TableOfflineException(instance, tableId);
+ 
+       return tableId;
+     }
+ 
    }
-   
+ 
    private TabletServerBatchWriter bw;
-   private HashMap<String,BatchWriter> tableWriters;
+   private ConcurrentHashMap<String,BatchWriter> tableWriters;
    private Instance instance;
-   
+   private final LoadingCache<String,String> nameToIdCache;
+ 
 -  public MultiTableBatchWriterImpl(Instance instance, TCredentials 
credentials, BatchWriterConfig config) {
 +  public MultiTableBatchWriterImpl(Instance instance, Credentials 
credentials, BatchWriterConfig config) {
-     ArgumentChecker.notNull(instance, credentials);
+     this(instance, credentials, config, DEFAULT_CACHE_TIME, 
DEFAULT_CACHE_TIME_UNIT);
+   }
+ 
 -  public MultiTableBatchWriterImpl(Instance instance, TCredentials 
credentials, BatchWriterConfig config, long cacheTime, TimeUnit cacheTimeUnit) {
++  public MultiTableBatchWriterImpl(Instance instance, Credentials 
credentials, BatchWriterConfig config, long cacheTime, TimeUnit cacheTimeUnit) {
+     ArgumentChecker.notNull(instance, credentials, config, cacheTimeUnit);
      this.instance = instance;
      this.bw = new TabletServerBatchWriter(instance, credentials, config);
-     tableWriters = new HashMap<String,BatchWriter>();
-     this.closed = false;
+     tableWriters = new ConcurrentHashMap<String,BatchWriter>();
+     this.closed = new AtomicBoolean(false);
+     this.cacheLastState = new AtomicLong(0);
+ 
+     // Potentially up to ~500k used to cache names to IDs with "segments" of 
(maybe) ~1000 entries
+     nameToIdCache = CacheBuilder.newBuilder().expireAfterWrite(cacheTime, 
cacheTimeUnit).concurrencyLevel(10).maximumSize(10000).initialCapacity(20)
+         .build(new TableNameToIdLoader());
    }
-   
-   @Override
+ 
    public boolean isClosed() {
-     return this.closed;
+     return this.closed.get();
    }
-   
-   @Override
+ 
    public void close() throws MutationsRejectedException {
+     this.closed.set(true);
      bw.close();
-     this.closed = true;
    }
-   
+ 
    /**
     * Warning: do not rely upon finalize to close this class. Finalize is not 
guaranteed to be called.
     */

http://git-wip-us.apache.org/repos/asf/accumulo/blob/45fbee69/core/src/main/java/org/apache/accumulo/core/client/impl/Tables.java
----------------------------------------------------------------------

Reply via email to