Have the appender keep the delay and retry count

git-svn-id: https://svn.apache.org/repos/asf/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers@1156959 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/flume/FlumeAvroAppender.java b/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/flume/FlumeAvroAppender.java
index 70004a0..8f1186b 100644
--- a/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/flume/FlumeAvroAppender.java
+++ b/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/flume/FlumeAvroAppender.java
@@ -48,9 +48,13 @@
 
     private final String hostname;
 
+    private final int reconnectDelay;
+
+    private final int retries;
+
     private FlumeAvroAppender(String name, Filters filters, Layout layout, boolean handleException,
                               String hostname, String includes, String excludes, String required, String mdcPrefix,
-                              String eventPrefix, boolean compress, FlumeAvroManager manager) {
+                              String eventPrefix, boolean compress, int delay, int retries, FlumeAvroManager manager) {
         super(name, filters, layout, handleException);
         this.manager = manager;
         this.mdcIncludes = includes;
@@ -60,6 +64,8 @@
         this.mdcPrefix = mdcPrefix;
         this.compressBody = compress;
         this.hostname = hostname;
+        this.reconnectDelay = delay;
+        this.retries = retries;
     }
 
     public void append(LogEvent event) {
@@ -67,7 +73,7 @@
         FlumeEvent flumeEvent = new FlumeEvent(event, hostname, mdcIncludes, mdcExcludes, mdcRequired, mdcPrefix,
             eventPrefix, compressBody);
         flumeEvent.setBody(getLayout().format(flumeEvent));
-        manager.send(flumeEvent);
+        manager.send(flumeEvent, reconnectDelay, retries);
     }
 
     @Override
@@ -119,11 +125,11 @@
             return null;
         }
 
-        FlumeAvroManager manager = FlumeAvroManager.getManager(agents, reconnectDelay, retries);
+        FlumeAvroManager manager = FlumeAvroManager.getManager(agents);
         if (manager == null) {
             return null;
         }
         return new FlumeAvroAppender(name, filters, layout,  handleExceptions, hostname, includes,
-            excludes, required, mdcPrefix, eventPrefix, compress, manager);
+            excludes, required, mdcPrefix, eventPrefix, compress, reconnectDelay, retries, manager);
     }
 }
diff --git a/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/flume/FlumeAvroManager.java b/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/flume/FlumeAvroManager.java
index 98d93c3..7089405 100644
--- a/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/flume/FlumeAvroManager.java
+++ b/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/flume/FlumeAvroManager.java
@@ -37,14 +37,10 @@
  */
 public class FlumeAvroManager extends AbstractManager {
 
-    private final int reconnectionDelay;
-
     private FlumeEventAvroServer client;
 
     private final Agent[] agents;
 
-    private final int retries;
-
     private static final int DEFAULT_RECONNECTS = 3;
 
     private int current = 0;
@@ -58,16 +54,11 @@
 
     private static Logger logger = StatusLogger.getLogger();
 
-    public static FlumeAvroManager getManager(Agent[] agents, int delay, int retries) {
+    public static FlumeAvroManager getManager(Agent[] agents) {
         if (agents == null || agents.length == 0) {
             throw new IllegalArgumentException("At least one agent is required");
         }
-        if (delay == 0) {
-            delay = DEFAULT_RECONNECTION_DELAY;
-        }
-        if (retries == 0) {
-            retries = DEFAULT_RECONNECTS;
-        }
+
         StringBuilder sb = new StringBuilder("FlumeAvro[");
         boolean first = true;
         for (Agent agent : agents) {
@@ -78,19 +69,23 @@
             first = false;
         }
         sb.append("]");
-        return (FlumeAvroManager) getManager(sb.toString(), factory, new FactoryData(agents, delay, retries));
+        return (FlumeAvroManager) getManager(sb.toString(), factory, new FactoryData(agents));
     }
 
 
-    public FlumeAvroManager(String name, Agent[] agents, int delay, int retries) {
+    public FlumeAvroManager(String name, Agent[] agents) {
         super(name);
         this.agents = agents;
         this.client = connect(agents);
-        this.reconnectionDelay = delay;
-        this.retries = retries;
     }
 
-    protected synchronized void send(FlumeEvent event)  {
+    protected synchronized void send(FlumeEvent event, int delay, int retries)  {
+        if (delay == 0) {
+            delay = DEFAULT_RECONNECTION_DELAY;
+        }
+        if (retries == 0) {
+            retries = DEFAULT_RECONNECTS;
+        }
         AvroFlumeEvent avroEvent = AvroEventConvertUtil.toAvroEvent(event);
         int i = 0;
 
@@ -106,7 +101,7 @@
                     logger.warn(msg, ex);
                     break;
                 }
-                sleep();
+                sleep(delay);
             }
         } while (++i < retries);
 
@@ -131,7 +126,7 @@
                         logger.warn(warnMsg, ex);
                         break;
                     }
-                    sleep();
+                    sleep(delay);
                 }
             } while (++i < retries);
         }
@@ -140,9 +135,9 @@
 
     }
 
-    private void sleep() {
+    private void sleep(int delay) {
         try {
-            Thread.sleep(reconnectionDelay);
+            Thread.sleep(delay);
         } catch (InterruptedException ex) {
             Thread.currentThread().interrupt();
         }
@@ -189,13 +184,9 @@
 
     private static class FactoryData {
         Agent[] agents;
-        int delay;
-        int retries;
 
-        public FactoryData(Agent[] agents, int delay, int retries) {
+        public FactoryData(Agent[] agents) {
             this.agents = agents;
-            this.delay = delay;
-            this.retries = retries;
         }
     }
 
@@ -204,7 +195,7 @@
         public FlumeAvroManager createManager(String name, FactoryData data) {
             try {
 
-                return new FlumeAvroManager(name, data.agents, data.delay, data.retries);
+                return new FlumeAvroManager(name, data.agents);
             } catch (Exception ex) {
                 logger.error("Could not create FlumeAvroManager", ex);
             }