You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by dl...@apache.org on 2021/04/13 12:17:52 UTC

[accumulo] branch 1451-external-compactions-feature updated: re #2012 - modified Thrift definition, TServer, and Coordinator to pass extent on compaction completion (success or fail)

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

dlmarion pushed a commit to branch 1451-external-compactions-feature
in repository https://gitbox.apache.org/repos/asf/accumulo.git


The following commit(s) were added to refs/heads/1451-external-compactions-feature by this push:
     new 1e59587  re #2012 - modified Thrift definition, TServer, and Coordinator to pass extent on compaction completion (success or fail)
     new ed66289  Merge branch '1451-external-compactions-feature' of github.com:apache/accumulo into 1451-external-compactions-feature
1e59587 is described below

commit 1e5958724ff161e1bf9d733e1bb616deeb19a491
Author: Dave Marion <dl...@apache.org>
AuthorDate: Tue Apr 13 12:15:49 2021 +0000

    re #2012 - modified Thrift definition, TServer, and Coordinator to pass extent on compaction completion (success or fail)
---
 .../tabletserver/thrift/TabletClientService.java   | 302 ++++++++++++++++++---
 core/src/main/thrift/tabletserver.thrift           |   6 +-
 .../accumulo/coordinator/CompactionFinalizer.java  |   5 +-
 .../accumulo/tserver/ThriftClientHandler.java      |   8 +-
 .../tserver/compactions/CompactionManager.java     |  10 +-
 .../accumulo/test/performance/NullTserver.java     |   4 +-
 6 files changed, 286 insertions(+), 49 deletions(-)

diff --git a/core/src/main/java/org/apache/accumulo/core/tabletserver/thrift/TabletClientService.java b/core/src/main/java/org/apache/accumulo/core/tabletserver/thrift/TabletClientService.java
index a2d6eab..767d016 100644
--- a/core/src/main/java/org/apache/accumulo/core/tabletserver/thrift/TabletClientService.java
+++ b/core/src/main/java/org/apache/accumulo/core/tabletserver/thrift/TabletClientService.java
@@ -105,9 +105,9 @@ public class TabletClientService {
 
     public TExternalCompactionJob reserveCompactionJob(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String queueName, long priority, java.lang.String compactor, java.lang.String externalCompactionId) throws org.apache.accumulo.core.clientImpl.thrift.ThriftSecurityException, org.apache.thrift.TException;
 
-    public void compactionJobFinished(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String externalCompactionId, long fileSize, long entries) throws org.apache.thrift.TException;
+    public void compactionJobFinished(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String externalCompactionId, org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent, long fileSize, long entries) throws org.apache.thrift.TException;
 
-    public void compactionJobFailed(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String externalCompactionId) throws org.apache.thrift.TException;
+    public void compactionJobFailed(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String externalCompactionId, org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent) throws org.apache.thrift.TException;
 
     public boolean isRunningExternalCompaction(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String externalCompactionId, org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent) throws org.apache.thrift.TException;
 
@@ -191,9 +191,9 @@ public class TabletClientService {
 
     public void reserveCompactionJob(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String queueName, long priority, java.lang.String compactor, java.lang.String externalCompactionId, org.apache.thrift.async.AsyncMethodCallback<TExternalCompactionJob> resultHandler) throws org.apache.thrift.TException;
 
-    public void compactionJobFinished(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String externalCompactionId, long fileSize, long entries, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException;
+    public void compactionJobFinished(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String externalCompactionId, org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent, long fileSize, long entries, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException;
 
-    public void compactionJobFailed(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String externalCompactionId, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException;
+    public void compactionJobFailed(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String externalCompactionId, org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException;
 
     public void isRunningExternalCompaction(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String externalCompactionId, org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent, org.apache.thrift.async.AsyncMethodCallback<java.lang.Boolean> resultHandler) throws org.apache.thrift.TException;
 
@@ -1169,33 +1169,35 @@ public class TabletClientService {
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "reserveCompactionJob failed: unknown result");
     }
 
-    public void compactionJobFinished(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String externalCompactionId, long fileSize, long entries) throws org.apache.thrift.TException
+    public void compactionJobFinished(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String externalCompactionId, org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent, long fileSize, long entries) throws org.apache.thrift.TException
     {
-      send_compactionJobFinished(tinfo, credentials, externalCompactionId, fileSize, entries);
+      send_compactionJobFinished(tinfo, credentials, externalCompactionId, extent, fileSize, entries);
     }
 
-    public void send_compactionJobFinished(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String externalCompactionId, long fileSize, long entries) throws org.apache.thrift.TException
+    public void send_compactionJobFinished(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String externalCompactionId, org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent, long fileSize, long entries) throws org.apache.thrift.TException
     {
       compactionJobFinished_args args = new compactionJobFinished_args();
       args.setTinfo(tinfo);
       args.setCredentials(credentials);
       args.setExternalCompactionId(externalCompactionId);
+      args.setExtent(extent);
       args.setFileSize(fileSize);
       args.setEntries(entries);
       sendBaseOneway("compactionJobFinished", args);
     }
 
-    public void compactionJobFailed(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String externalCompactionId) throws org.apache.thrift.TException
+    public void compactionJobFailed(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String externalCompactionId, org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent) throws org.apache.thrift.TException
     {
-      send_compactionJobFailed(tinfo, credentials, externalCompactionId);
+      send_compactionJobFailed(tinfo, credentials, externalCompactionId, extent);
     }
 
-    public void send_compactionJobFailed(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String externalCompactionId) throws org.apache.thrift.TException
+    public void send_compactionJobFailed(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String externalCompactionId, org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent) throws org.apache.thrift.TException
     {
       compactionJobFailed_args args = new compactionJobFailed_args();
       args.setTinfo(tinfo);
       args.setCredentials(credentials);
       args.setExternalCompactionId(externalCompactionId);
+      args.setExtent(extent);
       sendBaseOneway("compactionJobFailed", args);
     }
 
@@ -2804,9 +2806,9 @@ public class TabletClientService {
       }
     }
 
-    public void compactionJobFinished(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String externalCompactionId, long fileSize, long entries, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException {
+    public void compactionJobFinished(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String externalCompactionId, org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent, long fileSize, long entries, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException {
       checkReady();
-      compactionJobFinished_call method_call = new compactionJobFinished_call(tinfo, credentials, externalCompactionId, fileSize, entries, resultHandler, this, ___protocolFactory, ___transport);
+      compactionJobFinished_call method_call = new compactionJobFinished_call(tinfo, credentials, externalCompactionId, extent, fileSize, entries, resultHandler, this, ___protocolFactory, ___transport);
       this.___currentMethod = method_call;
       ___manager.call(method_call);
     }
@@ -2815,13 +2817,15 @@ public class TabletClientService {
       private org.apache.accumulo.core.trace.thrift.TInfo tinfo;
       private org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials;
       private java.lang.String externalCompactionId;
+      private org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent;
       private long fileSize;
       private long entries;
-      public compactionJobFinished_call(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String externalCompactionId, long fileSize, long entries, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+      public compactionJobFinished_call(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String externalCompactionId, org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent, long fileSize, long entries, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNo [...]
         super(client, protocolFactory, transport, resultHandler, true);
         this.tinfo = tinfo;
         this.credentials = credentials;
         this.externalCompactionId = externalCompactionId;
+        this.extent = extent;
         this.fileSize = fileSize;
         this.entries = entries;
       }
@@ -2832,6 +2836,7 @@ public class TabletClientService {
         args.setTinfo(tinfo);
         args.setCredentials(credentials);
         args.setExternalCompactionId(externalCompactionId);
+        args.setExtent(extent);
         args.setFileSize(fileSize);
         args.setEntries(entries);
         args.write(prot);
@@ -2848,9 +2853,9 @@ public class TabletClientService {
       }
     }
 
-    public void compactionJobFailed(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String externalCompactionId, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException {
+    public void compactionJobFailed(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String externalCompactionId, org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException {
       checkReady();
-      compactionJobFailed_call method_call = new compactionJobFailed_call(tinfo, credentials, externalCompactionId, resultHandler, this, ___protocolFactory, ___transport);
+      compactionJobFailed_call method_call = new compactionJobFailed_call(tinfo, credentials, externalCompactionId, extent, resultHandler, this, ___protocolFactory, ___transport);
       this.___currentMethod = method_call;
       ___manager.call(method_call);
     }
@@ -2859,11 +2864,13 @@ public class TabletClientService {
       private org.apache.accumulo.core.trace.thrift.TInfo tinfo;
       private org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials;
       private java.lang.String externalCompactionId;
-      public compactionJobFailed_call(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String externalCompactionId, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+      private org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent;
+      public compactionJobFailed_call(org.apache.accumulo.core.trace.thrift.TInfo tinfo, org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials, java.lang.String externalCompactionId, org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) t [...]
         super(client, protocolFactory, transport, resultHandler, true);
         this.tinfo = tinfo;
         this.credentials = credentials;
         this.externalCompactionId = externalCompactionId;
+        this.extent = extent;
       }
 
       public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
@@ -2872,6 +2879,7 @@ public class TabletClientService {
         args.setTinfo(tinfo);
         args.setCredentials(credentials);
         args.setExternalCompactionId(externalCompactionId);
+        args.setExtent(extent);
         args.write(prot);
         prot.writeMessageEnd();
       }
@@ -4062,7 +4070,7 @@ public class TabletClientService {
       }
 
       public org.apache.thrift.TBase getResult(I iface, compactionJobFinished_args args) throws org.apache.thrift.TException {
-        iface.compactionJobFinished(args.tinfo, args.credentials, args.externalCompactionId, args.fileSize, args.entries);
+        iface.compactionJobFinished(args.tinfo, args.credentials, args.externalCompactionId, args.extent, args.fileSize, args.entries);
         return null;
       }
     }
@@ -4086,7 +4094,7 @@ public class TabletClientService {
       }
 
       public org.apache.thrift.TBase getResult(I iface, compactionJobFailed_args args) throws org.apache.thrift.TException {
-        iface.compactionJobFailed(args.tinfo, args.credentials, args.externalCompactionId);
+        iface.compactionJobFailed(args.tinfo, args.credentials, args.externalCompactionId, args.extent);
         return null;
       }
     }
@@ -6338,7 +6346,7 @@ public class TabletClientService {
       }
 
       public void start(I iface, compactionJobFinished_args args, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException {
-        iface.compactionJobFinished(args.tinfo, args.credentials, args.externalCompactionId, args.fileSize, args.entries,resultHandler);
+        iface.compactionJobFinished(args.tinfo, args.credentials, args.externalCompactionId, args.extent, args.fileSize, args.entries,resultHandler);
       }
     }
 
@@ -6372,7 +6380,7 @@ public class TabletClientService {
       }
 
       public void start(I iface, compactionJobFailed_args args, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws org.apache.thrift.TException {
-        iface.compactionJobFailed(args.tinfo, args.credentials, args.externalCompactionId,resultHandler);
+        iface.compactionJobFailed(args.tinfo, args.credentials, args.externalCompactionId, args.extent,resultHandler);
       }
     }
 
@@ -47515,8 +47523,9 @@ public class TabletClientService {
     private static final org.apache.thrift.protocol.TField TINFO_FIELD_DESC = new org.apache.thrift.protocol.TField("tinfo", org.apache.thrift.protocol.TType.STRUCT, (short)1);
     private static final org.apache.thrift.protocol.TField CREDENTIALS_FIELD_DESC = new org.apache.thrift.protocol.TField("credentials", org.apache.thrift.protocol.TType.STRUCT, (short)2);
     private static final org.apache.thrift.protocol.TField EXTERNAL_COMPACTION_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("externalCompactionId", org.apache.thrift.protocol.TType.STRING, (short)3);
-    private static final org.apache.thrift.protocol.TField FILE_SIZE_FIELD_DESC = new org.apache.thrift.protocol.TField("fileSize", org.apache.thrift.protocol.TType.I64, (short)4);
-    private static final org.apache.thrift.protocol.TField ENTRIES_FIELD_DESC = new org.apache.thrift.protocol.TField("entries", org.apache.thrift.protocol.TType.I64, (short)5);
+    private static final org.apache.thrift.protocol.TField EXTENT_FIELD_DESC = new org.apache.thrift.protocol.TField("extent", org.apache.thrift.protocol.TType.STRUCT, (short)4);
+    private static final org.apache.thrift.protocol.TField FILE_SIZE_FIELD_DESC = new org.apache.thrift.protocol.TField("fileSize", org.apache.thrift.protocol.TType.I64, (short)5);
+    private static final org.apache.thrift.protocol.TField ENTRIES_FIELD_DESC = new org.apache.thrift.protocol.TField("entries", org.apache.thrift.protocol.TType.I64, (short)6);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new compactionJobFinished_argsStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new compactionJobFinished_argsTupleSchemeFactory();
@@ -47524,6 +47533,7 @@ public class TabletClientService {
     public @org.apache.thrift.annotation.Nullable org.apache.accumulo.core.trace.thrift.TInfo tinfo; // required
     public @org.apache.thrift.annotation.Nullable org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials; // required
     public @org.apache.thrift.annotation.Nullable java.lang.String externalCompactionId; // required
+    public @org.apache.thrift.annotation.Nullable org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent; // required
     public long fileSize; // required
     public long entries; // required
 
@@ -47532,8 +47542,9 @@ public class TabletClientService {
       TINFO((short)1, "tinfo"),
       CREDENTIALS((short)2, "credentials"),
       EXTERNAL_COMPACTION_ID((short)3, "externalCompactionId"),
-      FILE_SIZE((short)4, "fileSize"),
-      ENTRIES((short)5, "entries");
+      EXTENT((short)4, "extent"),
+      FILE_SIZE((short)5, "fileSize"),
+      ENTRIES((short)6, "entries");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -47555,9 +47566,11 @@ public class TabletClientService {
             return CREDENTIALS;
           case 3: // EXTERNAL_COMPACTION_ID
             return EXTERNAL_COMPACTION_ID;
-          case 4: // FILE_SIZE
+          case 4: // EXTENT
+            return EXTENT;
+          case 5: // FILE_SIZE
             return FILE_SIZE;
-          case 5: // ENTRIES
+          case 6: // ENTRIES
             return ENTRIES;
           default:
             return null;
@@ -47612,6 +47625,8 @@ public class TabletClientService {
           new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.accumulo.core.securityImpl.thrift.TCredentials.class)));
       tmpMap.put(_Fields.EXTERNAL_COMPACTION_ID, new org.apache.thrift.meta_data.FieldMetaData("externalCompactionId", org.apache.thrift.TFieldRequirementType.DEFAULT, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+      tmpMap.put(_Fields.EXTENT, new org.apache.thrift.meta_data.FieldMetaData("extent", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.accumulo.core.dataImpl.thrift.TKeyExtent.class)));
       tmpMap.put(_Fields.FILE_SIZE, new org.apache.thrift.meta_data.FieldMetaData("fileSize", org.apache.thrift.TFieldRequirementType.DEFAULT, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I64)));
       tmpMap.put(_Fields.ENTRIES, new org.apache.thrift.meta_data.FieldMetaData("entries", org.apache.thrift.TFieldRequirementType.DEFAULT, 
@@ -47627,6 +47642,7 @@ public class TabletClientService {
       org.apache.accumulo.core.trace.thrift.TInfo tinfo,
       org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials,
       java.lang.String externalCompactionId,
+      org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent,
       long fileSize,
       long entries)
     {
@@ -47634,6 +47650,7 @@ public class TabletClientService {
       this.tinfo = tinfo;
       this.credentials = credentials;
       this.externalCompactionId = externalCompactionId;
+      this.extent = extent;
       this.fileSize = fileSize;
       setFileSizeIsSet(true);
       this.entries = entries;
@@ -47654,6 +47671,9 @@ public class TabletClientService {
       if (other.isSetExternalCompactionId()) {
         this.externalCompactionId = other.externalCompactionId;
       }
+      if (other.isSetExtent()) {
+        this.extent = new org.apache.accumulo.core.dataImpl.thrift.TKeyExtent(other.extent);
+      }
       this.fileSize = other.fileSize;
       this.entries = other.entries;
     }
@@ -47667,6 +47687,7 @@ public class TabletClientService {
       this.tinfo = null;
       this.credentials = null;
       this.externalCompactionId = null;
+      this.extent = null;
       setFileSizeIsSet(false);
       this.fileSize = 0;
       setEntriesIsSet(false);
@@ -47748,6 +47769,31 @@ public class TabletClientService {
       }
     }
 
+    @org.apache.thrift.annotation.Nullable
+    public org.apache.accumulo.core.dataImpl.thrift.TKeyExtent getExtent() {
+      return this.extent;
+    }
+
+    public compactionJobFinished_args setExtent(@org.apache.thrift.annotation.Nullable org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent) {
+      this.extent = extent;
+      return this;
+    }
+
+    public void unsetExtent() {
+      this.extent = null;
+    }
+
+    /** Returns true if field extent is set (has been assigned a value) and false otherwise */
+    public boolean isSetExtent() {
+      return this.extent != null;
+    }
+
+    public void setExtentIsSet(boolean value) {
+      if (!value) {
+        this.extent = null;
+      }
+    }
+
     public long getFileSize() {
       return this.fileSize;
     }
@@ -47820,6 +47866,14 @@ public class TabletClientService {
         }
         break;
 
+      case EXTENT:
+        if (value == null) {
+          unsetExtent();
+        } else {
+          setExtent((org.apache.accumulo.core.dataImpl.thrift.TKeyExtent)value);
+        }
+        break;
+
       case FILE_SIZE:
         if (value == null) {
           unsetFileSize();
@@ -47851,6 +47905,9 @@ public class TabletClientService {
       case EXTERNAL_COMPACTION_ID:
         return getExternalCompactionId();
 
+      case EXTENT:
+        return getExtent();
+
       case FILE_SIZE:
         return getFileSize();
 
@@ -47874,6 +47931,8 @@ public class TabletClientService {
         return isSetCredentials();
       case EXTERNAL_COMPACTION_ID:
         return isSetExternalCompactionId();
+      case EXTENT:
+        return isSetExtent();
       case FILE_SIZE:
         return isSetFileSize();
       case ENTRIES:
@@ -47924,6 +47983,15 @@ public class TabletClientService {
           return false;
       }
 
+      boolean this_present_extent = true && this.isSetExtent();
+      boolean that_present_extent = true && that.isSetExtent();
+      if (this_present_extent || that_present_extent) {
+        if (!(this_present_extent && that_present_extent))
+          return false;
+        if (!this.extent.equals(that.extent))
+          return false;
+      }
+
       boolean this_present_fileSize = true;
       boolean that_present_fileSize = true;
       if (this_present_fileSize || that_present_fileSize) {
@@ -47961,6 +48029,10 @@ public class TabletClientService {
       if (isSetExternalCompactionId())
         hashCode = hashCode * 8191 + externalCompactionId.hashCode();
 
+      hashCode = hashCode * 8191 + ((isSetExtent()) ? 131071 : 524287);
+      if (isSetExtent())
+        hashCode = hashCode * 8191 + extent.hashCode();
+
       hashCode = hashCode * 8191 + org.apache.thrift.TBaseHelper.hashCode(fileSize);
 
       hashCode = hashCode * 8191 + org.apache.thrift.TBaseHelper.hashCode(entries);
@@ -48006,6 +48078,16 @@ public class TabletClientService {
           return lastComparison;
         }
       }
+      lastComparison = java.lang.Boolean.valueOf(isSetExtent()).compareTo(other.isSetExtent());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetExtent()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.extent, other.extent);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       lastComparison = java.lang.Boolean.valueOf(isSetFileSize()).compareTo(other.isSetFileSize());
       if (lastComparison != 0) {
         return lastComparison;
@@ -48071,6 +48153,14 @@ public class TabletClientService {
       }
       first = false;
       if (!first) sb.append(", ");
+      sb.append("extent:");
+      if (this.extent == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.extent);
+      }
+      first = false;
+      if (!first) sb.append(", ");
       sb.append("fileSize:");
       sb.append(this.fileSize);
       first = false;
@@ -48091,6 +48181,9 @@ public class TabletClientService {
       if (credentials != null) {
         credentials.validate();
       }
+      if (extent != null) {
+        extent.validate();
+      }
     }
 
     private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
@@ -48155,7 +48248,16 @@ public class TabletClientService {
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 4: // FILE_SIZE
+            case 4: // EXTENT
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.extent = new org.apache.accumulo.core.dataImpl.thrift.TKeyExtent();
+                struct.extent.read(iprot);
+                struct.setExtentIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
+            case 5: // FILE_SIZE
               if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
                 struct.fileSize = iprot.readI64();
                 struct.setFileSizeIsSet(true);
@@ -48163,7 +48265,7 @@ public class TabletClientService {
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
-            case 5: // ENTRIES
+            case 6: // ENTRIES
               if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
                 struct.entries = iprot.readI64();
                 struct.setEntriesIsSet(true);
@@ -48201,6 +48303,11 @@ public class TabletClientService {
           oprot.writeString(struct.externalCompactionId);
           oprot.writeFieldEnd();
         }
+        if (struct.extent != null) {
+          oprot.writeFieldBegin(EXTENT_FIELD_DESC);
+          struct.extent.write(oprot);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldBegin(FILE_SIZE_FIELD_DESC);
         oprot.writeI64(struct.fileSize);
         oprot.writeFieldEnd();
@@ -48234,13 +48341,16 @@ public class TabletClientService {
         if (struct.isSetExternalCompactionId()) {
           optionals.set(2);
         }
-        if (struct.isSetFileSize()) {
+        if (struct.isSetExtent()) {
           optionals.set(3);
         }
-        if (struct.isSetEntries()) {
+        if (struct.isSetFileSize()) {
           optionals.set(4);
         }
-        oprot.writeBitSet(optionals, 5);
+        if (struct.isSetEntries()) {
+          optionals.set(5);
+        }
+        oprot.writeBitSet(optionals, 6);
         if (struct.isSetTinfo()) {
           struct.tinfo.write(oprot);
         }
@@ -48250,6 +48360,9 @@ public class TabletClientService {
         if (struct.isSetExternalCompactionId()) {
           oprot.writeString(struct.externalCompactionId);
         }
+        if (struct.isSetExtent()) {
+          struct.extent.write(oprot);
+        }
         if (struct.isSetFileSize()) {
           oprot.writeI64(struct.fileSize);
         }
@@ -48261,7 +48374,7 @@ public class TabletClientService {
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, compactionJobFinished_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(5);
+        java.util.BitSet incoming = iprot.readBitSet(6);
         if (incoming.get(0)) {
           struct.tinfo = new org.apache.accumulo.core.trace.thrift.TInfo();
           struct.tinfo.read(iprot);
@@ -48277,10 +48390,15 @@ public class TabletClientService {
           struct.setExternalCompactionIdIsSet(true);
         }
         if (incoming.get(3)) {
+          struct.extent = new org.apache.accumulo.core.dataImpl.thrift.TKeyExtent();
+          struct.extent.read(iprot);
+          struct.setExtentIsSet(true);
+        }
+        if (incoming.get(4)) {
           struct.fileSize = iprot.readI64();
           struct.setFileSizeIsSet(true);
         }
-        if (incoming.get(4)) {
+        if (incoming.get(5)) {
           struct.entries = iprot.readI64();
           struct.setEntriesIsSet(true);
         }
@@ -48298,6 +48416,7 @@ public class TabletClientService {
     private static final org.apache.thrift.protocol.TField TINFO_FIELD_DESC = new org.apache.thrift.protocol.TField("tinfo", org.apache.thrift.protocol.TType.STRUCT, (short)1);
     private static final org.apache.thrift.protocol.TField CREDENTIALS_FIELD_DESC = new org.apache.thrift.protocol.TField("credentials", org.apache.thrift.protocol.TType.STRUCT, (short)2);
     private static final org.apache.thrift.protocol.TField EXTERNAL_COMPACTION_ID_FIELD_DESC = new org.apache.thrift.protocol.TField("externalCompactionId", org.apache.thrift.protocol.TType.STRING, (short)3);
+    private static final org.apache.thrift.protocol.TField EXTENT_FIELD_DESC = new org.apache.thrift.protocol.TField("extent", org.apache.thrift.protocol.TType.STRUCT, (short)4);
 
     private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new compactionJobFailed_argsStandardSchemeFactory();
     private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new compactionJobFailed_argsTupleSchemeFactory();
@@ -48305,12 +48424,14 @@ public class TabletClientService {
     public @org.apache.thrift.annotation.Nullable org.apache.accumulo.core.trace.thrift.TInfo tinfo; // required
     public @org.apache.thrift.annotation.Nullable org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials; // required
     public @org.apache.thrift.annotation.Nullable java.lang.String externalCompactionId; // required
+    public @org.apache.thrift.annotation.Nullable org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent; // 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 {
       TINFO((short)1, "tinfo"),
       CREDENTIALS((short)2, "credentials"),
-      EXTERNAL_COMPACTION_ID((short)3, "externalCompactionId");
+      EXTERNAL_COMPACTION_ID((short)3, "externalCompactionId"),
+      EXTENT((short)4, "extent");
 
       private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -48332,6 +48453,8 @@ public class TabletClientService {
             return CREDENTIALS;
           case 3: // EXTERNAL_COMPACTION_ID
             return EXTERNAL_COMPACTION_ID;
+          case 4: // EXTENT
+            return EXTENT;
           default:
             return null;
         }
@@ -48382,6 +48505,8 @@ public class TabletClientService {
           new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.accumulo.core.securityImpl.thrift.TCredentials.class)));
       tmpMap.put(_Fields.EXTERNAL_COMPACTION_ID, new org.apache.thrift.meta_data.FieldMetaData("externalCompactionId", org.apache.thrift.TFieldRequirementType.DEFAULT, 
           new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
+      tmpMap.put(_Fields.EXTENT, new org.apache.thrift.meta_data.FieldMetaData("extent", org.apache.thrift.TFieldRequirementType.DEFAULT, 
+          new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.accumulo.core.dataImpl.thrift.TKeyExtent.class)));
       metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
       org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(compactionJobFailed_args.class, metaDataMap);
     }
@@ -48392,12 +48517,14 @@ public class TabletClientService {
     public compactionJobFailed_args(
       org.apache.accumulo.core.trace.thrift.TInfo tinfo,
       org.apache.accumulo.core.securityImpl.thrift.TCredentials credentials,
-      java.lang.String externalCompactionId)
+      java.lang.String externalCompactionId,
+      org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent)
     {
       this();
       this.tinfo = tinfo;
       this.credentials = credentials;
       this.externalCompactionId = externalCompactionId;
+      this.extent = extent;
     }
 
     /**
@@ -48413,6 +48540,9 @@ public class TabletClientService {
       if (other.isSetExternalCompactionId()) {
         this.externalCompactionId = other.externalCompactionId;
       }
+      if (other.isSetExtent()) {
+        this.extent = new org.apache.accumulo.core.dataImpl.thrift.TKeyExtent(other.extent);
+      }
     }
 
     public compactionJobFailed_args deepCopy() {
@@ -48424,6 +48554,7 @@ public class TabletClientService {
       this.tinfo = null;
       this.credentials = null;
       this.externalCompactionId = null;
+      this.extent = null;
     }
 
     @org.apache.thrift.annotation.Nullable
@@ -48501,6 +48632,31 @@ public class TabletClientService {
       }
     }
 
+    @org.apache.thrift.annotation.Nullable
+    public org.apache.accumulo.core.dataImpl.thrift.TKeyExtent getExtent() {
+      return this.extent;
+    }
+
+    public compactionJobFailed_args setExtent(@org.apache.thrift.annotation.Nullable org.apache.accumulo.core.dataImpl.thrift.TKeyExtent extent) {
+      this.extent = extent;
+      return this;
+    }
+
+    public void unsetExtent() {
+      this.extent = null;
+    }
+
+    /** Returns true if field extent is set (has been assigned a value) and false otherwise */
+    public boolean isSetExtent() {
+      return this.extent != null;
+    }
+
+    public void setExtentIsSet(boolean value) {
+      if (!value) {
+        this.extent = null;
+      }
+    }
+
     public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) {
       switch (field) {
       case TINFO:
@@ -48527,6 +48683,14 @@ public class TabletClientService {
         }
         break;
 
+      case EXTENT:
+        if (value == null) {
+          unsetExtent();
+        } else {
+          setExtent((org.apache.accumulo.core.dataImpl.thrift.TKeyExtent)value);
+        }
+        break;
+
       }
     }
 
@@ -48542,6 +48706,9 @@ public class TabletClientService {
       case EXTERNAL_COMPACTION_ID:
         return getExternalCompactionId();
 
+      case EXTENT:
+        return getExtent();
+
       }
       throw new java.lang.IllegalStateException();
     }
@@ -48559,6 +48726,8 @@ public class TabletClientService {
         return isSetCredentials();
       case EXTERNAL_COMPACTION_ID:
         return isSetExternalCompactionId();
+      case EXTENT:
+        return isSetExtent();
       }
       throw new java.lang.IllegalStateException();
     }
@@ -48605,6 +48774,15 @@ public class TabletClientService {
           return false;
       }
 
+      boolean this_present_extent = true && this.isSetExtent();
+      boolean that_present_extent = true && that.isSetExtent();
+      if (this_present_extent || that_present_extent) {
+        if (!(this_present_extent && that_present_extent))
+          return false;
+        if (!this.extent.equals(that.extent))
+          return false;
+      }
+
       return true;
     }
 
@@ -48624,6 +48802,10 @@ public class TabletClientService {
       if (isSetExternalCompactionId())
         hashCode = hashCode * 8191 + externalCompactionId.hashCode();
 
+      hashCode = hashCode * 8191 + ((isSetExtent()) ? 131071 : 524287);
+      if (isSetExtent())
+        hashCode = hashCode * 8191 + extent.hashCode();
+
       return hashCode;
     }
 
@@ -48665,6 +48847,16 @@ public class TabletClientService {
           return lastComparison;
         }
       }
+      lastComparison = java.lang.Boolean.valueOf(isSetExtent()).compareTo(other.isSetExtent());
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+      if (isSetExtent()) {
+        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.extent, other.extent);
+        if (lastComparison != 0) {
+          return lastComparison;
+        }
+      }
       return 0;
     }
 
@@ -48709,6 +48901,14 @@ public class TabletClientService {
         sb.append(this.externalCompactionId);
       }
       first = false;
+      if (!first) sb.append(", ");
+      sb.append("extent:");
+      if (this.extent == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.extent);
+      }
+      first = false;
       sb.append(")");
       return sb.toString();
     }
@@ -48722,6 +48922,9 @@ public class TabletClientService {
       if (credentials != null) {
         credentials.validate();
       }
+      if (extent != null) {
+        extent.validate();
+      }
     }
 
     private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
@@ -48784,6 +48987,15 @@ public class TabletClientService {
                 org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
               }
               break;
+            case 4: // EXTENT
+              if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) {
+                struct.extent = new org.apache.accumulo.core.dataImpl.thrift.TKeyExtent();
+                struct.extent.read(iprot);
+                struct.setExtentIsSet(true);
+              } else { 
+                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+              }
+              break;
             default:
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
           }
@@ -48814,6 +49026,11 @@ public class TabletClientService {
           oprot.writeString(struct.externalCompactionId);
           oprot.writeFieldEnd();
         }
+        if (struct.extent != null) {
+          oprot.writeFieldBegin(EXTENT_FIELD_DESC);
+          struct.extent.write(oprot);
+          oprot.writeFieldEnd();
+        }
         oprot.writeFieldStop();
         oprot.writeStructEnd();
       }
@@ -48841,7 +49058,10 @@ public class TabletClientService {
         if (struct.isSetExternalCompactionId()) {
           optionals.set(2);
         }
-        oprot.writeBitSet(optionals, 3);
+        if (struct.isSetExtent()) {
+          optionals.set(3);
+        }
+        oprot.writeBitSet(optionals, 4);
         if (struct.isSetTinfo()) {
           struct.tinfo.write(oprot);
         }
@@ -48851,12 +49071,15 @@ public class TabletClientService {
         if (struct.isSetExternalCompactionId()) {
           oprot.writeString(struct.externalCompactionId);
         }
+        if (struct.isSetExtent()) {
+          struct.extent.write(oprot);
+        }
       }
 
       @Override
       public void read(org.apache.thrift.protocol.TProtocol prot, compactionJobFailed_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(3);
+        java.util.BitSet incoming = iprot.readBitSet(4);
         if (incoming.get(0)) {
           struct.tinfo = new org.apache.accumulo.core.trace.thrift.TInfo();
           struct.tinfo.read(iprot);
@@ -48871,6 +49094,11 @@ public class TabletClientService {
           struct.externalCompactionId = iprot.readString();
           struct.setExternalCompactionIdIsSet(true);
         }
+        if (incoming.get(3)) {
+          struct.extent = new org.apache.accumulo.core.dataImpl.thrift.TKeyExtent();
+          struct.extent.read(iprot);
+          struct.setExtentIsSet(true);
+        }
       }
     }
 
diff --git a/core/src/main/thrift/tabletserver.thrift b/core/src/main/thrift/tabletserver.thrift
index 708962d..8c86917 100644
--- a/core/src/main/thrift/tabletserver.thrift
+++ b/core/src/main/thrift/tabletserver.thrift
@@ -540,14 +540,16 @@ service TabletClientService extends client.ClientService {
     1:trace.TInfo tinfo
     2:security.TCredentials credentials
     3:string externalCompactionId
-    4:i64 fileSize
-    5:i64 entries
+    4:data.TKeyExtent extent
+    5:i64 fileSize
+    6:i64 entries
   )
 
   oneway void compactionJobFailed(
     1:trace.TInfo tinfo
     2:security.TCredentials credentials
     3:string externalCompactionId
+    4:data.TKeyExtent extent
   )
   
   bool isRunningExternalCompaction(
diff --git a/server/compaction-coordinator/src/main/java/org/apache/accumulo/coordinator/CompactionFinalizer.java b/server/compaction-coordinator/src/main/java/org/apache/accumulo/coordinator/CompactionFinalizer.java
index 1b6c6b2..348ab43 100644
--- a/server/compaction-coordinator/src/main/java/org/apache/accumulo/coordinator/CompactionFinalizer.java
+++ b/server/compaction-coordinator/src/main/java/org/apache/accumulo/coordinator/CompactionFinalizer.java
@@ -114,11 +114,12 @@ public class CompactionFinalizer {
       if (ecfs.getFinalState() == FinalState.FINISHED) {
         LOG.info("Notifying tserver {} that compaction {} has finished.", loc, ecfs);
         client.compactionJobFinished(TraceUtil.traceInfo(), context.rpcCreds(),
-            ecfs.getExternalCompactionId().canonical(), ecfs.getFileSize(), ecfs.getEntries());
+            ecfs.getExternalCompactionId().canonical(), ecfs.getExtent().toThrift(),
+            ecfs.getFileSize(), ecfs.getEntries());
       } else if (ecfs.getFinalState() == FinalState.FAILED) {
         LOG.info("Notifying tserver {} that compaction {} has failed.", loc, ecfs);
         client.compactionJobFailed(TraceUtil.traceInfo(), context.rpcCreds(),
-            ecfs.getExternalCompactionId().canonical());
+            ecfs.getExternalCompactionId().canonical(), ecfs.getExtent().toThrift());
       } else {
         throw new IllegalArgumentException(ecfs.getFinalState().name());
       }
diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/ThriftClientHandler.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/ThriftClientHandler.java
index 31e36e6..abb9968 100644
--- a/server/tserver/src/main/java/org/apache/accumulo/tserver/ThriftClientHandler.java
+++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/ThriftClientHandler.java
@@ -1694,7 +1694,7 @@ class ThriftClientHandler extends ClientServiceHandler implements TabletClientSe
 
   @Override
   public void compactionJobFinished(TInfo tinfo, TCredentials credentials,
-      String externalCompactionId, long fileSize, long entries)
+      String externalCompactionId, TKeyExtent extent, long fileSize, long entries)
       throws ThriftSecurityException, TException {
 
     if (!security.canPerformSystemActions(credentials)) {
@@ -1703,20 +1703,20 @@ class ThriftClientHandler extends ClientServiceHandler implements TabletClientSe
     }
 
     server.getCompactionManager().commitExternalCompaction(
-        ExternalCompactionId.of(externalCompactionId), server.getOnlineTablets(), fileSize,
+        ExternalCompactionId.of(externalCompactionId), extent, server.getOnlineTablets(), fileSize,
         entries);
   }
 
   @Override
   public void compactionJobFailed(TInfo tinfo, TCredentials credentials,
-      String externalCompactionId) throws TException {
+      String externalCompactionId, TKeyExtent extent) throws TException {
     if (!security.canPerformSystemActions(credentials)) {
       throw new AccumuloSecurityException(credentials.getPrincipal(),
           SecurityErrorCode.PERMISSION_DENIED).asThriftException();
     }
 
     server.getCompactionManager().externalCompactionFailed(
-        ExternalCompactionId.of(externalCompactionId), server.getOnlineTablets());
+        ExternalCompactionId.of(externalCompactionId), extent, server.getOnlineTablets());
   }
 
   @Override
diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/compactions/CompactionManager.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/compactions/CompactionManager.java
index e4a5596..44f0ccf 100644
--- a/server/tserver/src/main/java/org/apache/accumulo/tserver/compactions/CompactionManager.java
+++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/compactions/CompactionManager.java
@@ -33,6 +33,7 @@ import org.apache.accumulo.core.conf.AccumuloConfiguration;
 import org.apache.accumulo.core.conf.ConfigurationTypeHelper;
 import org.apache.accumulo.core.conf.Property;
 import org.apache.accumulo.core.dataImpl.KeyExtent;
+import org.apache.accumulo.core.dataImpl.thrift.TKeyExtent;
 import org.apache.accumulo.core.metadata.schema.ExternalCompactionId;
 import org.apache.accumulo.core.spi.compaction.CompactionExecutorId;
 import org.apache.accumulo.core.spi.compaction.CompactionKind;
@@ -446,8 +447,11 @@ public class CompactionManager {
   }
 
   public void commitExternalCompaction(ExternalCompactionId extCompactionId,
-      Map<KeyExtent,Tablet> currentTablets, long fileSize, long entries) {
+      TKeyExtent extentCompacted, Map<KeyExtent,Tablet> currentTablets, long fileSize,
+      long entries) {
     KeyExtent extent = runningExternalCompactions.get(extCompactionId);
+    // CBUG Use extentCompacted to perform additional validation that the extent has not
+    // merged, split, or otherwise changed.
     if (extent != null) {
       Tablet tablet = currentTablets.get(extent);
       if (tablet != null) {
@@ -465,8 +469,10 @@ public class CompactionManager {
     return (null != extent && extent.compareTo(ke) == 0);
   }
 
-  public void externalCompactionFailed(ExternalCompactionId ecid,
+  public void externalCompactionFailed(ExternalCompactionId ecid, TKeyExtent extentCompacted,
       Map<KeyExtent,Tablet> currentTablets) {
+    // CBUG Use extentCompacted to perform additional validation that the extent has not
+    // merged, split, or otherwise changed.
     KeyExtent extent = runningExternalCompactions.get(ecid);
     if (extent != null) {
       Tablet tablet = currentTablets.get(extent);
diff --git a/test/src/main/java/org/apache/accumulo/test/performance/NullTserver.java b/test/src/main/java/org/apache/accumulo/test/performance/NullTserver.java
index 71d5f49..9abb4b0 100644
--- a/test/src/main/java/org/apache/accumulo/test/performance/NullTserver.java
+++ b/test/src/main/java/org/apache/accumulo/test/performance/NullTserver.java
@@ -298,7 +298,7 @@ public class NullTserver {
 
     @Override
     public void compactionJobFinished(TInfo tinfo, TCredentials credentials,
-        String externalCompactionId, long fileSize, long entries)
+        String externalCompactionId, TKeyExtent extent, long fileSize, long entries)
         throws ThriftSecurityException, TException {
       // TODO Auto-generated method stub
 
@@ -306,7 +306,7 @@ public class NullTserver {
 
     @Override
     public void compactionJobFailed(TInfo tinfo, TCredentials credentials,
-        String externalCompactionId) throws TException {
+        String externalCompactionId, TKeyExtent extent) throws TException {
       // TODO Auto-generated method stub
 
     }