1. import time
  2. import logging
  3. import random
  4. class ArraySync:
  5. def __init__(self, staging_arrays, source_arrays, retry_interval=5):
  6. """
  7. Initializes the ArraySync class.
  8. Args:
  9. staging_arrays (list): A list of staging array paths/identifiers.
  10. source_arrays (list): A list of source array paths/identifiers.
  11. retry_interval (int): The retry interval in seconds.
  12. """
  13. self.staging_arrays = staging_arrays
  14. self.source_arrays = source_arrays
  15. self.retry_interval = retry_interval
  16. self.logger = logging.getLogger(__name__)
  17. logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') #Basic logging setup
  18. def sync_arrays(self):
  19. """
  20. Synchronizes arrays from source to staging environments with retries.
  21. """
  22. for staging_array in self.staging_arrays:
  23. for source_array in self.source_arrays:
  24. while True:
  25. try:
  26. self._sync_array(staging_array, source_array)
  27. self.logger.info(f"Successfully synced {source_array} to {staging_array}")
  28. break # Exit retry loop on success
  29. except Exception as e:
  30. self.logger.error(f"Failed to sync {source_array} to {staging_array}. Error: {e}")
  31. time.sleep(self.retry_interval + random.uniform(0,2)) #Add random jitter to retry
  32. def _sync_array(self, staging_array, source_array):
  33. """
  34. Placeholder for the actual array synchronization logic.
  35. Replace with your specific array processing code.
  36. """
  37. # Simulate an array sync operation
  38. time.sleep(2)
  39. print(f"Simulating sync {source_array} to {staging_array}")
  40. #In a real implementation, this would read from source_array and write to staging_array
  41. if __name__ == '__main__':
  42. # Example usage
  43. staging_arrays = ["staging_array_1", "staging_array_2"]
  44. source_arrays = ["source_array_1", "source_array_2"]
  45. sync_manager = ArraySync(staging_arrays, source_arrays, retry_interval=3)
  46. sync_manager.sync_arrays()

Add your comment