You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
2.2 KiB

4 years ago
  1. #if MYSQL_6_9
  2. // Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
  3. //
  4. // MySQL Connector/NET is licensed under the terms of the GPLv2
  5. // <http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>, like most
  6. // MySQL Connectors. There are special exceptions to the terms and
  7. // conditions of the GPLv2 as it is applied to this software, see the
  8. // FLOSS License Exception
  9. // <http://www.mysql.com/about/legal/licensing/foss-exception.html>.
  10. //
  11. // This program is free software; you can redistribute it and/or modify
  12. // it under the terms of the GNU General Public License as published
  13. // by the Free Software Foundation; version 2 of the License.
  14. //
  15. // This program is distributed in the hope that it will be useful, but
  16. // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  17. // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
  18. // for more details.
  19. //
  20. // You should have received a copy of the GNU General Public License along
  21. // with this program; if not, write to the Free Software Foundation, Inc.,
  22. // 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  23. using System;
  24. using System.Collections.Generic;
  25. using System.Text;
  26. namespace Externals.MySql.Data.MySqlClient.Replication
  27. {
  28. /// <summary>
  29. /// Class that implements Round Robing Load Balancing technique
  30. /// </summary>
  31. internal class ReplicationRoundRobinServerGroup : ReplicationServerGroup
  32. {
  33. private int nextServer;
  34. public ReplicationRoundRobinServerGroup(string name, int retryTime) : base(name, retryTime)
  35. {
  36. nextServer = -1;
  37. }
  38. /// <summary>
  39. /// Gets an available server based on Round Robin load balancing
  40. /// </summary>
  41. /// <param name="isMaster">True if the server to return must be a master</param>
  42. /// <returns>Next available server</returns>
  43. internal protected override ReplicationServer GetServer(bool isMaster)
  44. {
  45. for (int i = 0; i < Servers.Count; i++)
  46. {
  47. nextServer++;
  48. if (nextServer == Servers.Count)
  49. nextServer = 0;
  50. ReplicationServer s = Servers[nextServer];
  51. if (!s.IsAvailable) continue;
  52. if (isMaster && !s.IsMaster) continue;
  53. return s;
  54. }
  55. return null;
  56. }
  57. }
  58. }
  59. #endif