@SuppressFBWarnings(value = "EI_EXPOSE_REP2", justification = "Intentional")
 public BulkWriteAction(
     byte[] tableName,
     BulkWrites writes,
     WriteConfiguration writeConfiguration,
     ActionStatusReporter statusReporter,
     BulkWriterFactory writerFactory,
     PipelineExceptionFactory pipelineExceptionFactory,
     PartitionFactory partitionFactory,
     Clock clock) {
   assert writes != null : "writes passed into BWA are null";
   this.tableName = tableName;
   this.bulkWrites = writes;
   this.writeConfiguration = writeConfiguration;
   this.statusReporter = statusReporter;
   this.writerFactory = writerFactory;
   MetricFactory possibleMetricFactory = writeConfiguration.getMetricFactory();
   this.metricFactory =
       possibleMetricFactory == null ? Metrics.noOpMetricFactory() : possibleMetricFactory;
   this.clock = clock;
   this.rejectedCounter = metricFactory.newCounter();
   this.globalErrorCounter = metricFactory.newCounter();
   this.partialFailureCounter = metricFactory.newCounter();
   this.writtenCounter = metricFactory.newCounter();
   this.retryCounter = metricFactory.newCounter();
   this.writeTimer = metricFactory.newTimer();
   this.pipelineExceptionFactory = pipelineExceptionFactory;
   this.partitionFactory = partitionFactory;
   thrownErrorsRows = metricFactory.newCounter();
   retriedRows = metricFactory.newCounter();
   partialRows = metricFactory.newCounter();
   partialThrownErrorRows = metricFactory.newCounter();
   partialRetriedRows = metricFactory.newCounter();
   partialIgnoredRows = metricFactory.newCounter();
   partialWrite = metricFactory.newCounter();
   ignoredRows = metricFactory.newCounter();
   catchThrownRows = metricFactory.newCounter();
   catchRetriedRows = metricFactory.newCounter();
   regionTooBusy = metricFactory.newCounter();
 }