summaryrefslogtreecommitdiff
path: root/qpid/dotnet/Qpid.Client/qms/FailoverPolicy.cs
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/dotnet/Qpid.Client/qms/FailoverPolicy.cs')
-rw-r--r--qpid/dotnet/Qpid.Client/qms/FailoverPolicy.cs315
1 files changed, 0 insertions, 315 deletions
diff --git a/qpid/dotnet/Qpid.Client/qms/FailoverPolicy.cs b/qpid/dotnet/Qpid.Client/qms/FailoverPolicy.cs
deleted file mode 100644
index 179a695bf9..0000000000
--- a/qpid/dotnet/Qpid.Client/qms/FailoverPolicy.cs
+++ /dev/null
@@ -1,315 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- *
- */
-using System;
-using System.Text;
-using log4net;
-using Apache.Qpid.Client.Qms.Failover;
-
-namespace Apache.Qpid.Client.Qms
-{
- public class FailoverPolicy
- {
- private static readonly ILog _logger = LogManager.GetLogger(typeof(FailoverPolicy));
-
- private const long MINUTE = 60000L;
-
- private const long DEFAULT_METHOD_TIMEOUT = 1 * MINUTE;
- private const long DEFAULT_FAILOVER_TIMEOUT = 4 * MINUTE;
-
- private IFailoverMethod[] _methods = new IFailoverMethod[1];
-
- private int _currentMethod;
-
- private int _methodsRetries;
-
- private int _currentRetry;
-
- private bool _timing;
-
- private long _lastMethodTime;
- private long _lastFailTime;
-
- public FailoverPolicy(IConnectionInfo connectionInfo)
- {
- IFailoverMethod method;
-
- //todo This should be integrated in to the connection url when it supports
- // multiple strategies.
-
- _methodsRetries = 0;
-
- if (connectionInfo.FailoverMethod == null)
- {
- if (connectionInfo.BrokerCount > 1)
- {
- method = new FailoverRoundRobin(connectionInfo);
- }
- else
- {
- method = new FailoverSingleServer(connectionInfo);
- }
- }
- else
- {
- string failoverMethod = connectionInfo.FailoverMethod;
-
- /*
- if (failoverMethod.equals(FailoverMethod.RANDOM))
- {
- //todo write a random connection Failover
- }
- */
- if (failoverMethod.Equals(FailoverMethodConstants.ROUND_ROBIN))
- {
- method = new FailoverRoundRobin(connectionInfo);
- }
- else
- {
- throw new NotImplementedException("Dynamic loading of FailoverMethods not yet implemented.");
-// try
-// {
-// Type[] constructorSpec = {ConnectionInfo.class};
-// Object [] params = {connectionInfo};
-//
-// method = (FailoverMethod) ClassLoader.getSystemClassLoader().
-// loadClass(failoverMethod).
-// getConstructor(constructorSpec).newInstance(params);
-// }
-// catch (Exception cnfe)
-// {
-// throw new IllegalArgumentException("Unknown failover method:" + failoverMethod);
-// }
- }
- }
-
- if (method == null)
- {
- throw new ArgumentException("Unknown failover method specified.");
- }
-
- reset();
-
- _methods[_currentMethod] = method;
- }
-
- public FailoverPolicy(IFailoverMethod method) : this(method, 0)
- {
- }
-
- public FailoverPolicy(IFailoverMethod method, int retries)
- {
- _methodsRetries = retries;
-
- reset();
-
- _methods[_currentMethod] = method;
- }
-
- private void reset()
- {
- _currentMethod = 0;
- _currentRetry = 0;
- _timing = false;
-
- }
-
- public bool FailoverAllowed()
- {
- bool failoverAllowed;
-
- if (_timing)
- {
- long now = CurrentTimeMilliseconds();
-
- if ((now - _lastMethodTime) >= DEFAULT_METHOD_TIMEOUT)
- {
- _logger.Info("Failover method timeout");
- _lastMethodTime = now;
-
- if (!nextMethod())
- {
- return false;
- }
-
-
- }
- else if ((now - _lastFailTime) >= DEFAULT_FAILOVER_TIMEOUT)
- {
- _logger.Info("Failover timeout");
- return false;
- }
- else
- {
- _lastMethodTime = now;
- }
- }
- else
- {
- _timing = true;
- _lastMethodTime = CurrentTimeMilliseconds();
- _lastFailTime = _lastMethodTime;
- }
-
-
- if (_methods[_currentMethod].FailoverAllowed())
- {
- failoverAllowed = true;
- }
- else
- {
- if (_currentMethod < (_methods.Length - 1))
- {
- nextMethod();
- _logger.Info("Changing method to " + _methods[_currentMethod].MethodName);
- return FailoverAllowed();
- }
- else
- {
- return cycleMethods();
- }
- }
-
- return failoverAllowed;
- }
-
- private static long CurrentTimeMilliseconds()
- {
- return DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
- }
-
- private bool nextMethod()
- {
- if (_currentMethod < (_methods.Length - 1))
- {
- _currentMethod++;
- _methods[_currentMethod].Reset();
- return true;
- }
- else
- {
- return cycleMethods();
- }
- }
-
- private bool cycleMethods()
- {
- if (_currentRetry < _methodsRetries)
- {
- _currentRetry++;
-
- _currentMethod = 0;
-
- _logger.Info("Retrying methods starting with " + _methods[_currentMethod].MethodName);
- _methods[_currentMethod].Reset();
- return FailoverAllowed();
- }
- else
- {
- _logger.Debug("All failover methods exhausted");
- return false;
- }
- }
-
- /**
- * Notification that connection was successful.
- */
- public void attainedConnection()
- {
- _currentRetry = 0;
-
- _methods[_currentMethod].AttainedConnection();
-
- _timing = false;
- }
-
- public IBrokerInfo GetCurrentBrokerInfo()
- {
- return _methods[_currentMethod].GetCurrentBrokerInfo();
- }
-
- public IBrokerInfo GetNextBrokerInfo()
- {
- return _methods[_currentMethod].GetNextBrokerDetails();
- }
-
- public void setBroker(IBrokerInfo broker)
- {
- _methods[_currentMethod].SetBroker(broker);
- }
-
- public void addMethod(IFailoverMethod method)
- {
- int len = _methods.Length + 1;
- IFailoverMethod[] newMethods = new IFailoverMethod[len];
- _methods.CopyTo(newMethods, 0);
-// System.arraycopy(_methods, 0, newMethods, 0, _methods.length);
- int index = len - 1;
- newMethods[index] = method;
- _methods = newMethods;
- }
-
- public void setMethodRetries(int retries)
- {
- _methodsRetries = retries;
- }
-
- public IFailoverMethod getCurrentMethod()
- {
- if (_currentMethod >= 0 && _currentMethod < (_methods.Length - 1))
- {
- return _methods[_currentMethod];
- }
- else
- {
- return null;
- }
- }
-
- public String toString()
- {
- StringBuilder sb = new StringBuilder();
-
- sb.Append("Failover Policy:\n");
-
- if (FailoverAllowed())
- {
- sb.Append("Failover allowed\n");
- }
- else
- {
- sb.Append("Failover not allowed\n");
- }
-
- sb.Append("Failover policy methods\n");
- for (int i = 0; i < _methods.Length; i++)
- {
-
- if (i == _currentMethod)
- {
- sb.Append(">");
- }
- sb.Append(_methods[i].ToString());
- }
-
- return sb.ToString();
- }
- }
-}