Repository: pinpoint-apm/pinpoint
Issue: Fix Thrift plugin integration tests to run on 0.10.x
Labels: enhancement
module:plugin

#### Description
~~Thrift 0.10.0 is out with some internal changes that is currently not compatible with the thrift plugin.
Thrift plugin needs to be updated to support this.~~
Thrift 0.10.0 introduces breaking changes to auto-generated `AsyncIface` methods, which requires regenerating test service to run on libthrift 0.10.0.
The internals have not been changed as far as tracing with Thrift plugin is concerned. Only integration tests need fixing.

Issue comments:
Skipping 0.10.x integration tests due to conflict in pinpoint agent's internal thrift version.
Thrift plugin currently works with libthrift 0.10.0.
Reopening issue to see if progress can be made here now that pinpoint's thrift version is upgraded to 0.10.0 (#2725)
Keep testing libthrift 0.9.x for regression.
Above change breaks all IT as giving libthrift test scope makes libthrift unavailable at runtime, should revert back to testing 0.10.x.

Pull request review comments:

Patch that resolved the issue:
diff --git a/agent/pom.xml b/agent/pom.xml
index b134b426d37f..626a559b26fb 100644
--- a/agent/pom.xml
+++ b/agent/pom.xml
@@ -194,13 +194,6 @@
             <scope>test</scope>
         </dependency>
 
-        <dependency>
-            <groupId>org.apache.thrift</groupId>
-            <artifactId>libthrift</artifactId>
-            <version>0.9.3</version>
-            <scope>test</scope>
-        </dependency>
-
         <dependency>
             <groupId>org.apache.activemq</groupId>
             <artifactId>activemq-all</artifactId>


Test patch:
diff --git a/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/common/client/AsyncEchoTestClient.java b/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/common/client/AsyncEchoTestClient.java
index 2fb969f85d4b..0a952a5be2f6 100644
--- a/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/common/client/AsyncEchoTestClient.java
+++ b/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/common/client/AsyncEchoTestClient.java
@@ -60,7 +60,7 @@ private AsyncEchoTestClient(TestEnvironment environment) throws IOException {
     public String echo(String message) throws TException {
         final CountDownLatch latch = new CountDownLatch(1);
         final AsyncEchoResultHolder resultHolder = new AsyncEchoResultHolder();
-        final AsyncMethodCallback<EchoService.AsyncClient.echo_call> callback = new EchoMethodCallback(latch, resultHolder);
+        final AsyncMethodCallback<String> callback = new EchoMethodCallback(latch, resultHolder);
         this.asyncClient.echo(message, callback);
         boolean isInterrupted = false;
         while (true) {
@@ -135,7 +135,7 @@ public void close() {
         }
     }
 
-    private static class EchoMethodCallback implements AsyncMethodCallback<EchoService.AsyncClient.echo_call> {
+    private static class EchoMethodCallback implements AsyncMethodCallback<String> {
 
         private final CountDownLatch completeLatch;
         private final AsyncEchoResultHolder resultHolder;
@@ -146,15 +146,9 @@ private EchoMethodCallback(final CountDownLatch completeLatch, final AsyncEchoRe
         }
 
         @Override
-        public void onComplete(EchoService.AsyncClient.echo_call response) {
-            try {
-                String result = response.getResult();
-                this.resultHolder.setResult(result);
-            } catch (TException e) {
-                this.resultHolder.setResult(e.toString());
-            } finally {
-                this.completeLatch.countDown();
-            }
+        public void onComplete(String response) {
+            this.resultHolder.setResult(response);
+            this.completeLatch.countDown();
         }
 
         @Override
diff --git a/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/dto/EchoService.java b/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/dto/EchoService.java
index 70674c7a0e95..0f4464a789c5 100644
--- a/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/dto/EchoService.java
+++ b/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/dto/EchoService.java
@@ -1,969 +1,969 @@
+/*
+ * Copyright 2017 NAVER Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 /**
- * Autogenerated by Thrift Compiler (0.9.1)
+ * Autogenerated by Thrift Compiler (0.10.0)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
  *  @generated
  */
 package com.navercorp.pinpoint.plugin.thrift.dto;
 
-import org.apache.thrift.scheme.IScheme;
-import org.apache.thrift.scheme.SchemeFactory;
-import org.apache.thrift.scheme.StandardScheme;
-import org.apache.thrift.scheme.TupleScheme;
-import org.apache.thrift.protocol.TMessage;
-import org.apache.thrift.protocol.TProtocol;
-import org.apache.thrift.protocol.TTupleProtocol;
-import org.apache.thrift.TException;
-import org.apache.thrift.async.AsyncMethodCallback;
-import org.apache.thrift.server.AbstractNonblockingServer.*;
-
-import java.util.Map;
-import java.util.HashMap;
-import java.util.EnumMap;
-import java.util.EnumSet;
-import java.util.Collections;
-import java.util.BitSet;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
+@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
+@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.10.0)", date = "2017-01-25")
 public class EchoService {
 
-    public interface Iface {
+  public interface Iface {
 
-        public String echo(String message) throws org.apache.thrift.TException;
+    public String echo(String message) throws org.apache.thrift.TException;
 
-    }
+  }
 
-    public interface AsyncIface {
+  public interface AsyncIface {
 
-        public void echo(String message, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
+    public void echo(String message, org.apache.thrift.async.AsyncMethodCallback<String> resultHandler) throws org.apache.thrift.TException;
 
-    }
+  }
 
-    public static class Client extends org.apache.thrift.TServiceClient implements Iface {
-        public static class Factory implements org.apache.thrift.TServiceClientFactory<Client> {
-            public Factory() {}
-            public Client getClient(org.apache.thrift.protocol.TProtocol prot) {
-                return new Client(prot);
-            }
-            public Client getClient(org.apache.thrift.protocol.TProtocol iprot, org.apache.thrift.protocol.TProtocol oprot) {
-                return new Client(iprot, oprot);
-            }
-        }
-
-        public Client(org.apache.thrift.protocol.TProtocol prot)
-        {
-            super(prot, prot);
-        }
+  public static class Client extends org.apache.thrift.TServiceClient implements Iface {
+    public static class Factory implements org.apache.thrift.TServiceClientFactory<Client> {
+      public Factory() {}
+      public Client getClient(org.apache.thrift.protocol.TProtocol prot) {
+        return new Client(prot);
+      }
+      public Client getClient(org.apache.thrift.protocol.TProtocol iprot, org.apache.thrift.protocol.TProtocol oprot) {
+        return new Client(iprot, oprot);
+      }
+    }
 
-        public Client(org.apache.thrift.protocol.TProtocol iprot, org.apache.thrift.protocol.TProtocol oprot) {
-            super(iprot, oprot);
-        }
+    public Client(org.apache.thrift.protocol.TProtocol prot)
+    {
+      super(prot, prot);
+    }
 
-        public String echo(String message) throws org.apache.thrift.TException
-        {
-            send_echo(message);
-            return recv_echo();
-        }
+    public Client(org.apache.thrift.protocol.TProtocol iprot, org.apache.thrift.protocol.TProtocol oprot) {
+      super(iprot, oprot);
+    }
 
-        public void send_echo(String message) throws org.apache.thrift.TException
-        {
-            echo_args args = new echo_args();
-            args.setMessage(message);
-            sendBase("echo", args);
-        }
+    public String echo(String message) throws org.apache.thrift.TException
+    {
+      send_echo(message);
+      return recv_echo();
+    }
 
-        public String recv_echo() throws org.apache.thrift.TException
-        {
-            echo_result result = new echo_result();
-            receiveBase(result, "echo");
-            if (result.isSetSuccess()) {
-                return result.success;
-            }
-            throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "echo failed: unknown result");
-        }
+    public void send_echo(String message) throws org.apache.thrift.TException
+    {
+      echo_args args = new echo_args();
+      args.setMessage(message);
+      sendBase("echo", args);
+    }
 
+    public String recv_echo() throws org.apache.thrift.TException
+    {
+      echo_result result = new echo_result();
+      receiveBase(result, "echo");
+      if (result.isSetSuccess()) {
+        return result.success;
+      }
+      throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "echo 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> {
-            private org.apache.thrift.async.TAsyncClientManager clientManager;
-            private org.apache.thrift.protocol.TProtocolFactory protocolFactory;
-            public Factory(org.apache.thrift.async.TAsyncClientManager clientManager, org.apache.thrift.protocol.TProtocolFactory protocolFactory) {
-                this.clientManager = clientManager;
-                this.protocolFactory = protocolFactory;
-            }
-            public AsyncClient getAsyncClient(org.apache.thrift.transport.TNonblockingTransport transport) {
-                return new AsyncClient(protocolFactory, clientManager, transport);
-            }
-        }
 
-        public AsyncClient(org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.async.TAsyncClientManager clientManager, org.apache.thrift.transport.TNonblockingTransport transport) {
-            super(protocolFactory, clientManager, transport);
-        }
+  }
+  public static class AsyncClient extends org.apache.thrift.async.TAsyncClient implements AsyncIface {
+    public static class Factory implements org.apache.thrift.async.TAsyncClientFactory<AsyncClient> {
+      private org.apache.thrift.async.TAsyncClientManager clientManager;
+      private org.apache.thrift.protocol.TProtocolFactory protocolFactory;
+      public Factory(org.apache.thrift.async.TAsyncClientManager clientManager, org.apache.thrift.protocol.TProtocolFactory protocolFactory) {
+        this.clientManager = clientManager;
+        this.protocolFactory = protocolFactory;
+      }
+      public AsyncClient getAsyncClient(org.apache.thrift.transport.TNonblockingTransport transport) {
+        return new AsyncClient(protocolFactory, clientManager, transport);
+      }
+    }
 
-        public void echo(String message, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
-            checkReady();
-            echo_call method_call = new echo_call(message, resultHandler, this, ___protocolFactory, ___transport);
-            this.___currentMethod = method_call;
-            ___manager.call(method_call);
-        }
+    public AsyncClient(org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.async.TAsyncClientManager clientManager, org.apache.thrift.transport.TNonblockingTransport transport) {
+      super(protocolFactory, clientManager, transport);
+    }
 
-        public static class echo_call extends org.apache.thrift.async.TAsyncMethodCall {
-            private String message;
-            public echo_call(String message, org.apache.thrift.async.AsyncMethodCallback 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.message = message;
-            }
+    public void echo(String message, org.apache.thrift.async.AsyncMethodCallback<String> resultHandler) throws org.apache.thrift.TException {
+      checkReady();
+      echo_call method_call = new echo_call(message, resultHandler, this, ___protocolFactory, ___transport);
+      this.___currentMethod = method_call;
+      ___manager.call(method_call);
+    }
 
-            public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
-                prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("echo", org.apache.thrift.protocol.TMessageType.CALL, 0));
-                echo_args args = new echo_args();
-                args.setMessage(message);
-                args.write(prot);
-                prot.writeMessageEnd();
-            }
+    public static class echo_call extends org.apache.thrift.async.TAsyncMethodCall<String> {
+      private String message;
+      public echo_call(String message, org.apache.thrift.async.AsyncMethodCallback<String> 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.message = message;
+      }
+
+      public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
+        prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("echo", org.apache.thrift.protocol.TMessageType.CALL, 0));
+        echo_args args = new echo_args();
+        args.setMessage(message);
+        args.write(prot);
+        prot.writeMessageEnd();
+      }
+
+      public String getResult() throws org.apache.thrift.TException {
+        if (getState() != State.RESPONSE_READ) {
+          throw new 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_echo();
+      }
+    }
 
-            public String getResult() throws org.apache.thrift.TException {
-                if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
-                    throw new 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_echo();
-            }
-        }
+  }
 
+  public static class Processor<I extends Iface> extends org.apache.thrift.TBaseProcessor<I> implements org.apache.thrift.TProcessor {
+    private static final org.slf4j.Logger _LOGGER = org.slf4j.LoggerFactory.getLogger(Processor.class.getName());
+    public Processor(I iface) {
+      super(iface, getProcessMap(new java.util.HashMap<String, org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>>()));
     }
 
-    public static class Processor<I extends Iface> extends org.apache.thrift.TBaseProcessor<I> implements org.apache.thrift.TProcessor {
-        private static final Logger LOGGER = LoggerFactory.getLogger(Processor.class.getName());
-        public Processor(I iface) {
-            super(iface, getProcessMap(new HashMap<String, org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>>()));
-        }
+    protected Processor(I iface, java.util.Map<String, org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>> processMap) {
+      super(iface, getProcessMap(processMap));
+    }
 
-        protected Processor(I iface, Map<String,  org.apache.thrift.ProcessFunction<I, ? extends  org.apache.thrift.TBase>> processMap) {
-            super(iface, getProcessMap(processMap));
-        }
+    private static <I extends Iface> java.util.Map<String,  org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>> getProcessMap(java.util.Map<String, org.apache.thrift.ProcessFunction<I, ? extends  org.apache.thrift.TBase>> processMap) {
+      processMap.put("echo", new echo());
+      return processMap;
+    }
 
-        private static <I extends Iface> Map<String,  org.apache.thrift.ProcessFunction<I, ? extends  org.apache.thrift.TBase>> getProcessMap(Map<String,  org.apache.thrift.ProcessFunction<I, ? extends  org.apache.thrift.TBase>> processMap) {
-            processMap.put("echo", new echo());
-            return processMap;
-        }
+    public static class echo<I extends Iface> extends org.apache.thrift.ProcessFunction<I, echo_args> {
+      public echo() {
+        super("echo");
+      }
 
-        public static class echo<I extends Iface> extends org.apache.thrift.ProcessFunction<I, echo_args> {
-            public echo() {
-                super("echo");
-            }
+      public echo_args getEmptyArgsInstance() {
+        return new echo_args();
+      }
 
-            public echo_args getEmptyArgsInstance() {
-                return new echo_args();
-            }
+      protected boolean isOneway() {
+        return false;
+      }
 
-            protected boolean isOneway() {
-                return false;
-            }
+      public echo_result getResult(I iface, echo_args args) throws org.apache.thrift.TException {
+        echo_result result = new echo_result();
+        result.success = iface.echo(args.message);
+        return result;
+      }
+    }
 
-            public echo_result getResult(I iface, echo_args args) throws org.apache.thrift.TException {
-                echo_result result = new echo_result();
-                result.success = iface.echo(args.message);
-                return result;
-            }
-        }
+  }
 
+  public static class AsyncProcessor<I extends AsyncIface> extends org.apache.thrift.TBaseAsyncProcessor<I> {
+    private static final org.slf4j.Logger _LOGGER = org.slf4j.LoggerFactory.getLogger(AsyncProcessor.class.getName());
+    public AsyncProcessor(I iface) {
+      super(iface, getProcessMap(new java.util.HashMap<String, org.apache.thrift.AsyncProcessFunction<I, ? extends org.apache.thrift.TBase, ?>>()));
     }
 
-    public static class AsyncProcessor<I extends AsyncIface> extends org.apache.thrift.TBaseAsyncProcessor<I> {
-        private static final Logger LOGGER = LoggerFactory.getLogger(AsyncProcessor.class.getName());
-        public AsyncProcessor(I iface) {
-            super(iface, getProcessMap(new HashMap<String, org.apache.thrift.AsyncProcessFunction<I, ? extends org.apache.thrift.TBase, ?>>()));
-        }
-
-        protected AsyncProcessor(I iface, Map<String,  org.apache.thrift.AsyncProcessFunction<I, ? extends  org.apache.thrift.TBase, ?>> processMap) {
-            super(iface, getProcessMap(processMap));
-        }
+    protected AsyncProcessor(I iface, java.util.Map<String,  org.apache.thrift.AsyncProcessFunction<I, ? extends  org.apache.thrift.TBase, ?>> processMap) {
+      super(iface, getProcessMap(processMap));
+    }
 
-        private static <I extends AsyncIface> Map<String,  org.apache.thrift.AsyncProcessFunction<I, ? extends  org.apache.thrift.TBase,?>> getProcessMap(Map<String,  org.apache.thrift.AsyncProcessFunction<I, ? extends  org.apache.thrift.TBase, ?>> processMap) {
-            processMap.put("echo", new echo());
-            return processMap;
-        }
+    private static <I extends AsyncIface> java.util.Map<String,  org.apache.thrift.AsyncProcessFunction<I, ? extends  org.apache.thrift.TBase,?>> getProcessMap(java.util.Map<String,  org.apache.thrift.AsyncProcessFunction<I, ? extends  org.apache.thrift.TBase, ?>> processMap) {
+      processMap.put("echo", new echo());
+      return processMap;
+    }
 
-        public static class echo<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, echo_args, String> {
-            public echo() {
-                super("echo");
-            }
+    public static class echo<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, echo_args, String> {
+      public echo() {
+        super("echo");
+      }
 
-            public echo_args getEmptyArgsInstance() {
-                return new echo_args();
-            }
+      public echo_args getEmptyArgsInstance() {
+        return new echo_args();
+      }
 
-            public AsyncMethodCallback<String> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
-                final org.apache.thrift.AsyncProcessFunction fcall = this;
-                return new AsyncMethodCallback<String>() {
-                    public void onComplete(String o) {
-                        echo_result result = new echo_result();
-                        result.success = o;
-                        try {
-                            fcall.sendResponse(fb,result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
-                            return;
-                        } catch (Exception e) {
-                            LOGGER.error("Exception writing to internal frame buffer", e);
-                        }
-                        fb.close();
-                    }
-                    public void onError(Exception e) {
-                        byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
-
-            /* THRIFT-2157 generated code would cause ClassCastException
-            org.apache.thrift.TBase msg;
+      public org.apache.thrift.async.AsyncMethodCallback<String> 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<String>() {
+          public void onComplete(String o) {
+            echo_result result = new echo_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 (Exception e) {
+              _LOGGER.error("Exception writing to internal frame buffer", e);
+              onError(e);
+            }
+          }
+          public void onError(Exception e) {
+            byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
+            org.apache.thrift.TSerializable msg;
             echo_result result = new echo_result();
-            {
+            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.TBase)new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
+              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);
-              return;
             } catch (Exception ex) {
-              LOGGER.error("Exception writing to internal frame buffer", ex);
-            }
-            */
-                        org.apache.thrift.TApplicationException msg;
-                        echo_result result = new echo_result();
-                        {
-                            msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
-                            msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
-                        }
-                        try {
-                            TProtocol oprot = fb.getOutputProtocol();
-
-                            oprot.writeMessageBegin(new TMessage(fcall.getMethodName(), msgType, seqid));
-                            msg.write(oprot);
-                            oprot.writeMessageEnd();
-                            oprot.getTransport().flush();
-
-                            fb.responseReady();
-                            return;
-                        } catch (Exception ex) {
-                            LOGGER.error("Exception writing to internal frame buffer", ex);
-                        }
-
-                        fb.close();
-                    }
-                };
+              _LOGGER.error("Exception writing to internal frame buffer", ex);
+              fb.close();
             }
+          }
+        };
+      }
 
-            protected boolean isOneway() {
-                return false;
-            }
-
-            public void start(I iface, echo_args args, org.apache.thrift.async.AsyncMethodCallback<String> resultHandler) throws TException {
-                iface.echo(args.message,resultHandler);
-            }
-        }
+      protected boolean isOneway() {
+        return false;
+      }
 
+      public void start(I iface, echo_args args, org.apache.thrift.async.AsyncMethodCallback<String> resultHandler) throws org.apache.thrift.TException {
+        iface.echo(args.message,resultHandler);
+      }
     }
 
-    public static class echo_args implements org.apache.thrift.TBase<echo_args, echo_args._Fields>, java.io.Serializable, Cloneable, Comparable<echo_args>   {
-        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echo_args");
-
-        private static final org.apache.thrift.protocol.TField MESSAGE_FIELD_DESC = new org.apache.thrift.protocol.TField("message", org.apache.thrift.protocol.TType.STRING, (short)1);
-
-        private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
-        static {
-            schemes.put(StandardScheme.class, new echo_argsStandardSchemeFactory());
-            schemes.put(TupleScheme.class, new echo_argsTupleSchemeFactory());
-        }
-
-        private String message; // 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 {
-            MESSAGE((short)1, "message");
-
-            private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
-
-            static {
-                for (_Fields field : EnumSet.allOf(_Fields.class)) {
-                    byName.put(field.getFieldName(), field);
-                }
-            }
-
-            /**
-             * Find the _Fields constant that matches fieldId, or null if its not found.
-             */
-            public static _Fields findByThriftId(int fieldId) {
-                switch(fieldId) {
-                    case 1: // MESSAGE
-                        return MESSAGE;
-                    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 IllegalArgumentException("Field " + fieldId + " doesn't exist!");
-                return fields;
-            }
-
-            /**
-             * Find the _Fields constant that matches name, or null if its not found.
-             */
-            public static _Fields findByName(String name) {
-                return byName.get(name);
-            }
-
-            private final short _thriftId;
-            private final String _fieldName;
-
-            _Fields(short thriftId, String fieldName) {
-                _thriftId = thriftId;
-                _fieldName = fieldName;
-            }
-
-            public short getThriftFieldId() {
-                return _thriftId;
-            }
-
-            public String getFieldName() {
-                return _fieldName;
-            }
-        }
-
-        // isset id assignments
-        public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
-        static {
-            Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
-            tmpMap.put(_Fields.MESSAGE, new org.apache.thrift.meta_data.FieldMetaData("message", org.apache.thrift.TFieldRequirementType.DEFAULT,
-                    new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
-            metaDataMap = Collections.unmodifiableMap(tmpMap);
-            org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echo_args.class, metaDataMap);
-        }
-
-        public echo_args() {
-        }
-
-        public echo_args(
-                String message)
-        {
-            this();
-            this.message = message;
-        }
+  }
 
-        /**
-         * Performs a deep copy on <i>other</i>.
-         */
-        public echo_args(echo_args other) {
-            if (other.isSetMessage()) {
-                this.message = other.message;
-            }
-        }
+  public static class echo_args implements org.apache.thrift.TBase<echo_args, echo_args._Fields>, java.io.Serializable, Cloneable, Comparable<echo_args>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echo_args");
 
-        public echo_args deepCopy() {
-            return new echo_args(this);
-        }
+    private static final org.apache.thrift.protocol.TField MESSAGE_FIELD_DESC = new org.apache.thrift.protocol.TField("message", org.apache.thrift.protocol.TType.STRING, (short)1);
 
-        @Override
-        public void clear() {
-            this.message = null;
-        }
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echo_argsStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echo_argsTupleSchemeFactory();
 
-        public String getMessage() {
-            return this.message;
-        }
+    private String message; // required
 
-        public void setMessage(String message) {
-            this.message = message;
-        }
+    /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+    public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+      MESSAGE((short)1, "message");
 
-        public void unsetMessage() {
-            this.message = null;
-        }
+      private static final java.util.Map<String, _Fields> byName = new java.util.HashMap<String, _Fields>();
 
-        /** Returns true if field message is set (has been assigned a value) and false otherwise */
-        public boolean isSetMessage() {
-            return this.message != null;
+      static {
+        for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) {
+          byName.put(field.getFieldName(), field);
         }
+      }
 
-        public void setMessageIsSet(boolean value) {
-            if (!value) {
-                this.message = null;
-            }
+      /**
+       * Find the _Fields constant that matches fieldId, or null if its not found.
+       */
+      public static _Fields findByThriftId(int fieldId) {
+        switch(fieldId) {
+          case 1: // MESSAGE
+            return MESSAGE;
+          default:
+            return null;
         }
+      }
 
-        public void setFieldValue(_Fields field, Object value) {
-            switch (field) {
-                case MESSAGE:
-                    if (value == null) {
-                        unsetMessage();
-                    } else {
-                        setMessage((String)value);
-                    }
-                    break;
+      /**
+       * 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 IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+        return fields;
+      }
 
-            }
-        }
-
-        public Object getFieldValue(_Fields field) {
-            switch (field) {
-                case MESSAGE:
-                    return getMessage();
+      /**
+       * Find the _Fields constant that matches name, or null if its not found.
+       */
+      public static _Fields findByName(String name) {
+        return byName.get(name);
+      }
 
-            }
-            throw new IllegalStateException();
-        }
+      private final short _thriftId;
+      private final String _fieldName;
 
-        /** 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 IllegalArgumentException();
-            }
+      _Fields(short thriftId, String fieldName) {
+        _thriftId = thriftId;
+        _fieldName = fieldName;
+      }
 
-            switch (field) {
-                case MESSAGE:
-                    return isSetMessage();
-            }
-            throw new IllegalStateException();
-        }
+      public short getThriftFieldId() {
+        return _thriftId;
+      }
 
-        @Override
-        public boolean equals(Object that) {
-            if (that == null)
-                return false;
-            if (that instanceof echo_args)
-                return this.equals((echo_args)that);
-            return false;
-        }
+      public String getFieldName() {
+        return _fieldName;
+      }
+    }
 
-        public boolean equals(echo_args that) {
-            if (that == null)
-                return false;
-
-            boolean this_present_message = true && this.isSetMessage();
-            boolean that_present_message = true && that.isSetMessage();
-            if (this_present_message || that_present_message) {
-                if (!(this_present_message && that_present_message))
-                    return false;
-                if (!this.message.equals(that.message))
-                    return false;
-            }
+    // 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.MESSAGE, new org.apache.thrift.meta_data.FieldMetaData("message", org.apache.thrift.TFieldRequirementType.DEFAULT,
+          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(echo_args.class, metaDataMap);
+    }
 
-            return true;
-        }
+    public echo_args() {
+    }
 
-        @Override
-        public int hashCode() {
-            return 0;
-        }
+    public echo_args(
+      String message)
+    {
+      this();
+      this.message = message;
+    }
 
-        @Override
-        public int compareTo(echo_args other) {
-            if (!getClass().equals(other.getClass())) {
-                return getClass().getName().compareTo(other.getClass().getName());
-            }
+    /**
+     * Performs a deep copy on <i>other</i>.
+     */
+    public echo_args(echo_args other) {
+      if (other.isSetMessage()) {
+        this.message = other.message;
+      }
+    }
 
-            int lastComparison = 0;
+    public echo_args deepCopy() {
+      return new echo_args(this);
+    }
 
-            lastComparison = Boolean.valueOf(isSetMessage()).compareTo(other.isSetMessage());
-            if (lastComparison != 0) {
-                return lastComparison;
-            }
-            if (isSetMessage()) {
-                lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.message, other.message);
-                if (lastComparison != 0) {
-                    return lastComparison;
-                }
-            }
-            return 0;
-        }
+    @Override
+    public void clear() {
+      this.message = null;
+    }
 
-        public _Fields fieldForId(int fieldId) {
-            return _Fields.findByThriftId(fieldId);
-        }
+    public String getMessage() {
+      return this.message;
+    }
 
-        public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
-            schemes.get(iprot.getScheme()).getScheme().read(iprot, this);
-        }
+    public void setMessage(String message) {
+      this.message = message;
+    }
 
-        public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
-            schemes.get(oprot.getScheme()).getScheme().write(oprot, this);
-        }
+    public void unsetMessage() {
+      this.message = null;
+    }
 
-        @Override
-        public String toString() {
-            StringBuilder sb = new StringBuilder("echo_args(");
-            boolean first = true;
+    /** Returns true if field message is set (has been assigned a value) and false otherwise */
+    public boolean isSetMessage() {
+      return this.message != null;
+    }
 
-            sb.append("message:");
-            if (this.message == null) {
-                sb.append("null");
-            } else {
-                sb.append(this.message);
-            }
-            first = false;
-            sb.append(")");
-            return sb.toString();
-        }
+    public void setMessageIsSet(boolean value) {
+      if (!value) {
+        this.message = null;
+      }
+    }
 
-        public void validate() throws org.apache.thrift.TException {
-            // check for required fields
-            // check for sub-struct validity
+    public void setFieldValue(_Fields field, Object value) {
+      switch (field) {
+      case MESSAGE:
+        if (value == null) {
+          unsetMessage();
+        } else {
+          setMessage((String)value);
         }
+        break;
 
-        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, 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);
-            }
-        }
+    public Object getFieldValue(_Fields field) {
+      switch (field) {
+      case MESSAGE:
+        return getMessage();
 
-        private static class echo_argsStandardSchemeFactory implements SchemeFactory {
-            public echo_argsStandardScheme getScheme() {
-                return new echo_argsStandardScheme();
-            }
-        }
+      }
+      throw new IllegalStateException();
+    }
 
-        private static class echo_argsStandardScheme extends StandardScheme<echo_args> {
-
-            public void read(org.apache.thrift.protocol.TProtocol iprot, echo_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: // MESSAGE
-                            if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
-                                struct.message = iprot.readString();
-                                struct.setMessageIsSet(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();
-                struct.validate();
-            }
+    /** 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 IllegalArgumentException();
+      }
+
+      switch (field) {
+      case MESSAGE:
+        return isSetMessage();
+      }
+      throw new IllegalStateException();
+    }
 
-            public void write(org.apache.thrift.protocol.TProtocol oprot, echo_args struct) throws org.apache.thrift.TException {
-                struct.validate();
-
-                oprot.writeStructBegin(STRUCT_DESC);
-                if (struct.message != null) {
-                    oprot.writeFieldBegin(MESSAGE_FIELD_DESC);
-                    oprot.writeString(struct.message);
-                    oprot.writeFieldEnd();
-                }
-                oprot.writeFieldStop();
-                oprot.writeStructEnd();
-            }
+    @Override
+    public boolean equals(Object that) {
+      if (that == null)
+        return false;
+      if (that instanceof echo_args)
+        return this.equals((echo_args)that);
+      return false;
+    }
 
-        }
+    public boolean equals(echo_args that) {
+      if (that == null)
+        return false;
+      if (this == that)
+        return true;
+
+      boolean this_present_message = true && this.isSetMessage();
+      boolean that_present_message = true && that.isSetMessage();
+      if (this_present_message || that_present_message) {
+        if (!(this_present_message && that_present_message))
+          return false;
+        if (!this.message.equals(that.message))
+          return false;
+      }
+
+      return true;
+    }
 
-        private static class echo_argsTupleSchemeFactory implements SchemeFactory {
-            public echo_argsTupleScheme getScheme() {
-                return new echo_argsTupleScheme();
-            }
-        }
+    @Override
+    public int hashCode() {
+      int hashCode = 1;
 
-        private static class echo_argsTupleScheme extends TupleScheme<echo_args> {
-
-            @Override
-            public void write(org.apache.thrift.protocol.TProtocol prot, echo_args struct) throws org.apache.thrift.TException {
-                TTupleProtocol oprot = (TTupleProtocol) prot;
-                BitSet optionals = new BitSet();
-                if (struct.isSetMessage()) {
-                    optionals.set(0);
-                }
-                oprot.writeBitSet(optionals, 1);
-                if (struct.isSetMessage()) {
-                    oprot.writeString(struct.message);
-                }
-            }
+      hashCode = hashCode * 8191 + ((isSetMessage()) ? 131071 : 524287);
+      if (isSetMessage())
+        hashCode = hashCode * 8191 + message.hashCode();
 
-            @Override
-            public void read(org.apache.thrift.protocol.TProtocol prot, echo_args struct) throws org.apache.thrift.TException {
-                TTupleProtocol iprot = (TTupleProtocol) prot;
-                BitSet incoming = iprot.readBitSet(1);
-                if (incoming.get(0)) {
-                    struct.message = iprot.readString();
-                    struct.setMessageIsSet(true);
-                }
-            }
-        }
+      return hashCode;
+    }
 
+    @Override
+    public int compareTo(echo_args other) {
+      if (!getClass().equals(other.getClass())) {
+        return getClass().getName().compareTo(other.getClass().getName());
+      }
+
+      int lastComparison = 0;
+
+      lastComparison = Boolean.valueOf(isSetMessage()).compareTo(other.isSetMessage());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetMessage()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.message, other.message);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
+      return 0;
     }
 
-    public static class echo_result implements org.apache.thrift.TBase<echo_result, echo_result._Fields>, java.io.Serializable, Cloneable, Comparable<echo_result>   {
-        private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echo_result");
+    public _Fields fieldForId(int fieldId) {
+      return _Fields.findByThriftId(fieldId);
+    }
 
-        private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.STRING, (short)0);
+    public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+      scheme(iprot).read(iprot, this);
+    }
 
-        private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
-        static {
-            schemes.put(StandardScheme.class, new echo_resultStandardSchemeFactory());
-            schemes.put(TupleScheme.class, new echo_resultTupleSchemeFactory());
-        }
+    public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+      scheme(oprot).write(oprot, this);
+    }
 
-        private String success; // required
+    @Override
+    public String toString() {
+      StringBuilder sb = new StringBuilder("echo_args(");
+      boolean first = true;
+
+      sb.append("message:");
+      if (this.message == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.message);
+      }
+      first = false;
+      sb.append(")");
+      return sb.toString();
+    }
 
-        /** 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");
+    public void validate() throws org.apache.thrift.TException {
+      // check for required fields
+      // check for sub-struct validity
+    }
 
-            private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
+    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);
+      }
+    }
 
-            static {
-                for (_Fields field : EnumSet.allOf(_Fields.class)) {
-                    byName.put(field.getFieldName(), field);
-                }
-            }
+    private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, 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);
+      }
+    }
 
-            /**
-             * Find the _Fields constant that matches fieldId, or null if its not found.
-             */
-            public static _Fields findByThriftId(int fieldId) {
-                switch(fieldId) {
-                    case 0: // SUCCESS
-                        return SUCCESS;
-                    default:
-                        return null;
-                }
-            }
+    private static class echo_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public echo_argsStandardScheme getScheme() {
+        return new echo_argsStandardScheme();
+      }
+    }
 
-            /**
-             * 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 IllegalArgumentException("Field " + fieldId + " doesn't exist!");
-                return fields;
-            }
+    private static class echo_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme<echo_args> {
 
-            /**
-             * Find the _Fields constant that matches name, or null if its not found.
-             */
-            public static _Fields findByName(String name) {
-                return byName.get(name);
-            }
+      public void read(org.apache.thrift.protocol.TProtocol iprot, echo_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: // MESSAGE
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
+                struct.message = iprot.readString();
+                struct.setMessageIsSet(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();
+        struct.validate();
+      }
+
+      public void write(org.apache.thrift.protocol.TProtocol oprot, echo_args struct) throws org.apache.thrift.TException {
+        struct.validate();
+
+        oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.message != null) {
+          oprot.writeFieldBegin(MESSAGE_FIELD_DESC);
+          oprot.writeString(struct.message);
+          oprot.writeFieldEnd();
+        }
+        oprot.writeFieldStop();
+        oprot.writeStructEnd();
+      }
 
-            private final short _thriftId;
-            private final String _fieldName;
+    }
 
-            _Fields(short thriftId, String fieldName) {
-                _thriftId = thriftId;
-                _fieldName = fieldName;
-            }
+    private static class echo_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public echo_argsTupleScheme getScheme() {
+        return new echo_argsTupleScheme();
+      }
+    }
 
-            public short getThriftFieldId() {
-                return _thriftId;
-            }
+    private static class echo_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme<echo_args> {
 
-            public String getFieldName() {
-                return _fieldName;
-            }
+      @Override
+      public void write(org.apache.thrift.protocol.TProtocol prot, echo_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.isSetMessage()) {
+          optionals.set(0);
         }
-
-        // isset id assignments
-        public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
-        static {
-            Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new 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.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
-            metaDataMap = Collections.unmodifiableMap(tmpMap);
-            org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echo_result.class, metaDataMap);
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetMessage()) {
+          oprot.writeString(struct.message);
         }
+      }
 
-        public echo_result() {
+      @Override
+      public void read(org.apache.thrift.protocol.TProtocol prot, echo_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)) {
+          struct.message = iprot.readString();
+          struct.setMessageIsSet(true);
         }
+      }
+    }
 
-        public echo_result(
-                String success)
-        {
-            this();
-            this.success = success;
-        }
+    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 echo_result implements org.apache.thrift.TBase<echo_result, echo_result._Fields>, java.io.Serializable, Cloneable, Comparable<echo_result>   {
+    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("echo_result");
+
+    private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.STRING, (short)0);
+
+    private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new echo_resultStandardSchemeFactory();
+    private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new echo_resultTupleSchemeFactory();
+
+    private String success; // 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");
+
+      private static final java.util.Map<String, _Fields> byName = new java.util.HashMap<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.
+       */
+      public static _Fields findByThriftId(int fieldId) {
+        switch(fieldId) {
+          case 0: // SUCCESS
+            return SUCCESS;
+          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 IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+        return fields;
+      }
+
+      /**
+       * Find the _Fields constant that matches name, or null if its not found.
+       */
+      public static _Fields findByName(String name) {
+        return byName.get(name);
+      }
+
+      private final short _thriftId;
+      private final String _fieldName;
+
+      _Fields(short thriftId, String fieldName) {
+        _thriftId = thriftId;
+        _fieldName = fieldName;
+      }
+
+      public short getThriftFieldId() {
+        return _thriftId;
+      }
+
+      public String getFieldName() {
+        return _fieldName;
+      }
+    }
 
-        /**
-         * Performs a deep copy on <i>other</i>.
-         */
-        public echo_result(echo_result other) {
-            if (other.isSetSuccess()) {
-                this.success = other.success;
-            }
-        }
+    // 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.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+      metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
+      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(echo_result.class, metaDataMap);
+    }
 
-        public echo_result deepCopy() {
-            return new echo_result(this);
-        }
+    public echo_result() {
+    }
 
-        @Override
-        public void clear() {
-            this.success = null;
-        }
+    public echo_result(
+      String success)
+    {
+      this();
+      this.success = success;
+    }
 
-        public String getSuccess() {
-            return this.success;
-        }
+    /**
+     * Performs a deep copy on <i>other</i>.
+     */
+    public echo_result(echo_result other) {
+      if (other.isSetSuccess()) {
+        this.success = other.success;
+      }
+    }
 
-        public void setSuccess(String success) {
-            this.success = success;
-        }
+    public echo_result deepCopy() {
+      return new echo_result(this);
+    }
 
-        public void unsetSuccess() {
-            this.success = null;
-        }
+    @Override
+    public void clear() {
+      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 String getSuccess() {
+      return this.success;
+    }
 
-        public void setSuccessIsSet(boolean value) {
-            if (!value) {
-                this.success = null;
-            }
-        }
+    public void setSuccess(String success) {
+      this.success = success;
+    }
 
-        public void setFieldValue(_Fields field, Object value) {
-            switch (field) {
-                case SUCCESS:
-                    if (value == null) {
-                        unsetSuccess();
-                    } else {
-                        setSuccess((String)value);
-                    }
-                    break;
+    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 Object getFieldValue(_Fields field) {
-            switch (field) {
-                case SUCCESS:
-                    return getSuccess();
+    public void setSuccessIsSet(boolean value) {
+      if (!value) {
+        this.success = null;
+      }
+    }
 
-            }
-            throw new IllegalStateException();
+    public void setFieldValue(_Fields field, Object value) {
+      switch (field) {
+      case SUCCESS:
+        if (value == null) {
+          unsetSuccess();
+        } else {
+          setSuccess((String)value);
         }
+        break;
 
-        /** 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 IllegalArgumentException();
-            }
+      }
+    }
 
-            switch (field) {
-                case SUCCESS:
-                    return isSetSuccess();
-            }
-            throw new IllegalStateException();
-        }
+    public Object getFieldValue(_Fields field) {
+      switch (field) {
+      case SUCCESS:
+        return getSuccess();
 
-        @Override
-        public boolean equals(Object that) {
-            if (that == null)
-                return false;
-            if (that instanceof echo_result)
-                return this.equals((echo_result)that);
-            return false;
-        }
+      }
+      throw new IllegalStateException();
+    }
 
-        public boolean equals(echo_result that) {
-            if (that == null)
-                return false;
-
-            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;
-            }
+    /** 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 IllegalArgumentException();
+      }
+
+      switch (field) {
+      case SUCCESS:
+        return isSetSuccess();
+      }
+      throw new IllegalStateException();
+    }
 
-            return true;
-        }
+    @Override
+    public boolean equals(Object that) {
+      if (that == null)
+        return false;
+      if (that instanceof echo_result)
+        return this.equals((echo_result)that);
+      return false;
+    }
 
-        @Override
-        public int hashCode() {
-            return 0;
-        }
+    public boolean equals(echo_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;
+      }
+
+      return true;
+    }
 
-        @Override
-        public int compareTo(echo_result other) {
-            if (!getClass().equals(other.getClass())) {
-                return getClass().getName().compareTo(other.getClass().getName());
-            }
+    @Override
+    public int hashCode() {
+      int hashCode = 1;
 
-            int lastComparison = 0;
+      hashCode = hashCode * 8191 + ((isSetSuccess()) ? 131071 : 524287);
+      if (isSetSuccess())
+        hashCode = hashCode * 8191 + success.hashCode();
 
-            lastComparison = 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;
-                }
-            }
-            return 0;
-        }
+      return hashCode;
+    }
 
-        public _Fields fieldForId(int fieldId) {
-            return _Fields.findByThriftId(fieldId);
-        }
+    @Override
+    public int compareTo(echo_result other) {
+      if (!getClass().equals(other.getClass())) {
+        return getClass().getName().compareTo(other.getClass().getName());
+      }
+
+      int lastComparison = 0;
+
+      lastComparison = 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;
+        }
+      }
+      return 0;
+    }
 
-        public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
-            schemes.get(iprot.getScheme()).getScheme().read(iprot, this);
-        }
+    public _Fields fieldForId(int fieldId) {
+      return _Fields.findByThriftId(fieldId);
+    }
 
-        public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
-            schemes.get(oprot.getScheme()).getScheme().write(oprot, this);
-        }
+    public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
+      scheme(iprot).read(iprot, this);
+    }
 
-        @Override
-        public String toString() {
-            StringBuilder sb = new StringBuilder("echo_result(");
-            boolean first = true;
+    public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
+      scheme(oprot).write(oprot, this);
+      }
+
+    @Override
+    public String toString() {
+      StringBuilder sb = new StringBuilder("echo_result(");
+      boolean first = true;
+
+      sb.append("success:");
+      if (this.success == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.success);
+      }
+      first = false;
+      sb.append(")");
+      return sb.toString();
+    }
 
-            sb.append("success:");
-            if (this.success == null) {
-                sb.append("null");
-            } else {
-                sb.append(this.success);
-            }
-            first = false;
-            sb.append(")");
-            return sb.toString();
-        }
+    public void validate() throws org.apache.thrift.TException {
+      // check for required fields
+      // check for sub-struct validity
+    }
 
-        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 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, 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 void readObject(java.io.ObjectInputStream in) throws java.io.IOException, 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 echo_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public echo_resultStandardScheme getScheme() {
+        return new echo_resultStandardScheme();
+      }
+    }
 
-        private static class echo_resultStandardSchemeFactory implements SchemeFactory {
-            public echo_resultStandardScheme getScheme() {
-                return new echo_resultStandardScheme();
-            }
-        }
+    private static class echo_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme<echo_result> {
 
-        private static class echo_resultStandardScheme extends StandardScheme<echo_result> {
-
-            public void read(org.apache.thrift.protocol.TProtocol iprot, echo_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.STRING) {
-                                struct.success = iprot.readString();
-                                struct.setSuccessIsSet(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();
-                struct.validate();
-            }
+      public void read(org.apache.thrift.protocol.TProtocol iprot, echo_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.STRING) {
+                struct.success = iprot.readString();
+                struct.setSuccessIsSet(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();
+        struct.validate();
+      }
+
+      public void write(org.apache.thrift.protocol.TProtocol oprot, echo_result struct) throws org.apache.thrift.TException {
+        struct.validate();
+
+        oprot.writeStructBegin(STRUCT_DESC);
+        if (struct.success != null) {
+          oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
+          oprot.writeString(struct.success);
+          oprot.writeFieldEnd();
+        }
+        oprot.writeFieldStop();
+        oprot.writeStructEnd();
+      }
 
-            public void write(org.apache.thrift.protocol.TProtocol oprot, echo_result struct) throws org.apache.thrift.TException {
-                struct.validate();
-
-                oprot.writeStructBegin(STRUCT_DESC);
-                if (struct.success != null) {
-                    oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
-                    oprot.writeString(struct.success);
-                    oprot.writeFieldEnd();
-                }
-                oprot.writeFieldStop();
-                oprot.writeStructEnd();
-            }
+    }
 
-        }
+    private static class echo_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory {
+      public echo_resultTupleScheme getScheme() {
+        return new echo_resultTupleScheme();
+      }
+    }
 
-        private static class echo_resultTupleSchemeFactory implements SchemeFactory {
-            public echo_resultTupleScheme getScheme() {
-                return new echo_resultTupleScheme();
-            }
-        }
+    private static class echo_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme<echo_result> {
 
-        private static class echo_resultTupleScheme extends TupleScheme<echo_result> {
-
-            @Override
-            public void write(org.apache.thrift.protocol.TProtocol prot, echo_result struct) throws org.apache.thrift.TException {
-                TTupleProtocol oprot = (TTupleProtocol) prot;
-                BitSet optionals = new BitSet();
-                if (struct.isSetSuccess()) {
-                    optionals.set(0);
-                }
-                oprot.writeBitSet(optionals, 1);
-                if (struct.isSetSuccess()) {
-                    oprot.writeString(struct.success);
-                }
-            }
+      @Override
+      public void write(org.apache.thrift.protocol.TProtocol prot, echo_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);
+        }
+        oprot.writeBitSet(optionals, 1);
+        if (struct.isSetSuccess()) {
+          oprot.writeString(struct.success);
+        }
+      }
 
-            @Override
-            public void read(org.apache.thrift.protocol.TProtocol prot, echo_result struct) throws org.apache.thrift.TException {
-                TTupleProtocol iprot = (TTupleProtocol) prot;
-                BitSet incoming = iprot.readBitSet(1);
-                if (incoming.get(0)) {
-                    struct.success = iprot.readString();
-                    struct.setSuccessIsSet(true);
-                }
-            }
+      @Override
+      public void read(org.apache.thrift.protocol.TProtocol prot, echo_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(1);
+        if (incoming.get(0)) {
+          struct.success = iprot.readString();
+          struct.setSuccessIsSet(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();
     }
+  }
 
-}
\ No newline at end of file
+}
diff --git a/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/it/asynchronous/ThriftHalfSyncHalfAsyncServerAsyncIT.java b/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/it/asynchronous/ThriftHalfSyncHalfAsyncServerAsyncIT.java
index fdc53c1bb08a..ca81c84c6703 100644
--- a/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/it/asynchronous/ThriftHalfSyncHalfAsyncServerAsyncIT.java
+++ b/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/it/asynchronous/ThriftHalfSyncHalfAsyncServerAsyncIT.java
@@ -33,15 +33,16 @@
 import com.navercorp.pinpoint.test.plugin.PinpointPluginTestSuite;
 
 /**
- * Integration test for THsHaServer with asynchronous processor.
+ * <p>Integration test for THsHaServer with asynchronous processor.</p>
  * 
- * Tests against libthrift 0.9.2+ due to THRIFT-2274
+ * <p><strike>Tests against libthrift 0.9.2+ due to THRIFT-2274</strike><br/>
+ * Tests against libthrift 0.10.0+ (0.9.x -> 0.10.x introduces breaking change to generated thrift code)</p>
  * 
  * @author HyunGil Jeong
  */
 @RunWith(PinpointPluginTestSuite.class)
 @PinpointAgent("agent/target/pinpoint-agent-" + Version.VERSION)
-@Dependency({ "org.apache.thrift:libthrift:[0.9.2,0.9.max]", "log4j:log4j:1.2.16", "org.slf4j:slf4j-log4j12:1.7.22" })
+@Dependency({ "org.apache.thrift:libthrift:[0.10.0,)", "log4j:log4j:1.2.16", "org.slf4j:slf4j-log4j12:1.7.22" })
 public class ThriftHalfSyncHalfAsyncServerAsyncIT extends EchoTestRunner<THsHaServer> {
 
     @Override
diff --git a/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/it/asynchronous/ThriftNonblockingServerAsyncIT.java b/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/it/asynchronous/ThriftNonblockingServerAsyncIT.java
index f5f635dc4d0e..f4cbce4e686b 100644
--- a/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/it/asynchronous/ThriftNonblockingServerAsyncIT.java
+++ b/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/it/asynchronous/ThriftNonblockingServerAsyncIT.java
@@ -33,15 +33,16 @@
 import com.navercorp.pinpoint.test.plugin.PinpointPluginTestSuite;
 
 /**
- * Integration test for TNonblockingServer with asynchronous processor.
+ * <p>Integration test for TNonblockingServer with asynchronous processor.</p>
  *
- * Tests against libthrift 0.9.2+ due to THRIFT-2274
+ * <p><strike>Tests against libthrift 0.9.2+ due to THRIFT-2274</strike><br/>
+ * Tests against libthrift 0.10.0+ (0.9.x -> 0.10.x introduces breaking change to generated thrift code)</p>
  * 
  * @author HyunGil Jeong
  */
 @RunWith(PinpointPluginTestSuite.class)
 @PinpointAgent("agent/target/pinpoint-agent-" + Version.VERSION)
-@Dependency({ "org.apache.thrift:libthrift:[0.9.2,0.9.max]", "log4j:log4j:1.2.16", "org.slf4j:slf4j-log4j12:1.7.22" })
+@Dependency({ "org.apache.thrift:libthrift:[0.10.0,)", "log4j:log4j:1.2.16", "org.slf4j:slf4j-log4j12:1.7.22" })
 public class ThriftNonblockingServerAsyncIT extends EchoTestRunner<TNonblockingServer> {
 
     @Override
diff --git a/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/it/asynchronous/ThriftThreadedSelectorServerAsyncIT.java b/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/it/asynchronous/ThriftThreadedSelectorServerAsyncIT.java
index 91ef74403d40..a4a4a7d41a81 100644
--- a/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/it/asynchronous/ThriftThreadedSelectorServerAsyncIT.java
+++ b/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/it/asynchronous/ThriftThreadedSelectorServerAsyncIT.java
@@ -33,15 +33,16 @@
 import com.navercorp.pinpoint.test.plugin.PinpointPluginTestSuite;
 
 /**
- * Integration test for TThreadedSelectorServer with asynchronous processor.
+ * <p>Integration test for TThreadedSelectorServer with asynchronous processor.</p>
  *
- * Tests against libthrift 0.9.2+ due to THRIFT-2274
+ * <p><strike>Tests against libthrift 0.9.2+ due to THRIFT-2274</strike><br/>
+ * Tests against libthrift 0.10.0+ (0.9.x -> 0.10.x introduces breaking change to generated thrift code)</p>
  * 
  * @author HyunGil Jeong
  */
 @RunWith(PinpointPluginTestSuite.class)
 @PinpointAgent("agent/target/pinpoint-agent-" + Version.VERSION)
-@Dependency({ "org.apache.thrift:libthrift:[0.9.2,0.9.max]", "log4j:log4j:1.2.16", "org.slf4j:slf4j-log4j12:1.7.22" })
+@Dependency({ "org.apache.thrift:libthrift:[0.10.0,)", "log4j:log4j:1.2.16", "org.slf4j:slf4j-log4j12:1.7.22" })
 public class ThriftThreadedSelectorServerAsyncIT extends EchoTestRunner<TThreadedSelectorServer> {
 
     @Override
diff --git a/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/it/synchronous/ThriftHalfSyncHalfAsyncServerIT.java b/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/it/synchronous/ThriftHalfSyncHalfAsyncServerIT.java
index 7cd07fca6b03..3586061edcc1 100644
--- a/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/it/synchronous/ThriftHalfSyncHalfAsyncServerIT.java
+++ b/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/it/synchronous/ThriftHalfSyncHalfAsyncServerIT.java
@@ -33,15 +33,16 @@
 import com.navercorp.pinpoint.test.plugin.PinpointPluginTestSuite;
 
 /**
- * Integration test for THsHaServer with synchronous processor.
+ * <p>Integration test for THsHaServer with synchronous processor.</p>
  *
- * Tests against libthrift 0.9.2+ due to THRIFT-2274
+ * <p><strike>Tests against libthrift 0.9.2+ due to THRIFT-2274</strike><br/>
+ * Tests against libthrift 0.10.0+ (0.9.x -> 0.10.x introduces breaking change to generated thrift code)</p>
  * 
  * @author HyunGil Jeong
  */
 @RunWith(PinpointPluginTestSuite.class)
 @PinpointAgent("agent/target/pinpoint-agent-" + Version.VERSION)
-@Dependency({ "org.apache.thrift:libthrift:[0.9.2,0.9.max]", "log4j:log4j:1.2.16", "org.slf4j:slf4j-log4j12:1.7.22" })
+@Dependency({ "org.apache.thrift:libthrift:[0.10.0,)", "log4j:log4j:1.2.16", "org.slf4j:slf4j-log4j12:1.7.22" })
 public class ThriftHalfSyncHalfAsyncServerIT extends EchoTestRunner<THsHaServer> {
 
     @Override
diff --git a/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/it/synchronous/ThriftNonblockingServerIT.java b/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/it/synchronous/ThriftNonblockingServerIT.java
index a42c5653e7bf..ee8178541fe0 100644
--- a/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/it/synchronous/ThriftNonblockingServerIT.java
+++ b/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/it/synchronous/ThriftNonblockingServerIT.java
@@ -33,15 +33,16 @@
 import com.navercorp.pinpoint.test.plugin.PinpointPluginTestSuite;
 
 /**
- * Integration test for TNonblockingServer with synchronous processor.
+ * <p>Integration test for TNonblockingServer with synchronous processor.</p>
  *
- * Tests against libthrift 0.9.2+ due to THRIFT-2274
+ * <p><strike>Tests against libthrift 0.9.2+ due to THRIFT-2274</strike>
+ * Tests against libthrift 0.10.0+ (0.9.x -> 0.10.x introduces breaking change to generated thrift code)</p>
  * 
  * @author HyunGil Jeong
  */
 @RunWith(PinpointPluginTestSuite.class)
 @PinpointAgent("agent/target/pinpoint-agent-" + Version.VERSION)
-@Dependency({ "org.apache.thrift:libthrift:[0.9.2,0.9.max]", "log4j:log4j:1.2.16", "org.slf4j:slf4j-log4j12:1.7.22" })
+@Dependency({ "org.apache.thrift:libthrift:[0.10.0,)", "log4j:log4j:1.2.16", "org.slf4j:slf4j-log4j12:1.7.22" })
 public class ThriftNonblockingServerIT extends EchoTestRunner<TNonblockingServer> {
 
     @Override
diff --git a/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/it/synchronous/ThriftThreadedSelectorServerIT.java b/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/it/synchronous/ThriftThreadedSelectorServerIT.java
index fcabe4fb69ce..a1cdd41e107a 100644
--- a/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/it/synchronous/ThriftThreadedSelectorServerIT.java
+++ b/agent/src/test/java/com/navercorp/pinpoint/plugin/thrift/it/synchronous/ThriftThreadedSelectorServerIT.java
@@ -33,15 +33,16 @@
 import com.navercorp.pinpoint.test.plugin.PinpointPluginTestSuite;
 
 /**
- * Integration test for TThreadedSelectorServer with synchronous processor.
+ * <p>Integration test for TThreadedSelectorServer with synchronous processor.</p>
  *
- * Tests against libthrift 0.9.2+ due to THRIFT-2274
+ * <p><strike>Tests against libthrift 0.9.2+ due to THRIFT-2274</strike>
+ * Tests against libthrift 0.10.0+ (0.9.x -> 0.10.x introduces breaking change to generated thrift code)</p>
  * 
  * @author HyunGil Jeong
  */
 @RunWith(PinpointPluginTestSuite.class)
 @PinpointAgent("agent/target/pinpoint-agent-" + Version.VERSION)
-@Dependency({ "org.apache.thrift:libthrift:[0.9.2,0.9.max]", "log4j:log4j:1.2.16", "org.slf4j:slf4j-log4j12:1.7.22" })
+@Dependency({ "org.apache.thrift:libthrift:[0.10.0,)", "log4j:log4j:1.2.16", "org.slf4j:slf4j-log4j12:1.7.22" })
 public class ThriftThreadedSelectorServerIT extends EchoTestRunner<TThreadedSelectorServer> {
 
     @Override