You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by vj...@apache.org on 2020/03/23 17:29:18 UTC

[hbase] branch master updated: HBASE-23936 : Thrift support for Online SlowLog APIs (#1317)

This is an automated email from the ASF dual-hosted git repository.

vjasani pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/master by this push:
     new 7081ccd  HBASE-23936 : Thrift support for Online SlowLog APIs (#1317)
7081ccd is described below

commit 7081ccd53c766fb0bafa4c3e1ef28f9b18383aa0
Author: Viraj Jasani <vj...@apache.org>
AuthorDate: Mon Mar 23 22:59:04 2020 +0530

    HBASE-23936 : Thrift support for Online SlowLog APIs (#1317)
    
    Signed-off-by: ramkrish86 <ra...@apache.org>
---
 .../hbase/thrift2/ThriftHBaseServiceHandler.java   |   33 +
 .../hadoop/hbase/thrift2/ThriftUtilities.java      |  105 +
 .../hadoop/hbase/thrift2/client/ThriftAdmin.java   |   26 +-
 .../hadoop/hbase/thrift2/generated/TAppend.java    |    4 +-
 .../hbase/thrift2/generated/TAuthorization.java    |    4 +-
 .../hbase/thrift2/generated/TBloomFilterType.java  |    4 +-
 .../hbase/thrift2/generated/TCellVisibility.java   |    4 +-
 .../hadoop/hbase/thrift2/generated/TColumn.java    |    4 +-
 .../thrift2/generated/TColumnFamilyDescriptor.java |    4 +-
 .../hbase/thrift2/generated/TColumnIncrement.java  |    4 +-
 .../hbase/thrift2/generated/TColumnValue.java      |    4 +-
 .../hbase/thrift2/generated/TCompareOperator.java  |    4 +-
 .../thrift2/generated/TCompressionAlgorithm.java   |    4 +-
 .../hbase/thrift2/generated/TConsistency.java      |    4 +-
 .../thrift2/generated/TDataBlockEncoding.java      |    4 +-
 .../hadoop/hbase/thrift2/generated/TDelete.java    |    4 +-
 .../hbase/thrift2/generated/TDeleteType.java       |    4 +-
 .../hbase/thrift2/generated/TDurability.java       |    4 +-
 .../hadoop/hbase/thrift2/generated/TGet.java       |    4 +-
 .../hbase/thrift2/generated/THBaseService.java     | 2388 +++++++++++++++++++-
 .../hbase/thrift2/generated/THRegionInfo.java      |    4 +-
 .../hbase/thrift2/generated/THRegionLocation.java  |    4 +-
 .../hadoop/hbase/thrift2/generated/TIOError.java   |    4 +-
 .../hbase/thrift2/generated/TIllegalArgument.java  |    4 +-
 .../hadoop/hbase/thrift2/generated/TIncrement.java |    4 +-
 .../hbase/thrift2/generated/TKeepDeletedCells.java |    4 +-
 .../hadoop/hbase/thrift2/generated/TMutation.java  |    4 +-
 .../thrift2/generated/TNamespaceDescriptor.java    |    4 +-
 .../hadoop/hbase/thrift2/generated/TPut.java       |    4 +-
 .../hadoop/hbase/thrift2/generated/TReadType.java  |    4 +-
 .../hadoop/hbase/thrift2/generated/TResult.java    |    4 +-
 .../hbase/thrift2/generated/TRowMutations.java     |    4 +-
 .../hadoop/hbase/thrift2/generated/TScan.java      |    4 +-
 .../hbase/thrift2/generated/TServerName.java       |    4 +-
 .../thrift2/generated/TSlowLogQueryFilter.java     |  805 +++++++
 .../hbase/thrift2/generated/TSlowLogRecord.java    | 1645 ++++++++++++++
 .../hbase/thrift2/generated/TTableDescriptor.java  |    4 +-
 .../hadoop/hbase/thrift2/generated/TTableName.java |    4 +-
 .../hbase/thrift2/generated/TThriftServerType.java |    4 +-
 .../hadoop/hbase/thrift2/generated/TTimeRange.java |    4 +-
 .../org/apache/hadoop/hbase/thrift2/hbase.thrift   |   61 +
 .../thrift2/TestThriftHBaseServiceHandler.java     |   33 +
 42 files changed, 5158 insertions(+), 74 deletions(-)

diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftHBaseServiceHandler.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftHBaseServiceHandler.java
index a263956..b535bb4 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftHBaseServiceHandler.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftHBaseServiceHandler.java
@@ -51,6 +51,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.regex.Pattern;
@@ -59,10 +60,13 @@ import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.DoNotRetryIOException;
 import org.apache.hadoop.hbase.HRegionLocation;
 import org.apache.hadoop.hbase.NamespaceDescriptor;
+import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;
 import org.apache.hadoop.hbase.client.RegionLocator;
 import org.apache.hadoop.hbase.client.ResultScanner;
+import org.apache.hadoop.hbase.client.SlowLogQueryFilter;
+import org.apache.hadoop.hbase.client.SlowLogRecord;
 import org.apache.hadoop.hbase.client.Table;
 import org.apache.hadoop.hbase.client.TableDescriptor;
 import org.apache.hadoop.hbase.security.UserProvider;
@@ -82,6 +86,9 @@ import org.apache.hadoop.hbase.thrift2.generated.TPut;
 import org.apache.hadoop.hbase.thrift2.generated.TResult;
 import org.apache.hadoop.hbase.thrift2.generated.TRowMutations;
 import org.apache.hadoop.hbase.thrift2.generated.TScan;
+import org.apache.hadoop.hbase.thrift2.generated.TServerName;
+import org.apache.hadoop.hbase.thrift2.generated.TSlowLogQueryFilter;
+import org.apache.hadoop.hbase.thrift2.generated.TSlowLogRecord;
 import org.apache.hadoop.hbase.thrift2.generated.TTableDescriptor;
 import org.apache.hadoop.hbase.thrift2.generated.TTableName;
 import org.apache.hadoop.hbase.thrift2.generated.TThriftServerType;
@@ -823,6 +830,32 @@ public class ThriftHBaseServiceHandler extends HBaseServiceHandler implements TH
   }
 
   @Override
+  public List<TSlowLogRecord> getSlowLogResponses(Set<TServerName> tServerNames,
+      TSlowLogQueryFilter tSlowLogQueryFilter) throws TIOError, TException {
+    try {
+      Set<ServerName> serverNames = ThriftUtilities.getServerNamesFromThrift(tServerNames);
+      SlowLogQueryFilter slowLogQueryFilter =
+        ThriftUtilities.getSlowLogQueryFromThrift(tSlowLogQueryFilter);
+      List<SlowLogRecord> slowLogRecords =
+        connectionCache.getAdmin().getSlowLogResponses(serverNames, slowLogQueryFilter);
+      return ThriftUtilities.getSlowLogRecordsFromHBase(slowLogRecords);
+    } catch (IOException e) {
+      throw getTIOError(e);
+    }
+  }
+
+  @Override
+  public List<Boolean> clearSlowLogResponses(Set<TServerName> tServerNames)
+      throws TIOError, TException {
+    Set<ServerName> serverNames = ThriftUtilities.getServerNamesFromThrift(tServerNames);
+    try {
+      return connectionCache.getAdmin().clearSlowLogResponses(serverNames);
+    } catch (IOException e) {
+      throw getTIOError(e);
+    }
+  }
+
+  @Override
   public List<TNamespaceDescriptor> listNamespaceDescriptors() throws TIOError, TException {
     try {
       NamespaceDescriptor[] descriptors = connectionCache.getAdmin().listNamespaceDescriptors();
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftUtilities.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftUtilities.java
index 7a49b51..78260b6 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftUtilities.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/ThriftUtilities.java
@@ -23,9 +23,12 @@ import static org.apache.hadoop.hbase.util.Bytes.getBytes;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.NavigableSet;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.CellBuilderFactory;
@@ -58,6 +61,8 @@ import org.apache.hadoop.hbase.client.Result;
 import org.apache.hadoop.hbase.client.RowMutations;
 import org.apache.hadoop.hbase.client.Scan;
 import org.apache.hadoop.hbase.client.Scan.ReadType;
+import org.apache.hadoop.hbase.client.SlowLogQueryFilter;
+import org.apache.hadoop.hbase.client.SlowLogRecord;
 import org.apache.hadoop.hbase.client.TableDescriptor;
 import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
 import org.apache.hadoop.hbase.exceptions.DeserializationException;
@@ -97,10 +102,13 @@ import org.apache.hadoop.hbase.thrift2.generated.TResult;
 import org.apache.hadoop.hbase.thrift2.generated.TRowMutations;
 import org.apache.hadoop.hbase.thrift2.generated.TScan;
 import org.apache.hadoop.hbase.thrift2.generated.TServerName;
+import org.apache.hadoop.hbase.thrift2.generated.TSlowLogQueryFilter;
+import org.apache.hadoop.hbase.thrift2.generated.TSlowLogRecord;
 import org.apache.hadoop.hbase.thrift2.generated.TTableDescriptor;
 import org.apache.hadoop.hbase.thrift2.generated.TTableName;
 import org.apache.hadoop.hbase.thrift2.generated.TTimeRange;
 import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.hbase.thirdparty.org.apache.commons.collections4.CollectionUtils;
 import org.apache.yetus.audience.InterfaceAudience;
 
 import org.apache.hbase.thirdparty.org.apache.commons.collections4.MapUtils;
@@ -1472,4 +1480,101 @@ public final class ThriftUtilities {
     return out;
   }
 
+  public static Set<TServerName> getServerNamesFromHBase(Set<ServerName> serverNames) {
+    if (CollectionUtils.isEmpty(serverNames)) {
+      return Collections.emptySet();
+    }
+    return serverNames.stream().map(serverName -> {
+      TServerName tServerName = new TServerName();
+      tServerName.setHostName(serverName.getHostname());
+      tServerName.setPort(serverName.getPort());
+      tServerName.setStartCode(serverName.getStartcode());
+      return tServerName;
+    }).collect(Collectors.toSet());
+  }
+
+  public static Set<ServerName> getServerNamesFromThrift(Set<TServerName> tServerNames) {
+    if (CollectionUtils.isEmpty(tServerNames)) {
+      return Collections.emptySet();
+    }
+    return tServerNames.stream().map(tServerName ->
+      ServerName.valueOf(tServerName.getHostName(),
+        tServerName.getPort(),
+        tServerName.getStartCode()))
+      .collect(Collectors.toSet());
+  }
+
+  public static TSlowLogQueryFilter getSlowLogQueryFromHBase(
+      SlowLogQueryFilter slowLogQueryFilter) {
+    TSlowLogQueryFilter tSlowLogQueryFilter = new TSlowLogQueryFilter();
+    tSlowLogQueryFilter.setRegionName(slowLogQueryFilter.getRegionName());
+    tSlowLogQueryFilter.setClientAddress(slowLogQueryFilter.getClientAddress());
+    tSlowLogQueryFilter.setTableName(slowLogQueryFilter.getTableName());
+    tSlowLogQueryFilter.setUserName(slowLogQueryFilter.getUserName());
+    tSlowLogQueryFilter.setLimit(slowLogQueryFilter.getLimit());
+    return tSlowLogQueryFilter;
+  }
+
+  public static SlowLogQueryFilter getSlowLogQueryFromThrift(
+      TSlowLogQueryFilter tSlowLogQueryFilter) {
+    SlowLogQueryFilter slowLogQueryFilter = new SlowLogQueryFilter();
+    slowLogQueryFilter.setRegionName(tSlowLogQueryFilter.getRegionName());
+    slowLogQueryFilter.setClientAddress(tSlowLogQueryFilter.getClientAddress());
+    slowLogQueryFilter.setTableName(tSlowLogQueryFilter.getTableName());
+    slowLogQueryFilter.setUserName(tSlowLogQueryFilter.getUserName());
+    slowLogQueryFilter.setLimit(tSlowLogQueryFilter.getLimit());
+    return slowLogQueryFilter;
+  }
+
+  public static List<TSlowLogRecord> getSlowLogRecordsFromHBase(
+      List<SlowLogRecord> slowLogRecords) {
+    if (CollectionUtils.isEmpty(slowLogRecords)) {
+      return Collections.emptyList();
+    }
+    return slowLogRecords.stream()
+      .map(slowLogRecord -> {
+        TSlowLogRecord tSlowLogRecord = new TSlowLogRecord();
+        tSlowLogRecord.setCallDetails(slowLogRecord.getCallDetails());
+        tSlowLogRecord.setClientAddress(slowLogRecord.getClientAddress());
+        tSlowLogRecord.setMethodName(slowLogRecord.getMethodName());
+        tSlowLogRecord.setMultiGetsCount(slowLogRecord.getMultiGetsCount());
+        tSlowLogRecord.setMultiMutationsCount(slowLogRecord.getMultiMutationsCount());
+        tSlowLogRecord.setMultiServiceCalls(slowLogRecord.getMultiServiceCalls());
+        tSlowLogRecord.setParam(slowLogRecord.getParam());
+        tSlowLogRecord.setProcessingTime(slowLogRecord.getProcessingTime());
+        tSlowLogRecord.setQueueTime(slowLogRecord.getQueueTime());
+        tSlowLogRecord.setRegionName(slowLogRecord.getRegionName());
+        tSlowLogRecord.setResponseSize(slowLogRecord.getResponseSize());
+        tSlowLogRecord.setServerClass(slowLogRecord.getServerClass());
+        tSlowLogRecord.setStartTime(slowLogRecord.getStartTime());
+        tSlowLogRecord.setUserName(slowLogRecord.getUserName());
+        return tSlowLogRecord;
+      }).collect(Collectors.toList());
+  }
+
+  public static List<SlowLogRecord> getSlowLogRecordsFromThrift(
+      List<TSlowLogRecord> tSlowLogRecords) {
+    if (CollectionUtils.isEmpty(tSlowLogRecords)) {
+      return Collections.emptyList();
+    }
+    return tSlowLogRecords.stream()
+      .map(tSlowLogRecord -> new SlowLogRecord.SlowLogRecordBuilder()
+        .setCallDetails(tSlowLogRecord.getCallDetails())
+        .setClientAddress(tSlowLogRecord.getClientAddress())
+        .setMethodName(tSlowLogRecord.getMethodName())
+        .setMultiGetsCount(tSlowLogRecord.getMultiGetsCount())
+        .setMultiMutationsCount(tSlowLogRecord.getMultiMutationsCount())
+        .setMultiServiceCalls(tSlowLogRecord.getMultiServiceCalls())
+        .setParam(tSlowLogRecord.getParam())
+        .setProcessingTime(tSlowLogRecord.getProcessingTime())
+        .setQueueTime(tSlowLogRecord.getQueueTime())
+        .setRegionName(tSlowLogRecord.getRegionName())
+        .setResponseSize(tSlowLogRecord.getResponseSize())
+        .setServerClass(tSlowLogRecord.getServerClass())
+        .setStartTime(tSlowLogRecord.getStartTime())
+        .setUserName(tSlowLogRecord.getUserName())
+        .build())
+      .collect(Collectors.toList());
+  }
+
 }
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/client/ThriftAdmin.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/client/ThriftAdmin.java
index 6adfef3..0ac4a74 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/client/ThriftAdmin.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/client/ThriftAdmin.java
@@ -68,6 +68,9 @@ import org.apache.hadoop.hbase.thrift2.ThriftUtilities;
 import org.apache.hadoop.hbase.thrift2.generated.TColumnFamilyDescriptor;
 import org.apache.hadoop.hbase.thrift2.generated.THBaseService;
 import org.apache.hadoop.hbase.thrift2.generated.TNamespaceDescriptor;
+import org.apache.hadoop.hbase.thrift2.generated.TServerName;
+import org.apache.hadoop.hbase.thrift2.generated.TSlowLogQueryFilter;
+import org.apache.hadoop.hbase.thrift2.generated.TSlowLogRecord;
 import org.apache.hadoop.hbase.thrift2.generated.TTableDescriptor;
 import org.apache.hadoop.hbase.thrift2.generated.TTableName;
 import org.apache.hadoop.hbase.util.Bytes;
@@ -1164,13 +1167,28 @@ public class ThriftAdmin implements Admin {
 
   @Override
   public List<SlowLogRecord> getSlowLogResponses(final Set<ServerName> serverNames,
-      final SlowLogQueryFilter slowLogQueryFilter) {
-    throw new NotImplementedException("getSlowLogResponses not supported in ThriftAdmin");
+      final SlowLogQueryFilter slowLogQueryFilter) throws IOException {
+    Set<TServerName> tServerNames = ThriftUtilities.getServerNamesFromHBase(serverNames);
+    TSlowLogQueryFilter tSlowLogQueryFilter =
+      ThriftUtilities.getSlowLogQueryFromHBase(slowLogQueryFilter);
+    try {
+      List<TSlowLogRecord> tSlowLogRecords =
+        client.getSlowLogResponses(tServerNames, tSlowLogQueryFilter);
+      return ThriftUtilities.getSlowLogRecordsFromThrift(tSlowLogRecords);
+    } catch (TException e) {
+      throw new IOException(e);
+    }
   }
 
   @Override
-  public List<Boolean> clearSlowLogResponses(final Set<ServerName> serverNames) {
-    throw new NotImplementedException("clearSlowLogsResponses not supported in ThriftAdmin");
+  public List<Boolean> clearSlowLogResponses(final Set<ServerName> serverNames)
+      throws IOException {
+    Set<TServerName> tServerNames = ThriftUtilities.getServerNamesFromHBase(serverNames);
+    try {
+      return client.clearSlowLogResponses(tServerNames);
+    } catch (TException e) {
+      throw new IOException(e);
+    }
   }
 
   @Override
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TAppend.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TAppend.java
index 28e48a1..26af3c7 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TAppend.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TAppend.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -7,7 +7,7 @@
 package org.apache.hadoop.hbase.thrift2.generated;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public class TAppend implements org.apache.thrift.TBase<TAppend, TAppend._Fields>, java.io.Serializable, Cloneable, Comparable<TAppend> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TAppend");
 
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TAuthorization.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TAuthorization.java
index 60de5d9..a3f2ae8 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TAuthorization.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TAuthorization.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -7,7 +7,7 @@
 package org.apache.hadoop.hbase.thrift2.generated;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public class TAuthorization implements org.apache.thrift.TBase<TAuthorization, TAuthorization._Fields>, java.io.Serializable, Cloneable, Comparable<TAuthorization> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TAuthorization");
 
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TBloomFilterType.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TBloomFilterType.java
index 5ef1d12..6230087 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TBloomFilterType.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TBloomFilterType.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -11,7 +11,7 @@ package org.apache.hadoop.hbase.thrift2.generated;
  * Thrift wrapper around
  * org.apache.hadoop.hbase.regionserver.BloomType
  */
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public enum TBloomFilterType implements org.apache.thrift.TEnum {
   /**
    * Bloomfilters disabled
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TCellVisibility.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TCellVisibility.java
index 3791b54..f2cc3e1 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TCellVisibility.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TCellVisibility.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -7,7 +7,7 @@
 package org.apache.hadoop.hbase.thrift2.generated;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public class TCellVisibility implements org.apache.thrift.TBase<TCellVisibility, TCellVisibility._Fields>, java.io.Serializable, Cloneable, Comparable<TCellVisibility> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TCellVisibility");
 
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TColumn.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TColumn.java
index 98278aa..3b0890c 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TColumn.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TColumn.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -12,7 +12,7 @@ package org.apache.hadoop.hbase.thrift2.generated;
  * in a HBase table by column family and optionally
  * a column qualifier and timestamp
  */
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public class TColumn implements org.apache.thrift.TBase<TColumn, TColumn._Fields>, java.io.Serializable, Cloneable, Comparable<TColumn> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TColumn");
 
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TColumnFamilyDescriptor.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TColumnFamilyDescriptor.java
index 737518f..6d1a5e0 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TColumnFamilyDescriptor.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TColumnFamilyDescriptor.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -11,7 +11,7 @@ package org.apache.hadoop.hbase.thrift2.generated;
  * Thrift wrapper around
  * org.apache.hadoop.hbase.client.ColumnFamilyDescriptor
  */
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public class TColumnFamilyDescriptor implements org.apache.thrift.TBase<TColumnFamilyDescriptor, TColumnFamilyDescriptor._Fields>, java.io.Serializable, Cloneable, Comparable<TColumnFamilyDescriptor> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TColumnFamilyDescriptor");
 
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TColumnIncrement.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TColumnIncrement.java
index fe20ef4..4f43886 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TColumnIncrement.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TColumnIncrement.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -10,7 +10,7 @@ package org.apache.hadoop.hbase.thrift2.generated;
 /**
  * Represents a single cell and the amount to increment it by
  */
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public class TColumnIncrement implements org.apache.thrift.TBase<TColumnIncrement, TColumnIncrement._Fields>, java.io.Serializable, Cloneable, Comparable<TColumnIncrement> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TColumnIncrement");
 
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TColumnValue.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TColumnValue.java
index cb4e6be..8f858d1 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TColumnValue.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TColumnValue.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -10,7 +10,7 @@ package org.apache.hadoop.hbase.thrift2.generated;
 /**
  * Represents a single cell and its value.
  */
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public class TColumnValue implements org.apache.thrift.TBase<TColumnValue, TColumnValue._Fields>, java.io.Serializable, Cloneable, Comparable<TColumnValue> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TColumnValue");
 
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TCompareOperator.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TCompareOperator.java
index d15a6c5..75edee0 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TCompareOperator.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TCompareOperator.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -11,7 +11,7 @@ package org.apache.hadoop.hbase.thrift2.generated;
  * Thrift wrapper around
  * org.apache.hadoop.hbase.CompareOperator.
  */
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public enum TCompareOperator implements org.apache.thrift.TEnum {
   LESS(0),
   LESS_OR_EQUAL(1),
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TCompressionAlgorithm.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TCompressionAlgorithm.java
index b1a23c1..4fce7da 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TCompressionAlgorithm.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TCompressionAlgorithm.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -11,7 +11,7 @@ package org.apache.hadoop.hbase.thrift2.generated;
  * Thrift wrapper around
  * org.apache.hadoop.hbase.io.compress.Algorithm
  */
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public enum TCompressionAlgorithm implements org.apache.thrift.TEnum {
   LZO(0),
   GZ(1),
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TConsistency.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TConsistency.java
index 0f8519b..1d5d117 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TConsistency.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TConsistency.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -12,7 +12,7 @@ package org.apache.hadoop.hbase.thrift2.generated;
  *  - STRONG means reads only from primary region
  *  - TIMELINE means reads might return values from secondary region replicas
  */
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public enum TConsistency implements org.apache.thrift.TEnum {
   STRONG(1),
   TIMELINE(2);
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TDataBlockEncoding.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TDataBlockEncoding.java
index 80a434a..404006f 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TDataBlockEncoding.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TDataBlockEncoding.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -11,7 +11,7 @@ package org.apache.hadoop.hbase.thrift2.generated;
  * Thrift wrapper around
  * org.apache.hadoop.hbase.io.encoding.DataBlockEncoding
  */
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public enum TDataBlockEncoding implements org.apache.thrift.TEnum {
   /**
    * Disable data block encoding.
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TDelete.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TDelete.java
index 8b634cc..4c4ecb8 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TDelete.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TDelete.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -33,7 +33,7 @@ package org.apache.hadoop.hbase.thrift2.generated;
  * by changing the durability. If you don't provide durability, it defaults to
  * column family's default setting for durability.
  */
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public class TDelete implements org.apache.thrift.TBase<TDelete, TDelete._Fields>, java.io.Serializable, Cloneable, Comparable<TDelete> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TDelete");
 
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TDeleteType.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TDeleteType.java
index 60b57c8..e14479e 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TDeleteType.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TDeleteType.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -12,7 +12,7 @@ package org.apache.hadoop.hbase.thrift2.generated;
  *  - DELETE_COLUMN means exactly one version will be removed,
  *  - DELETE_COLUMNS means previous versions will also be removed.
  */
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public enum TDeleteType implements org.apache.thrift.TEnum {
   DELETE_COLUMN(0),
   DELETE_COLUMNS(1),
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TDurability.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TDurability.java
index b5f54ed..02af015 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TDurability.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TDurability.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -14,7 +14,7 @@ package org.apache.hadoop.hbase.thrift2.generated;
  *  - SYNC_WAL means write the Mutation to the WAL synchronously,
  *  - FSYNC_WAL means Write the Mutation to the WAL synchronously and force the entries to disk.
  */
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public enum TDurability implements org.apache.thrift.TEnum {
   USE_DEFAULT(0),
   SKIP_WAL(1),
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TGet.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TGet.java
index f55f7c2..de066f9 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TGet.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TGet.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -20,7 +20,7 @@ package org.apache.hadoop.hbase.thrift2.generated;
  * If you specify a time range and a timestamp the range is ignored.
  * Timestamps on TColumns are ignored.
  */
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public class TGet implements org.apache.thrift.TBase<TGet, TGet._Fields>, java.io.Serializable, Cloneable, Comparable<TGet> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TGet");
 
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/THBaseService.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/THBaseService.java
index 668cbcf..6ffa269 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/THBaseService.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/THBaseService.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -7,7 +7,7 @@
 package org.apache.hadoop.hbase.thrift2.generated;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public class THBaseService {
 
   public interface Iface {
@@ -512,6 +512,31 @@ public class THBaseService {
      */
     public java.lang.String getClusterId() throws org.apache.thrift.TException;
 
+    /**
+     * Retrieves online slow RPC logs from the provided list of
+     * RegionServers
+     * 
+     * @return online slowlog response list
+     * @throws TIOError if a remote or network exception occurs
+     * 
+     * @param serverNames @param serverNames Server names to get slowlog responses from
+     * 
+     * @param slowLogQueryFilter @param slowLogQueryFilter filter to be used if provided
+     */
+    public java.util.List<TSlowLogRecord> getSlowLogResponses(java.util.Set<TServerName> serverNames, TSlowLogQueryFilter slowLogQueryFilter) throws TIOError, org.apache.thrift.TException;
+
+    /**
+     * Clears online slow RPC logs from the provided list of
+     * RegionServers
+     * 
+     * @return List of booleans representing if online slowlog response buffer is cleaned
+     *   from each RegionServer
+     * @throws TIOError if a remote or network exception occurs
+     * 
+     * @param serverNames @param serverNames Set of Server names to clean slowlog responses from
+     */
+    public java.util.List<java.lang.Boolean> clearSlowLogResponses(java.util.Set<TServerName> serverNames) throws TIOError, org.apache.thrift.TException;
+
   }
 
   public interface AsyncIface {
@@ -612,6 +637,10 @@ public class THBaseService {
 
     public void getClusterId(org.apache.thrift.async.AsyncMethodCallback<java.lang.String> resultHandler) throws org.apache.thrift.TException;
 
+    public void getSlowLogResponses(java.util.Set<TServerName> serverNames, TSlowLogQueryFilter slowLogQueryFilter, org.apache.thrift.async.AsyncMethodCallback<java.util.List<TSlowLogRecord>> resultHandler) throws org.apache.thrift.TException;
+
+    public void clearSlowLogResponses(java.util.Set<TServerName> serverNames, org.apache.thrift.async.AsyncMethodCallback<java.util.List<java.lang.Boolean>> resultHandler) throws org.apache.thrift.TException;
+
   }
 
   public static class Client extends org.apache.thrift.TServiceClient implements Iface {
@@ -1868,6 +1897,59 @@ public class THBaseService {
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "getClusterId failed: unknown result");
     }
 
+    public java.util.List<TSlowLogRecord> getSlowLogResponses(java.util.Set<TServerName> serverNames, TSlowLogQueryFilter slowLogQueryFilter) throws TIOError, org.apache.thrift.TException
+    {
+      send_getSlowLogResponses(serverNames, slowLogQueryFilter);
+      return recv_getSlowLogResponses();
+    }
+
+    public void send_getSlowLogResponses(java.util.Set<TServerName> serverNames, TSlowLogQueryFilter slowLogQueryFilter) throws org.apache.thrift.TException
+    {
+      getSlowLogResponses_args args = new getSlowLogResponses_args();
+      args.setServerNames(serverNames);
+      args.setSlowLogQueryFilter(slowLogQueryFilter);
+      sendBase("getSlowLogResponses", args);
+    }
+
+    public java.util.List<TSlowLogRecord> recv_getSlowLogResponses() throws TIOError, org.apache.thrift.TException
+    {
+      getSlowLogResponses_result result = new getSlowLogResponses_result();
+      receiveBase(result, "getSlowLogResponses");
+      if (result.isSetSuccess()) {
+        return result.success;
+      }
+      if (result.io != null) {
+        throw result.io;
+      }
+      throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "getSlowLogResponses failed: unknown result");
+    }
+
+    public java.util.List<java.lang.Boolean> clearSlowLogResponses(java.util.Set<TServerName> serverNames) throws TIOError, org.apache.thrift.TException
+    {
+      send_clearSlowLogResponses(serverNames);
+      return recv_clearSlowLogResponses();
+    }
+
+    public void send_clearSlowLogResponses(java.util.Set<TServerName> serverNames) throws org.apache.thrift.TException
+    {
+      clearSlowLogResponses_args args = new clearSlowLogResponses_args();
+      args.setServerNames(serverNames);
+      sendBase("clearSlowLogResponses", args);
+    }
+
+    public java.util.List<java.lang.Boolean> recv_clearSlowLogResponses() throws TIOError, org.apache.thrift.TException
+    {
+      clearSlowLogResponses_result result = new clearSlowLogResponses_result();
+      receiveBase(result, "clearSlowLogResponses");
+      if (result.isSetSuccess()) {
+        return result.success;
+      }
+      if (result.io != null) {
+        throw result.io;
+      }
+      throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "clearSlowLogResponses failed: unknown result");
+    }
+
   }
   public static class AsyncClient extends org.apache.thrift.async.TAsyncClient implements AsyncIface {
     public static class Factory implements org.apache.thrift.async.TAsyncClientFactory<AsyncClient> {
@@ -3533,6 +3615,73 @@ public class THBaseService {
       }
     }
 
+    public void getSlowLogResponses(java.util.Set<TServerName> serverNames, TSlowLogQueryFilter slowLogQueryFilter, org.apache.thrift.async.AsyncMethodCallback<java.util.List<TSlowLogRecord>> resultHandler) throws org.apache.thrift.TException {
+      checkReady();
+      getSlowLogResponses_call method_call = new getSlowLogResponses_call(serverNames, slowLogQueryFilter, resultHandler, this, ___protocolFactory, ___transport);
+      this.___currentMethod = method_call;
+      ___manager.call(method_call);
+    }
+
+    public static class getSlowLogResponses_call extends org.apache.thrift.async.TAsyncMethodCall<java.util.List<TSlowLogRecord>> {
+      private java.util.Set<TServerName> serverNames;
+      private TSlowLogQueryFilter slowLogQueryFilter;
+      public getSlowLogResponses_call(java.util.Set<TServerName> serverNames, TSlowLogQueryFilter slowLogQueryFilter, org.apache.thrift.async.AsyncMethodCallback<java.util.List<TSlowLogRecord>> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+        super(client, protocolFactory, transport, resultHandler, false);
+        this.serverNames = serverNames;
+        this.slowLogQueryFilter = slowLogQueryFilter;
+      }
+
+      public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
+        prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("getSlowLogResponses", org.apache.thrift.protocol.TMessageType.CALL, 0));
+        getSlowLogResponses_args args = new getSlowLogResponses_args();
+        args.setServerNames(serverNames);
+        args.setSlowLogQueryFilter(slowLogQueryFilter);
+        args.write(prot);
+        prot.writeMessageEnd();
+      }
+
+      public java.util.List<TSlowLogRecord> getResult() throws TIOError, org.apache.thrift.TException {
+        if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
+          throw new java.lang.IllegalStateException("Method call not finished!");
+        }
+        org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
+        org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
+        return (new Client(prot)).recv_getSlowLogResponses();
+      }
+    }
+
+    public void clearSlowLogResponses(java.util.Set<TServerName> serverNames, org.apache.thrift.async.AsyncMethodCallback<java.util.List<java.lang.Boolean>> resultHandler) throws org.apache.thrift.TException {
+      checkReady();
+      clearSlowLogResponses_call method_call = new clearSlowLogResponses_call(serverNames, resultHandler, this, ___protocolFactory, ___transport);
+      this.___currentMethod = method_call;
+      ___manager.call(method_call);
+    }
+
+    public static class clearSlowLogResponses_call extends org.apache.thrift.async.TAsyncMethodCall<java.util.List<java.lang.Boolean>> {
+      private java.util.Set<TServerName> serverNames;
+      public clearSlowLogResponses_call(java.util.Set<TServerName> serverNames, org.apache.thrift.async.AsyncMethodCallback<java.util.List<java.lang.Boolean>> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+        super(client, protocolFactory, transport, resultHandler, false);
+        this.serverNames = serverNames;
+      }
+
+      public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
+        prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("clearSlowLogResponses", org.apache.thrift.protocol.TMessageType.CALL, 0));
+        clearSlowLogResponses_args args = new clearSlowLogResponses_args();
+        args.setServerNames(serverNames);
+        args.write(prot);
+        prot.writeMessageEnd();
+      }
+
+      public java.util.List<java.lang.Boolean> getResult() throws TIOError, org.apache.thrift.TException {
+        if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
+          throw new java.lang.IllegalStateException("Method call not finished!");
+        }
+        org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
+        org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
+        return (new Client(prot)).recv_clearSlowLogResponses();
+      }
+    }
+
   }
 
   public static class Processor<I extends Iface> extends org.apache.thrift.TBaseProcessor<I> implements org.apache.thrift.TProcessor {
@@ -3594,6 +3743,8 @@ public class THBaseService {
       processMap.put("listNamespaces", new listNamespaces());
       processMap.put("getThriftServerType", new getThriftServerType());
       processMap.put("getClusterId", new getClusterId());
+      processMap.put("getSlowLogResponses", new getSlowLogResponses());
+      processMap.put("clearSlowLogResponses", new clearSlowLogResponses());
       return processMap;
     }
 
@@ -4995,6 +5146,64 @@ public class THBaseService {
       }
     }
 
+    public static class getSlowLogResponses<I extends Iface> extends org.apache.thrift.ProcessFunction<I, getSlowLogResponses_args> {
+      public getSlowLogResponses() {
+        super("getSlowLogResponses");
+      }
+
+      public getSlowLogResponses_args getEmptyArgsInstance() {
+        return new getSlowLogResponses_args();
+      }
+
+      protected boolean isOneway() {
+        return false;
+      }
+
+      @Override
+      protected boolean rethrowUnhandledExceptions() {
+        return false;
+      }
+
+      public getSlowLogResponses_result getResult(I iface, getSlowLogResponses_args args) throws org.apache.thrift.TException {
+        getSlowLogResponses_result result = new getSlowLogResponses_result();
+        try {
+          result.success = iface.getSlowLogResponses(args.serverNames, args.slowLogQueryFilter);
+        } catch (TIOError io) {
+          result.io = io;
+        }
+        return result;
+      }
+    }
+
+    public static class clearSlowLogResponses<I extends Iface> extends org.apache.thrift.ProcessFunction<I, clearSlowLogResponses_args> {
+      public clearSlowLogResponses() {
+        super("clearSlowLogResponses");
+      }
+
+      public clearSlowLogResponses_args getEmptyArgsInstance() {
+        return new clearSlowLogResponses_args();
+      }
+
+      protected boolean isOneway() {
+        return false;
+      }
+
+      @Override
+      protected boolean rethrowUnhandledExceptions() {
+        return false;
+      }
+
+      public clearSlowLogResponses_result getResult(I iface, clearSlowLogResponses_args args) throws org.apache.thrift.TException {
+        clearSlowLogResponses_result result = new clearSlowLogResponses_result();
+        try {
+          result.success = iface.clearSlowLogResponses(args.serverNames);
+        } catch (TIOError io) {
+          result.io = io;
+        }
+        return result;
+      }
+    }
+
   }
 
   public static class AsyncProcessor<I extends AsyncIface> extends org.apache.thrift.TBaseAsyncProcessor<I> {
@@ -5056,6 +5265,8 @@ public class THBaseService {
       processMap.put("listNamespaces", new listNamespaces());
       processMap.put("getThriftServerType", new getThriftServerType());
       processMap.put("getClusterId", new getClusterId());
+      processMap.put("getSlowLogResponses", new getSlowLogResponses());
+      processMap.put("clearSlowLogResponses", new clearSlowLogResponses());
       return processMap;
     }
 
@@ -8172,6 +8383,136 @@ public class THBaseService {
       }
     }
 
+    public static class getSlowLogResponses<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getSlowLogResponses_args, java.util.List<TSlowLogRecord>> {
+      public getSlowLogResponses() {
+        super("getSlowLogResponses");
+      }
+
+      public getSlowLogResponses_args getEmptyArgsInstance() {
+        return new getSlowLogResponses_args();
+      }
+
+      public org.apache.thrift.async.AsyncMethodCallback<java.util.List<TSlowLogRecord>> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+        final org.apache.thrift.AsyncProcessFunction fcall = this;
+        return new org.apache.thrift.async.AsyncMethodCallback<java.util.List<TSlowLogRecord>>() { 
+          public void onComplete(java.util.List<TSlowLogRecord> o) {
+            getSlowLogResponses_result result = new getSlowLogResponses_result();
+            result.success = o;
+            try {
+              fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
+            } catch (org.apache.thrift.transport.TTransportException e) {
+              _LOGGER.error("TTransportException writing to internal frame buffer", e);
+              fb.close();
+            } catch (java.lang.Exception e) {
+              _LOGGER.error("Exception writing to internal frame buffer", e);
+              onError(e);
+            }
+          }
+          public void onError(java.lang.Exception e) {
+            byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
+            org.apache.thrift.TSerializable msg;
+            getSlowLogResponses_result result = new getSlowLogResponses_result();
+            if (e instanceof TIOError) {
+              result.io = (TIOError) e;
+              result.setIoIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
+              _LOGGER.error("TTransportException inside handler", e);
+              fb.close();
+              return;
+            } else if (e instanceof org.apache.thrift.TApplicationException) {
+              _LOGGER.error("TApplicationException inside handler", e);
+              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+              msg = (org.apache.thrift.TApplicationException)e;
+            } else {
+              _LOGGER.error("Exception inside handler", e);
+              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+              msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
+            }
+            try {
+              fcall.sendResponse(fb,msg,msgType,seqid);
+            } catch (java.lang.Exception ex) {
+              _LOGGER.error("Exception writing to internal frame buffer", ex);
+              fb.close();
+            }
+          }
+        };
+      }
+
+      protected boolean isOneway() {
+        return false;
+      }
+
+      public void start(I iface, getSlowLogResponses_args args, org.apache.thrift.async.AsyncMethodCallback<java.util.List<TSlowLogRecord>> resultHandler) throws org.apache.thrift.TException {
+        iface.getSlowLogResponses(args.serverNames, args.slowLogQueryFilter,resultHandler);
+      }
+    }
+
+    public static class clearSlowLogResponses<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, clearSlowLogResponses_args, java.util.List<java.lang.Boolean>> {
+      public clearSlowLogResponses() {
+        super("clearSlowLogResponses");
+      }
+
+      public clearSlowLogResponses_args getEmptyArgsInstance() {
+        return new clearSlowLogResponses_args();
+      }
+
+      public org.apache.thrift.async.AsyncMethodCallback<java.util.List<java.lang.Boolean>> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) {
+        final org.apache.thrift.AsyncProcessFunction fcall = this;
+        return new org.apache.thrift.async.AsyncMethodCallback<java.util.List<java.lang.Boolean>>() { 
+          public void onComplete(java.util.List<java.lang.Boolean> o) {
+            clearSlowLogResponses_result result = new clearSlowLogResponses_result();
+            result.success = o;
+            try {
+              fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
+            } catch (org.apache.thrift.transport.TTransportException e) {
+              _LOGGER.error("TTransportException writing to internal frame buffer", e);
+              fb.close();
+            } catch (java.lang.Exception e) {
+              _LOGGER.error("Exception writing to internal frame buffer", e);
+              onError(e);
+            }
+          }
+          public void onError(java.lang.Exception e) {
+            byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
+            org.apache.thrift.TSerializable msg;
+            clearSlowLogResponses_result result = new clearSlowLogResponses_result();
+            if (e instanceof TIOError) {
+              result.io = (TIOError) e;
+              result.setIoIsSet(true);
+              msg = result;
+            } else if (e instanceof org.apache.thrift.transport.TTransportException) {
+              _LOGGER.error("TTransportException inside handler", e);
+              fb.close();
+              return;
+            } else if (e instanceof org.apache.thrift.TApplicationException) {
+              _LOGGER.error("TApplicationException inside handler", e);
+              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+              msg = (org.apache.thrift.TApplicationException)e;
+            } else {
+              _LOGGER.error("Exception inside handler", e);
+              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
+              msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
+            }
+            try {
+              fcall.sendResponse(fb,msg,msgType,seqid);
+            } catch (java.lang.Exception ex) {
+              _LOGGER.error("Exception writing to internal frame buffer", ex);
+              fb.close();
+            }
+          }
+        };
+      }
+
+      protected boolean isOneway() {
+        return false;
+      }
+
+      public void start(I iface, clearSlowLogResponses_args args, org.apache.thrift.async.AsyncMethodCallback<java.util.List<java.lang.Boolean>> resultHandler) throws org.apache.thrift.TException {
+        iface.clearSlowLogResponses(args.serverNames,resultHandler);
+      }
+    }
+
   }
 
   public static class exists_args implements org.apache.thrift.TBase<exists_args, exists_args._Fields>, java.io.Serializable, Cloneable, Comparable<exists_args>   {
@@ -52879,4 +53220,2047 @@ public class THBaseService {
     }
   }
 
+  public static class getSlowLogResponses_args implements org.apache.thrift.TBase<getSlowLogResponses_args, getSlowLogResponses_args._Fields>, java.io.Serializable, Cloneable, Comparable<getSlowLogResponses_args>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getSlowLogResponses_args");
+
+    private static final org.apache.thrift.protocol.TField SERVER_NAMES_FIELD_DESC = new org.apache.thrift.protocol.TField("serverNames", org.apache.thrift.protocol.TType.SET, (short)1);
+    private static final org.apache.thrift.protocol.TField SLOW_LOG_QUERY_FILTER_FIELD_DESC = new org.apache.thrift.protocol.TField("slowLogQueryFilter", org.apache.thrift.protocol.TType.STRUCT, (short)2);
+
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new getSlowLogResponses_argsStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new getSlowLogResponses_argsTupleSchemeFactory();
+
+    /**
+     * @param serverNames Server names to get slowlog responses from
+     */
+    public @org.apache.thrift.annotation.Nullable java.util.Set<TServerName> serverNames; // required
+    /**
+     * @param slowLogQueryFilter filter to be used if provided
+     */
+    public @org.apache.thrift.annotation.Nullable TSlowLogQueryFilter slowLogQueryFilter; // required
+
+    /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+    public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+      /**
+       * @param serverNames Server names to get slowlog responses from
+       */
+      SERVER_NAMES((short)1, "serverNames"),
+      /**
+       * @param slowLogQueryFilter filter to be used if provided
+       */
+      SLOW_LOG_QUERY_FILTER((short)2, "slowLogQueryFilter");
+
+      private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
+
+      static {
+        for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+          byName.put(field.getFieldName(), field);
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, or null if its not found.
+       */
+      @org.apache.thrift.annotation.Nullable
+      public static _Fields findByThriftId(int fieldId) {
+        switch(fieldId) {
+          case 1: // SERVER_NAMES
+            return SERVER_NAMES;
+          case 2: // SLOW_LOG_QUERY_FILTER
+            return SLOW_LOG_QUERY_FILTER;
+          default:
+            return null;
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, throwing an exception
+       * if it is not found.
+       */
+      public static _Fields findByThriftIdOrThrow(int fieldId) {
+        _Fields fields = findByThriftId(fieldId);
+        if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+        return fields;
+      }
+
+      /**
+       * Find the _Fields constant that matches name, or null if its not found.
+       */
+      @org.apache.thrift.annotation.Nullable
+      public static _Fields findByName(java.lang.String name) {
+        return byName.get(name);
+      }
+
+      private final short _thriftId;
+      private final java.lang.String _fieldName;
+
+      _Fields(short thriftId, java.lang.String fieldName) {
+        _thriftId = thriftId;
+        _fieldName = fieldName;
+      }
+
+      public short getThriftFieldId() {
+        return _thriftId;
+      }
+
+      public java.lang.String getFieldName() {
+        return _fieldName;
+      }
+    }
+
+    // isset id assignments
+    public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+    static {
+      java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.SERVER_NAMES, new org.apache.thrift.meta_data.FieldMetaData("serverNames", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.SetMetaData(org.apache.thrift.protocol.TType.SET, 
+              new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TServerName.class))));
+      tmpMap.put(_Fields.SLOW_LOG_QUERY_FILTER, new org.apache.thrift.meta_data.FieldMetaData("slowLogQueryFilter", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TSlowLogQueryFilter.class)));
+      metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(getSlowLogResponses_args.class, metaDataMap);
+    }
+
+    public getSlowLogResponses_args() {
+    }
+
+    public getSlowLogResponses_args(
+      java.util.Set<TServerName> serverNames,
+      TSlowLogQueryFilter slowLogQueryFilter)
+    {
+      this();
+      this.serverNames = serverNames;
+      this.slowLogQueryFilter = slowLogQueryFilter;
+    }
+
+    /**
+     * Performs a deep copy on <i>other</i>.
+     */
+    public getSlowLogResponses_args(getSlowLogResponses_args other) {
+      if (other.isSetServerNames()) {
+        java.util.Set<TServerName> __this__serverNames = new java.util.HashSet<TServerName>(other.serverNames.size());
+        for (TServerName other_element : other.serverNames) {
+          __this__serverNames.add(new TServerName(other_element));
+        }
+        this.serverNames = __this__serverNames;
+      }
+      if (other.isSetSlowLogQueryFilter()) {
+        this.slowLogQueryFilter = new TSlowLogQueryFilter(other.slowLogQueryFilter);
+      }
+    }
+
+    public getSlowLogResponses_args deepCopy() {
+      return new getSlowLogResponses_args(this);
+    }
+
+    @Override
+    public void clear() {
+      this.serverNames = null;
+      this.slowLogQueryFilter = null;
+    }
+
+    public int getServerNamesSize() {
+      return (this.serverNames == null) ? 0 : this.serverNames.size();
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public java.util.Iterator<TServerName> getServerNamesIterator() {
+      return (this.serverNames == null) ? null : this.serverNames.iterator();
+    }
+
+    public void addToServerNames(TServerName elem) {
+      if (this.serverNames == null) {
+        this.serverNames = new java.util.HashSet<TServerName>();
+      }
+      this.serverNames.add(elem);
+    }
+
+    /**
+     * @param serverNames Server names to get slowlog responses from
+     */
+    @org.apache.thrift.annotation.Nullable
+    public java.util.Set<TServerName> getServerNames() {
+      return this.serverNames;
+    }
+
+    /**
+     * @param serverNames Server names to get slowlog responses from
+     */
+    public getSlowLogResponses_args setServerNames(@org.apache.thrift.annotation.Nullable java.util.Set<TServerName> serverNames) {
+      this.serverNames = serverNames;
+      return this;
+    }
+
+    public void unsetServerNames() {
+      this.serverNames = null;
+    }
+
+    /** Returns true if field serverNames is set (has been assigned a value) and false otherwise */
+    public boolean isSetServerNames() {
+      return this.serverNames != null;
+    }
+
+    public void setServerNamesIsSet(boolean value) {
+      if (!value) {
+        this.serverNames = null;
+      }
+    }
+
+    /**
+     * @param slowLogQueryFilter filter to be used if provided
+     */
+    @org.apache.thrift.annotation.Nullable
+    public TSlowLogQueryFilter getSlowLogQueryFilter() {
+      return this.slowLogQueryFilter;
+    }
+
+    /**
+     * @param slowLogQueryFilter filter to be used if provided
+     */
+    public getSlowLogResponses_args setSlowLogQueryFilter(@org.apache.thrift.annotation.Nullable TSlowLogQueryFilter slowLogQueryFilter) {
+      this.slowLogQueryFilter = slowLogQueryFilter;
+      return this;
+    }
+
+    public void unsetSlowLogQueryFilter() {
+      this.slowLogQueryFilter = null;
+    }
+
+    /** Returns true if field slowLogQueryFilter is set (has been assigned a value) and false otherwise */
+    public boolean isSetSlowLogQueryFilter() {
+      return this.slowLogQueryFilter != null;
+    }
+
+    public void setSlowLogQueryFilterIsSet(boolean value) {
+      if (!value) {
+        this.slowLogQueryFilter = null;
+      }
+    }
+
+    public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
+      switch (field) {
+      case SERVER_NAMES:
+        if (value == null) {
+          unsetServerNames();
+        } else {
+          setServerNames((java.util.Set<TServerName>)value);
+        }
+        break;
+
+      case SLOW_LOG_QUERY_FILTER:
+        if (value == null) {
+          unsetSlowLogQueryFilter();
+        } else {
+          setSlowLogQueryFilter((TSlowLogQueryFilter)value);
+        }
+        break;
+
+      }
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public java.lang.Object getFieldValue(_Fields field) {
+      switch (field) {
+      case SERVER_NAMES:
+        return getServerNames();
+
+      case SLOW_LOG_QUERY_FILTER:
+        return getSlowLogQueryFilter();
+
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+    public boolean isSet(_Fields field) {
+      if (field == null) {
+        throw new java.lang.IllegalArgumentException();
+      }
+
+      switch (field) {
+      case SERVER_NAMES:
+        return isSetServerNames();
+      case SLOW_LOG_QUERY_FILTER:
+        return isSetSlowLogQueryFilter();
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    @Override
+    public boolean equals(java.lang.Object that) {
+      if (that == null)
+        return false;
+      if (that instanceof getSlowLogResponses_args)
+        return this.equals((getSlowLogResponses_args)that);
+      return false;
+    }
+
+    public boolean equals(getSlowLogResponses_args that) {
+      if (that == null)
+        return false;
+      if (this == that)
+        return true;
+
+      boolean this_present_serverNames = true && this.isSetServerNames();
+      boolean that_present_serverNames = true && that.isSetServerNames();
+      if (this_present_serverNames || that_present_serverNames) {
+        if (!(this_present_serverNames && that_present_serverNames))
+          return false;
+        if (!this.serverNames.equals(that.serverNames))
+          return false;
+      }
+
+      boolean this_present_slowLogQueryFilter = true && this.isSetSlowLogQueryFilter();
+      boolean that_present_slowLogQueryFilter = true && that.isSetSlowLogQueryFilter();
+      if (this_present_slowLogQueryFilter || that_present_slowLogQueryFilter) {
+        if (!(this_present_slowLogQueryFilter && that_present_slowLogQueryFilter))
+          return false;
+        if (!this.slowLogQueryFilter.equals(that.slowLogQueryFilter))
+          return false;
+      }
+
+      return true;
+    }
+
+    @Override
+    public int hashCode() {
+      int hashCode = 1;
+
+      hashCode = hashCode * 8191 + ((isSetServerNames()) ? 131071 : 524287);
+      if (isSetServerNames())
+        hashCode = hashCode * 8191 + serverNames.hashCode();
+
+      hashCode = hashCode * 8191 + ((isSetSlowLogQueryFilter()) ? 131071 : 524287);
+      if (isSetSlowLogQueryFilter())
+        hashCode = hashCode * 8191 + slowLogQueryFilter.hashCode();
+
+      return hashCode;
+    }
+
+    @Override
+    public int compareTo(getSlowLogResponses_args other) {
+      if (!getClass().equals(other.getClass())) {
+        return getClass().getName().compareTo(other.getClass().getName());
+      }
+
+      int lastComparison = 0;
+
+      lastComparison = java.lang.Boolean.valueOf(isSetServerNames()).compareTo(other.isSetServerNames());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetServerNames()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.serverNames, other.serverNames);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetSlowLogQueryFilter()).compareTo(other.isSetSlowLogQueryFilter());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetSlowLogQueryFilter()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.slowLogQueryFilter, other.slowLogQueryFilter);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      return 0;
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public _Fields fieldForId(int fieldId) {
+      return _Fields.findByThriftId(fieldId);
+    }
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+      scheme(iprot).read(iprot, this);
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+      scheme(oprot).write(oprot, this);
+    }
+
+    @Override
+    public java.lang.String toString() {
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("getSlowLogResponses_args(");
+      boolean first = true;
+
+      sb.append("serverNames:");
+      if (this.serverNames == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.serverNames);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("slowLogQueryFilter:");
+      if (this.slowLogQueryFilter == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.slowLogQueryFilter);
+      }
+      first = false;
+      sb.append(")");
+      return sb.toString();
+    }
+
+    public void validate() throws org.apache.thrift.TException {
+      // check for required fields
+      // check for sub-struct validity
+      if (slowLogQueryFilter != null) {
+        slowLogQueryFilter.validate();
+      }
+    }
+
+    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+      try {
+        write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
+      try {
+        read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private static class getSlowLogResponses_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public getSlowLogResponses_argsStandardScheme getScheme() {
+        return new getSlowLogResponses_argsStandardScheme();
+      }
+    }
+
+    private static class getSlowLogResponses_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<getSlowLogResponses_args> {
+
+      public void read(org.apache.thrift.protocol.TProtocol iprot, getSlowLogResponses_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TField schemeField;
+        iprot.readStructBegin();
+        while (true)
+        {
+          schemeField = iprot.readFieldBegin();
+          if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+            break;
+          }
+          switch (schemeField.id) {
+            case 1: // SERVER_NAMES
+              if (schemeField.type == org.apache.thrift.protocol.TType.SET) {
+                {
+                  org.apache.thrift.protocol.TSet _set350 = iprot.readSetBegin();
+                  struct.serverNames = new java.util.HashSet<TServerName>(2*_set350.size);
+                  @org.apache.thrift.annotation.Nullable TServerName _elem351;
+                  for (int _i352 = 0; _i352 < _set350.size; ++_i352)
+                  {
+                    _elem351 = new TServerName();
+                    _elem351.read(iprot);
+                    struct.serverNames.add(_elem351);
+                  }
+                  iprot.readSetEnd();
+                }
+                struct.setServerNamesIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 2: // SLOW_LOG_QUERY_FILTER
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.slowLogQueryFilter = new TSlowLogQueryFilter();
+                struct.slowLogQueryFilter.read(iprot);
+                struct.setSlowLogQueryFilterIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            default:
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+          }
+          iprot.readFieldEnd();
+        }
+        iprot.readStructEnd();
+
+        // check for required fields of primitive type, which can't be checked in the validate method
+        struct.validate();
+      }
+
+      public void write(org.apache.thrift.protocol.TProtocol oprot, getSlowLogResponses_args struct) throws org.apache.thrift.TException {
+        struct.validate();
+
+        oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.serverNames != null) {
+          oprot.writeFieldBegin(SERVER_NAMES_FIELD_DESC);
+          {
+            oprot.writeSetBegin(new org.apache.thrift.protocol.TSet(org.apache.thrift.protocol.TType.STRUCT, struct.serverNames.size()));
+            for (TServerName _iter353 : struct.serverNames)
+            {
+              _iter353.write(oprot);
+            }
+            oprot.writeSetEnd();
+          }
+          oprot.writeFieldEnd();
+        }
+        if (struct.slowLogQueryFilter != null) {
+          oprot.writeFieldBegin(SLOW_LOG_QUERY_FILTER_FIELD_DESC);
+          struct.slowLogQueryFilter.write(oprot);
+          oprot.writeFieldEnd();
+        }
+        oprot.writeFieldStop();
+        oprot.writeStructEnd();
+      }
+
+    }
+
+    private static class getSlowLogResponses_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public getSlowLogResponses_argsTupleScheme getScheme() {
+        return new getSlowLogResponses_argsTupleScheme();
+      }
+    }
+
+    private static class getSlowLogResponses_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<getSlowLogResponses_args> {
+
+      @Override
+      public void write(org.apache.thrift.protocol.TProtocol prot, getSlowLogResponses_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetServerNames()) {
+          optionals.set(0);
+        }
+        if (struct.isSetSlowLogQueryFilter()) {
+          optionals.set(1);
+        }
+        oprot.writeBitSet(optionals, 2);
+        if (struct.isSetServerNames()) {
+          {
+            oprot.writeI32(struct.serverNames.size());
+            for (TServerName _iter354 : struct.serverNames)
+            {
+              _iter354.write(oprot);
+            }
+          }
+        }
+        if (struct.isSetSlowLogQueryFilter()) {
+          struct.slowLogQueryFilter.write(oprot);
+        }
+      }
+
+      @Override
+      public void read(org.apache.thrift.protocol.TProtocol prot, getSlowLogResponses_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(2);
+        if (incoming.get(0)) {
+          {
+            org.apache.thrift.protocol.TSet _set355 = new org.apache.thrift.protocol.TSet(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+            struct.serverNames = new java.util.HashSet<TServerName>(2*_set355.size);
+            @org.apache.thrift.annotation.Nullable TServerName _elem356;
+            for (int _i357 = 0; _i357 < _set355.size; ++_i357)
+            {
+              _elem356 = new TServerName();
+              _elem356.read(iprot);
+              struct.serverNames.add(_elem356);
+            }
+          }
+          struct.setServerNamesIsSet(true);
+        }
+        if (incoming.get(1)) {
+          struct.slowLogQueryFilter = new TSlowLogQueryFilter();
+          struct.slowLogQueryFilter.read(iprot);
+          struct.setSlowLogQueryFilterIsSet(true);
+        }
+      }
+    }
+
+    private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+      return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+    }
+  }
+
+  public static class getSlowLogResponses_result implements org.apache.thrift.TBase<getSlowLogResponses_result, getSlowLogResponses_result._Fields>, java.io.Serializable, Cloneable, Comparable<getSlowLogResponses_result>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("getSlowLogResponses_result");
+
+    private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.LIST, (short)0);
+    private static final org.apache.thrift.protocol.TField IO_FIELD_DESC = new org.apache.thrift.protocol.TField("io", org.apache.thrift.protocol.TType.STRUCT, (short)1);
+
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new getSlowLogResponses_resultStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new getSlowLogResponses_resultTupleSchemeFactory();
+
+    public @org.apache.thrift.annotation.Nullable java.util.List<TSlowLogRecord> success; // required
+    public @org.apache.thrift.annotation.Nullable TIOError io; // required
+
+    /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+    public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+      SUCCESS((short)0, "success"),
+      IO((short)1, "io");
+
+      private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
+
+      static {
+        for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+          byName.put(field.getFieldName(), field);
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, or null if its not found.
+       */
+      @org.apache.thrift.annotation.Nullable
+      public static _Fields findByThriftId(int fieldId) {
+        switch(fieldId) {
+          case 0: // SUCCESS
+            return SUCCESS;
+          case 1: // IO
+            return IO;
+          default:
+            return null;
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, throwing an exception
+       * if it is not found.
+       */
+      public static _Fields findByThriftIdOrThrow(int fieldId) {
+        _Fields fields = findByThriftId(fieldId);
+        if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+        return fields;
+      }
+
+      /**
+       * Find the _Fields constant that matches name, or null if its not found.
+       */
+      @org.apache.thrift.annotation.Nullable
+      public static _Fields findByName(java.lang.String name) {
+        return byName.get(name);
+      }
+
+      private final short _thriftId;
+      private final java.lang.String _fieldName;
+
+      _Fields(short thriftId, java.lang.String fieldName) {
+        _thriftId = thriftId;
+        _fieldName = fieldName;
+      }
+
+      public short getThriftFieldId() {
+        return _thriftId;
+      }
+
+      public java.lang.String getFieldName() {
+        return _fieldName;
+      }
+    }
+
+    // isset id assignments
+    public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+    static {
+      java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
+              new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TSlowLogRecord.class))));
+      tmpMap.put(_Fields.IO, new org.apache.thrift.meta_data.FieldMetaData("io", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TIOError.class)));
+      metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(getSlowLogResponses_result.class, metaDataMap);
+    }
+
+    public getSlowLogResponses_result() {
+    }
+
+    public getSlowLogResponses_result(
+      java.util.List<TSlowLogRecord> success,
+      TIOError io)
+    {
+      this();
+      this.success = success;
+      this.io = io;
+    }
+
+    /**
+     * Performs a deep copy on <i>other</i>.
+     */
+    public getSlowLogResponses_result(getSlowLogResponses_result other) {
+      if (other.isSetSuccess()) {
+        java.util.List<TSlowLogRecord> __this__success = new java.util.ArrayList<TSlowLogRecord>(other.success.size());
+        for (TSlowLogRecord other_element : other.success) {
+          __this__success.add(new TSlowLogRecord(other_element));
+        }
+        this.success = __this__success;
+      }
+      if (other.isSetIo()) {
+        this.io = new TIOError(other.io);
+      }
+    }
+
+    public getSlowLogResponses_result deepCopy() {
+      return new getSlowLogResponses_result(this);
+    }
+
+    @Override
+    public void clear() {
+      this.success = null;
+      this.io = null;
+    }
+
+    public int getSuccessSize() {
+      return (this.success == null) ? 0 : this.success.size();
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public java.util.Iterator<TSlowLogRecord> getSuccessIterator() {
+      return (this.success == null) ? null : this.success.iterator();
+    }
+
+    public void addToSuccess(TSlowLogRecord elem) {
+      if (this.success == null) {
+        this.success = new java.util.ArrayList<TSlowLogRecord>();
+      }
+      this.success.add(elem);
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public java.util.List<TSlowLogRecord> getSuccess() {
+      return this.success;
+    }
+
+    public getSlowLogResponses_result setSuccess(@org.apache.thrift.annotation.Nullable java.util.List<TSlowLogRecord> success) {
+      this.success = success;
+      return this;
+    }
+
+    public void unsetSuccess() {
+      this.success = null;
+    }
+
+    /** Returns true if field success is set (has been assigned a value) and false otherwise */
+    public boolean isSetSuccess() {
+      return this.success != null;
+    }
+
+    public void setSuccessIsSet(boolean value) {
+      if (!value) {
+        this.success = null;
+      }
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public TIOError getIo() {
+      return this.io;
+    }
+
+    public getSlowLogResponses_result setIo(@org.apache.thrift.annotation.Nullable TIOError io) {
+      this.io = io;
+      return this;
+    }
+
+    public void unsetIo() {
+      this.io = null;
+    }
+
+    /** Returns true if field io is set (has been assigned a value) and false otherwise */
+    public boolean isSetIo() {
+      return this.io != null;
+    }
+
+    public void setIoIsSet(boolean value) {
+      if (!value) {
+        this.io = null;
+      }
+    }
+
+    public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
+      switch (field) {
+      case SUCCESS:
+        if (value == null) {
+          unsetSuccess();
+        } else {
+          setSuccess((java.util.List<TSlowLogRecord>)value);
+        }
+        break;
+
+      case IO:
+        if (value == null) {
+          unsetIo();
+        } else {
+          setIo((TIOError)value);
+        }
+        break;
+
+      }
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public java.lang.Object getFieldValue(_Fields field) {
+      switch (field) {
+      case SUCCESS:
+        return getSuccess();
+
+      case IO:
+        return getIo();
+
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+    public boolean isSet(_Fields field) {
+      if (field == null) {
+        throw new java.lang.IllegalArgumentException();
+      }
+
+      switch (field) {
+      case SUCCESS:
+        return isSetSuccess();
+      case IO:
+        return isSetIo();
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    @Override
+    public boolean equals(java.lang.Object that) {
+      if (that == null)
+        return false;
+      if (that instanceof getSlowLogResponses_result)
+        return this.equals((getSlowLogResponses_result)that);
+      return false;
+    }
+
+    public boolean equals(getSlowLogResponses_result that) {
+      if (that == null)
+        return false;
+      if (this == that)
+        return true;
+
+      boolean this_present_success = true && this.isSetSuccess();
+      boolean that_present_success = true && that.isSetSuccess();
+      if (this_present_success || that_present_success) {
+        if (!(this_present_success && that_present_success))
+          return false;
+        if (!this.success.equals(that.success))
+          return false;
+      }
+
+      boolean this_present_io = true && this.isSetIo();
+      boolean that_present_io = true && that.isSetIo();
+      if (this_present_io || that_present_io) {
+        if (!(this_present_io && that_present_io))
+          return false;
+        if (!this.io.equals(that.io))
+          return false;
+      }
+
+      return true;
+    }
+
+    @Override
+    public int hashCode() {
+      int hashCode = 1;
+
+      hashCode = hashCode * 8191 + ((isSetSuccess()) ? 131071 : 524287);
+      if (isSetSuccess())
+        hashCode = hashCode * 8191 + success.hashCode();
+
+      hashCode = hashCode * 8191 + ((isSetIo()) ? 131071 : 524287);
+      if (isSetIo())
+        hashCode = hashCode * 8191 + io.hashCode();
+
+      return hashCode;
+    }
+
+    @Override
+    public int compareTo(getSlowLogResponses_result other) {
+      if (!getClass().equals(other.getClass())) {
+        return getClass().getName().compareTo(other.getClass().getName());
+      }
+
+      int lastComparison = 0;
+
+      lastComparison = java.lang.Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetSuccess()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetIo()).compareTo(other.isSetIo());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetIo()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.io, other.io);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      return 0;
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public _Fields fieldForId(int fieldId) {
+      return _Fields.findByThriftId(fieldId);
+    }
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+      scheme(iprot).read(iprot, this);
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+      scheme(oprot).write(oprot, this);
+      }
+
+    @Override
+    public java.lang.String toString() {
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("getSlowLogResponses_result(");
+      boolean first = true;
+
+      sb.append("success:");
+      if (this.success == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.success);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("io:");
+      if (this.io == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.io);
+      }
+      first = false;
+      sb.append(")");
+      return sb.toString();
+    }
+
+    public void validate() throws org.apache.thrift.TException {
+      // check for required fields
+      // check for sub-struct validity
+    }
+
+    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+      try {
+        write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
+      try {
+        read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private static class getSlowLogResponses_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public getSlowLogResponses_resultStandardScheme getScheme() {
+        return new getSlowLogResponses_resultStandardScheme();
+      }
+    }
+
+    private static class getSlowLogResponses_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<getSlowLogResponses_result> {
+
+      public void read(org.apache.thrift.protocol.TProtocol iprot, getSlowLogResponses_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TField schemeField;
+        iprot.readStructBegin();
+        while (true)
+        {
+          schemeField = iprot.readFieldBegin();
+          if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+            break;
+          }
+          switch (schemeField.id) {
+            case 0: // SUCCESS
+              if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
+                {
+                  org.apache.thrift.protocol.TList _list358 = iprot.readListBegin();
+                  struct.success = new java.util.ArrayList<TSlowLogRecord>(_list358.size);
+                  @org.apache.thrift.annotation.Nullable TSlowLogRecord _elem359;
+                  for (int _i360 = 0; _i360 < _list358.size; ++_i360)
+                  {
+                    _elem359 = new TSlowLogRecord();
+                    _elem359.read(iprot);
+                    struct.success.add(_elem359);
+                  }
+                  iprot.readListEnd();
+                }
+                struct.setSuccessIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 1: // IO
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.io = new TIOError();
+                struct.io.read(iprot);
+                struct.setIoIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            default:
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+          }
+          iprot.readFieldEnd();
+        }
+        iprot.readStructEnd();
+
+        // check for required fields of primitive type, which can't be checked in the validate method
+        struct.validate();
+      }
+
+      public void write(org.apache.thrift.protocol.TProtocol oprot, getSlowLogResponses_result struct) throws org.apache.thrift.TException {
+        struct.validate();
+
+        oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.success != null) {
+          oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
+          {
+            oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.success.size()));
+            for (TSlowLogRecord _iter361 : struct.success)
+            {
+              _iter361.write(oprot);
+            }
+            oprot.writeListEnd();
+          }
+          oprot.writeFieldEnd();
+        }
+        if (struct.io != null) {
+          oprot.writeFieldBegin(IO_FIELD_DESC);
+          struct.io.write(oprot);
+          oprot.writeFieldEnd();
+        }
+        oprot.writeFieldStop();
+        oprot.writeStructEnd();
+      }
+
+    }
+
+    private static class getSlowLogResponses_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public getSlowLogResponses_resultTupleScheme getScheme() {
+        return new getSlowLogResponses_resultTupleScheme();
+      }
+    }
+
+    private static class getSlowLogResponses_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<getSlowLogResponses_result> {
+
+      @Override
+      public void write(org.apache.thrift.protocol.TProtocol prot, getSlowLogResponses_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetSuccess()) {
+          optionals.set(0);
+        }
+        if (struct.isSetIo()) {
+          optionals.set(1);
+        }
+        oprot.writeBitSet(optionals, 2);
+        if (struct.isSetSuccess()) {
+          {
+            oprot.writeI32(struct.success.size());
+            for (TSlowLogRecord _iter362 : struct.success)
+            {
+              _iter362.write(oprot);
+            }
+          }
+        }
+        if (struct.isSetIo()) {
+          struct.io.write(oprot);
+        }
+      }
+
+      @Override
+      public void read(org.apache.thrift.protocol.TProtocol prot, getSlowLogResponses_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(2);
+        if (incoming.get(0)) {
+          {
+            org.apache.thrift.protocol.TList _list363 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+            struct.success = new java.util.ArrayList<TSlowLogRecord>(_list363.size);
+            @org.apache.thrift.annotation.Nullable TSlowLogRecord _elem364;
+            for (int _i365 = 0; _i365 < _list363.size; ++_i365)
+            {
+              _elem364 = new TSlowLogRecord();
+              _elem364.read(iprot);
+              struct.success.add(_elem364);
+            }
+          }
+          struct.setSuccessIsSet(true);
+        }
+        if (incoming.get(1)) {
+          struct.io = new TIOError();
+          struct.io.read(iprot);
+          struct.setIoIsSet(true);
+        }
+      }
+    }
+
+    private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+      return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+    }
+  }
+
+  public static class clearSlowLogResponses_args implements org.apache.thrift.TBase<clearSlowLogResponses_args, clearSlowLogResponses_args._Fields>, java.io.Serializable, Cloneable, Comparable<clearSlowLogResponses_args>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("clearSlowLogResponses_args");
+
+    private static final org.apache.thrift.protocol.TField SERVER_NAMES_FIELD_DESC = new org.apache.thrift.protocol.TField("serverNames", org.apache.thrift.protocol.TType.SET, (short)1);
+
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new clearSlowLogResponses_argsStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new clearSlowLogResponses_argsTupleSchemeFactory();
+
+    /**
+     * @param serverNames Set of Server names to clean slowlog responses from
+     */
+    public @org.apache.thrift.annotation.Nullable java.util.Set<TServerName> serverNames; // required
+
+    /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+    public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+      /**
+       * @param serverNames Set of Server names to clean slowlog responses from
+       */
+      SERVER_NAMES((short)1, "serverNames");
+
+      private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
+
+      static {
+        for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+          byName.put(field.getFieldName(), field);
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, or null if its not found.
+       */
+      @org.apache.thrift.annotation.Nullable
+      public static _Fields findByThriftId(int fieldId) {
+        switch(fieldId) {
+          case 1: // SERVER_NAMES
+            return SERVER_NAMES;
+          default:
+            return null;
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, throwing an exception
+       * if it is not found.
+       */
+      public static _Fields findByThriftIdOrThrow(int fieldId) {
+        _Fields fields = findByThriftId(fieldId);
+        if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+        return fields;
+      }
+
+      /**
+       * Find the _Fields constant that matches name, or null if its not found.
+       */
+      @org.apache.thrift.annotation.Nullable
+      public static _Fields findByName(java.lang.String name) {
+        return byName.get(name);
+      }
+
+      private final short _thriftId;
+      private final java.lang.String _fieldName;
+
+      _Fields(short thriftId, java.lang.String fieldName) {
+        _thriftId = thriftId;
+        _fieldName = fieldName;
+      }
+
+      public short getThriftFieldId() {
+        return _thriftId;
+      }
+
+      public java.lang.String getFieldName() {
+        return _fieldName;
+      }
+    }
+
+    // isset id assignments
+    public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+    static {
+      java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.SERVER_NAMES, new org.apache.thrift.meta_data.FieldMetaData("serverNames", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.SetMetaData(org.apache.thrift.protocol.TType.SET, 
+              new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TServerName.class))));
+      metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(clearSlowLogResponses_args.class, metaDataMap);
+    }
+
+    public clearSlowLogResponses_args() {
+    }
+
+    public clearSlowLogResponses_args(
+      java.util.Set<TServerName> serverNames)
+    {
+      this();
+      this.serverNames = serverNames;
+    }
+
+    /**
+     * Performs a deep copy on <i>other</i>.
+     */
+    public clearSlowLogResponses_args(clearSlowLogResponses_args other) {
+      if (other.isSetServerNames()) {
+        java.util.Set<TServerName> __this__serverNames = new java.util.HashSet<TServerName>(other.serverNames.size());
+        for (TServerName other_element : other.serverNames) {
+          __this__serverNames.add(new TServerName(other_element));
+        }
+        this.serverNames = __this__serverNames;
+      }
+    }
+
+    public clearSlowLogResponses_args deepCopy() {
+      return new clearSlowLogResponses_args(this);
+    }
+
+    @Override
+    public void clear() {
+      this.serverNames = null;
+    }
+
+    public int getServerNamesSize() {
+      return (this.serverNames == null) ? 0 : this.serverNames.size();
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public java.util.Iterator<TServerName> getServerNamesIterator() {
+      return (this.serverNames == null) ? null : this.serverNames.iterator();
+    }
+
+    public void addToServerNames(TServerName elem) {
+      if (this.serverNames == null) {
+        this.serverNames = new java.util.HashSet<TServerName>();
+      }
+      this.serverNames.add(elem);
+    }
+
+    /**
+     * @param serverNames Set of Server names to clean slowlog responses from
+     */
+    @org.apache.thrift.annotation.Nullable
+    public java.util.Set<TServerName> getServerNames() {
+      return this.serverNames;
+    }
+
+    /**
+     * @param serverNames Set of Server names to clean slowlog responses from
+     */
+    public clearSlowLogResponses_args setServerNames(@org.apache.thrift.annotation.Nullable java.util.Set<TServerName> serverNames) {
+      this.serverNames = serverNames;
+      return this;
+    }
+
+    public void unsetServerNames() {
+      this.serverNames = null;
+    }
+
+    /** Returns true if field serverNames is set (has been assigned a value) and false otherwise */
+    public boolean isSetServerNames() {
+      return this.serverNames != null;
+    }
+
+    public void setServerNamesIsSet(boolean value) {
+      if (!value) {
+        this.serverNames = null;
+      }
+    }
+
+    public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
+      switch (field) {
+      case SERVER_NAMES:
+        if (value == null) {
+          unsetServerNames();
+        } else {
+          setServerNames((java.util.Set<TServerName>)value);
+        }
+        break;
+
+      }
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public java.lang.Object getFieldValue(_Fields field) {
+      switch (field) {
+      case SERVER_NAMES:
+        return getServerNames();
+
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+    public boolean isSet(_Fields field) {
+      if (field == null) {
+        throw new java.lang.IllegalArgumentException();
+      }
+
+      switch (field) {
+      case SERVER_NAMES:
+        return isSetServerNames();
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    @Override
+    public boolean equals(java.lang.Object that) {
+      if (that == null)
+        return false;
+      if (that instanceof clearSlowLogResponses_args)
+        return this.equals((clearSlowLogResponses_args)that);
+      return false;
+    }
+
+    public boolean equals(clearSlowLogResponses_args that) {
+      if (that == null)
+        return false;
+      if (this == that)
+        return true;
+
+      boolean this_present_serverNames = true && this.isSetServerNames();
+      boolean that_present_serverNames = true && that.isSetServerNames();
+      if (this_present_serverNames || that_present_serverNames) {
+        if (!(this_present_serverNames && that_present_serverNames))
+          return false;
+        if (!this.serverNames.equals(that.serverNames))
+          return false;
+      }
+
+      return true;
+    }
+
+    @Override
+    public int hashCode() {
+      int hashCode = 1;
+
+      hashCode = hashCode * 8191 + ((isSetServerNames()) ? 131071 : 524287);
+      if (isSetServerNames())
+        hashCode = hashCode * 8191 + serverNames.hashCode();
+
+      return hashCode;
+    }
+
+    @Override
+    public int compareTo(clearSlowLogResponses_args other) {
+      if (!getClass().equals(other.getClass())) {
+        return getClass().getName().compareTo(other.getClass().getName());
+      }
+
+      int lastComparison = 0;
+
+      lastComparison = java.lang.Boolean.valueOf(isSetServerNames()).compareTo(other.isSetServerNames());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetServerNames()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.serverNames, other.serverNames);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      return 0;
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public _Fields fieldForId(int fieldId) {
+      return _Fields.findByThriftId(fieldId);
+    }
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+      scheme(iprot).read(iprot, this);
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+      scheme(oprot).write(oprot, this);
+    }
+
+    @Override
+    public java.lang.String toString() {
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("clearSlowLogResponses_args(");
+      boolean first = true;
+
+      sb.append("serverNames:");
+      if (this.serverNames == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.serverNames);
+      }
+      first = false;
+      sb.append(")");
+      return sb.toString();
+    }
+
+    public void validate() throws org.apache.thrift.TException {
+      // check for required fields
+      // check for sub-struct validity
+    }
+
+    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+      try {
+        write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
+      try {
+        read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private static class clearSlowLogResponses_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public clearSlowLogResponses_argsStandardScheme getScheme() {
+        return new clearSlowLogResponses_argsStandardScheme();
+      }
+    }
+
+    private static class clearSlowLogResponses_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<clearSlowLogResponses_args> {
+
+      public void read(org.apache.thrift.protocol.TProtocol iprot, clearSlowLogResponses_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TField schemeField;
+        iprot.readStructBegin();
+        while (true)
+        {
+          schemeField = iprot.readFieldBegin();
+          if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+            break;
+          }
+          switch (schemeField.id) {
+            case 1: // SERVER_NAMES
+              if (schemeField.type == org.apache.thrift.protocol.TType.SET) {
+                {
+                  org.apache.thrift.protocol.TSet _set366 = iprot.readSetBegin();
+                  struct.serverNames = new java.util.HashSet<TServerName>(2*_set366.size);
+                  @org.apache.thrift.annotation.Nullable TServerName _elem367;
+                  for (int _i368 = 0; _i368 < _set366.size; ++_i368)
+                  {
+                    _elem367 = new TServerName();
+                    _elem367.read(iprot);
+                    struct.serverNames.add(_elem367);
+                  }
+                  iprot.readSetEnd();
+                }
+                struct.setServerNamesIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            default:
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+          }
+          iprot.readFieldEnd();
+        }
+        iprot.readStructEnd();
+
+        // check for required fields of primitive type, which can't be checked in the validate method
+        struct.validate();
+      }
+
+      public void write(org.apache.thrift.protocol.TProtocol oprot, clearSlowLogResponses_args struct) throws org.apache.thrift.TException {
+        struct.validate();
+
+        oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.serverNames != null) {
+          oprot.writeFieldBegin(SERVER_NAMES_FIELD_DESC);
+          {
+            oprot.writeSetBegin(new org.apache.thrift.protocol.TSet(org.apache.thrift.protocol.TType.STRUCT, struct.serverNames.size()));
+            for (TServerName _iter369 : struct.serverNames)
+            {
+              _iter369.write(oprot);
+            }
+            oprot.writeSetEnd();
+          }
+          oprot.writeFieldEnd();
+        }
+        oprot.writeFieldStop();
+        oprot.writeStructEnd();
+      }
+
+    }
+
+    private static class clearSlowLogResponses_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public clearSlowLogResponses_argsTupleScheme getScheme() {
+        return new clearSlowLogResponses_argsTupleScheme();
+      }
+    }
+
+    private static class clearSlowLogResponses_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<clearSlowLogResponses_args> {
+
+      @Override
+      public void write(org.apache.thrift.protocol.TProtocol prot, clearSlowLogResponses_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetServerNames()) {
+          optionals.set(0);
+        }
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetServerNames()) {
+          {
+            oprot.writeI32(struct.serverNames.size());
+            for (TServerName _iter370 : struct.serverNames)
+            {
+              _iter370.write(oprot);
+            }
+          }
+        }
+      }
+
+      @Override
+      public void read(org.apache.thrift.protocol.TProtocol prot, clearSlowLogResponses_args struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(1);
+        if (incoming.get(0)) {
+          {
+            org.apache.thrift.protocol.TSet _set371 = new org.apache.thrift.protocol.TSet(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+            struct.serverNames = new java.util.HashSet<TServerName>(2*_set371.size);
+            @org.apache.thrift.annotation.Nullable TServerName _elem372;
+            for (int _i373 = 0; _i373 < _set371.size; ++_i373)
+            {
+              _elem372 = new TServerName();
+              _elem372.read(iprot);
+              struct.serverNames.add(_elem372);
+            }
+          }
+          struct.setServerNamesIsSet(true);
+        }
+      }
+    }
+
+    private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+      return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+    }
+  }
+
+  public static class clearSlowLogResponses_result implements org.apache.thrift.TBase<clearSlowLogResponses_result, clearSlowLogResponses_result._Fields>, java.io.Serializable, Cloneable, Comparable<clearSlowLogResponses_result>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("clearSlowLogResponses_result");
+
+    private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.LIST, (short)0);
+    private static final org.apache.thrift.protocol.TField IO_FIELD_DESC = new org.apache.thrift.protocol.TField("io", org.apache.thrift.protocol.TType.STRUCT, (short)1);
+
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new clearSlowLogResponses_resultStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new clearSlowLogResponses_resultTupleSchemeFactory();
+
+    public @org.apache.thrift.annotation.Nullable java.util.List<java.lang.Boolean> success; // required
+    public @org.apache.thrift.annotation.Nullable TIOError io; // required
+
+    /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+    public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+      SUCCESS((short)0, "success"),
+      IO((short)1, "io");
+
+      private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
+
+      static {
+        for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+          byName.put(field.getFieldName(), field);
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, or null if its not found.
+       */
+      @org.apache.thrift.annotation.Nullable
+      public static _Fields findByThriftId(int fieldId) {
+        switch(fieldId) {
+          case 0: // SUCCESS
+            return SUCCESS;
+          case 1: // IO
+            return IO;
+          default:
+            return null;
+        }
+      }
+
+      /**
+       * Find the _Fields constant that matches fieldId, throwing an exception
+       * if it is not found.
+       */
+      public static _Fields findByThriftIdOrThrow(int fieldId) {
+        _Fields fields = findByThriftId(fieldId);
+        if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+        return fields;
+      }
+
+      /**
+       * Find the _Fields constant that matches name, or null if its not found.
+       */
+      @org.apache.thrift.annotation.Nullable
+      public static _Fields findByName(java.lang.String name) {
+        return byName.get(name);
+      }
+
+      private final short _thriftId;
+      private final java.lang.String _fieldName;
+
+      _Fields(short thriftId, java.lang.String fieldName) {
+        _thriftId = thriftId;
+        _fieldName = fieldName;
+      }
+
+      public short getThriftFieldId() {
+        return _thriftId;
+      }
+
+      public java.lang.String getFieldName() {
+        return _fieldName;
+      }
+    }
+
+    // isset id assignments
+    public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+    static {
+      java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+      tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
+              new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL))));
+      tmpMap.put(_Fields.IO, new org.apache.thrift.meta_data.FieldMetaData("io", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, TIOError.class)));
+      metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(clearSlowLogResponses_result.class, metaDataMap);
+    }
+
+    public clearSlowLogResponses_result() {
+    }
+
+    public clearSlowLogResponses_result(
+      java.util.List<java.lang.Boolean> success,
+      TIOError io)
+    {
+      this();
+      this.success = success;
+      this.io = io;
+    }
+
+    /**
+     * Performs a deep copy on <i>other</i>.
+     */
+    public clearSlowLogResponses_result(clearSlowLogResponses_result other) {
+      if (other.isSetSuccess()) {
+        java.util.List<java.lang.Boolean> __this__success = new java.util.ArrayList<java.lang.Boolean>(other.success);
+        this.success = __this__success;
+      }
+      if (other.isSetIo()) {
+        this.io = new TIOError(other.io);
+      }
+    }
+
+    public clearSlowLogResponses_result deepCopy() {
+      return new clearSlowLogResponses_result(this);
+    }
+
+    @Override
+    public void clear() {
+      this.success = null;
+      this.io = null;
+    }
+
+    public int getSuccessSize() {
+      return (this.success == null) ? 0 : this.success.size();
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public java.util.Iterator<java.lang.Boolean> getSuccessIterator() {
+      return (this.success == null) ? null : this.success.iterator();
+    }
+
+    public void addToSuccess(boolean elem) {
+      if (this.success == null) {
+        this.success = new java.util.ArrayList<java.lang.Boolean>();
+      }
+      this.success.add(elem);
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public java.util.List<java.lang.Boolean> getSuccess() {
+      return this.success;
+    }
+
+    public clearSlowLogResponses_result setSuccess(@org.apache.thrift.annotation.Nullable java.util.List<java.lang.Boolean> success) {
+      this.success = success;
+      return this;
+    }
+
+    public void unsetSuccess() {
+      this.success = null;
+    }
+
+    /** Returns true if field success is set (has been assigned a value) and false otherwise */
+    public boolean isSetSuccess() {
+      return this.success != null;
+    }
+
+    public void setSuccessIsSet(boolean value) {
+      if (!value) {
+        this.success = null;
+      }
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public TIOError getIo() {
+      return this.io;
+    }
+
+    public clearSlowLogResponses_result setIo(@org.apache.thrift.annotation.Nullable TIOError io) {
+      this.io = io;
+      return this;
+    }
+
+    public void unsetIo() {
+      this.io = null;
+    }
+
+    /** Returns true if field io is set (has been assigned a value) and false otherwise */
+    public boolean isSetIo() {
+      return this.io != null;
+    }
+
+    public void setIoIsSet(boolean value) {
+      if (!value) {
+        this.io = null;
+      }
+    }
+
+    public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
+      switch (field) {
+      case SUCCESS:
+        if (value == null) {
+          unsetSuccess();
+        } else {
+          setSuccess((java.util.List<java.lang.Boolean>)value);
+        }
+        break;
+
+      case IO:
+        if (value == null) {
+          unsetIo();
+        } else {
+          setIo((TIOError)value);
+        }
+        break;
+
+      }
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public java.lang.Object getFieldValue(_Fields field) {
+      switch (field) {
+      case SUCCESS:
+        return getSuccess();
+
+      case IO:
+        return getIo();
+
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+    public boolean isSet(_Fields field) {
+      if (field == null) {
+        throw new java.lang.IllegalArgumentException();
+      }
+
+      switch (field) {
+      case SUCCESS:
+        return isSetSuccess();
+      case IO:
+        return isSetIo();
+      }
+      throw new java.lang.IllegalStateException();
+    }
+
+    @Override
+    public boolean equals(java.lang.Object that) {
+      if (that == null)
+        return false;
+      if (that instanceof clearSlowLogResponses_result)
+        return this.equals((clearSlowLogResponses_result)that);
+      return false;
+    }
+
+    public boolean equals(clearSlowLogResponses_result that) {
+      if (that == null)
+        return false;
+      if (this == that)
+        return true;
+
+      boolean this_present_success = true && this.isSetSuccess();
+      boolean that_present_success = true && that.isSetSuccess();
+      if (this_present_success || that_present_success) {
+        if (!(this_present_success && that_present_success))
+          return false;
+        if (!this.success.equals(that.success))
+          return false;
+      }
+
+      boolean this_present_io = true && this.isSetIo();
+      boolean that_present_io = true && that.isSetIo();
+      if (this_present_io || that_present_io) {
+        if (!(this_present_io && that_present_io))
+          return false;
+        if (!this.io.equals(that.io))
+          return false;
+      }
+
+      return true;
+    }
+
+    @Override
+    public int hashCode() {
+      int hashCode = 1;
+
+      hashCode = hashCode * 8191 + ((isSetSuccess()) ? 131071 : 524287);
+      if (isSetSuccess())
+        hashCode = hashCode * 8191 + success.hashCode();
+
+      hashCode = hashCode * 8191 + ((isSetIo()) ? 131071 : 524287);
+      if (isSetIo())
+        hashCode = hashCode * 8191 + io.hashCode();
+
+      return hashCode;
+    }
+
+    @Override
+    public int compareTo(clearSlowLogResponses_result other) {
+      if (!getClass().equals(other.getClass())) {
+        return getClass().getName().compareTo(other.getClass().getName());
+      }
+
+      int lastComparison = 0;
+
+      lastComparison = java.lang.Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetSuccess()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      lastComparison = java.lang.Boolean.valueOf(isSetIo()).compareTo(other.isSetIo());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetIo()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.io, other.io);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      return 0;
+    }
+
+    @org.apache.thrift.annotation.Nullable
+    public _Fields fieldForId(int fieldId) {
+      return _Fields.findByThriftId(fieldId);
+    }
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+      scheme(iprot).read(iprot, this);
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+      scheme(oprot).write(oprot, this);
+      }
+
+    @Override
+    public java.lang.String toString() {
+      java.lang.StringBuilder sb = new java.lang.StringBuilder("clearSlowLogResponses_result(");
+      boolean first = true;
+
+      sb.append("success:");
+      if (this.success == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.success);
+      }
+      first = false;
+      if (!first) sb.append(", ");
+      sb.append("io:");
+      if (this.io == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.io);
+      }
+      first = false;
+      sb.append(")");
+      return sb.toString();
+    }
+
+    public void validate() throws org.apache.thrift.TException {
+      // check for required fields
+      // check for sub-struct validity
+    }
+
+    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+      try {
+        write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
+      try {
+        read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+      } catch (org.apache.thrift.TException te) {
+        throw new java.io.IOException(te);
+      }
+    }
+
+    private static class clearSlowLogResponses_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public clearSlowLogResponses_resultStandardScheme getScheme() {
+        return new clearSlowLogResponses_resultStandardScheme();
+      }
+    }
+
+    private static class clearSlowLogResponses_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<clearSlowLogResponses_result> {
+
+      public void read(org.apache.thrift.protocol.TProtocol iprot, clearSlowLogResponses_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TField schemeField;
+        iprot.readStructBegin();
+        while (true)
+        {
+          schemeField = iprot.readFieldBegin();
+          if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+            break;
+          }
+          switch (schemeField.id) {
+            case 0: // SUCCESS
+              if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
+                {
+                  org.apache.thrift.protocol.TList _list374 = iprot.readListBegin();
+                  struct.success = new java.util.ArrayList<java.lang.Boolean>(_list374.size);
+                  boolean _elem375;
+                  for (int _i376 = 0; _i376 < _list374.size; ++_i376)
+                  {
+                    _elem375 = iprot.readBool();
+                    struct.success.add(_elem375);
+                  }
+                  iprot.readListEnd();
+                }
+                struct.setSuccessIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 1: // IO
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.io = new TIOError();
+                struct.io.read(iprot);
+                struct.setIoIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            default:
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+          }
+          iprot.readFieldEnd();
+        }
+        iprot.readStructEnd();
+
+        // check for required fields of primitive type, which can't be checked in the validate method
+        struct.validate();
+      }
+
+      public void write(org.apache.thrift.protocol.TProtocol oprot, clearSlowLogResponses_result struct) throws org.apache.thrift.TException {
+        struct.validate();
+
+        oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.success != null) {
+          oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
+          {
+            oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.BOOL, struct.success.size()));
+            for (boolean _iter377 : struct.success)
+            {
+              oprot.writeBool(_iter377);
+            }
+            oprot.writeListEnd();
+          }
+          oprot.writeFieldEnd();
+        }
+        if (struct.io != null) {
+          oprot.writeFieldBegin(IO_FIELD_DESC);
+          struct.io.write(oprot);
+          oprot.writeFieldEnd();
+        }
+        oprot.writeFieldStop();
+        oprot.writeStructEnd();
+      }
+
+    }
+
+    private static class clearSlowLogResponses_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public clearSlowLogResponses_resultTupleScheme getScheme() {
+        return new clearSlowLogResponses_resultTupleScheme();
+      }
+    }
+
+    private static class clearSlowLogResponses_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<clearSlowLogResponses_result> {
+
+      @Override
+      public void write(org.apache.thrift.protocol.TProtocol prot, clearSlowLogResponses_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet optionals = new java.util.BitSet();
+        if (struct.isSetSuccess()) {
+          optionals.set(0);
+        }
+        if (struct.isSetIo()) {
+          optionals.set(1);
+        }
+        oprot.writeBitSet(optionals, 2);
+        if (struct.isSetSuccess()) {
+          {
+            oprot.writeI32(struct.success.size());
+            for (boolean _iter378 : struct.success)
+            {
+              oprot.writeBool(_iter378);
+            }
+          }
+        }
+        if (struct.isSetIo()) {
+          struct.io.write(oprot);
+        }
+      }
+
+      @Override
+      public void read(org.apache.thrift.protocol.TProtocol prot, clearSlowLogResponses_result struct) throws org.apache.thrift.TException {
+        org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+        java.util.BitSet incoming = iprot.readBitSet(2);
+        if (incoming.get(0)) {
+          {
+            org.apache.thrift.protocol.TList _list379 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.BOOL, iprot.readI32());
+            struct.success = new java.util.ArrayList<java.lang.Boolean>(_list379.size);
+            boolean _elem380;
+            for (int _i381 = 0; _i381 < _list379.size; ++_i381)
+            {
+              _elem380 = iprot.readBool();
+              struct.success.add(_elem380);
+            }
+          }
+          struct.setSuccessIsSet(true);
+        }
+        if (incoming.get(1)) {
+          struct.io = new TIOError();
+          struct.io.read(iprot);
+          struct.setIoIsSet(true);
+        }
+      }
+    }
+
+    private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+      return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+    }
+  }
+
 }
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/THRegionInfo.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/THRegionInfo.java
index 3358575..d00eb62 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/THRegionInfo.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/THRegionInfo.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -7,7 +7,7 @@
 package org.apache.hadoop.hbase.thrift2.generated;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public class THRegionInfo implements org.apache.thrift.TBase<THRegionInfo, THRegionInfo._Fields>, java.io.Serializable, Cloneable, Comparable<THRegionInfo> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("THRegionInfo");
 
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/THRegionLocation.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/THRegionLocation.java
index eab7f0c..52f846c 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/THRegionLocation.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/THRegionLocation.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -7,7 +7,7 @@
 package org.apache.hadoop.hbase.thrift2.generated;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public class THRegionLocation implements org.apache.thrift.TBase<THRegionLocation, THRegionLocation._Fields>, java.io.Serializable, Cloneable, Comparable<THRegionLocation> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("THRegionLocation");
 
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TIOError.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TIOError.java
index c8d2f78..d8c27ff 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TIOError.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TIOError.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -12,7 +12,7 @@ package org.apache.hadoop.hbase.thrift2.generated;
  * to the HBase master or a HBase region server. Also used to return
  * more general HBase error conditions.
  */
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public class TIOError extends org.apache.thrift.TException implements org.apache.thrift.TBase<TIOError, TIOError._Fields>, java.io.Serializable, Cloneable, Comparable<TIOError> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TIOError");
 
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TIllegalArgument.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TIllegalArgument.java
index 3130061..6996ce4 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TIllegalArgument.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TIllegalArgument.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -11,7 +11,7 @@ package org.apache.hadoop.hbase.thrift2.generated;
  * A TIllegalArgument exception indicates an illegal or invalid
  * argument was passed into a procedure.
  */
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public class TIllegalArgument extends org.apache.thrift.TException implements org.apache.thrift.TBase<TIllegalArgument, TIllegalArgument._Fields>, java.io.Serializable, Cloneable, Comparable<TIllegalArgument> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TIllegalArgument");
 
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TIncrement.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TIncrement.java
index de5c357..0d3d460 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TIncrement.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TIncrement.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -14,7 +14,7 @@ package org.apache.hadoop.hbase.thrift2.generated;
  * by changing the durability. If you don't provide durability, it defaults to
  * column family's default setting for durability.
  */
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public class TIncrement implements org.apache.thrift.TBase<TIncrement, TIncrement._Fields>, java.io.Serializable, Cloneable, Comparable<TIncrement> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TIncrement");
 
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TKeepDeletedCells.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TKeepDeletedCells.java
index 121d8c0..2f36d42 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TKeepDeletedCells.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TKeepDeletedCells.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -11,7 +11,7 @@ package org.apache.hadoop.hbase.thrift2.generated;
  * Thrift wrapper around
  * org.apache.hadoop.hbase.KeepDeletedCells
  */
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public enum TKeepDeletedCells implements org.apache.thrift.TEnum {
   /**
    * Deleted Cells are not retained.
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TMutation.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TMutation.java
index ace4aad..4858377 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TMutation.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TMutation.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -10,7 +10,7 @@ package org.apache.hadoop.hbase.thrift2.generated;
 /**
  * Atomic mutation for the specified row. It can be either Put or Delete.
  */
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public class TMutation extends org.apache.thrift.TUnion<TMutation, TMutation._Fields> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TMutation");
   private static final org.apache.thrift.protocol.TField PUT_FIELD_DESC = new org.apache.thrift.protocol.TField("put", org.apache.thrift.protocol.TType.STRUCT, (short)1);
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TNamespaceDescriptor.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TNamespaceDescriptor.java
index 5e12e11..76c647e 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TNamespaceDescriptor.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TNamespaceDescriptor.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -11,7 +11,7 @@ package org.apache.hadoop.hbase.thrift2.generated;
  * Thrift wrapper around
  * org.apache.hadoop.hbase.NamespaceDescriptor
  */
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public class TNamespaceDescriptor implements org.apache.thrift.TBase<TNamespaceDescriptor, TNamespaceDescriptor._Fields>, java.io.Serializable, Cloneable, Comparable<TNamespaceDescriptor> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TNamespaceDescriptor");
 
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TPut.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TPut.java
index 52f3ab4..3b9f74c 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TPut.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TPut.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -19,7 +19,7 @@ package org.apache.hadoop.hbase.thrift2.generated;
  * by changing the durability. If you don't provide durability, it defaults to
  * column family's default setting for durability.
  */
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public class TPut implements org.apache.thrift.TBase<TPut, TPut._Fields>, java.io.Serializable, Cloneable, Comparable<TPut> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TPut");
 
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TReadType.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TReadType.java
index b81638b..906bafe 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TReadType.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TReadType.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -7,7 +7,7 @@
 package org.apache.hadoop.hbase.thrift2.generated;
 
 
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public enum TReadType implements org.apache.thrift.TEnum {
   DEFAULT(1),
   STREAM(2),
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TResult.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TResult.java
index ce62c95..5e69fed 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TResult.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TResult.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -10,7 +10,7 @@ package org.apache.hadoop.hbase.thrift2.generated;
 /**
  * if no Result is found, row and columnValues will not be set.
  */
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public class TResult implements org.apache.thrift.TBase<TResult, TResult._Fields>, java.io.Serializable, Cloneable, Comparable<TResult> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TResult");
 
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TRowMutations.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TRowMutations.java
index d78e44f..91165d1 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TRowMutations.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TRowMutations.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -10,7 +10,7 @@ package org.apache.hadoop.hbase.thrift2.generated;
 /**
  * A TRowMutations object is used to apply a number of Mutations to a single row.
  */
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public class TRowMutations implements org.apache.thrift.TBase<TRowMutations, TRowMutations._Fields>, java.io.Serializable, Cloneable, Comparable<TRowMutations> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TRowMutations");
 
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TScan.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TScan.java
index bfd3227..98826bf 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TScan.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TScan.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -11,7 +11,7 @@ package org.apache.hadoop.hbase.thrift2.generated;
  * Any timestamps in the columns are ignored but the colFamTimeRangeMap included, use timeRange to select by timestamp.
  * Max versions defaults to 1.
  */
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public class TScan implements org.apache.thrift.TBase<TScan, TScan._Fields>, java.io.Serializable, Cloneable, Comparable<TScan> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TScan");
 
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TServerName.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TServerName.java
index 15668cb..429f0d2 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TServerName.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TServerName.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -7,7 +7,7 @@
 package org.apache.hadoop.hbase.thrift2.generated;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public class TServerName implements org.apache.thrift.TBase<TServerName, TServerName._Fields>, java.io.Serializable, Cloneable, Comparable<TServerName> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TServerName");
 
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TSlowLogQueryFilter.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TSlowLogQueryFilter.java
new file mode 100644
index 0000000..bd6f4cc
--- /dev/null
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TSlowLogQueryFilter.java
@@ -0,0 +1,805 @@
+/**
+ * Autogenerated by Thrift Compiler (0.13.0)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+package org.apache.hadoop.hbase.thrift2.generated;
+
+@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
+/**
+ * Thrift wrapper around
+ * org.apache.hadoop.hbase.client.SlowLogQueryFilter
+ */
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
+public class TSlowLogQueryFilter implements org.apache.thrift.TBase<TSlowLogQueryFilter, TSlowLogQueryFilter._Fields>, java.io.Serializable, Cloneable, Comparable<TSlowLogQueryFilter> {
+  private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TSlowLogQueryFilter");
+
+  private static final org.apache.thrift.protocol.TField REGION_NAME_FIELD_DESC = new org.apache.thrift.protocol.TField("regionName", org.apache.thrift.protocol.TType.STRING, (short)1);
+  private static final org.apache.thrift.protocol.TField CLIENT_ADDRESS_FIELD_DESC = new org.apache.thrift.protocol.TField("clientAddress", org.apache.thrift.protocol.TType.STRING, (short)2);
+  private static final org.apache.thrift.protocol.TField TABLE_NAME_FIELD_DESC = new org.apache.thrift.protocol.TField("tableName", org.apache.thrift.protocol.TType.STRING, (short)3);
+  private static final org.apache.thrift.protocol.TField USER_NAME_FIELD_DESC = new org.apache.thrift.protocol.TField("userName", org.apache.thrift.protocol.TType.STRING, (short)4);
+  private static final org.apache.thrift.protocol.TField LIMIT_FIELD_DESC = new org.apache.thrift.protocol.TField("limit", org.apache.thrift.protocol.TType.I32, (short)5);
+
+  private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new TSlowLogQueryFilterStandardSchemeFactory();
+  private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new TSlowLogQueryFilterTupleSchemeFactory();
+
+  public @org.apache.thrift.annotation.Nullable java.lang.String regionName; // optional
+  public @org.apache.thrift.annotation.Nullable java.lang.String clientAddress; // optional
+  public @org.apache.thrift.annotation.Nullable java.lang.String tableName; // optional
+  public @org.apache.thrift.annotation.Nullable java.lang.String userName; // optional
+  public int limit; // optional
+
+  /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+  public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+    REGION_NAME((short)1, "regionName"),
+    CLIENT_ADDRESS((short)2, "clientAddress"),
+    TABLE_NAME((short)3, "tableName"),
+    USER_NAME((short)4, "userName"),
+    LIMIT((short)5, "limit");
+
+    private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
+
+    static {
+      for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+        byName.put(field.getFieldName(), field);
+      }
+    }
+
+    /**
+     * Find the _Fields constant that matches fieldId, or null if its not found.
+     */
+    @org.apache.thrift.annotation.Nullable
+    public static _Fields findByThriftId(int fieldId) {
+      switch(fieldId) {
+        case 1: // REGION_NAME
+          return REGION_NAME;
+        case 2: // CLIENT_ADDRESS
+          return CLIENT_ADDRESS;
+        case 3: // TABLE_NAME
+          return TABLE_NAME;
+        case 4: // USER_NAME
+          return USER_NAME;
+        case 5: // LIMIT
+          return LIMIT;
+        default:
+          return null;
+      }
+    }
+
+    /**
+     * Find the _Fields constant that matches fieldId, throwing an exception
+     * if it is not found.
+     */
+    public static _Fields findByThriftIdOrThrow(int fieldId) {
+      _Fields fields = findByThriftId(fieldId);
+      if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+      return fields;
+    }
+
+    /**
+     * Find the _Fields constant that matches name, or null if its not found.
+     */
+    @org.apache.thrift.annotation.Nullable
+    public static _Fields findByName(java.lang.String name) {
+      return byName.get(name);
+    }
+
+    private final short _thriftId;
+    private final java.lang.String _fieldName;
+
+    _Fields(short thriftId, java.lang.String fieldName) {
+      _thriftId = thriftId;
+      _fieldName = fieldName;
+    }
+
+    public short getThriftFieldId() {
+      return _thriftId;
+    }
+
+    public java.lang.String getFieldName() {
+      return _fieldName;
+    }
+  }
+
+  // isset id assignments
+  private static final int __LIMIT_ISSET_ID = 0;
+  private byte __isset_bitfield = 0;
+  private static final _Fields optionals[] = {_Fields.REGION_NAME,_Fields.CLIENT_ADDRESS,_Fields.TABLE_NAME,_Fields.USER_NAME,_Fields.LIMIT};
+  public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+  static {
+    java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+    tmpMap.put(_Fields.REGION_NAME, new org.apache.thrift.meta_data.FieldMetaData("regionName", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.CLIENT_ADDRESS, new org.apache.thrift.meta_data.FieldMetaData("clientAddress", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.TABLE_NAME, new org.apache.thrift.meta_data.FieldMetaData("tableName", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.USER_NAME, new org.apache.thrift.meta_data.FieldMetaData("userName", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.LIMIT, new org.apache.thrift.meta_data.FieldMetaData("limit", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
+    metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+    org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(TSlowLogQueryFilter.class, metaDataMap);
+  }
+
+  public TSlowLogQueryFilter() {
+    this.limit = 10;
+
+  }
+
+  /**
+   * Performs a deep copy on <i>other</i>.
+   */
+  public TSlowLogQueryFilter(TSlowLogQueryFilter other) {
+    __isset_bitfield = other.__isset_bitfield;
+    if (other.isSetRegionName()) {
+      this.regionName = other.regionName;
+    }
+    if (other.isSetClientAddress()) {
+      this.clientAddress = other.clientAddress;
+    }
+    if (other.isSetTableName()) {
+      this.tableName = other.tableName;
+    }
+    if (other.isSetUserName()) {
+      this.userName = other.userName;
+    }
+    this.limit = other.limit;
+  }
+
+  public TSlowLogQueryFilter deepCopy() {
+    return new TSlowLogQueryFilter(this);
+  }
+
+  @Override
+  public void clear() {
+    this.regionName = null;
+    this.clientAddress = null;
+    this.tableName = null;
+    this.userName = null;
+    this.limit = 10;
+
+  }
+
+  @org.apache.thrift.annotation.Nullable
+  public java.lang.String getRegionName() {
+    return this.regionName;
+  }
+
+  public TSlowLogQueryFilter setRegionName(@org.apache.thrift.annotation.Nullable java.lang.String regionName) {
+    this.regionName = regionName;
+    return this;
+  }
+
+  public void unsetRegionName() {
+    this.regionName = null;
+  }
+
+  /** Returns true if field regionName is set (has been assigned a value) and false otherwise */
+  public boolean isSetRegionName() {
+    return this.regionName != null;
+  }
+
+  public void setRegionNameIsSet(boolean value) {
+    if (!value) {
+      this.regionName = null;
+    }
+  }
+
+  @org.apache.thrift.annotation.Nullable
+  public java.lang.String getClientAddress() {
+    return this.clientAddress;
+  }
+
+  public TSlowLogQueryFilter setClientAddress(@org.apache.thrift.annotation.Nullable java.lang.String clientAddress) {
+    this.clientAddress = clientAddress;
+    return this;
+  }
+
+  public void unsetClientAddress() {
+    this.clientAddress = null;
+  }
+
+  /** Returns true if field clientAddress is set (has been assigned a value) and false otherwise */
+  public boolean isSetClientAddress() {
+    return this.clientAddress != null;
+  }
+
+  public void setClientAddressIsSet(boolean value) {
+    if (!value) {
+      this.clientAddress = null;
+    }
+  }
+
+  @org.apache.thrift.annotation.Nullable
+  public java.lang.String getTableName() {
+    return this.tableName;
+  }
+
+  public TSlowLogQueryFilter setTableName(@org.apache.thrift.annotation.Nullable java.lang.String tableName) {
+    this.tableName = tableName;
+    return this;
+  }
+
+  public void unsetTableName() {
+    this.tableName = null;
+  }
+
+  /** Returns true if field tableName is set (has been assigned a value) and false otherwise */
+  public boolean isSetTableName() {
+    return this.tableName != null;
+  }
+
+  public void setTableNameIsSet(boolean value) {
+    if (!value) {
+      this.tableName = null;
+    }
+  }
+
+  @org.apache.thrift.annotation.Nullable
+  public java.lang.String getUserName() {
+    return this.userName;
+  }
+
+  public TSlowLogQueryFilter setUserName(@org.apache.thrift.annotation.Nullable java.lang.String userName) {
+    this.userName = userName;
+    return this;
+  }
+
+  public void unsetUserName() {
+    this.userName = null;
+  }
+
+  /** Returns true if field userName is set (has been assigned a value) and false otherwise */
+  public boolean isSetUserName() {
+    return this.userName != null;
+  }
+
+  public void setUserNameIsSet(boolean value) {
+    if (!value) {
+      this.userName = null;
+    }
+  }
+
+  public int getLimit() {
+    return this.limit;
+  }
+
+  public TSlowLogQueryFilter setLimit(int limit) {
+    this.limit = limit;
+    setLimitIsSet(true);
+    return this;
+  }
+
+  public void unsetLimit() {
+    __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __LIMIT_ISSET_ID);
+  }
+
+  /** Returns true if field limit is set (has been assigned a value) and false otherwise */
+  public boolean isSetLimit() {
+    return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __LIMIT_ISSET_ID);
+  }
+
+  public void setLimitIsSet(boolean value) {
+    __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __LIMIT_ISSET_ID, value);
+  }
+
+  public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
+    switch (field) {
+    case REGION_NAME:
+      if (value == null) {
+        unsetRegionName();
+      } else {
+        setRegionName((java.lang.String)value);
+      }
+      break;
+
+    case CLIENT_ADDRESS:
+      if (value == null) {
+        unsetClientAddress();
+      } else {
+        setClientAddress((java.lang.String)value);
+      }
+      break;
+
+    case TABLE_NAME:
+      if (value == null) {
+        unsetTableName();
+      } else {
+        setTableName((java.lang.String)value);
+      }
+      break;
+
+    case USER_NAME:
+      if (value == null) {
+        unsetUserName();
+      } else {
+        setUserName((java.lang.String)value);
+      }
+      break;
+
+    case LIMIT:
+      if (value == null) {
+        unsetLimit();
+      } else {
+        setLimit((java.lang.Integer)value);
+      }
+      break;
+
+    }
+  }
+
+  @org.apache.thrift.annotation.Nullable
+  public java.lang.Object getFieldValue(_Fields field) {
+    switch (field) {
+    case REGION_NAME:
+      return getRegionName();
+
+    case CLIENT_ADDRESS:
+      return getClientAddress();
+
+    case TABLE_NAME:
+      return getTableName();
+
+    case USER_NAME:
+      return getUserName();
+
+    case LIMIT:
+      return getLimit();
+
+    }
+    throw new java.lang.IllegalStateException();
+  }
+
+  /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+  public boolean isSet(_Fields field) {
+    if (field == null) {
+      throw new java.lang.IllegalArgumentException();
+    }
+
+    switch (field) {
+    case REGION_NAME:
+      return isSetRegionName();
+    case CLIENT_ADDRESS:
+      return isSetClientAddress();
+    case TABLE_NAME:
+      return isSetTableName();
+    case USER_NAME:
+      return isSetUserName();
+    case LIMIT:
+      return isSetLimit();
+    }
+    throw new java.lang.IllegalStateException();
+  }
+
+  @Override
+  public boolean equals(java.lang.Object that) {
+    if (that == null)
+      return false;
+    if (that instanceof TSlowLogQueryFilter)
+      return this.equals((TSlowLogQueryFilter)that);
+    return false;
+  }
+
+  public boolean equals(TSlowLogQueryFilter that) {
+    if (that == null)
+      return false;
+    if (this == that)
+      return true;
+
+    boolean this_present_regionName = true && this.isSetRegionName();
+    boolean that_present_regionName = true && that.isSetRegionName();
+    if (this_present_regionName || that_present_regionName) {
+      if (!(this_present_regionName && that_present_regionName))
+        return false;
+      if (!this.regionName.equals(that.regionName))
+        return false;
+    }
+
+    boolean this_present_clientAddress = true && this.isSetClientAddress();
+    boolean that_present_clientAddress = true && that.isSetClientAddress();
+    if (this_present_clientAddress || that_present_clientAddress) {
+      if (!(this_present_clientAddress && that_present_clientAddress))
+        return false;
+      if (!this.clientAddress.equals(that.clientAddress))
+        return false;
+    }
+
+    boolean this_present_tableName = true && this.isSetTableName();
+    boolean that_present_tableName = true && that.isSetTableName();
+    if (this_present_tableName || that_present_tableName) {
+      if (!(this_present_tableName && that_present_tableName))
+        return false;
+      if (!this.tableName.equals(that.tableName))
+        return false;
+    }
+
+    boolean this_present_userName = true && this.isSetUserName();
+    boolean that_present_userName = true && that.isSetUserName();
+    if (this_present_userName || that_present_userName) {
+      if (!(this_present_userName && that_present_userName))
+        return false;
+      if (!this.userName.equals(that.userName))
+        return false;
+    }
+
+    boolean this_present_limit = true && this.isSetLimit();
+    boolean that_present_limit = true && that.isSetLimit();
+    if (this_present_limit || that_present_limit) {
+      if (!(this_present_limit && that_present_limit))
+        return false;
+      if (this.limit != that.limit)
+        return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    int hashCode = 1;
+
+    hashCode = hashCode * 8191 + ((isSetRegionName()) ? 131071 : 524287);
+    if (isSetRegionName())
+      hashCode = hashCode * 8191 + regionName.hashCode();
+
+    hashCode = hashCode * 8191 + ((isSetClientAddress()) ? 131071 : 524287);
+    if (isSetClientAddress())
+      hashCode = hashCode * 8191 + clientAddress.hashCode();
+
+    hashCode = hashCode * 8191 + ((isSetTableName()) ? 131071 : 524287);
+    if (isSetTableName())
+      hashCode = hashCode * 8191 + tableName.hashCode();
+
+    hashCode = hashCode * 8191 + ((isSetUserName()) ? 131071 : 524287);
+    if (isSetUserName())
+      hashCode = hashCode * 8191 + userName.hashCode();
+
+    hashCode = hashCode * 8191 + ((isSetLimit()) ? 131071 : 524287);
+    if (isSetLimit())
+      hashCode = hashCode * 8191 + limit;
+
+    return hashCode;
+  }
+
+  @Override
+  public int compareTo(TSlowLogQueryFilter other) {
+    if (!getClass().equals(other.getClass())) {
+      return getClass().getName().compareTo(other.getClass().getName());
+    }
+
+    int lastComparison = 0;
+
+    lastComparison = java.lang.Boolean.valueOf(isSetRegionName()).compareTo(other.isSetRegionName());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetRegionName()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.regionName, other.regionName);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = java.lang.Boolean.valueOf(isSetClientAddress()).compareTo(other.isSetClientAddress());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetClientAddress()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.clientAddress, other.clientAddress);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = java.lang.Boolean.valueOf(isSetTableName()).compareTo(other.isSetTableName());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetTableName()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.tableName, other.tableName);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = java.lang.Boolean.valueOf(isSetUserName()).compareTo(other.isSetUserName());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetUserName()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.userName, other.userName);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = java.lang.Boolean.valueOf(isSetLimit()).compareTo(other.isSetLimit());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetLimit()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.limit, other.limit);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    return 0;
+  }
+
+  @org.apache.thrift.annotation.Nullable
+  public _Fields fieldForId(int fieldId) {
+    return _Fields.findByThriftId(fieldId);
+  }
+
+  public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+    scheme(iprot).read(iprot, this);
+  }
+
+  public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+    scheme(oprot).write(oprot, this);
+  }
+
+  @Override
+  public java.lang.String toString() {
+    java.lang.StringBuilder sb = new java.lang.StringBuilder("TSlowLogQueryFilter(");
+    boolean first = true;
+
+    if (isSetRegionName()) {
+      sb.append("regionName:");
+      if (this.regionName == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.regionName);
+      }
+      first = false;
+    }
+    if (isSetClientAddress()) {
+      if (!first) sb.append(", ");
+      sb.append("clientAddress:");
+      if (this.clientAddress == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.clientAddress);
+      }
+      first = false;
+    }
+    if (isSetTableName()) {
+      if (!first) sb.append(", ");
+      sb.append("tableName:");
+      if (this.tableName == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.tableName);
+      }
+      first = false;
+    }
+    if (isSetUserName()) {
+      if (!first) sb.append(", ");
+      sb.append("userName:");
+      if (this.userName == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.userName);
+      }
+      first = false;
+    }
+    if (isSetLimit()) {
+      if (!first) sb.append(", ");
+      sb.append("limit:");
+      sb.append(this.limit);
+      first = false;
+    }
+    sb.append(")");
+    return sb.toString();
+  }
+
+  public void validate() throws org.apache.thrift.TException {
+    // check for required fields
+    // check for sub-struct validity
+  }
+
+  private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+    try {
+      write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+    } catch (org.apache.thrift.TException te) {
+      throw new java.io.IOException(te);
+    }
+  }
+
+  private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
+    try {
+      // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+      __isset_bitfield = 0;
+      read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+    } catch (org.apache.thrift.TException te) {
+      throw new java.io.IOException(te);
+    }
+  }
+
+  private static class TSlowLogQueryFilterStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+    public TSlowLogQueryFilterStandardScheme getScheme() {
+      return new TSlowLogQueryFilterStandardScheme();
+    }
+  }
+
+  private static class TSlowLogQueryFilterStandardScheme extends org.apache.thrift.scheme.StandardScheme<TSlowLogQueryFilter> {
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot, TSlowLogQueryFilter struct) throws org.apache.thrift.TException {
+      org.apache.thrift.protocol.TField schemeField;
+      iprot.readStructBegin();
+      while (true)
+      {
+        schemeField = iprot.readFieldBegin();
+        if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+          break;
+        }
+        switch (schemeField.id) {
+          case 1: // REGION_NAME
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.regionName = iprot.readString();
+              struct.setRegionNameIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 2: // CLIENT_ADDRESS
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.clientAddress = iprot.readString();
+              struct.setClientAddressIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 3: // TABLE_NAME
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.tableName = iprot.readString();
+              struct.setTableNameIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 4: // USER_NAME
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.userName = iprot.readString();
+              struct.setUserNameIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 5: // LIMIT
+            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+              struct.limit = iprot.readI32();
+              struct.setLimitIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          default:
+            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+        }
+        iprot.readFieldEnd();
+      }
+      iprot.readStructEnd();
+
+      // check for required fields of primitive type, which can't be checked in the validate method
+      struct.validate();
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot, TSlowLogQueryFilter struct) throws org.apache.thrift.TException {
+      struct.validate();
+
+      oprot.writeStructBegin(STRUCT_DESC);
+      if (struct.regionName != null) {
+        if (struct.isSetRegionName()) {
+          oprot.writeFieldBegin(REGION_NAME_FIELD_DESC);
+          oprot.writeString(struct.regionName);
+          oprot.writeFieldEnd();
+        }
+      }
+      if (struct.clientAddress != null) {
+        if (struct.isSetClientAddress()) {
+          oprot.writeFieldBegin(CLIENT_ADDRESS_FIELD_DESC);
+          oprot.writeString(struct.clientAddress);
+          oprot.writeFieldEnd();
+        }
+      }
+      if (struct.tableName != null) {
+        if (struct.isSetTableName()) {
+          oprot.writeFieldBegin(TABLE_NAME_FIELD_DESC);
+          oprot.writeString(struct.tableName);
+          oprot.writeFieldEnd();
+        }
+      }
+      if (struct.userName != null) {
+        if (struct.isSetUserName()) {
+          oprot.writeFieldBegin(USER_NAME_FIELD_DESC);
+          oprot.writeString(struct.userName);
+          oprot.writeFieldEnd();
+        }
+      }
+      if (struct.isSetLimit()) {
+        oprot.writeFieldBegin(LIMIT_FIELD_DESC);
+        oprot.writeI32(struct.limit);
+        oprot.writeFieldEnd();
+      }
+      oprot.writeFieldStop();
+      oprot.writeStructEnd();
+    }
+
+  }
+
+  private static class TSlowLogQueryFilterTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+    public TSlowLogQueryFilterTupleScheme getScheme() {
+      return new TSlowLogQueryFilterTupleScheme();
+    }
+  }
+
+  private static class TSlowLogQueryFilterTupleScheme extends org.apache.thrift.scheme.TupleScheme<TSlowLogQueryFilter> {
+
+    @Override
+    public void write(org.apache.thrift.protocol.TProtocol prot, TSlowLogQueryFilter struct) throws org.apache.thrift.TException {
+      org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+      java.util.BitSet optionals = new java.util.BitSet();
+      if (struct.isSetRegionName()) {
+        optionals.set(0);
+      }
+      if (struct.isSetClientAddress()) {
+        optionals.set(1);
+      }
+      if (struct.isSetTableName()) {
+        optionals.set(2);
+      }
+      if (struct.isSetUserName()) {
+        optionals.set(3);
+      }
+      if (struct.isSetLimit()) {
+        optionals.set(4);
+      }
+      oprot.writeBitSet(optionals, 5);
+      if (struct.isSetRegionName()) {
+        oprot.writeString(struct.regionName);
+      }
+      if (struct.isSetClientAddress()) {
+        oprot.writeString(struct.clientAddress);
+      }
+      if (struct.isSetTableName()) {
+        oprot.writeString(struct.tableName);
+      }
+      if (struct.isSetUserName()) {
+        oprot.writeString(struct.userName);
+      }
+      if (struct.isSetLimit()) {
+        oprot.writeI32(struct.limit);
+      }
+    }
+
+    @Override
+    public void read(org.apache.thrift.protocol.TProtocol prot, TSlowLogQueryFilter struct) throws org.apache.thrift.TException {
+      org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+      java.util.BitSet incoming = iprot.readBitSet(5);
+      if (incoming.get(0)) {
+        struct.regionName = iprot.readString();
+        struct.setRegionNameIsSet(true);
+      }
+      if (incoming.get(1)) {
+        struct.clientAddress = iprot.readString();
+        struct.setClientAddressIsSet(true);
+      }
+      if (incoming.get(2)) {
+        struct.tableName = iprot.readString();
+        struct.setTableNameIsSet(true);
+      }
+      if (incoming.get(3)) {
+        struct.userName = iprot.readString();
+        struct.setUserNameIsSet(true);
+      }
+      if (incoming.get(4)) {
+        struct.limit = iprot.readI32();
+        struct.setLimitIsSet(true);
+      }
+    }
+  }
+
+  private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+    return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+  }
+}
+
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TSlowLogRecord.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TSlowLogRecord.java
new file mode 100644
index 0000000..2619c06
--- /dev/null
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TSlowLogRecord.java
@@ -0,0 +1,1645 @@
+/**
+ * Autogenerated by Thrift Compiler (0.13.0)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+package org.apache.hadoop.hbase.thrift2.generated;
+
+@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
+/**
+ * Thrift wrapper around
+ * org.apache.hadoop.hbase.client.SlowLogRecord
+ */
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
+public class TSlowLogRecord implements org.apache.thrift.TBase<TSlowLogRecord, TSlowLogRecord._Fields>, java.io.Serializable, Cloneable, Comparable<TSlowLogRecord> {
+  private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TSlowLogRecord");
+
+  private static final org.apache.thrift.protocol.TField START_TIME_FIELD_DESC = new org.apache.thrift.protocol.TField("startTime", org.apache.thrift.protocol.TType.I64, (short)1);
+  private static final org.apache.thrift.protocol.TField PROCESSING_TIME_FIELD_DESC = new org.apache.thrift.protocol.TField("processingTime", org.apache.thrift.protocol.TType.I32, (short)2);
+  private static final org.apache.thrift.protocol.TField QUEUE_TIME_FIELD_DESC = new org.apache.thrift.protocol.TField("queueTime", org.apache.thrift.protocol.TType.I32, (short)3);
+  private static final org.apache.thrift.protocol.TField RESPONSE_SIZE_FIELD_DESC = new org.apache.thrift.protocol.TField("responseSize", org.apache.thrift.protocol.TType.I64, (short)4);
+  private static final org.apache.thrift.protocol.TField CLIENT_ADDRESS_FIELD_DESC = new org.apache.thrift.protocol.TField("clientAddress", org.apache.thrift.protocol.TType.STRING, (short)5);
+  private static final org.apache.thrift.protocol.TField SERVER_CLASS_FIELD_DESC = new org.apache.thrift.protocol.TField("serverClass", org.apache.thrift.protocol.TType.STRING, (short)6);
+  private static final org.apache.thrift.protocol.TField METHOD_NAME_FIELD_DESC = new org.apache.thrift.protocol.TField("methodName", org.apache.thrift.protocol.TType.STRING, (short)7);
+  private static final org.apache.thrift.protocol.TField CALL_DETAILS_FIELD_DESC = new org.apache.thrift.protocol.TField("callDetails", org.apache.thrift.protocol.TType.STRING, (short)8);
+  private static final org.apache.thrift.protocol.TField PARAM_FIELD_DESC = new org.apache.thrift.protocol.TField("param", org.apache.thrift.protocol.TType.STRING, (short)9);
+  private static final org.apache.thrift.protocol.TField USER_NAME_FIELD_DESC = new org.apache.thrift.protocol.TField("userName", org.apache.thrift.protocol.TType.STRING, (short)10);
+  private static final org.apache.thrift.protocol.TField MULTI_GETS_COUNT_FIELD_DESC = new org.apache.thrift.protocol.TField("multiGetsCount", org.apache.thrift.protocol.TType.I32, (short)11);
+  private static final org.apache.thrift.protocol.TField MULTI_MUTATIONS_COUNT_FIELD_DESC = new org.apache.thrift.protocol.TField("multiMutationsCount", org.apache.thrift.protocol.TType.I32, (short)12);
+  private static final org.apache.thrift.protocol.TField MULTI_SERVICE_CALLS_FIELD_DESC = new org.apache.thrift.protocol.TField("multiServiceCalls", org.apache.thrift.protocol.TType.I32, (short)13);
+  private static final org.apache.thrift.protocol.TField REGION_NAME_FIELD_DESC = new org.apache.thrift.protocol.TField("regionName", org.apache.thrift.protocol.TType.STRING, (short)14);
+
+  private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new TSlowLogRecordStandardSchemeFactory();
+  private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new TSlowLogRecordTupleSchemeFactory();
+
+  public long startTime; // required
+  public int processingTime; // required
+  public int queueTime; // required
+  public long responseSize; // required
+  public @org.apache.thrift.annotation.Nullable java.lang.String clientAddress; // required
+  public @org.apache.thrift.annotation.Nullable java.lang.String serverClass; // required
+  public @org.apache.thrift.annotation.Nullable java.lang.String methodName; // required
+  public @org.apache.thrift.annotation.Nullable java.lang.String callDetails; // required
+  public @org.apache.thrift.annotation.Nullable java.lang.String param; // required
+  public @org.apache.thrift.annotation.Nullable java.lang.String userName; // required
+  public int multiGetsCount; // required
+  public int multiMutationsCount; // required
+  public int multiServiceCalls; // required
+  public @org.apache.thrift.annotation.Nullable java.lang.String regionName; // optional
+
+  /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+  public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+    START_TIME((short)1, "startTime"),
+    PROCESSING_TIME((short)2, "processingTime"),
+    QUEUE_TIME((short)3, "queueTime"),
+    RESPONSE_SIZE((short)4, "responseSize"),
+    CLIENT_ADDRESS((short)5, "clientAddress"),
+    SERVER_CLASS((short)6, "serverClass"),
+    METHOD_NAME((short)7, "methodName"),
+    CALL_DETAILS((short)8, "callDetails"),
+    PARAM((short)9, "param"),
+    USER_NAME((short)10, "userName"),
+    MULTI_GETS_COUNT((short)11, "multiGetsCount"),
+    MULTI_MUTATIONS_COUNT((short)12, "multiMutationsCount"),
+    MULTI_SERVICE_CALLS((short)13, "multiServiceCalls"),
+    REGION_NAME((short)14, "regionName");
+
+    private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
+
+    static {
+      for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+        byName.put(field.getFieldName(), field);
+      }
+    }
+
+    /**
+     * Find the _Fields constant that matches fieldId, or null if its not found.
+     */
+    @org.apache.thrift.annotation.Nullable
+    public static _Fields findByThriftId(int fieldId) {
+      switch(fieldId) {
+        case 1: // START_TIME
+          return START_TIME;
+        case 2: // PROCESSING_TIME
+          return PROCESSING_TIME;
+        case 3: // QUEUE_TIME
+          return QUEUE_TIME;
+        case 4: // RESPONSE_SIZE
+          return RESPONSE_SIZE;
+        case 5: // CLIENT_ADDRESS
+          return CLIENT_ADDRESS;
+        case 6: // SERVER_CLASS
+          return SERVER_CLASS;
+        case 7: // METHOD_NAME
+          return METHOD_NAME;
+        case 8: // CALL_DETAILS
+          return CALL_DETAILS;
+        case 9: // PARAM
+          return PARAM;
+        case 10: // USER_NAME
+          return USER_NAME;
+        case 11: // MULTI_GETS_COUNT
+          return MULTI_GETS_COUNT;
+        case 12: // MULTI_MUTATIONS_COUNT
+          return MULTI_MUTATIONS_COUNT;
+        case 13: // MULTI_SERVICE_CALLS
+          return MULTI_SERVICE_CALLS;
+        case 14: // REGION_NAME
+          return REGION_NAME;
+        default:
+          return null;
+      }
+    }
+
+    /**
+     * Find the _Fields constant that matches fieldId, throwing an exception
+     * if it is not found.
+     */
+    public static _Fields findByThriftIdOrThrow(int fieldId) {
+      _Fields fields = findByThriftId(fieldId);
+      if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+      return fields;
+    }
+
+    /**
+     * Find the _Fields constant that matches name, or null if its not found.
+     */
+    @org.apache.thrift.annotation.Nullable
+    public static _Fields findByName(java.lang.String name) {
+      return byName.get(name);
+    }
+
+    private final short _thriftId;
+    private final java.lang.String _fieldName;
+
+    _Fields(short thriftId, java.lang.String fieldName) {
+      _thriftId = thriftId;
+      _fieldName = fieldName;
+    }
+
+    public short getThriftFieldId() {
+      return _thriftId;
+    }
+
+    public java.lang.String getFieldName() {
+      return _fieldName;
+    }
+  }
+
+  // isset id assignments
+  private static final int __STARTTIME_ISSET_ID = 0;
+  private static final int __PROCESSINGTIME_ISSET_ID = 1;
+  private static final int __QUEUETIME_ISSET_ID = 2;
+  private static final int __RESPONSESIZE_ISSET_ID = 3;
+  private static final int __MULTIGETSCOUNT_ISSET_ID = 4;
+  private static final int __MULTIMUTATIONSCOUNT_ISSET_ID = 5;
+  private static final int __MULTISERVICECALLS_ISSET_ID = 6;
+  private byte __isset_bitfield = 0;
+  private static final _Fields optionals[] = {_Fields.REGION_NAME};
+  public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+  static {
+    java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+    tmpMap.put(_Fields.START_TIME, new org.apache.thrift.meta_data.FieldMetaData("startTime", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
+    tmpMap.put(_Fields.PROCESSING_TIME, new org.apache.thrift.meta_data.FieldMetaData("processingTime", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
+    tmpMap.put(_Fields.QUEUE_TIME, new org.apache.thrift.meta_data.FieldMetaData("queueTime", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
+    tmpMap.put(_Fields.RESPONSE_SIZE, new org.apache.thrift.meta_data.FieldMetaData("responseSize", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
+    tmpMap.put(_Fields.CLIENT_ADDRESS, new org.apache.thrift.meta_data.FieldMetaData("clientAddress", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.SERVER_CLASS, new org.apache.thrift.meta_data.FieldMetaData("serverClass", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.METHOD_NAME, new org.apache.thrift.meta_data.FieldMetaData("methodName", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.CALL_DETAILS, new org.apache.thrift.meta_data.FieldMetaData("callDetails", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.PARAM, new org.apache.thrift.meta_data.FieldMetaData("param", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.USER_NAME, new org.apache.thrift.meta_data.FieldMetaData("userName", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    tmpMap.put(_Fields.MULTI_GETS_COUNT, new org.apache.thrift.meta_data.FieldMetaData("multiGetsCount", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
+    tmpMap.put(_Fields.MULTI_MUTATIONS_COUNT, new org.apache.thrift.meta_data.FieldMetaData("multiMutationsCount", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
+    tmpMap.put(_Fields.MULTI_SERVICE_CALLS, new org.apache.thrift.meta_data.FieldMetaData("multiServiceCalls", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
+    tmpMap.put(_Fields.REGION_NAME, new org.apache.thrift.meta_data.FieldMetaData("regionName", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+    metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+    org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(TSlowLogRecord.class, metaDataMap);
+  }
+
+  public TSlowLogRecord() {
+  }
+
+  public TSlowLogRecord(
+    long startTime,
+    int processingTime,
+    int queueTime,
+    long responseSize,
+    java.lang.String clientAddress,
+    java.lang.String serverClass,
+    java.lang.String methodName,
+    java.lang.String callDetails,
+    java.lang.String param,
+    java.lang.String userName,
+    int multiGetsCount,
+    int multiMutationsCount,
+    int multiServiceCalls)
+  {
+    this();
+    this.startTime = startTime;
+    setStartTimeIsSet(true);
+    this.processingTime = processingTime;
+    setProcessingTimeIsSet(true);
+    this.queueTime = queueTime;
+    setQueueTimeIsSet(true);
+    this.responseSize = responseSize;
+    setResponseSizeIsSet(true);
+    this.clientAddress = clientAddress;
+    this.serverClass = serverClass;
+    this.methodName = methodName;
+    this.callDetails = callDetails;
+    this.param = param;
+    this.userName = userName;
+    this.multiGetsCount = multiGetsCount;
+    setMultiGetsCountIsSet(true);
+    this.multiMutationsCount = multiMutationsCount;
+    setMultiMutationsCountIsSet(true);
+    this.multiServiceCalls = multiServiceCalls;
+    setMultiServiceCallsIsSet(true);
+  }
+
+  /**
+   * Performs a deep copy on <i>other</i>.
+   */
+  public TSlowLogRecord(TSlowLogRecord other) {
+    __isset_bitfield = other.__isset_bitfield;
+    this.startTime = other.startTime;
+    this.processingTime = other.processingTime;
+    this.queueTime = other.queueTime;
+    this.responseSize = other.responseSize;
+    if (other.isSetClientAddress()) {
+      this.clientAddress = other.clientAddress;
+    }
+    if (other.isSetServerClass()) {
+      this.serverClass = other.serverClass;
+    }
+    if (other.isSetMethodName()) {
+      this.methodName = other.methodName;
+    }
+    if (other.isSetCallDetails()) {
+      this.callDetails = other.callDetails;
+    }
+    if (other.isSetParam()) {
+      this.param = other.param;
+    }
+    if (other.isSetUserName()) {
+      this.userName = other.userName;
+    }
+    this.multiGetsCount = other.multiGetsCount;
+    this.multiMutationsCount = other.multiMutationsCount;
+    this.multiServiceCalls = other.multiServiceCalls;
+    if (other.isSetRegionName()) {
+      this.regionName = other.regionName;
+    }
+  }
+
+  public TSlowLogRecord deepCopy() {
+    return new TSlowLogRecord(this);
+  }
+
+  @Override
+  public void clear() {
+    setStartTimeIsSet(false);
+    this.startTime = 0;
+    setProcessingTimeIsSet(false);
+    this.processingTime = 0;
+    setQueueTimeIsSet(false);
+    this.queueTime = 0;
+    setResponseSizeIsSet(false);
+    this.responseSize = 0;
+    this.clientAddress = null;
+    this.serverClass = null;
+    this.methodName = null;
+    this.callDetails = null;
+    this.param = null;
+    this.userName = null;
+    setMultiGetsCountIsSet(false);
+    this.multiGetsCount = 0;
+    setMultiMutationsCountIsSet(false);
+    this.multiMutationsCount = 0;
+    setMultiServiceCallsIsSet(false);
+    this.multiServiceCalls = 0;
+    this.regionName = null;
+  }
+
+  public long getStartTime() {
+    return this.startTime;
+  }
+
+  public TSlowLogRecord setStartTime(long startTime) {
+    this.startTime = startTime;
+    setStartTimeIsSet(true);
+    return this;
+  }
+
+  public void unsetStartTime() {
+    __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __STARTTIME_ISSET_ID);
+  }
+
+  /** Returns true if field startTime is set (has been assigned a value) and false otherwise */
+  public boolean isSetStartTime() {
+    return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __STARTTIME_ISSET_ID);
+  }
+
+  public void setStartTimeIsSet(boolean value) {
+    __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __STARTTIME_ISSET_ID, value);
+  }
+
+  public int getProcessingTime() {
+    return this.processingTime;
+  }
+
+  public TSlowLogRecord setProcessingTime(int processingTime) {
+    this.processingTime = processingTime;
+    setProcessingTimeIsSet(true);
+    return this;
+  }
+
+  public void unsetProcessingTime() {
+    __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __PROCESSINGTIME_ISSET_ID);
+  }
+
+  /** Returns true if field processingTime is set (has been assigned a value) and false otherwise */
+  public boolean isSetProcessingTime() {
+    return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __PROCESSINGTIME_ISSET_ID);
+  }
+
+  public void setProcessingTimeIsSet(boolean value) {
+    __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __PROCESSINGTIME_ISSET_ID, value);
+  }
+
+  public int getQueueTime() {
+    return this.queueTime;
+  }
+
+  public TSlowLogRecord setQueueTime(int queueTime) {
+    this.queueTime = queueTime;
+    setQueueTimeIsSet(true);
+    return this;
+  }
+
+  public void unsetQueueTime() {
+    __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __QUEUETIME_ISSET_ID);
+  }
+
+  /** Returns true if field queueTime is set (has been assigned a value) and false otherwise */
+  public boolean isSetQueueTime() {
+    return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __QUEUETIME_ISSET_ID);
+  }
+
+  public void setQueueTimeIsSet(boolean value) {
+    __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __QUEUETIME_ISSET_ID, value);
+  }
+
+  public long getResponseSize() {
+    return this.responseSize;
+  }
+
+  public TSlowLogRecord setResponseSize(long responseSize) {
+    this.responseSize = responseSize;
+    setResponseSizeIsSet(true);
+    return this;
+  }
+
+  public void unsetResponseSize() {
+    __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __RESPONSESIZE_ISSET_ID);
+  }
+
+  /** Returns true if field responseSize is set (has been assigned a value) and false otherwise */
+  public boolean isSetResponseSize() {
+    return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __RESPONSESIZE_ISSET_ID);
+  }
+
+  public void setResponseSizeIsSet(boolean value) {
+    __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __RESPONSESIZE_ISSET_ID, value);
+  }
+
+  @org.apache.thrift.annotation.Nullable
+  public java.lang.String getClientAddress() {
+    return this.clientAddress;
+  }
+
+  public TSlowLogRecord setClientAddress(@org.apache.thrift.annotation.Nullable java.lang.String clientAddress) {
+    this.clientAddress = clientAddress;
+    return this;
+  }
+
+  public void unsetClientAddress() {
+    this.clientAddress = null;
+  }
+
+  /** Returns true if field clientAddress is set (has been assigned a value) and false otherwise */
+  public boolean isSetClientAddress() {
+    return this.clientAddress != null;
+  }
+
+  public void setClientAddressIsSet(boolean value) {
+    if (!value) {
+      this.clientAddress = null;
+    }
+  }
+
+  @org.apache.thrift.annotation.Nullable
+  public java.lang.String getServerClass() {
+    return this.serverClass;
+  }
+
+  public TSlowLogRecord setServerClass(@org.apache.thrift.annotation.Nullable java.lang.String serverClass) {
+    this.serverClass = serverClass;
+    return this;
+  }
+
+  public void unsetServerClass() {
+    this.serverClass = null;
+  }
+
+  /** Returns true if field serverClass is set (has been assigned a value) and false otherwise */
+  public boolean isSetServerClass() {
+    return this.serverClass != null;
+  }
+
+  public void setServerClassIsSet(boolean value) {
+    if (!value) {
+      this.serverClass = null;
+    }
+  }
+
+  @org.apache.thrift.annotation.Nullable
+  public java.lang.String getMethodName() {
+    return this.methodName;
+  }
+
+  public TSlowLogRecord setMethodName(@org.apache.thrift.annotation.Nullable java.lang.String methodName) {
+    this.methodName = methodName;
+    return this;
+  }
+
+  public void unsetMethodName() {
+    this.methodName = null;
+  }
+
+  /** Returns true if field methodName is set (has been assigned a value) and false otherwise */
+  public boolean isSetMethodName() {
+    return this.methodName != null;
+  }
+
+  public void setMethodNameIsSet(boolean value) {
+    if (!value) {
+      this.methodName = null;
+    }
+  }
+
+  @org.apache.thrift.annotation.Nullable
+  public java.lang.String getCallDetails() {
+    return this.callDetails;
+  }
+
+  public TSlowLogRecord setCallDetails(@org.apache.thrift.annotation.Nullable java.lang.String callDetails) {
+    this.callDetails = callDetails;
+    return this;
+  }
+
+  public void unsetCallDetails() {
+    this.callDetails = null;
+  }
+
+  /** Returns true if field callDetails is set (has been assigned a value) and false otherwise */
+  public boolean isSetCallDetails() {
+    return this.callDetails != null;
+  }
+
+  public void setCallDetailsIsSet(boolean value) {
+    if (!value) {
+      this.callDetails = null;
+    }
+  }
+
+  @org.apache.thrift.annotation.Nullable
+  public java.lang.String getParam() {
+    return this.param;
+  }
+
+  public TSlowLogRecord setParam(@org.apache.thrift.annotation.Nullable java.lang.String param) {
+    this.param = param;
+    return this;
+  }
+
+  public void unsetParam() {
+    this.param = null;
+  }
+
+  /** Returns true if field param is set (has been assigned a value) and false otherwise */
+  public boolean isSetParam() {
+    return this.param != null;
+  }
+
+  public void setParamIsSet(boolean value) {
+    if (!value) {
+      this.param = null;
+    }
+  }
+
+  @org.apache.thrift.annotation.Nullable
+  public java.lang.String getUserName() {
+    return this.userName;
+  }
+
+  public TSlowLogRecord setUserName(@org.apache.thrift.annotation.Nullable java.lang.String userName) {
+    this.userName = userName;
+    return this;
+  }
+
+  public void unsetUserName() {
+    this.userName = null;
+  }
+
+  /** Returns true if field userName is set (has been assigned a value) and false otherwise */
+  public boolean isSetUserName() {
+    return this.userName != null;
+  }
+
+  public void setUserNameIsSet(boolean value) {
+    if (!value) {
+      this.userName = null;
+    }
+  }
+
+  public int getMultiGetsCount() {
+    return this.multiGetsCount;
+  }
+
+  public TSlowLogRecord setMultiGetsCount(int multiGetsCount) {
+    this.multiGetsCount = multiGetsCount;
+    setMultiGetsCountIsSet(true);
+    return this;
+  }
+
+  public void unsetMultiGetsCount() {
+    __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __MULTIGETSCOUNT_ISSET_ID);
+  }
+
+  /** Returns true if field multiGetsCount is set (has been assigned a value) and false otherwise */
+  public boolean isSetMultiGetsCount() {
+    return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __MULTIGETSCOUNT_ISSET_ID);
+  }
+
+  public void setMultiGetsCountIsSet(boolean value) {
+    __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __MULTIGETSCOUNT_ISSET_ID, value);
+  }
+
+  public int getMultiMutationsCount() {
+    return this.multiMutationsCount;
+  }
+
+  public TSlowLogRecord setMultiMutationsCount(int multiMutationsCount) {
+    this.multiMutationsCount = multiMutationsCount;
+    setMultiMutationsCountIsSet(true);
+    return this;
+  }
+
+  public void unsetMultiMutationsCount() {
+    __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __MULTIMUTATIONSCOUNT_ISSET_ID);
+  }
+
+  /** Returns true if field multiMutationsCount is set (has been assigned a value) and false otherwise */
+  public boolean isSetMultiMutationsCount() {
+    return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __MULTIMUTATIONSCOUNT_ISSET_ID);
+  }
+
+  public void setMultiMutationsCountIsSet(boolean value) {
+    __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __MULTIMUTATIONSCOUNT_ISSET_ID, value);
+  }
+
+  public int getMultiServiceCalls() {
+    return this.multiServiceCalls;
+  }
+
+  public TSlowLogRecord setMultiServiceCalls(int multiServiceCalls) {
+    this.multiServiceCalls = multiServiceCalls;
+    setMultiServiceCallsIsSet(true);
+    return this;
+  }
+
+  public void unsetMultiServiceCalls() {
+    __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __MULTISERVICECALLS_ISSET_ID);
+  }
+
+  /** Returns true if field multiServiceCalls is set (has been assigned a value) and false otherwise */
+  public boolean isSetMultiServiceCalls() {
+    return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __MULTISERVICECALLS_ISSET_ID);
+  }
+
+  public void setMultiServiceCallsIsSet(boolean value) {
+    __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __MULTISERVICECALLS_ISSET_ID, value);
+  }
+
+  @org.apache.thrift.annotation.Nullable
+  public java.lang.String getRegionName() {
+    return this.regionName;
+  }
+
+  public TSlowLogRecord setRegionName(@org.apache.thrift.annotation.Nullable java.lang.String regionName) {
+    this.regionName = regionName;
+    return this;
+  }
+
+  public void unsetRegionName() {
+    this.regionName = null;
+  }
+
+  /** Returns true if field regionName is set (has been assigned a value) and false otherwise */
+  public boolean isSetRegionName() {
+    return this.regionName != null;
+  }
+
+  public void setRegionNameIsSet(boolean value) {
+    if (!value) {
+      this.regionName = null;
+    }
+  }
+
+  public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
+    switch (field) {
+    case START_TIME:
+      if (value == null) {
+        unsetStartTime();
+      } else {
+        setStartTime((java.lang.Long)value);
+      }
+      break;
+
+    case PROCESSING_TIME:
+      if (value == null) {
+        unsetProcessingTime();
+      } else {
+        setProcessingTime((java.lang.Integer)value);
+      }
+      break;
+
+    case QUEUE_TIME:
+      if (value == null) {
+        unsetQueueTime();
+      } else {
+        setQueueTime((java.lang.Integer)value);
+      }
+      break;
+
+    case RESPONSE_SIZE:
+      if (value == null) {
+        unsetResponseSize();
+      } else {
+        setResponseSize((java.lang.Long)value);
+      }
+      break;
+
+    case CLIENT_ADDRESS:
+      if (value == null) {
+        unsetClientAddress();
+      } else {
+        setClientAddress((java.lang.String)value);
+      }
+      break;
+
+    case SERVER_CLASS:
+      if (value == null) {
+        unsetServerClass();
+      } else {
+        setServerClass((java.lang.String)value);
+      }
+      break;
+
+    case METHOD_NAME:
+      if (value == null) {
+        unsetMethodName();
+      } else {
+        setMethodName((java.lang.String)value);
+      }
+      break;
+
+    case CALL_DETAILS:
+      if (value == null) {
+        unsetCallDetails();
+      } else {
+        setCallDetails((java.lang.String)value);
+      }
+      break;
+
+    case PARAM:
+      if (value == null) {
+        unsetParam();
+      } else {
+        setParam((java.lang.String)value);
+      }
+      break;
+
+    case USER_NAME:
+      if (value == null) {
+        unsetUserName();
+      } else {
+        setUserName((java.lang.String)value);
+      }
+      break;
+
+    case MULTI_GETS_COUNT:
+      if (value == null) {
+        unsetMultiGetsCount();
+      } else {
+        setMultiGetsCount((java.lang.Integer)value);
+      }
+      break;
+
+    case MULTI_MUTATIONS_COUNT:
+      if (value == null) {
+        unsetMultiMutationsCount();
+      } else {
+        setMultiMutationsCount((java.lang.Integer)value);
+      }
+      break;
+
+    case MULTI_SERVICE_CALLS:
+      if (value == null) {
+        unsetMultiServiceCalls();
+      } else {
+        setMultiServiceCalls((java.lang.Integer)value);
+      }
+      break;
+
+    case REGION_NAME:
+      if (value == null) {
+        unsetRegionName();
+      } else {
+        setRegionName((java.lang.String)value);
+      }
+      break;
+
+    }
+  }
+
+  @org.apache.thrift.annotation.Nullable
+  public java.lang.Object getFieldValue(_Fields field) {
+    switch (field) {
+    case START_TIME:
+      return getStartTime();
+
+    case PROCESSING_TIME:
+      return getProcessingTime();
+
+    case QUEUE_TIME:
+      return getQueueTime();
+
+    case RESPONSE_SIZE:
+      return getResponseSize();
+
+    case CLIENT_ADDRESS:
+      return getClientAddress();
+
+    case SERVER_CLASS:
+      return getServerClass();
+
+    case METHOD_NAME:
+      return getMethodName();
+
+    case CALL_DETAILS:
+      return getCallDetails();
+
+    case PARAM:
+      return getParam();
+
+    case USER_NAME:
+      return getUserName();
+
+    case MULTI_GETS_COUNT:
+      return getMultiGetsCount();
+
+    case MULTI_MUTATIONS_COUNT:
+      return getMultiMutationsCount();
+
+    case MULTI_SERVICE_CALLS:
+      return getMultiServiceCalls();
+
+    case REGION_NAME:
+      return getRegionName();
+
+    }
+    throw new java.lang.IllegalStateException();
+  }
+
+  /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+  public boolean isSet(_Fields field) {
+    if (field == null) {
+      throw new java.lang.IllegalArgumentException();
+    }
+
+    switch (field) {
+    case START_TIME:
+      return isSetStartTime();
+    case PROCESSING_TIME:
+      return isSetProcessingTime();
+    case QUEUE_TIME:
+      return isSetQueueTime();
+    case RESPONSE_SIZE:
+      return isSetResponseSize();
+    case CLIENT_ADDRESS:
+      return isSetClientAddress();
+    case SERVER_CLASS:
+      return isSetServerClass();
+    case METHOD_NAME:
+      return isSetMethodName();
+    case CALL_DETAILS:
+      return isSetCallDetails();
+    case PARAM:
+      return isSetParam();
+    case USER_NAME:
+      return isSetUserName();
+    case MULTI_GETS_COUNT:
+      return isSetMultiGetsCount();
+    case MULTI_MUTATIONS_COUNT:
+      return isSetMultiMutationsCount();
+    case MULTI_SERVICE_CALLS:
+      return isSetMultiServiceCalls();
+    case REGION_NAME:
+      return isSetRegionName();
+    }
+    throw new java.lang.IllegalStateException();
+  }
+
+  @Override
+  public boolean equals(java.lang.Object that) {
+    if (that == null)
+      return false;
+    if (that instanceof TSlowLogRecord)
+      return this.equals((TSlowLogRecord)that);
+    return false;
+  }
+
+  public boolean equals(TSlowLogRecord that) {
+    if (that == null)
+      return false;
+    if (this == that)
+      return true;
+
+    boolean this_present_startTime = true;
+    boolean that_present_startTime = true;
+    if (this_present_startTime || that_present_startTime) {
+      if (!(this_present_startTime && that_present_startTime))
+        return false;
+      if (this.startTime != that.startTime)
+        return false;
+    }
+
+    boolean this_present_processingTime = true;
+    boolean that_present_processingTime = true;
+    if (this_present_processingTime || that_present_processingTime) {
+      if (!(this_present_processingTime && that_present_processingTime))
+        return false;
+      if (this.processingTime != that.processingTime)
+        return false;
+    }
+
+    boolean this_present_queueTime = true;
+    boolean that_present_queueTime = true;
+    if (this_present_queueTime || that_present_queueTime) {
+      if (!(this_present_queueTime && that_present_queueTime))
+        return false;
+      if (this.queueTime != that.queueTime)
+        return false;
+    }
+
+    boolean this_present_responseSize = true;
+    boolean that_present_responseSize = true;
+    if (this_present_responseSize || that_present_responseSize) {
+      if (!(this_present_responseSize && that_present_responseSize))
+        return false;
+      if (this.responseSize != that.responseSize)
+        return false;
+    }
+
+    boolean this_present_clientAddress = true && this.isSetClientAddress();
+    boolean that_present_clientAddress = true && that.isSetClientAddress();
+    if (this_present_clientAddress || that_present_clientAddress) {
+      if (!(this_present_clientAddress && that_present_clientAddress))
+        return false;
+      if (!this.clientAddress.equals(that.clientAddress))
+        return false;
+    }
+
+    boolean this_present_serverClass = true && this.isSetServerClass();
+    boolean that_present_serverClass = true && that.isSetServerClass();
+    if (this_present_serverClass || that_present_serverClass) {
+      if (!(this_present_serverClass && that_present_serverClass))
+        return false;
+      if (!this.serverClass.equals(that.serverClass))
+        return false;
+    }
+
+    boolean this_present_methodName = true && this.isSetMethodName();
+    boolean that_present_methodName = true && that.isSetMethodName();
+    if (this_present_methodName || that_present_methodName) {
+      if (!(this_present_methodName && that_present_methodName))
+        return false;
+      if (!this.methodName.equals(that.methodName))
+        return false;
+    }
+
+    boolean this_present_callDetails = true && this.isSetCallDetails();
+    boolean that_present_callDetails = true && that.isSetCallDetails();
+    if (this_present_callDetails || that_present_callDetails) {
+      if (!(this_present_callDetails && that_present_callDetails))
+        return false;
+      if (!this.callDetails.equals(that.callDetails))
+        return false;
+    }
+
+    boolean this_present_param = true && this.isSetParam();
+    boolean that_present_param = true && that.isSetParam();
+    if (this_present_param || that_present_param) {
+      if (!(this_present_param && that_present_param))
+        return false;
+      if (!this.param.equals(that.param))
+        return false;
+    }
+
+    boolean this_present_userName = true && this.isSetUserName();
+    boolean that_present_userName = true && that.isSetUserName();
+    if (this_present_userName || that_present_userName) {
+      if (!(this_present_userName && that_present_userName))
+        return false;
+      if (!this.userName.equals(that.userName))
+        return false;
+    }
+
+    boolean this_present_multiGetsCount = true;
+    boolean that_present_multiGetsCount = true;
+    if (this_present_multiGetsCount || that_present_multiGetsCount) {
+      if (!(this_present_multiGetsCount && that_present_multiGetsCount))
+        return false;
+      if (this.multiGetsCount != that.multiGetsCount)
+        return false;
+    }
+
+    boolean this_present_multiMutationsCount = true;
+    boolean that_present_multiMutationsCount = true;
+    if (this_present_multiMutationsCount || that_present_multiMutationsCount) {
+      if (!(this_present_multiMutationsCount && that_present_multiMutationsCount))
+        return false;
+      if (this.multiMutationsCount != that.multiMutationsCount)
+        return false;
+    }
+
+    boolean this_present_multiServiceCalls = true;
+    boolean that_present_multiServiceCalls = true;
+    if (this_present_multiServiceCalls || that_present_multiServiceCalls) {
+      if (!(this_present_multiServiceCalls && that_present_multiServiceCalls))
+        return false;
+      if (this.multiServiceCalls != that.multiServiceCalls)
+        return false;
+    }
+
+    boolean this_present_regionName = true && this.isSetRegionName();
+    boolean that_present_regionName = true && that.isSetRegionName();
+    if (this_present_regionName || that_present_regionName) {
+      if (!(this_present_regionName && that_present_regionName))
+        return false;
+      if (!this.regionName.equals(that.regionName))
+        return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    int hashCode = 1;
+
+    hashCode = hashCode * 8191 + org.apache.thrift.TBaseHelper.hashCode(startTime);
+
+    hashCode = hashCode * 8191 + processingTime;
+
+    hashCode = hashCode * 8191 + queueTime;
+
+    hashCode = hashCode * 8191 + org.apache.thrift.TBaseHelper.hashCode(responseSize);
+
+    hashCode = hashCode * 8191 + ((isSetClientAddress()) ? 131071 : 524287);
+    if (isSetClientAddress())
+      hashCode = hashCode * 8191 + clientAddress.hashCode();
+
+    hashCode = hashCode * 8191 + ((isSetServerClass()) ? 131071 : 524287);
+    if (isSetServerClass())
+      hashCode = hashCode * 8191 + serverClass.hashCode();
+
+    hashCode = hashCode * 8191 + ((isSetMethodName()) ? 131071 : 524287);
+    if (isSetMethodName())
+      hashCode = hashCode * 8191 + methodName.hashCode();
+
+    hashCode = hashCode * 8191 + ((isSetCallDetails()) ? 131071 : 524287);
+    if (isSetCallDetails())
+      hashCode = hashCode * 8191 + callDetails.hashCode();
+
+    hashCode = hashCode * 8191 + ((isSetParam()) ? 131071 : 524287);
+    if (isSetParam())
+      hashCode = hashCode * 8191 + param.hashCode();
+
+    hashCode = hashCode * 8191 + ((isSetUserName()) ? 131071 : 524287);
+    if (isSetUserName())
+      hashCode = hashCode * 8191 + userName.hashCode();
+
+    hashCode = hashCode * 8191 + multiGetsCount;
+
+    hashCode = hashCode * 8191 + multiMutationsCount;
+
+    hashCode = hashCode * 8191 + multiServiceCalls;
+
+    hashCode = hashCode * 8191 + ((isSetRegionName()) ? 131071 : 524287);
+    if (isSetRegionName())
+      hashCode = hashCode * 8191 + regionName.hashCode();
+
+    return hashCode;
+  }
+
+  @Override
+  public int compareTo(TSlowLogRecord other) {
+    if (!getClass().equals(other.getClass())) {
+      return getClass().getName().compareTo(other.getClass().getName());
+    }
+
+    int lastComparison = 0;
+
+    lastComparison = java.lang.Boolean.valueOf(isSetStartTime()).compareTo(other.isSetStartTime());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetStartTime()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.startTime, other.startTime);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = java.lang.Boolean.valueOf(isSetProcessingTime()).compareTo(other.isSetProcessingTime());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetProcessingTime()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.processingTime, other.processingTime);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = java.lang.Boolean.valueOf(isSetQueueTime()).compareTo(other.isSetQueueTime());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetQueueTime()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.queueTime, other.queueTime);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = java.lang.Boolean.valueOf(isSetResponseSize()).compareTo(other.isSetResponseSize());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetResponseSize()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.responseSize, other.responseSize);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = java.lang.Boolean.valueOf(isSetClientAddress()).compareTo(other.isSetClientAddress());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetClientAddress()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.clientAddress, other.clientAddress);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = java.lang.Boolean.valueOf(isSetServerClass()).compareTo(other.isSetServerClass());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetServerClass()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.serverClass, other.serverClass);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = java.lang.Boolean.valueOf(isSetMethodName()).compareTo(other.isSetMethodName());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetMethodName()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.methodName, other.methodName);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = java.lang.Boolean.valueOf(isSetCallDetails()).compareTo(other.isSetCallDetails());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetCallDetails()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.callDetails, other.callDetails);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = java.lang.Boolean.valueOf(isSetParam()).compareTo(other.isSetParam());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetParam()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.param, other.param);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = java.lang.Boolean.valueOf(isSetUserName()).compareTo(other.isSetUserName());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetUserName()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.userName, other.userName);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = java.lang.Boolean.valueOf(isSetMultiGetsCount()).compareTo(other.isSetMultiGetsCount());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetMultiGetsCount()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.multiGetsCount, other.multiGetsCount);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = java.lang.Boolean.valueOf(isSetMultiMutationsCount()).compareTo(other.isSetMultiMutationsCount());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetMultiMutationsCount()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.multiMutationsCount, other.multiMutationsCount);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = java.lang.Boolean.valueOf(isSetMultiServiceCalls()).compareTo(other.isSetMultiServiceCalls());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetMultiServiceCalls()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.multiServiceCalls, other.multiServiceCalls);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = java.lang.Boolean.valueOf(isSetRegionName()).compareTo(other.isSetRegionName());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetRegionName()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.regionName, other.regionName);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    return 0;
+  }
+
+  @org.apache.thrift.annotation.Nullable
+  public _Fields fieldForId(int fieldId) {
+    return _Fields.findByThriftId(fieldId);
+  }
+
+  public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+    scheme(iprot).read(iprot, this);
+  }
+
+  public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+    scheme(oprot).write(oprot, this);
+  }
+
+  @Override
+  public java.lang.String toString() {
+    java.lang.StringBuilder sb = new java.lang.StringBuilder("TSlowLogRecord(");
+    boolean first = true;
+
+    sb.append("startTime:");
+    sb.append(this.startTime);
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("processingTime:");
+    sb.append(this.processingTime);
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("queueTime:");
+    sb.append(this.queueTime);
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("responseSize:");
+    sb.append(this.responseSize);
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("clientAddress:");
+    if (this.clientAddress == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.clientAddress);
+    }
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("serverClass:");
+    if (this.serverClass == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.serverClass);
+    }
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("methodName:");
+    if (this.methodName == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.methodName);
+    }
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("callDetails:");
+    if (this.callDetails == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.callDetails);
+    }
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("param:");
+    if (this.param == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.param);
+    }
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("userName:");
+    if (this.userName == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.userName);
+    }
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("multiGetsCount:");
+    sb.append(this.multiGetsCount);
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("multiMutationsCount:");
+    sb.append(this.multiMutationsCount);
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("multiServiceCalls:");
+    sb.append(this.multiServiceCalls);
+    first = false;
+    if (isSetRegionName()) {
+      if (!first) sb.append(", ");
+      sb.append("regionName:");
+      if (this.regionName == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.regionName);
+      }
+      first = false;
+    }
+    sb.append(")");
+    return sb.toString();
+  }
+
+  public void validate() throws org.apache.thrift.TException {
+    // check for required fields
+    // alas, we cannot check 'startTime' because it's a primitive and you chose the non-beans generator.
+    // alas, we cannot check 'processingTime' because it's a primitive and you chose the non-beans generator.
+    // alas, we cannot check 'queueTime' because it's a primitive and you chose the non-beans generator.
+    // alas, we cannot check 'responseSize' because it's a primitive and you chose the non-beans generator.
+    if (clientAddress == null) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'clientAddress' was not present! Struct: " + toString());
+    }
+    if (serverClass == null) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'serverClass' was not present! Struct: " + toString());
+    }
+    if (methodName == null) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'methodName' was not present! Struct: " + toString());
+    }
+    if (callDetails == null) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'callDetails' was not present! Struct: " + toString());
+    }
+    if (param == null) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'param' was not present! Struct: " + toString());
+    }
+    if (userName == null) {
+      throw new org.apache.thrift.protocol.TProtocolException("Required field 'userName' was not present! Struct: " + toString());
+    }
+    // alas, we cannot check 'multiGetsCount' because it's a primitive and you chose the non-beans generator.
+    // alas, we cannot check 'multiMutationsCount' because it's a primitive and you chose the non-beans generator.
+    // alas, we cannot check 'multiServiceCalls' because it's a primitive and you chose the non-beans generator.
+    // check for sub-struct validity
+  }
+
+  private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+    try {
+      write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+    } catch (org.apache.thrift.TException te) {
+      throw new java.io.IOException(te);
+    }
+  }
+
+  private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException {
+    try {
+      // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+      __isset_bitfield = 0;
+      read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+    } catch (org.apache.thrift.TException te) {
+      throw new java.io.IOException(te);
+    }
+  }
+
+  private static class TSlowLogRecordStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+    public TSlowLogRecordStandardScheme getScheme() {
+      return new TSlowLogRecordStandardScheme();
+    }
+  }
+
+  private static class TSlowLogRecordStandardScheme extends org.apache.thrift.scheme.StandardScheme<TSlowLogRecord> {
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot, TSlowLogRecord struct) throws org.apache.thrift.TException {
+      org.apache.thrift.protocol.TField schemeField;
+      iprot.readStructBegin();
+      while (true)
+      {
+        schemeField = iprot.readFieldBegin();
+        if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+          break;
+        }
+        switch (schemeField.id) {
+          case 1: // START_TIME
+            if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
+              struct.startTime = iprot.readI64();
+              struct.setStartTimeIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 2: // PROCESSING_TIME
+            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+              struct.processingTime = iprot.readI32();
+              struct.setProcessingTimeIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 3: // QUEUE_TIME
+            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+              struct.queueTime = iprot.readI32();
+              struct.setQueueTimeIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 4: // RESPONSE_SIZE
+            if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
+              struct.responseSize = iprot.readI64();
+              struct.setResponseSizeIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 5: // CLIENT_ADDRESS
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.clientAddress = iprot.readString();
+              struct.setClientAddressIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 6: // SERVER_CLASS
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.serverClass = iprot.readString();
+              struct.setServerClassIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 7: // METHOD_NAME
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.methodName = iprot.readString();
+              struct.setMethodNameIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 8: // CALL_DETAILS
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.callDetails = iprot.readString();
+              struct.setCallDetailsIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 9: // PARAM
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.param = iprot.readString();
+              struct.setParamIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 10: // USER_NAME
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.userName = iprot.readString();
+              struct.setUserNameIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 11: // MULTI_GETS_COUNT
+            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+              struct.multiGetsCount = iprot.readI32();
+              struct.setMultiGetsCountIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 12: // MULTI_MUTATIONS_COUNT
+            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+              struct.multiMutationsCount = iprot.readI32();
+              struct.setMultiMutationsCountIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 13: // MULTI_SERVICE_CALLS
+            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+              struct.multiServiceCalls = iprot.readI32();
+              struct.setMultiServiceCallsIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 14: // REGION_NAME
+            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+              struct.regionName = iprot.readString();
+              struct.setRegionNameIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          default:
+            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+        }
+        iprot.readFieldEnd();
+      }
+      iprot.readStructEnd();
+
+      // check for required fields of primitive type, which can't be checked in the validate method
+      if (!struct.isSetStartTime()) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'startTime' was not found in serialized data! Struct: " + toString());
+      }
+      if (!struct.isSetProcessingTime()) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'processingTime' was not found in serialized data! Struct: " + toString());
+      }
+      if (!struct.isSetQueueTime()) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'queueTime' was not found in serialized data! Struct: " + toString());
+      }
+      if (!struct.isSetResponseSize()) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'responseSize' was not found in serialized data! Struct: " + toString());
+      }
+      if (!struct.isSetMultiGetsCount()) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'multiGetsCount' was not found in serialized data! Struct: " + toString());
+      }
+      if (!struct.isSetMultiMutationsCount()) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'multiMutationsCount' was not found in serialized data! Struct: " + toString());
+      }
+      if (!struct.isSetMultiServiceCalls()) {
+        throw new org.apache.thrift.protocol.TProtocolException("Required field 'multiServiceCalls' was not found in serialized data! Struct: " + toString());
+      }
+      struct.validate();
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot, TSlowLogRecord struct) throws org.apache.thrift.TException {
+      struct.validate();
+
+      oprot.writeStructBegin(STRUCT_DESC);
+      oprot.writeFieldBegin(START_TIME_FIELD_DESC);
+      oprot.writeI64(struct.startTime);
+      oprot.writeFieldEnd();
+      oprot.writeFieldBegin(PROCESSING_TIME_FIELD_DESC);
+      oprot.writeI32(struct.processingTime);
+      oprot.writeFieldEnd();
+      oprot.writeFieldBegin(QUEUE_TIME_FIELD_DESC);
+      oprot.writeI32(struct.queueTime);
+      oprot.writeFieldEnd();
+      oprot.writeFieldBegin(RESPONSE_SIZE_FIELD_DESC);
+      oprot.writeI64(struct.responseSize);
+      oprot.writeFieldEnd();
+      if (struct.clientAddress != null) {
+        oprot.writeFieldBegin(CLIENT_ADDRESS_FIELD_DESC);
+        oprot.writeString(struct.clientAddress);
+        oprot.writeFieldEnd();
+      }
+      if (struct.serverClass != null) {
+        oprot.writeFieldBegin(SERVER_CLASS_FIELD_DESC);
+        oprot.writeString(struct.serverClass);
+        oprot.writeFieldEnd();
+      }
+      if (struct.methodName != null) {
+        oprot.writeFieldBegin(METHOD_NAME_FIELD_DESC);
+        oprot.writeString(struct.methodName);
+        oprot.writeFieldEnd();
+      }
+      if (struct.callDetails != null) {
+        oprot.writeFieldBegin(CALL_DETAILS_FIELD_DESC);
+        oprot.writeString(struct.callDetails);
+        oprot.writeFieldEnd();
+      }
+      if (struct.param != null) {
+        oprot.writeFieldBegin(PARAM_FIELD_DESC);
+        oprot.writeString(struct.param);
+        oprot.writeFieldEnd();
+      }
+      if (struct.userName != null) {
+        oprot.writeFieldBegin(USER_NAME_FIELD_DESC);
+        oprot.writeString(struct.userName);
+        oprot.writeFieldEnd();
+      }
+      oprot.writeFieldBegin(MULTI_GETS_COUNT_FIELD_DESC);
+      oprot.writeI32(struct.multiGetsCount);
+      oprot.writeFieldEnd();
+      oprot.writeFieldBegin(MULTI_MUTATIONS_COUNT_FIELD_DESC);
+      oprot.writeI32(struct.multiMutationsCount);
+      oprot.writeFieldEnd();
+      oprot.writeFieldBegin(MULTI_SERVICE_CALLS_FIELD_DESC);
+      oprot.writeI32(struct.multiServiceCalls);
+      oprot.writeFieldEnd();
+      if (struct.regionName != null) {
+        if (struct.isSetRegionName()) {
+          oprot.writeFieldBegin(REGION_NAME_FIELD_DESC);
+          oprot.writeString(struct.regionName);
+          oprot.writeFieldEnd();
+        }
+      }
+      oprot.writeFieldStop();
+      oprot.writeStructEnd();
+    }
+
+  }
+
+  private static class TSlowLogRecordTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+    public TSlowLogRecordTupleScheme getScheme() {
+      return new TSlowLogRecordTupleScheme();
+    }
+  }
+
+  private static class TSlowLogRecordTupleScheme extends org.apache.thrift.scheme.TupleScheme<TSlowLogRecord> {
+
+    @Override
+    public void write(org.apache.thrift.protocol.TProtocol prot, TSlowLogRecord struct) throws org.apache.thrift.TException {
+      org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+      oprot.writeI64(struct.startTime);
+      oprot.writeI32(struct.processingTime);
+      oprot.writeI32(struct.queueTime);
+      oprot.writeI64(struct.responseSize);
+      oprot.writeString(struct.clientAddress);
+      oprot.writeString(struct.serverClass);
+      oprot.writeString(struct.methodName);
+      oprot.writeString(struct.callDetails);
+      oprot.writeString(struct.param);
+      oprot.writeString(struct.userName);
+      oprot.writeI32(struct.multiGetsCount);
+      oprot.writeI32(struct.multiMutationsCount);
+      oprot.writeI32(struct.multiServiceCalls);
+      java.util.BitSet optionals = new java.util.BitSet();
+      if (struct.isSetRegionName()) {
+        optionals.set(0);
+      }
+      oprot.writeBitSet(optionals, 1);
+      if (struct.isSetRegionName()) {
+        oprot.writeString(struct.regionName);
+      }
+    }
+
+    @Override
+    public void read(org.apache.thrift.protocol.TProtocol prot, TSlowLogRecord struct) throws org.apache.thrift.TException {
+      org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot;
+      struct.startTime = iprot.readI64();
+      struct.setStartTimeIsSet(true);
+      struct.processingTime = iprot.readI32();
+      struct.setProcessingTimeIsSet(true);
+      struct.queueTime = iprot.readI32();
+      struct.setQueueTimeIsSet(true);
+      struct.responseSize = iprot.readI64();
+      struct.setResponseSizeIsSet(true);
+      struct.clientAddress = iprot.readString();
+      struct.setClientAddressIsSet(true);
+      struct.serverClass = iprot.readString();
+      struct.setServerClassIsSet(true);
+      struct.methodName = iprot.readString();
+      struct.setMethodNameIsSet(true);
+      struct.callDetails = iprot.readString();
+      struct.setCallDetailsIsSet(true);
+      struct.param = iprot.readString();
+      struct.setParamIsSet(true);
+      struct.userName = iprot.readString();
+      struct.setUserNameIsSet(true);
+      struct.multiGetsCount = iprot.readI32();
+      struct.setMultiGetsCountIsSet(true);
+      struct.multiMutationsCount = iprot.readI32();
+      struct.setMultiMutationsCountIsSet(true);
+      struct.multiServiceCalls = iprot.readI32();
+      struct.setMultiServiceCallsIsSet(true);
+      java.util.BitSet incoming = iprot.readBitSet(1);
+      if (incoming.get(0)) {
+        struct.regionName = iprot.readString();
+        struct.setRegionNameIsSet(true);
+      }
+    }
+  }
+
+  private static <S extends org.apache.thrift.scheme.IScheme> S scheme(org.apache.thrift.protocol.TProtocol proto) {
+    return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme();
+  }
+}
+
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TTableDescriptor.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TTableDescriptor.java
index f741368..28d10c0 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TTableDescriptor.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TTableDescriptor.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -11,7 +11,7 @@ package org.apache.hadoop.hbase.thrift2.generated;
  * Thrift wrapper around
  * org.apache.hadoop.hbase.client.TableDescriptor
  */
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public class TTableDescriptor implements org.apache.thrift.TBase<TTableDescriptor, TTableDescriptor._Fields>, java.io.Serializable, Cloneable, Comparable<TTableDescriptor> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TTableDescriptor");
 
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TTableName.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TTableName.java
index 8795bc3..d97542a 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TTableName.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TTableName.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -11,7 +11,7 @@ package org.apache.hadoop.hbase.thrift2.generated;
  * Thrift wrapper around
  * org.apache.hadoop.hbase.TableName
  */
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public class TTableName implements org.apache.thrift.TBase<TTableName, TTableName._Fields>, java.io.Serializable, Cloneable, Comparable<TTableName> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TTableName");
 
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TThriftServerType.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TThriftServerType.java
index b5e7379..d040634 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TThriftServerType.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TThriftServerType.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -10,7 +10,7 @@ package org.apache.hadoop.hbase.thrift2.generated;
 /**
  * Specify type of thrift server: thrift and thrift2
  */
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public enum TThriftServerType implements org.apache.thrift.TEnum {
   ONE(1),
   TWO(2);
diff --git a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TTimeRange.java b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TTimeRange.java
index 1f16e09..9c12bb2 100644
--- a/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TTimeRange.java
+++ b/hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/TTimeRange.java
@@ -1,5 +1,5 @@
 /**
- * Autogenerated by Thrift Compiler (0.12.0)
+ * Autogenerated by Thrift Compiler (0.13.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
@@ -7,7 +7,7 @@
 package org.apache.hadoop.hbase.thrift2.generated;
 
 @SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
-@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.12.0)", date = "2020-01-22")
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.13.0)", date = "2020-03-21")
 public class TTimeRange implements org.apache.thrift.TBase<TTimeRange, TTimeRange._Fields>, java.io.Serializable, Cloneable, Comparable<TTimeRange> {
   private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("TTimeRange");
 
diff --git a/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift b/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift
index 98dc871..352395e 100644
--- a/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift
+++ b/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift
@@ -455,6 +455,39 @@ struct TNamespaceDescriptor {
 }
 
 
+/**
+ * Thrift wrapper around
+ * org.apache.hadoop.hbase.client.SlowLogQueryFilter
+ */
+struct TSlowLogQueryFilter {
+  1: optional string regionName
+  2: optional string clientAddress
+  3: optional string tableName
+  4: optional string userName
+  5: optional i32 limit = 10
+}
+
+/**
+ * Thrift wrapper around
+ * org.apache.hadoop.hbase.client.SlowLogRecord
+ */
+struct TSlowLogRecord {
+  1: required i64 startTime
+  2: required i32 processingTime
+  3: required i32 queueTime
+  4: required i64 responseSize
+  5: required string clientAddress
+  6: required string serverClass
+  7: required string methodName
+  8: required string callDetails
+  9: required string param
+  10: required string userName
+  11: required i32 multiGetsCount
+  12: required i32 multiMutationsCount
+  13: required i32 multiServiceCalls
+  14: optional string regionName
+}
+
 //
 // Exceptions
 //
@@ -1058,4 +1091,32 @@ service THBaseService {
    * Returns the cluster ID for this cluster.
    */
   string getClusterId()
+
+  /**
+   * Retrieves online slow RPC logs from the provided list of
+   * RegionServers
+   *
+   * @return online slowlog response list
+   * @throws TIOError if a remote or network exception occurs
+   */
+  list<TSlowLogRecord> getSlowLogResponses(
+   /** @param serverNames Server names to get slowlog responses from */
+    1: set<TServerName> serverNames
+   /** @param slowLogQueryFilter filter to be used if provided */
+    2: TSlowLogQueryFilter slowLogQueryFilter
+  ) throws (1: TIOError io)
+
+  /**
+   * Clears online slow RPC logs from the provided list of
+   * RegionServers
+   *
+   * @return List of booleans representing if online slowlog response buffer is cleaned
+   *   from each RegionServer
+   * @throws TIOError if a remote or network exception occurs
+   */
+  list<bool> clearSlowLogResponses(
+    /** @param serverNames Set of Server names to clean slowlog responses from */
+    1: set<TServerName> serverNames
+  ) throws (1: TIOError io)
+
 }
diff --git a/hbase-thrift/src/test/java/org/apache/hadoop/hbase/thrift2/TestThriftHBaseServiceHandler.java b/hbase-thrift/src/test/java/org/apache/hadoop/hbase/thrift2/TestThriftHBaseServiceHandler.java
index b8d9269..0a6b42b 100644
--- a/hbase-thrift/src/test/java/org/apache/hadoop/hbase/thrift2/TestThriftHBaseServiceHandler.java
+++ b/hbase-thrift/src/test/java/org/apache/hadoop/hbase/thrift2/TestThriftHBaseServiceHandler.java
@@ -38,12 +38,15 @@ import java.net.InetAddress;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import java.util.Set;
 import java.util.concurrent.TimeUnit;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.Cell;
@@ -51,6 +54,7 @@ import org.apache.hadoop.hbase.CompatibilityFactory;
 import org.apache.hadoop.hbase.CoprocessorEnvironment;
 import org.apache.hadoop.hbase.HBaseClassTestRule;
 import org.apache.hadoop.hbase.HBaseTestingUtility;
+import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.client.Admin;
 import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;
@@ -101,6 +105,9 @@ import org.apache.hadoop.hbase.thrift2.generated.TReadType;
 import org.apache.hadoop.hbase.thrift2.generated.TResult;
 import org.apache.hadoop.hbase.thrift2.generated.TRowMutations;
 import org.apache.hadoop.hbase.thrift2.generated.TScan;
+import org.apache.hadoop.hbase.thrift2.generated.TServerName;
+import org.apache.hadoop.hbase.thrift2.generated.TSlowLogQueryFilter;
+import org.apache.hadoop.hbase.thrift2.generated.TSlowLogRecord;
 import org.apache.hadoop.hbase.thrift2.generated.TTableDescriptor;
 import org.apache.hadoop.hbase.thrift2.generated.TTableName;
 import org.apache.hadoop.hbase.thrift2.generated.TThriftServerType;
@@ -112,6 +119,7 @@ import org.apache.thrift.protocol.TProtocol;
 import org.apache.thrift.transport.TSocket;
 import org.apache.thrift.transport.TTransport;
 import org.junit.AfterClass;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.ClassRule;
@@ -1737,6 +1745,31 @@ public class TestThriftHBaseServiceHandler {
     }
   }
 
+  @Test
+  public void testSlowLogResponses() throws Exception {
+
+    // start a thrift server
+    HBaseThriftTestingUtility THRIFT_TEST_UTIL = new HBaseThriftTestingUtility();
+    Configuration configuration = UTIL.getConfiguration();
+    configuration.setBoolean("hbase.regionserver.slowlog.buffer.enabled", true);
+
+    THRIFT_TEST_UTIL.startThriftServer(configuration, ThriftServerType.ONE);
+    ThriftHBaseServiceHandler thriftHBaseServiceHandler =
+      new ThriftHBaseServiceHandler(configuration,
+        UserProvider.instantiate(configuration));
+    Collection<ServerName> serverNames = UTIL.getAdmin().getRegionServers();
+    Set<TServerName> tServerNames =
+      ThriftUtilities.getServerNamesFromHBase(new HashSet<>(serverNames));
+    List<Boolean> clearedResponses =
+      thriftHBaseServiceHandler.clearSlowLogResponses(tServerNames);
+    clearedResponses.forEach(Assert::assertTrue);
+    TSlowLogQueryFilter tSlowLogQueryFilter = new TSlowLogQueryFilter();
+    tSlowLogQueryFilter.setLimit(15);
+    List<TSlowLogRecord> tSlowLogRecords =
+      thriftHBaseServiceHandler.getSlowLogResponses(tServerNames, tSlowLogQueryFilter);
+    assertEquals(tSlowLogRecords.size(), 0);
+  }
+
   public static class DelayingRegionObserver implements RegionCoprocessor, RegionObserver {
     private static final Logger LOG = LoggerFactory.getLogger(DelayingRegionObserver.class);
     // sleep time in msec