Add stats to new Compactable classes. Fixes #1930 (#1937)

* Also fix split stats in the monitor
diff --git a/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/tservers/TabletServerResource.java b/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/tservers/TabletServerResource.java
index a6fa3b7..0cb87b6 100644
--- a/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/tservers/TabletServerResource.java
+++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/rest/tservers/TabletServerResource.java
@@ -222,7 +222,7 @@
     majorStdDev = stddev(total.majors.elapsed, total.majors.num, total.majors.sumDev);
     majorQueueStdDev = stddev(total.majors.queueTime, total.majors.num, total.majors.queueSumDev);
     splitStdDev =
-        stddev(historical.splits.num, historical.splits.elapsed, historical.splits.sumDev);
+        stddev(historical.splits.elapsed, historical.splits.num, historical.splits.sumDev);
 
     TabletServerDetailInformation details = doDetails(tsStats.size());
 
diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/compactions/Compactable.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/compactions/Compactable.java
index 76b5f6b..3469a8c 100644
--- a/server/tserver/src/main/java/org/apache/accumulo/tserver/compactions/Compactable.java
+++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/compactions/Compactable.java
@@ -83,7 +83,7 @@
   Optional<Files> getFiles(CompactionServiceId service, CompactionKind kind);
 
   void compact(CompactionServiceId service, CompactionJob job, RateLimiter readLimiter,
-      RateLimiter writeLimiter);
+      RateLimiter writeLimiter, long queuedTime);
 
   CompactionServiceId getConfiguredService(CompactionKind kind);
 
diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/compactions/CompactionExecutor.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/compactions/CompactionExecutor.java
index 21cf147..2346cd8 100644
--- a/server/tserver/src/main/java/org/apache/accumulo/tserver/compactions/CompactionExecutor.java
+++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/compactions/CompactionExecutor.java
@@ -69,6 +69,7 @@
     private Compactable compactable;
     private CompactionServiceId csid;
     private Consumer<Compactable> completionCallback;
+    private final long queuedTime;
 
     public CompactionTask(CompactionJob job, Compactable compactable, CompactionServiceId csid,
         Consumer<Compactable> completionCallback) {
@@ -77,6 +78,7 @@
       this.csid = csid;
       this.completionCallback = completionCallback;
       queuedTask.add(this);
+      queuedTime = System.currentTimeMillis();
     }
 
     @Override
@@ -85,7 +87,7 @@
       try {
         if (status.compareAndSet(Status.QUEUED, Status.RUNNING)) {
           queuedTask.remove(this);
-          compactable.compact(csid, getJob(), readLimiter, writeLimiter);
+          compactable.compact(csid, getJob(), readLimiter, writeLimiter, queuedTime);
           completionCallback.accept(compactable);
         }
       } catch (Exception e) {
@@ -134,7 +136,6 @@
 
       return canceled;
     }
-
   }
 
   private static CompactionJob getJob(Runnable r) {
diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/CompactableImpl.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/CompactableImpl.java
index a6ca747..d0d8669 100644
--- a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/CompactableImpl.java
+++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/CompactableImpl.java
@@ -18,6 +18,8 @@
  */
 package org.apache.accumulo.tserver.tablet;
 
+import static org.apache.accumulo.tserver.TabletStatsKeeper.Operation.MAJOR;
+
 import java.io.IOException;
 import java.io.UncheckedIOException;
 import java.util.Collection;
@@ -539,7 +541,7 @@
 
   @Override
   public void compact(CompactionServiceId service, CompactionJob job, RateLimiter readLimiter,
-      RateLimiter writeLimiter) {
+      RateLimiter writeLimiter, long queuedTime) {
 
     Set<StoredTabletFile> jobFiles = job.getFiles().stream()
         .map(cf -> ((CompactableFileImpl) cf).getStortedTabletFile()).collect(Collectors.toSet());
@@ -641,13 +643,17 @@
     }
 
     StoredTabletFile metaFile = null;
+    long startTime = System.currentTimeMillis();
+    // create an empty stats object to be populated by CompactableUtils.compact()
+    CompactionStats stats = new CompactionStats();
     try {
 
       TabletLogger.compacting(getExtent(), job, localCompactionCfg);
+      tablet.incrementStatusMajor();
 
       metaFile = CompactableUtils.compact(tablet, job, jobFiles, compactionId, propogateDeletes,
           localHelper, iters, new CompactionCheck(service, job.getKind(), checkCompactionId),
-          readLimiter, writeLimiter);
+          readLimiter, writeLimiter, stats);
 
       TabletLogger.compacted(getExtent(), job, metaFile);
 
@@ -679,6 +685,8 @@
         selectedCompactionCompleted(job, jobFiles, metaFile);
       else
         selectFiles();
+
+      tablet.updateTimer(MAJOR, queuedTime, startTime, stats.getEntriesRead(), metaFile == null);
     }
   }
 
diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/CompactableUtils.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/CompactableUtils.java
index 8589ad5..c4de249 100644
--- a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/CompactableUtils.java
+++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/CompactableUtils.java
@@ -532,7 +532,8 @@
   static StoredTabletFile compact(Tablet tablet, CompactionJob job, Set<StoredTabletFile> jobFiles,
       Long compactionId, boolean propogateDeletes, CompactableImpl.CompactionHelper helper,
       List<IteratorSetting> iters, CompactionCheck compactionCheck, RateLimiter readLimiter,
-      RateLimiter writeLimiter) throws IOException, CompactionCanceledException {
+      RateLimiter writeLimiter, CompactionStats stats)
+      throws IOException, CompactionCanceledException {
     StoredTabletFile metaFile;
     CompactionEnv cenv = new CompactionEnv() {
       @Override
@@ -580,6 +581,8 @@
         }
       });
     }
+    // mutate the empty stats to allow returning their values
+    stats.add(mcs);
 
     metaFile = tablet.getDatafileManager().bringMajorCompactionOnline(compactFiles.keySet(),
         compactTmpName, newFile, compactionId,
diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java
index 7605500..1a90b1c 100644
--- a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java
+++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java
@@ -2114,6 +2114,15 @@
     queryBytes += numBytes;
   }
 
+  public void updateTimer(Operation operation, long queued, long start, long count,
+      boolean failed) {
+    timer.updateTime(operation, queued, start, count, failed);
+  }
+
+  public void incrementStatusMajor() {
+    timer.incrementStatusMajor();
+  }
+
   TabletServer getTabletServer() {
     return tabletServer;
   }