Repository: accumulo
Updated Branches:
  refs/heads/master 67560a618 -> 794ec90d5


http://git-wip-us.apache.org/repos/asf/accumulo/blob/3af75fc6/proxy/src/main/python/constants.py
----------------------------------------------------------------------
diff --git a/proxy/src/main/python/constants.py 
b/proxy/src/main/python/constants.py
index aea4826..8139236 100644
--- a/proxy/src/main/python/constants.py
+++ b/proxy/src/main/python/constants.py
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-# Autogenerated by Thrift Compiler (0.9.1)
+# Autogenerated by Thrift Compiler (0.9.3)
 #
 # DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
 #

http://git-wip-us.apache.org/repos/asf/accumulo/blob/3af75fc6/proxy/src/main/python/ttypes.py
----------------------------------------------------------------------
diff --git a/proxy/src/main/python/ttypes.py b/proxy/src/main/python/ttypes.py
index 9444f71..c224c50 100644
--- a/proxy/src/main/python/ttypes.py
+++ b/proxy/src/main/python/ttypes.py
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-# Autogenerated by Thrift Compiler (0.9.1)
+# Autogenerated by Thrift Compiler (0.9.3)
 #
 # DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
 #
@@ -303,27 +303,27 @@ class Key:
         break
       if fid == 1:
         if ftype == TType.STRING:
-          self.row = iprot.readString();
+          self.row = iprot.readString()
         else:
           iprot.skip(ftype)
       elif fid == 2:
         if ftype == TType.STRING:
-          self.colFamily = iprot.readString();
+          self.colFamily = iprot.readString()
         else:
           iprot.skip(ftype)
       elif fid == 3:
         if ftype == TType.STRING:
-          self.colQualifier = iprot.readString();
+          self.colQualifier = iprot.readString()
         else:
           iprot.skip(ftype)
       elif fid == 4:
         if ftype == TType.STRING:
-          self.colVisibility = iprot.readString();
+          self.colVisibility = iprot.readString()
         else:
           iprot.skip(ftype)
       elif fid == 5:
         if ftype == TType.I64:
-          self.timestamp = iprot.readI64();
+          self.timestamp = iprot.readI64()
         else:
           iprot.skip(ftype)
       else:
@@ -363,6 +363,15 @@ class Key:
     return
 
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.row)
+    value = (value * 31) ^ hash(self.colFamily)
+    value = (value * 31) ^ hash(self.colQualifier)
+    value = (value * 31) ^ hash(self.colVisibility)
+    value = (value * 31) ^ hash(self.timestamp)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]
@@ -414,32 +423,32 @@ class ColumnUpdate:
         break
       if fid == 1:
         if ftype == TType.STRING:
-          self.colFamily = iprot.readString();
+          self.colFamily = iprot.readString()
         else:
           iprot.skip(ftype)
       elif fid == 2:
         if ftype == TType.STRING:
-          self.colQualifier = iprot.readString();
+          self.colQualifier = iprot.readString()
         else:
           iprot.skip(ftype)
       elif fid == 3:
         if ftype == TType.STRING:
-          self.colVisibility = iprot.readString();
+          self.colVisibility = iprot.readString()
         else:
           iprot.skip(ftype)
       elif fid == 4:
         if ftype == TType.I64:
-          self.timestamp = iprot.readI64();
+          self.timestamp = iprot.readI64()
         else:
           iprot.skip(ftype)
       elif fid == 5:
         if ftype == TType.STRING:
-          self.value = iprot.readString();
+          self.value = iprot.readString()
         else:
           iprot.skip(ftype)
       elif fid == 6:
         if ftype == TType.BOOL:
-          self.deleteCell = iprot.readBool();
+          self.deleteCell = iprot.readBool()
         else:
           iprot.skip(ftype)
       else:
@@ -483,6 +492,16 @@ class ColumnUpdate:
     return
 
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.colFamily)
+    value = (value * 31) ^ hash(self.colQualifier)
+    value = (value * 31) ^ hash(self.colVisibility)
+    value = (value * 31) ^ hash(self.timestamp)
+    value = (value * 31) ^ hash(self.value)
+    value = (value * 31) ^ hash(self.deleteCell)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]
@@ -525,14 +544,14 @@ class DiskUsage:
           self.tables = []
           (_etype3, _size0) = iprot.readListBegin()
           for _i4 in xrange(_size0):
-            _elem5 = iprot.readString();
+            _elem5 = iprot.readString()
             self.tables.append(_elem5)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
       elif fid == 2:
         if ftype == TType.I64:
-          self.usage = iprot.readI64();
+          self.usage = iprot.readI64()
         else:
           iprot.skip(ftype)
       else:
@@ -563,6 +582,12 @@ class DiskUsage:
     return
 
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.tables)
+    value = (value * 31) ^ hash(self.usage)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]
@@ -608,7 +633,7 @@ class KeyValue:
           iprot.skip(ftype)
       elif fid == 2:
         if ftype == TType.STRING:
-          self.value = iprot.readString();
+          self.value = iprot.readString()
         else:
           iprot.skip(ftype)
       else:
@@ -636,6 +661,12 @@ class KeyValue:
     return
 
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.key)
+    value = (value * 31) ^ hash(self.value)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]
@@ -686,7 +717,7 @@ class ScanResult:
           iprot.skip(ftype)
       elif fid == 2:
         if ftype == TType.BOOL:
-          self.more = iprot.readBool();
+          self.more = iprot.readBool()
         else:
           iprot.skip(ftype)
       else:
@@ -717,6 +748,12 @@ class ScanResult:
     return
 
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.results)
+    value = (value * 31) ^ hash(self.more)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]
@@ -768,7 +805,7 @@ class Range:
           iprot.skip(ftype)
       elif fid == 2:
         if ftype == TType.BOOL:
-          self.startInclusive = iprot.readBool();
+          self.startInclusive = iprot.readBool()
         else:
           iprot.skip(ftype)
       elif fid == 3:
@@ -779,7 +816,7 @@ class Range:
           iprot.skip(ftype)
       elif fid == 4:
         if ftype == TType.BOOL:
-          self.stopInclusive = iprot.readBool();
+          self.stopInclusive = iprot.readBool()
         else:
           iprot.skip(ftype)
       else:
@@ -815,6 +852,14 @@ class Range:
     return
 
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.start)
+    value = (value * 31) ^ hash(self.startInclusive)
+    value = (value * 31) ^ hash(self.stop)
+    value = (value * 31) ^ hash(self.stopInclusive)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]
@@ -854,12 +899,12 @@ class ScanColumn:
         break
       if fid == 1:
         if ftype == TType.STRING:
-          self.colFamily = iprot.readString();
+          self.colFamily = iprot.readString()
         else:
           iprot.skip(ftype)
       elif fid == 2:
         if ftype == TType.STRING:
-          self.colQualifier = iprot.readString();
+          self.colQualifier = iprot.readString()
         else:
           iprot.skip(ftype)
       else:
@@ -887,6 +932,12 @@ class ScanColumn:
     return
 
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.colFamily)
+    value = (value * 31) ^ hash(self.colQualifier)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]
@@ -932,17 +983,17 @@ class IteratorSetting:
         break
       if fid == 1:
         if ftype == TType.I32:
-          self.priority = iprot.readI32();
+          self.priority = iprot.readI32()
         else:
           iprot.skip(ftype)
       elif fid == 2:
         if ftype == TType.STRING:
-          self.name = iprot.readString();
+          self.name = iprot.readString()
         else:
           iprot.skip(ftype)
       elif fid == 3:
         if ftype == TType.STRING:
-          self.iteratorClass = iprot.readString();
+          self.iteratorClass = iprot.readString()
         else:
           iprot.skip(ftype)
       elif fid == 4:
@@ -950,8 +1001,8 @@ class IteratorSetting:
           self.properties = {}
           (_ktype15, _vtype16, _size14 ) = iprot.readMapBegin()
           for _i18 in xrange(_size14):
-            _key19 = iprot.readString();
-            _val20 = iprot.readString();
+            _key19 = iprot.readString()
+            _val20 = iprot.readString()
             self.properties[_key19] = _val20
           iprot.readMapEnd()
         else:
@@ -993,6 +1044,14 @@ class IteratorSetting:
     return
 
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.priority)
+    value = (value * 31) ^ hash(self.name)
+    value = (value * 31) ^ hash(self.iteratorClass)
+    value = (value * 31) ^ hash(self.properties)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]
@@ -1044,7 +1103,7 @@ class ScanOptions:
           self.authorizations = set()
           (_etype26, _size23) = iprot.readSetBegin()
           for _i27 in xrange(_size23):
-            _elem28 = iprot.readString();
+            _elem28 = iprot.readString()
             self.authorizations.add(_elem28)
           iprot.readSetEnd()
         else:
@@ -1079,7 +1138,7 @@ class ScanOptions:
           iprot.skip(ftype)
       elif fid == 5:
         if ftype == TType.I32:
-          self.bufferSize = iprot.readI32();
+          self.bufferSize = iprot.readI32()
         else:
           iprot.skip(ftype)
       else:
@@ -1128,6 +1187,15 @@ class ScanOptions:
     return
 
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.authorizations)
+    value = (value * 31) ^ hash(self.range)
+    value = (value * 31) ^ hash(self.columns)
+    value = (value * 31) ^ hash(self.iterators)
+    value = (value * 31) ^ hash(self.bufferSize)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]
@@ -1179,7 +1247,7 @@ class BatchScanOptions:
           self.authorizations = set()
           (_etype47, _size44) = iprot.readSetBegin()
           for _i48 in xrange(_size44):
-            _elem49 = iprot.readString();
+            _elem49 = iprot.readString()
             self.authorizations.add(_elem49)
           iprot.readSetEnd()
         else:
@@ -1219,7 +1287,7 @@ class BatchScanOptions:
           iprot.skip(ftype)
       elif fid == 5:
         if ftype == TType.I32:
-          self.threads = iprot.readI32();
+          self.threads = iprot.readI32()
         else:
           iprot.skip(ftype)
       else:
@@ -1271,6 +1339,15 @@ class BatchScanOptions:
     return
 
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.authorizations)
+    value = (value * 31) ^ hash(self.ranges)
+    value = (value * 31) ^ hash(self.columns)
+    value = (value * 31) ^ hash(self.iterators)
+    value = (value * 31) ^ hash(self.threads)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]
@@ -1316,7 +1393,7 @@ class KeyValueAndPeek:
           iprot.skip(ftype)
       elif fid == 2:
         if ftype == TType.BOOL:
-          self.hasNext = iprot.readBool();
+          self.hasNext = iprot.readBool()
         else:
           iprot.skip(ftype)
       else:
@@ -1344,6 +1421,12 @@ class KeyValueAndPeek:
     return
 
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.keyValue)
+    value = (value * 31) ^ hash(self.hasNext)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]
@@ -1386,17 +1469,17 @@ class KeyExtent:
         break
       if fid == 1:
         if ftype == TType.STRING:
-          self.tableId = iprot.readString();
+          self.tableId = iprot.readString()
         else:
           iprot.skip(ftype)
       elif fid == 2:
         if ftype == TType.STRING:
-          self.endRow = iprot.readString();
+          self.endRow = iprot.readString()
         else:
           iprot.skip(ftype)
       elif fid == 3:
         if ftype == TType.STRING:
-          self.prevEndRow = iprot.readString();
+          self.prevEndRow = iprot.readString()
         else:
           iprot.skip(ftype)
       else:
@@ -1428,6 +1511,13 @@ class KeyExtent:
     return
 
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.tableId)
+    value = (value * 31) ^ hash(self.endRow)
+    value = (value * 31) ^ hash(self.prevEndRow)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]
@@ -1470,17 +1560,17 @@ class Column:
         break
       if fid == 1:
         if ftype == TType.STRING:
-          self.colFamily = iprot.readString();
+          self.colFamily = iprot.readString()
         else:
           iprot.skip(ftype)
       elif fid == 2:
         if ftype == TType.STRING:
-          self.colQualifier = iprot.readString();
+          self.colQualifier = iprot.readString()
         else:
           iprot.skip(ftype)
       elif fid == 3:
         if ftype == TType.STRING:
-          self.colVisibility = iprot.readString();
+          self.colVisibility = iprot.readString()
         else:
           iprot.skip(ftype)
       else:
@@ -1512,6 +1602,13 @@ class Column:
     return
 
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.colFamily)
+    value = (value * 31) ^ hash(self.colQualifier)
+    value = (value * 31) ^ hash(self.colVisibility)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]
@@ -1563,12 +1660,12 @@ class Condition:
           iprot.skip(ftype)
       elif fid == 2:
         if ftype == TType.I64:
-          self.timestamp = iprot.readI64();
+          self.timestamp = iprot.readI64()
         else:
           iprot.skip(ftype)
       elif fid == 3:
         if ftype == TType.STRING:
-          self.value = iprot.readString();
+          self.value = iprot.readString()
         else:
           iprot.skip(ftype)
       elif fid == 4:
@@ -1618,6 +1715,14 @@ class Condition:
     return
 
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.column)
+    value = (value * 31) ^ hash(self.timestamp)
+    value = (value * 31) ^ hash(self.value)
+    value = (value * 31) ^ hash(self.iterators)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]
@@ -1709,6 +1814,12 @@ class ConditionalUpdates:
     return
 
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.conditions)
+    value = (value * 31) ^ hash(self.updates)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]
@@ -1757,17 +1868,17 @@ class ConditionalWriterOptions:
         break
       if fid == 1:
         if ftype == TType.I64:
-          self.maxMemory = iprot.readI64();
+          self.maxMemory = iprot.readI64()
         else:
           iprot.skip(ftype)
       elif fid == 2:
         if ftype == TType.I64:
-          self.timeoutMs = iprot.readI64();
+          self.timeoutMs = iprot.readI64()
         else:
           iprot.skip(ftype)
       elif fid == 3:
         if ftype == TType.I32:
-          self.threads = iprot.readI32();
+          self.threads = iprot.readI32()
         else:
           iprot.skip(ftype)
       elif fid == 4:
@@ -1775,14 +1886,14 @@ class ConditionalWriterOptions:
           self.authorizations = set()
           (_etype96, _size93) = iprot.readSetBegin()
           for _i97 in xrange(_size93):
-            _elem98 = iprot.readString();
+            _elem98 = iprot.readString()
             self.authorizations.add(_elem98)
           iprot.readSetEnd()
         else:
           iprot.skip(ftype)
       elif fid == 5:
         if ftype == TType.I32:
-          self.durability = iprot.readI32();
+          self.durability = iprot.readI32()
         else:
           iprot.skip(ftype)
       else:
@@ -1825,6 +1936,15 @@ class ConditionalWriterOptions:
     return
 
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.maxMemory)
+    value = (value * 31) ^ hash(self.timeoutMs)
+    value = (value * 31) ^ hash(self.threads)
+    value = (value * 31) ^ hash(self.authorizations)
+    value = (value * 31) ^ hash(self.durability)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]
@@ -1891,37 +2011,37 @@ class ActiveScan:
         break
       if fid == 1:
         if ftype == TType.STRING:
-          self.client = iprot.readString();
+          self.client = iprot.readString()
         else:
           iprot.skip(ftype)
       elif fid == 2:
         if ftype == TType.STRING:
-          self.user = iprot.readString();
+          self.user = iprot.readString()
         else:
           iprot.skip(ftype)
       elif fid == 3:
         if ftype == TType.STRING:
-          self.table = iprot.readString();
+          self.table = iprot.readString()
         else:
           iprot.skip(ftype)
       elif fid == 4:
         if ftype == TType.I64:
-          self.age = iprot.readI64();
+          self.age = iprot.readI64()
         else:
           iprot.skip(ftype)
       elif fid == 5:
         if ftype == TType.I64:
-          self.idleTime = iprot.readI64();
+          self.idleTime = iprot.readI64()
         else:
           iprot.skip(ftype)
       elif fid == 6:
         if ftype == TType.I32:
-          self.type = iprot.readI32();
+          self.type = iprot.readI32()
         else:
           iprot.skip(ftype)
       elif fid == 7:
         if ftype == TType.I32:
-          self.state = iprot.readI32();
+          self.state = iprot.readI32()
         else:
           iprot.skip(ftype)
       elif fid == 8:
@@ -1957,7 +2077,7 @@ class ActiveScan:
           self.authorizations = []
           (_etype115, _size112) = iprot.readListBegin()
           for _i116 in xrange(_size112):
-            _elem117 = iprot.readString();
+            _elem117 = iprot.readString()
             self.authorizations.append(_elem117)
           iprot.readListEnd()
         else:
@@ -2032,6 +2152,21 @@ class ActiveScan:
     return
 
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.client)
+    value = (value * 31) ^ hash(self.user)
+    value = (value * 31) ^ hash(self.table)
+    value = (value * 31) ^ hash(self.age)
+    value = (value * 31) ^ hash(self.idleTime)
+    value = (value * 31) ^ hash(self.type)
+    value = (value * 31) ^ hash(self.state)
+    value = (value * 31) ^ hash(self.extent)
+    value = (value * 31) ^ hash(self.columns)
+    value = (value * 31) ^ hash(self.iterators)
+    value = (value * 31) ^ hash(self.authorizations)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]
@@ -2101,7 +2236,7 @@ class ActiveCompaction:
           iprot.skip(ftype)
       elif fid == 2:
         if ftype == TType.I64:
-          self.age = iprot.readI64();
+          self.age = iprot.readI64()
         else:
           iprot.skip(ftype)
       elif fid == 3:
@@ -2109,39 +2244,39 @@ class ActiveCompaction:
           self.inputFiles = []
           (_etype124, _size121) = iprot.readListBegin()
           for _i125 in xrange(_size121):
-            _elem126 = iprot.readString();
+            _elem126 = iprot.readString()
             self.inputFiles.append(_elem126)
           iprot.readListEnd()
         else:
           iprot.skip(ftype)
       elif fid == 4:
         if ftype == TType.STRING:
-          self.outputFile = iprot.readString();
+          self.outputFile = iprot.readString()
         else:
           iprot.skip(ftype)
       elif fid == 5:
         if ftype == TType.I32:
-          self.type = iprot.readI32();
+          self.type = iprot.readI32()
         else:
           iprot.skip(ftype)
       elif fid == 6:
         if ftype == TType.I32:
-          self.reason = iprot.readI32();
+          self.reason = iprot.readI32()
         else:
           iprot.skip(ftype)
       elif fid == 7:
         if ftype == TType.STRING:
-          self.localityGroup = iprot.readString();
+          self.localityGroup = iprot.readString()
         else:
           iprot.skip(ftype)
       elif fid == 8:
         if ftype == TType.I64:
-          self.entriesRead = iprot.readI64();
+          self.entriesRead = iprot.readI64()
         else:
           iprot.skip(ftype)
       elif fid == 9:
         if ftype == TType.I64:
-          self.entriesWritten = iprot.readI64();
+          self.entriesWritten = iprot.readI64()
         else:
           iprot.skip(ftype)
       elif fid == 10:
@@ -2218,6 +2353,20 @@ class ActiveCompaction:
     return
 
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.extent)
+    value = (value * 31) ^ hash(self.age)
+    value = (value * 31) ^ hash(self.inputFiles)
+    value = (value * 31) ^ hash(self.outputFile)
+    value = (value * 31) ^ hash(self.type)
+    value = (value * 31) ^ hash(self.reason)
+    value = (value * 31) ^ hash(self.localityGroup)
+    value = (value * 31) ^ hash(self.entriesRead)
+    value = (value * 31) ^ hash(self.entriesWritten)
+    value = (value * 31) ^ hash(self.iterators)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]
@@ -2266,27 +2415,27 @@ class WriterOptions:
         break
       if fid == 1:
         if ftype == TType.I64:
-          self.maxMemory = iprot.readI64();
+          self.maxMemory = iprot.readI64()
         else:
           iprot.skip(ftype)
       elif fid == 2:
         if ftype == TType.I64:
-          self.latencyMs = iprot.readI64();
+          self.latencyMs = iprot.readI64()
         else:
           iprot.skip(ftype)
       elif fid == 3:
         if ftype == TType.I64:
-          self.timeoutMs = iprot.readI64();
+          self.timeoutMs = iprot.readI64()
         else:
           iprot.skip(ftype)
       elif fid == 4:
         if ftype == TType.I32:
-          self.threads = iprot.readI32();
+          self.threads = iprot.readI32()
         else:
           iprot.skip(ftype)
       elif fid == 5:
         if ftype == TType.I32:
-          self.durability = iprot.readI32();
+          self.durability = iprot.readI32()
         else:
           iprot.skip(ftype)
       else:
@@ -2326,6 +2475,15 @@ class WriterOptions:
     return
 
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.maxMemory)
+    value = (value * 31) ^ hash(self.latencyMs)
+    value = (value * 31) ^ hash(self.timeoutMs)
+    value = (value * 31) ^ hash(self.threads)
+    value = (value * 31) ^ hash(self.durability)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]
@@ -2365,7 +2523,7 @@ class CompactionStrategyConfig:
         break
       if fid == 1:
         if ftype == TType.STRING:
-          self.className = iprot.readString();
+          self.className = iprot.readString()
         else:
           iprot.skip(ftype)
       elif fid == 2:
@@ -2373,8 +2531,8 @@ class CompactionStrategyConfig:
           self.options = {}
           (_ktype136, _vtype137, _size135 ) = iprot.readMapBegin()
           for _i139 in xrange(_size135):
-            _key140 = iprot.readString();
-            _val141 = iprot.readString();
+            _key140 = iprot.readString()
+            _val141 = iprot.readString()
             self.options[_key140] = _val141
           iprot.readMapEnd()
         else:
@@ -2408,6 +2566,12 @@ class CompactionStrategyConfig:
     return
 
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.className)
+    value = (value * 31) ^ hash(self.options)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]
@@ -2444,7 +2608,7 @@ class UnknownScanner(TException):
         break
       if fid == 1:
         if ftype == TType.STRING:
-          self.msg = iprot.readString();
+          self.msg = iprot.readString()
         else:
           iprot.skip(ftype)
       else:
@@ -2471,6 +2635,11 @@ class UnknownScanner(TException):
   def __str__(self):
     return repr(self)
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.msg)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]
@@ -2507,7 +2676,7 @@ class UnknownWriter(TException):
         break
       if fid == 1:
         if ftype == TType.STRING:
-          self.msg = iprot.readString();
+          self.msg = iprot.readString()
         else:
           iprot.skip(ftype)
       else:
@@ -2534,6 +2703,11 @@ class UnknownWriter(TException):
   def __str__(self):
     return repr(self)
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.msg)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]
@@ -2570,7 +2744,7 @@ class NoMoreEntriesException(TException):
         break
       if fid == 1:
         if ftype == TType.STRING:
-          self.msg = iprot.readString();
+          self.msg = iprot.readString()
         else:
           iprot.skip(ftype)
       else:
@@ -2597,6 +2771,11 @@ class NoMoreEntriesException(TException):
   def __str__(self):
     return repr(self)
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.msg)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]
@@ -2633,7 +2812,7 @@ class AccumuloException(TException):
         break
       if fid == 1:
         if ftype == TType.STRING:
-          self.msg = iprot.readString();
+          self.msg = iprot.readString()
         else:
           iprot.skip(ftype)
       else:
@@ -2660,6 +2839,11 @@ class AccumuloException(TException):
   def __str__(self):
     return repr(self)
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.msg)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]
@@ -2696,7 +2880,7 @@ class AccumuloSecurityException(TException):
         break
       if fid == 1:
         if ftype == TType.STRING:
-          self.msg = iprot.readString();
+          self.msg = iprot.readString()
         else:
           iprot.skip(ftype)
       else:
@@ -2723,6 +2907,11 @@ class AccumuloSecurityException(TException):
   def __str__(self):
     return repr(self)
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.msg)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]
@@ -2759,7 +2948,7 @@ class TableNotFoundException(TException):
         break
       if fid == 1:
         if ftype == TType.STRING:
-          self.msg = iprot.readString();
+          self.msg = iprot.readString()
         else:
           iprot.skip(ftype)
       else:
@@ -2786,6 +2975,11 @@ class TableNotFoundException(TException):
   def __str__(self):
     return repr(self)
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.msg)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]
@@ -2822,7 +3016,7 @@ class TableExistsException(TException):
         break
       if fid == 1:
         if ftype == TType.STRING:
-          self.msg = iprot.readString();
+          self.msg = iprot.readString()
         else:
           iprot.skip(ftype)
       else:
@@ -2849,6 +3043,11 @@ class TableExistsException(TException):
   def __str__(self):
     return repr(self)
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.msg)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]
@@ -2885,7 +3084,7 @@ class MutationsRejectedException(TException):
         break
       if fid == 1:
         if ftype == TType.STRING:
-          self.msg = iprot.readString();
+          self.msg = iprot.readString()
         else:
           iprot.skip(ftype)
       else:
@@ -2912,6 +3111,11 @@ class MutationsRejectedException(TException):
   def __str__(self):
     return repr(self)
 
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.msg)
+    return value
+
   def __repr__(self):
     L = ['%s=%r' % (key, value)
       for key, value in self.__dict__.iteritems()]

http://git-wip-us.apache.org/repos/asf/accumulo/blob/3af75fc6/proxy/src/main/ruby/accumulo_proxy.rb
----------------------------------------------------------------------
diff --git a/proxy/src/main/ruby/accumulo_proxy.rb 
b/proxy/src/main/ruby/accumulo_proxy.rb
index f8d892e..38a1a23 100644
--- a/proxy/src/main/ruby/accumulo_proxy.rb
+++ b/proxy/src/main/ruby/accumulo_proxy.rb
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-# Autogenerated by Thrift Compiler (0.9.1)
+# Autogenerated by Thrift Compiler (0.9.3)
 #
 # DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
 #
@@ -1185,7 +1185,7 @@ module Accumulo
       end
 
       def send_update(writer, cells)
-        send_message('update', Update_args, :writer => writer, :cells => cells)
+        send_oneway_message('update', Update_args, :writer => writer, :cells 
=> cells)
       end
       def flush(writer)
         send_flush(writer)

http://git-wip-us.apache.org/repos/asf/accumulo/blob/3af75fc6/proxy/src/main/ruby/proxy_constants.rb
----------------------------------------------------------------------
diff --git a/proxy/src/main/ruby/proxy_constants.rb 
b/proxy/src/main/ruby/proxy_constants.rb
index 98a589e..baaf9af 100644
--- a/proxy/src/main/ruby/proxy_constants.rb
+++ b/proxy/src/main/ruby/proxy_constants.rb
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-# Autogenerated by Thrift Compiler (0.9.1)
+# Autogenerated by Thrift Compiler (0.9.3)
 #
 # DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
 #

http://git-wip-us.apache.org/repos/asf/accumulo/blob/3af75fc6/proxy/src/main/ruby/proxy_types.rb
----------------------------------------------------------------------
diff --git a/proxy/src/main/ruby/proxy_types.rb 
b/proxy/src/main/ruby/proxy_types.rb
index 57306d1..1a1484e 100644
--- a/proxy/src/main/ruby/proxy_types.rb
+++ b/proxy/src/main/ruby/proxy_types.rb
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-# Autogenerated by Thrift Compiler (0.9.1)
+# Autogenerated by Thrift Compiler (0.9.3)
 #
 # DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
 #

http://git-wip-us.apache.org/repos/asf/accumulo/blob/3af75fc6/server/base/src/main/java/org/apache/accumulo/server/rpc/CustomNonBlockingServer.java
----------------------------------------------------------------------
diff --git 
a/server/base/src/main/java/org/apache/accumulo/server/rpc/CustomNonBlockingServer.java
 
b/server/base/src/main/java/org/apache/accumulo/server/rpc/CustomNonBlockingServer.java
index c81913f..f4737be 100644
--- 
a/server/base/src/main/java/org/apache/accumulo/server/rpc/CustomNonBlockingServer.java
+++ 
b/server/base/src/main/java/org/apache/accumulo/server/rpc/CustomNonBlockingServer.java
@@ -16,254 +16,42 @@
  */
 package org.apache.accumulo.server.rpc;
 
-import java.io.IOException;
 import java.net.Socket;
 import java.nio.channels.SelectionKey;
-import java.util.Iterator;
 
 import org.apache.thrift.server.THsHaServer;
-import org.apache.thrift.server.TNonblockingServer;
-import org.apache.thrift.transport.TNonblockingServerTransport;
 import org.apache.thrift.transport.TNonblockingSocket;
 import org.apache.thrift.transport.TNonblockingTransport;
-import org.apache.thrift.transport.TTransportException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
- * This class implements a custom non-blocking thrift server, incorporating 
the {@link THsHaServer} features, and overriding the underlying
- * {@link TNonblockingServer} methods, especially {@link 
org.apache.thrift.server.TNonblockingServer.SelectAcceptThread}, in order to 
override the
- * {@link org.apache.thrift.server.AbstractNonblockingServer.FrameBuffer} and 
{@link org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer} with
- * one that reveals the client address from its transport.
+ * This class implements a custom non-blocking thrift server that stores the 
client address in thread-local storage for the invocation.
  *
- * <p>
- * The justification for this is explained in 
https://issues.apache.org/jira/browse/ACCUMULO-1691, and is needed due to the 
repeated regressions:
- * <ul>
- * <li>https://issues.apache.org/jira/browse/THRIFT-958</li>
- * <li>https://issues.apache.org/jira/browse/THRIFT-1464</li>
- * <li>https://issues.apache.org/jira/browse/THRIFT-2173</li>
- * </ul>
- *
- * <p>
- * This class contains a copy of {@link 
org.apache.thrift.server.TNonblockingServer.SelectAcceptThread} from Thrift 
0.9.1, with the slight modification of
- * instantiating a custom FrameBuffer, rather than the {@link 
org.apache.thrift.server.AbstractNonblockingServer.FrameBuffer} and
- * {@link 
org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer}. Because 
of this, any change in the implementation upstream will require a review
- * of this implementation here, to ensure any new bugfixes/features in the 
upstream Thrift class are also applied here, at least until
- * https://issues.apache.org/jira/browse/THRIFT-2173 is implemented. In the 
meantime, the maven-enforcer-plugin ensures that Thrift remains at version 
0.9.1,
- * which has been reviewed and tested.
  */
 public class CustomNonBlockingServer extends THsHaServer {
 
-  private static final Logger LOGGER = 
LoggerFactory.getLogger(CustomNonBlockingServer.class);
-  private SelectAcceptThread selectAcceptThread_;
-  private volatile boolean stopped_ = false;
-
   public CustomNonBlockingServer(Args args) {
     super(args);
   }
 
-  @Override
-  protected Runnable getRunnable(final FrameBuffer frameBuffer) {
-    return new Runnable() {
-      @Override
-      public void run() {
-        if (frameBuffer instanceof CustomNonblockingFrameBuffer) {
-          TNonblockingTransport trans = ((CustomNonblockingFrameBuffer) 
frameBuffer).getTransport();
-          if (trans instanceof TNonblockingSocket) {
-            TNonblockingSocket tsock = (TNonblockingSocket) trans;
-            Socket sock = tsock.getSocketChannel().socket();
-            
TServerUtils.clientAddress.set(sock.getInetAddress().getHostAddress() + ":" + 
sock.getPort());
-          }
-        }
-        frameBuffer.invoke();
-      }
-    };
-  }
-
-  @Override
-  protected boolean startThreads() {
-    // start the selector
-    try {
-      selectAcceptThread_ = new 
SelectAcceptThread((TNonblockingServerTransport) serverTransport_);
-      selectAcceptThread_.start();
-      return true;
-    } catch (IOException e) {
-      LOGGER.error("Failed to start selector thread!", e);
-      return false;
-    }
-  }
-
-  @Override
-  public void stop() {
-    stopped_ = true;
-    if (selectAcceptThread_ != null) {
-      selectAcceptThread_.wakeupSelector();
-    }
+  protected FrameBuffer createFrameBuffer(final TNonblockingTransport trans, 
final SelectionKey selectionKey, final AbstractSelectThread selectThread) {
+    return new CustomAsyncFrameBuffer(trans, selectionKey, selectThread);
   }
 
-  @Override
-  public boolean isStopped() {
-    return selectAcceptThread_.isStopped();
-  }
-
-  @Override
-  protected void joinSelector() {
-    // wait until the selector thread exits
-    try {
-      selectAcceptThread_.join();
-    } catch (InterruptedException e) {
-      // for now, just silently ignore. technically this means we'll have less 
of
-      // a graceful shutdown as a result.
-    }
-  }
-
-  private interface CustomNonblockingFrameBuffer {
-    TNonblockingTransport getTransport();
-  }
-
-  private class CustomAsyncFrameBuffer extends AsyncFrameBuffer implements 
CustomNonblockingFrameBuffer {
-    private TNonblockingTransport trans;
+  private class CustomAsyncFrameBuffer extends AsyncFrameBuffer {
 
     public CustomAsyncFrameBuffer(TNonblockingTransport trans, SelectionKey 
selectionKey, AbstractSelectThread selectThread) {
       super(trans, selectionKey, selectThread);
-      this.trans = trans;
-    }
-
-    @Override
-    public TNonblockingTransport getTransport() {
-      return trans;
-    }
-  }
-
-  private class CustomFrameBuffer extends FrameBuffer implements 
CustomNonblockingFrameBuffer {
-    private TNonblockingTransport trans;
-
-    public CustomFrameBuffer(TNonblockingTransport trans, SelectionKey 
selectionKey, AbstractSelectThread selectThread) {
-      super(trans, selectionKey, selectThread);
-      this.trans = trans;
-    }
-
-    @Override
-    public TNonblockingTransport getTransport() {
-      return trans;
-    }
-  }
-
-  // @formatter:off
-  private class SelectAcceptThread extends AbstractSelectThread {
-
-    // The server transport on which new client transports will be accepted
-    private final TNonblockingServerTransport serverTransport;
-
-    /**
-     * Set up the thread that will handle the non-blocking accepts, reads, and
-     * writes.
-     */
-    public SelectAcceptThread(final TNonblockingServerTransport 
serverTransport)
-    throws IOException {
-      this.serverTransport = serverTransport;
-      serverTransport.registerSelector(selector);
     }
 
-    public boolean isStopped() {
-      return stopped_;
-    }
-
-    /**
-     * The work loop. Handles both selecting (all IO operations) and managing
-     * the selection preferences of all existing connections.
-     */
     @Override
-    public void run() {
-      try {
-        if (eventHandler_ != null) {
-          eventHandler_.preServe();
-        }
-
-        while (!stopped_) {
-          select();
-          processInterestChanges();
-        }
-        for (SelectionKey selectionKey : selector.keys()) {
-          cleanupSelectionKey(selectionKey);
-        }
-      } catch (Throwable t) {
-        LOGGER.error("run() exiting due to uncaught error", t);
-      } finally {
-        stopped_ = true;
+    public void invoke() {
+      if (trans_ instanceof TNonblockingSocket) {
+        TNonblockingSocket tsock = (TNonblockingSocket) trans_;
+        Socket sock = tsock.getSocketChannel().socket();
+        TServerUtils.clientAddress.set(sock.getInetAddress().getHostAddress() 
+ ":" + sock.getPort());
       }
+      super.invoke();
     }
+  }
 
-    /**
-     * Select and process IO events appropriately:
-     * If there are connections to be accepted, accept them.
-     * If there are existing connections with data waiting to be read, read it,
-     * buffering until a whole frame has been read.
-     * If there are any pending responses, buffer them until their target 
client
-     * is available, and then send the data.
-     */
-    private void select() {
-      try {
-        // wait for io events.
-        selector.select();
-
-        // process the io events we received
-        Iterator<SelectionKey> selectedKeys = 
selector.selectedKeys().iterator();
-        while (!stopped_ && selectedKeys.hasNext()) {
-          SelectionKey key = selectedKeys.next();
-          selectedKeys.remove();
-
-          // skip if not valid
-          if (!key.isValid()) {
-            cleanupSelectionKey(key);
-            continue;
-          }
-
-          // if the key is marked Accept, then it has to be the server
-          // transport.
-          if (key.isAcceptable()) {
-            handleAccept();
-          } else if (key.isReadable()) {
-            // deal with reads
-            handleRead(key);
-          } else if (key.isWritable()) {
-            // deal with writes
-            handleWrite(key);
-          } else {
-            LOGGER.warn("Unexpected state in select! " + key.interestOps());
-          }
-        }
-      } catch (IOException e) {
-        LOGGER.warn("Got an IOException while selecting!", e);
-      }
-    }
-
-    /**
-     * Accept a new connection.
-     */
-    @SuppressWarnings("unused")
-    private void handleAccept() throws IOException {
-      SelectionKey clientKey = null;
-      TNonblockingTransport client = null;
-      try {
-        // accept the connection
-        client = (TNonblockingTransport)serverTransport.accept();
-        clientKey = client.registerSelector(selector, SelectionKey.OP_READ);
-
-        // add this key to the map
-          FrameBuffer frameBuffer =
-              processorFactory_.isAsyncProcessor() ? new 
CustomAsyncFrameBuffer(client, clientKey,SelectAcceptThread.this) :
-                  new CustomFrameBuffer(client, 
clientKey,SelectAcceptThread.this);
-
-          clientKey.attach(frameBuffer);
-      } catch (TTransportException tte) {
-        // something went wrong accepting.
-        LOGGER.warn("Exception trying to accept!", tte);
-        tte.printStackTrace();
-        if (clientKey != null) cleanupSelectionKey(clientKey);
-        if (client != null) client.close();
-      }
-    }
-  } // SelectAcceptThread
-  // @formatter:on
 }

http://git-wip-us.apache.org/repos/asf/accumulo/blob/3af75fc6/server/base/src/main/java/org/apache/accumulo/server/rpc/TNonblockingServerSocket.java
----------------------------------------------------------------------
diff --git 
a/server/base/src/main/java/org/apache/accumulo/server/rpc/TNonblockingServerSocket.java
 
b/server/base/src/main/java/org/apache/accumulo/server/rpc/TNonblockingServerSocket.java
deleted file mode 100644
index a209e69..0000000
--- 
a/server/base/src/main/java/org/apache/accumulo/server/rpc/TNonblockingServerSocket.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.accumulo.server.rpc;
-
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.net.ServerSocket;
-import java.net.SocketException;
-import java.nio.channels.ClosedChannelException;
-import java.nio.channels.SelectionKey;
-import java.nio.channels.Selector;
-import java.nio.channels.ServerSocketChannel;
-import java.nio.channels.SocketChannel;
-
-import org.apache.thrift.transport.TNonblockingServerTransport;
-import org.apache.thrift.transport.TNonblockingSocket;
-import org.apache.thrift.transport.TTransportException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Wrapper around ServerSocketChannel.
- *
- * This class is copied from 
org.apache.thrift.transport.TNonblockingServerSocket version 0.9. The only 
change (apart from the logging statements) is the
- * addition of the {@link #getPort()} method to retrieve the port used by the 
ServerSocket.
- */
-public class TNonblockingServerSocket extends TNonblockingServerTransport {
-  private static final Logger log = 
LoggerFactory.getLogger(TNonblockingServerSocket.class);
-
-  /**
-   * This channel is where all the nonblocking magic happens.
-   */
-  private ServerSocketChannel serverSocketChannel = null;
-
-  /**
-   * Underlying ServerSocket object
-   */
-  private ServerSocket serverSocket_ = null;
-
-  /**
-   * Timeout for client sockets from accept
-   */
-  private int clientTimeout_ = 0;
-
-  /**
-   * Creates just a port listening server socket
-   */
-  public TNonblockingServerSocket(int port, int clientTimeout) throws 
TTransportException {
-    this(new InetSocketAddress(port), clientTimeout);
-  }
-
-  public TNonblockingServerSocket(InetSocketAddress bindAddr) throws 
TTransportException {
-    this(bindAddr, 0);
-  }
-
-  public TNonblockingServerSocket(InetSocketAddress bindAddr, int 
clientTimeout) throws TTransportException {
-    clientTimeout_ = clientTimeout;
-    try {
-      serverSocketChannel = ServerSocketChannel.open();
-      serverSocketChannel.configureBlocking(false);
-
-      // Make server socket
-      serverSocket_ = serverSocketChannel.socket();
-      // Prevent 2MSL delay problem on server restarts
-      serverSocket_.setReuseAddress(true);
-      // Bind to listening port
-      serverSocket_.bind(bindAddr);
-    } catch (IOException ioe) {
-      serverSocket_ = null;
-      throw new TTransportException("Could not create ServerSocket on address 
" + bindAddr.toString() + ".");
-    }
-  }
-
-  @Override
-  public void listen() throws TTransportException {
-    // Make sure not to block on accept
-    if (serverSocket_ != null) {
-      try {
-        serverSocket_.setSoTimeout(0);
-      } catch (SocketException sx) {
-        log.error("SocketException caused by serverSocket in listen()", sx);
-      }
-    }
-  }
-
-  @Override
-  protected TNonblockingSocket acceptImpl() throws TTransportException {
-    if (serverSocket_ == null) {
-      throw new TTransportException(TTransportException.NOT_OPEN, "No 
underlying server socket.");
-    }
-    try {
-      SocketChannel socketChannel = serverSocketChannel.accept();
-      if (socketChannel == null) {
-        return null;
-      }
-
-      TNonblockingSocket tsocket = new TNonblockingSocket(socketChannel);
-      tsocket.setTimeout(clientTimeout_);
-      return tsocket;
-    } catch (IOException iox) {
-      throw new TTransportException(iox);
-    }
-  }
-
-  @Override
-  public void registerSelector(Selector selector) {
-    try {
-      // Register the server socket channel, indicating an interest in
-      // accepting new connections
-      serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
-    } catch (ClosedChannelException e) {
-      // this shouldn't happen, ideally...
-      // TODO: decide what to do with this.
-    }
-  }
-
-  @Override
-  public void close() {
-    if (serverSocket_ != null) {
-      try {
-        serverSocket_.close();
-      } catch (IOException iox) {
-        log.warn("WARNING: Could not close server socket: {}", 
iox.getMessage());
-      }
-      serverSocket_ = null;
-    }
-  }
-
-  @Override
-  public void interrupt() {
-    // The thread-safeness of this is dubious, but Java documentation suggests
-    // that it is safe to do this from a different thread context
-    close();
-  }
-
-  public int getPort() {
-    return serverSocket_.getLocalPort();
-  }
-}

http://git-wip-us.apache.org/repos/asf/accumulo/blob/3af75fc6/server/base/src/main/java/org/apache/accumulo/server/rpc/TServerUtils.java
----------------------------------------------------------------------
diff --git 
a/server/base/src/main/java/org/apache/accumulo/server/rpc/TServerUtils.java 
b/server/base/src/main/java/org/apache/accumulo/server/rpc/TServerUtils.java
index eb8095f..f474dc3 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/rpc/TServerUtils.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/rpc/TServerUtils.java
@@ -16,6 +16,8 @@
  */
 package org.apache.accumulo.server.rpc;
 
+import static 
com.google.common.util.concurrent.Uninterruptibles.sleepUninterruptibly;
+
 import java.io.IOException;
 import java.lang.reflect.Field;
 import java.net.BindException;
@@ -51,6 +53,7 @@ import org.apache.thrift.TProcessorFactory;
 import org.apache.thrift.protocol.TProtocolFactory;
 import org.apache.thrift.server.TServer;
 import org.apache.thrift.server.TThreadPoolServer;
+import org.apache.thrift.transport.TNonblockingServerSocket;
 import org.apache.thrift.transport.TSSLTransportFactory;
 import org.apache.thrift.transport.TSaslServerTransport;
 import org.apache.thrift.transport.TServerSocket;
@@ -62,7 +65,6 @@ import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Preconditions;
 import com.google.common.net.HostAndPort;
-import static 
com.google.common.util.concurrent.Uninterruptibles.sleepUninterruptibly;
 
 /**
  * Factory methods for creating Thrift server objects
@@ -393,6 +395,7 @@ public class TServerUtils {
       hostname = 
InetAddress.getByName(address.getHostText()).getCanonicalHostName();
       fqdn = InetAddress.getLocalHost().getCanonicalHostName();
     } catch (UnknownHostException e) {
+      transport.close();
       throw new TTransportException(e);
     }
 
@@ -408,6 +411,7 @@ public class TServerUtils {
       log.error(
           "Expected hostname of '{}' but got '{}'. Ensure the entries in the 
Accumulo hosts files (e.g. masters, slaves) are the FQDN for each host when 
using SASL.",
           fqdn, hostname);
+      transport.close();
       throw new RuntimeException("SASL requires that the address the thrift 
server listens on is the same as the FQDN for this host");
     }
 
@@ -415,6 +419,7 @@ public class TServerUtils {
     try {
       serverUser = UserGroupInformation.getLoginUser();
     } catch (IOException e) {
+      transport.close();
       throw new TTransportException(e);
     }
 

http://git-wip-us.apache.org/repos/asf/accumulo/blob/3af75fc6/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/Annotation.java
----------------------------------------------------------------------
diff --git 
a/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/Annotation.java 
b/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/Annotation.java
index af4cfd5..c5e658c 100644
--- 
a/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/Annotation.java
+++ 
b/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/Annotation.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 /**
- * Autogenerated by Thrift Compiler (0.9.1)
+ * Autogenerated by Thrift Compiler (0.9.3)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -45,10 +45,13 @@ import java.util.Collections;
 import java.util.BitSet;
 import java.nio.ByteBuffer;
 import java.util.Arrays;
+import javax.annotation.Generated;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@SuppressWarnings({"unchecked", "serial", "rawtypes", "unused"}) public class 
Annotation implements org.apache.thrift.TBase<Annotation, Annotation._Fields>, 
java.io.Serializable, Cloneable, Comparable<Annotation> {
+@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
+@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = 
"2015-12-16")
+public class Annotation implements org.apache.thrift.TBase<Annotation, 
Annotation._Fields>, java.io.Serializable, Cloneable, Comparable<Annotation> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new 
org.apache.thrift.protocol.TStruct("Annotation");
 
   private static final org.apache.thrift.protocol.TField TIME_FIELD_DESC = new 
org.apache.thrift.protocol.TField("time", org.apache.thrift.protocol.TType.I64, 
(short)1);
@@ -244,7 +247,7 @@ import org.slf4j.LoggerFactory;
   public Object getFieldValue(_Fields field) {
     switch (field) {
     case TIME:
-      return Long.valueOf(getTime());
+      return getTime();
 
     case MSG:
       return getMsg();
@@ -304,7 +307,19 @@ import org.slf4j.LoggerFactory;
 
   @Override
   public int hashCode() {
-    return 0;
+    List<Object> list = new ArrayList<Object>();
+
+    boolean present_time = true;
+    list.add(present_time);
+    if (present_time)
+      list.add(time);
+
+    boolean present_msg = true && (isSetMsg());
+    list.add(present_msg);
+    if (present_msg)
+      list.add(msg);
+
+    return list.hashCode();
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/accumulo/blob/3af75fc6/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/RemoteSpan.java
----------------------------------------------------------------------
diff --git 
a/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/RemoteSpan.java 
b/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/RemoteSpan.java
index 285aebd..a66018b 100644
--- 
a/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/RemoteSpan.java
+++ 
b/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/RemoteSpan.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 /**
- * Autogenerated by Thrift Compiler (0.9.1)
+ * Autogenerated by Thrift Compiler (0.9.3)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -45,10 +45,13 @@ import java.util.Collections;
 import java.util.BitSet;
 import java.nio.ByteBuffer;
 import java.util.Arrays;
+import javax.annotation.Generated;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@SuppressWarnings({"unchecked", "serial", "rawtypes", "unused"}) public class 
RemoteSpan implements org.apache.thrift.TBase<RemoteSpan, RemoteSpan._Fields>, 
java.io.Serializable, Cloneable, Comparable<RemoteSpan> {
+@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
+@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = 
"2015-12-16")
+public class RemoteSpan implements org.apache.thrift.TBase<RemoteSpan, 
RemoteSpan._Fields>, java.io.Serializable, Cloneable, Comparable<RemoteSpan> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new 
org.apache.thrift.protocol.TStruct("RemoteSpan");
 
   private static final org.apache.thrift.protocol.TField SENDER_FIELD_DESC = 
new org.apache.thrift.protocol.TField("sender", 
org.apache.thrift.protocol.TType.STRING, (short)1);
@@ -644,19 +647,19 @@ import org.slf4j.LoggerFactory;
       return getSvc();
 
     case TRACE_ID:
-      return Long.valueOf(getTraceId());
+      return getTraceId();
 
     case SPAN_ID:
-      return Long.valueOf(getSpanId());
+      return getSpanId();
 
     case PARENT_ID:
-      return Long.valueOf(getParentId());
+      return getParentId();
 
     case START:
-      return Long.valueOf(getStart());
+      return getStart();
 
     case STOP:
-      return Long.valueOf(getStop());
+      return getStop();
 
     case DESCRIPTION:
       return getDescription();
@@ -810,7 +813,59 @@ import org.slf4j.LoggerFactory;
 
   @Override
   public int hashCode() {
-    return 0;
+    List<Object> list = new ArrayList<Object>();
+
+    boolean present_sender = true && (isSetSender());
+    list.add(present_sender);
+    if (present_sender)
+      list.add(sender);
+
+    boolean present_svc = true && (isSetSvc());
+    list.add(present_svc);
+    if (present_svc)
+      list.add(svc);
+
+    boolean present_traceId = true;
+    list.add(present_traceId);
+    if (present_traceId)
+      list.add(traceId);
+
+    boolean present_spanId = true;
+    list.add(present_spanId);
+    if (present_spanId)
+      list.add(spanId);
+
+    boolean present_parentId = true;
+    list.add(present_parentId);
+    if (present_parentId)
+      list.add(parentId);
+
+    boolean present_start = true;
+    list.add(present_start);
+    if (present_start)
+      list.add(start);
+
+    boolean present_stop = true;
+    list.add(present_stop);
+    if (present_stop)
+      list.add(stop);
+
+    boolean present_description = true && (isSetDescription());
+    list.add(present_description);
+    if (present_description)
+      list.add(description);
+
+    boolean present_data = true && (isSetData());
+    list.add(present_data);
+    if (present_data)
+      list.add(data);
+
+    boolean present_annotations = true && (isSetAnnotations());
+    list.add(present_annotations);
+    if (present_annotations)
+      list.add(annotations);
+
+    return list.hashCode();
   }
 
   @Override
@@ -1114,13 +1169,13 @@ import org.slf4j.LoggerFactory;
               {
                 org.apache.thrift.protocol.TMap _map0 = iprot.readMapBegin();
                 struct.data = new HashMap<String,String>(2*_map0.size);
-                for (int _i1 = 0; _i1 < _map0.size; ++_i1)
+                String _key1;
+                String _val2;
+                for (int _i3 = 0; _i3 < _map0.size; ++_i3)
                 {
-                  String _key2;
-                  String _val3;
-                  _key2 = iprot.readString();
-                  _val3 = iprot.readString();
-                  struct.data.put(_key2, _val3);
+                  _key1 = iprot.readString();
+                  _val2 = iprot.readString();
+                  struct.data.put(_key1, _val2);
                 }
                 iprot.readMapEnd();
               }
@@ -1134,12 +1189,12 @@ import org.slf4j.LoggerFactory;
               {
                 org.apache.thrift.protocol.TList _list4 = 
iprot.readListBegin();
                 struct.annotations = new ArrayList<Annotation>(_list4.size);
-                for (int _i5 = 0; _i5 < _list4.size; ++_i5)
+                Annotation _elem5;
+                for (int _i6 = 0; _i6 < _list4.size; ++_i6)
                 {
-                  Annotation _elem6;
-                  _elem6 = new Annotation();
-                  _elem6.read(iprot);
-                  struct.annotations.add(_elem6);
+                  _elem5 = new Annotation();
+                  _elem5.read(iprot);
+                  struct.annotations.add(_elem5);
                 }
                 iprot.readListEnd();
               }
@@ -1352,13 +1407,13 @@ import org.slf4j.LoggerFactory;
         {
           org.apache.thrift.protocol.TMap _map11 = new 
org.apache.thrift.protocol.TMap(org.apache.thrift.protocol.TType.STRING, 
org.apache.thrift.protocol.TType.STRING, iprot.readI32());
           struct.data = new HashMap<String,String>(2*_map11.size);
-          for (int _i12 = 0; _i12 < _map11.size; ++_i12)
+          String _key12;
+          String _val13;
+          for (int _i14 = 0; _i14 < _map11.size; ++_i14)
           {
-            String _key13;
-            String _val14;
-            _key13 = iprot.readString();
-            _val14 = iprot.readString();
-            struct.data.put(_key13, _val14);
+            _key12 = iprot.readString();
+            _val13 = iprot.readString();
+            struct.data.put(_key12, _val13);
           }
         }
         struct.setDataIsSet(true);
@@ -1367,12 +1422,12 @@ import org.slf4j.LoggerFactory;
         {
           org.apache.thrift.protocol.TList _list15 = new 
org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, 
iprot.readI32());
           struct.annotations = new ArrayList<Annotation>(_list15.size);
-          for (int _i16 = 0; _i16 < _list15.size; ++_i16)
+          Annotation _elem16;
+          for (int _i17 = 0; _i17 < _list15.size; ++_i17)
           {
-            Annotation _elem17;
-            _elem17 = new Annotation();
-            _elem17.read(iprot);
-            struct.annotations.add(_elem17);
+            _elem16 = new Annotation();
+            _elem16.read(iprot);
+            struct.annotations.add(_elem16);
           }
         }
         struct.setAnnotationsIsSet(true);

http://git-wip-us.apache.org/repos/asf/accumulo/blob/3af75fc6/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/SpanReceiver.java
----------------------------------------------------------------------
diff --git 
a/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/SpanReceiver.java
 
b/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/SpanReceiver.java
index 6728522..e59ab84 100644
--- 
a/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/SpanReceiver.java
+++ 
b/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/SpanReceiver.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 /**
- * Autogenerated by Thrift Compiler (0.9.1)
+ * Autogenerated by Thrift Compiler (0.9.3)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -45,10 +45,13 @@ import java.util.Collections;
 import java.util.BitSet;
 import java.nio.ByteBuffer;
 import java.util.Arrays;
+import javax.annotation.Generated;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@SuppressWarnings({"unchecked", "serial", "rawtypes", "unused"}) public class 
SpanReceiver {
+@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
+@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = 
"2015-12-16")
+public class SpanReceiver {
 
   public interface Iface {
 
@@ -91,7 +94,7 @@ import org.slf4j.LoggerFactory;
     {
       span_args args = new span_args();
       args.setSpan(span);
-      sendBase("span", args);
+      sendBaseOneway("span", args);
     }
 
   }
@@ -127,7 +130,7 @@ import org.slf4j.LoggerFactory;
       }
 
       public void write_args(org.apache.thrift.protocol.TProtocol prot) throws 
org.apache.thrift.TException {
-        prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("span", 
org.apache.thrift.protocol.TMessageType.CALL, 0));
+        prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("span", 
org.apache.thrift.protocol.TMessageType.ONEWAY, 0));
         span_args args = new span_args();
         args.setSpan(span);
         args.write(prot);
@@ -421,7 +424,14 @@ import org.slf4j.LoggerFactory;
 
     @Override
     public int hashCode() {
-      return 0;
+      List<Object> list = new ArrayList<Object>();
+
+      boolean present_span = true && (isSetSpan());
+      list.add(present_span);
+      if (present_span)
+        list.add(span);
+
+      return list.hashCode();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/accumulo/blob/3af75fc6/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/TestService.java
----------------------------------------------------------------------
diff --git 
a/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/TestService.java
 
b/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/TestService.java
index 262e71a..71165e2 100644
--- 
a/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/TestService.java
+++ 
b/server/tracer/src/main/java/org/apache/accumulo/tracer/thrift/TestService.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 /**
- * Autogenerated by Thrift Compiler (0.9.1)
+ * Autogenerated by Thrift Compiler (0.9.3)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -45,10 +45,13 @@ import java.util.Collections;
 import java.util.BitSet;
 import java.nio.ByteBuffer;
 import java.util.Arrays;
+import javax.annotation.Generated;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@SuppressWarnings({"unchecked", "serial", "rawtypes", "unused"}) public class 
TestService {
+@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
+@Generated(value = "Autogenerated by Thrift Compiler (0.9.3)", date = 
"2015-12-16")
+public class TestService {
 
   public interface Iface {
 
@@ -522,7 +525,19 @@ import org.slf4j.LoggerFactory;
 
     @Override
     public int hashCode() {
-      return 0;
+      List<Object> list = new ArrayList<Object>();
+
+      boolean present_tinfo = true && (isSetTinfo());
+      list.add(present_tinfo);
+      if (present_tinfo)
+        list.add(tinfo);
+
+      boolean present_message = true && (isSetMessage());
+      list.add(present_message);
+      if (present_message)
+        list.add(message);
+
+      return list.hashCode();
     }
 
     @Override
@@ -878,7 +893,7 @@ import org.slf4j.LoggerFactory;
     public Object getFieldValue(_Fields field) {
       switch (field) {
       case SUCCESS:
-        return Boolean.valueOf(isSuccess());
+        return isSuccess();
 
       }
       throw new IllegalStateException();
@@ -924,7 +939,14 @@ import org.slf4j.LoggerFactory;
 
     @Override
     public int hashCode() {
-      return 0;
+      List<Object> list = new ArrayList<Object>();
+
+      boolean present_success = true;
+      list.add(present_success);
+      if (present_success)
+        list.add(success);
+
+      return list.hashCode();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/accumulo/blob/3af75fc6/test/pom.xml
----------------------------------------------------------------------
diff --git a/test/pom.xml b/test/pom.xml
index f2ccfaf..a48efb8 100644
--- a/test/pom.xml
+++ b/test/pom.xml
@@ -137,6 +137,10 @@
     </dependency>
     <dependency>
       <groupId>org.apache.commons</groupId>
+      <artifactId>commons-lang3</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
       <artifactId>commons-math</artifactId>
     </dependency>
     <dependency>

Reply via email to