package com.sungardas.enhancedsnapshots.components.impl; import com.amazonaws.services.dynamodbv2.datamodeling.IDynamoDBMapper; import com.amazonaws.services.dynamodbv2.model.ResourceNotFoundException; import com.sungardas.enhancedsnapshots.aws.dynamodb.model.Configuration; import com.sungardas.enhancedsnapshots.aws.dynamodb.model.MailConfigurationDocument; import com.sungardas.enhancedsnapshots.components.ConfigurationMediatorConfigurator; import com.sungardas.enhancedsnapshots.util.SystemUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; import static com.sungardas.enhancedsnapshots.service.SystemService.VOLUME_SIZE_UNIT; /** * implementation for {@link ConfigurationMediatorConfigurator} */ @Service("ConfigurationMediator") public class ConfigurationMediatorImpl implements ConfigurationMediatorConfigurator { private static final Logger LOG = LogManager.getLogger(ConfigurationMediatorImpl.class); @Autowired @Qualifier("dbMapperWithoutProxy") private IDynamoDBMapper dbMapper; private Configuration currentConfiguration; @PostConstruct private void init() throws Throwable { for (int i = 0; i < 3; i++) { try { currentConfiguration = dbMapper.load(Configuration.class, SystemUtils.getSystemId()); return; } catch (ResourceNotFoundException e) { currentConfiguration = new Configuration(); currentConfiguration.setAmazonRetryCount(30); currentConfiguration.setAmazonRetrySleep(15000); } catch (Exception e) { LOG.warn("Failed to get configuration: ", e); Thread.sleep(1000); } } } @Override public String getRegion() { return currentConfiguration.getEc2Region(); } @Override public String getS3Bucket() { return currentConfiguration.getS3Bucket(); } @Override public String getConfigurationId() { return currentConfiguration.getConfigurationId(); } @Override public int getAmazonRetryCount() { return currentConfiguration.getAmazonRetryCount(); } @Override public int getAmazonRetrySleep() { return currentConfiguration.getAmazonRetrySleep(); } @Override public int getMaxQueueSize() { return currentConfiguration.getMaxQueueSize(); } @Override public String getRetentionCronExpression() { return currentConfiguration.getRetentionCronExpression(); } @Override public int getWorkerDispatcherPollingRate() { return currentConfiguration.getWorkerDispatcherPollingRate(); } @Override public String getTempVolumeType() { return currentConfiguration.getTempVolumeType(); } @Override public int getTempVolumeIopsPerGb() { return currentConfiguration.getTempVolumeIopsPerGb(); } @Override public String getRestoreVolumeType() { return currentConfiguration.getRestoreVolumeType(); } @Override public int getRestoreVolumeIopsPerGb() { return currentConfiguration.getRestoreVolumeIopsPerGb(); } @Override public String getSdfsVolumeName() { return currentConfiguration.getSdfsVolumeName(); } @Override public String getSdfsMountPoint() { return currentConfiguration.getSdfsMountPoint(); } @Override public String getSdfsLocalCacheSize() { return currentConfiguration.getSdfsLocalCacheSize() + VOLUME_SIZE_UNIT; } @Override public int getSdfsLocalCacheSizeWithoutMeasureUnit() { return currentConfiguration.getSdfsLocalCacheSize(); } @Override public String getSdfsVolumeSize() { return currentConfiguration.getSdfsSize() + VOLUME_SIZE_UNIT; } @Override public int getSdfsVolumeSizeWithoutMeasureUnit() { return currentConfiguration.getSdfsSize(); } @Override public String getSdfsConfigPath() { return currentConfiguration.getSdfsConfigPath(); } @Override public String getSdfsBackupFileName() { return currentConfiguration.getSdfsBackupFileName(); } @Override public int getWaitTimeBeforeNewSyncWithAWS() { return currentConfiguration.getWaitTimeBeforeNewSyncWithAWS(); } @Override public int getMaxWaitTimeToDetachVolume() { return currentConfiguration.getMaxWaitTimeToDetachVolume(); } @Override public int getTaskHistoryTTS() { return currentConfiguration.getTaskHistoryTTS(); } @Override public void setCurrentConfiguration(final Configuration currentConfiguration) { this.currentConfiguration = currentConfiguration; } @Override public Configuration getCurrentConfiguration() { return currentConfiguration; } @Override public String getVolumeSizeUnit() { return VOLUME_SIZE_UNIT; } public boolean isSsoLoginMode() { return this.currentConfiguration.isSsoLoginMode(); } public String getSamlEntityId() { return this.currentConfiguration.getEntityId(); } @Override public boolean isStoreSnapshot() { return currentConfiguration.isStoreSnapshot(); } @Override public int getLogsBufferSize() { return currentConfiguration.getLogsBufferSize(); } @Override public String getLogFileName() { return currentConfiguration.getLogFile(); } public String getDomain() { return currentConfiguration.getDomain(); } @Override public MailConfigurationDocument getMailConfiguration() { return currentConfiguration.getMailConfigurationDocument(); } @Override public int getMinNodeNumberInCluster() { return currentConfiguration.getMinNodeNumber(); } @Override public int getMaxNodeNumberInCluster() { return currentConfiguration.getMaxNodeNumber(); } @Override public boolean isClusterMode() { return currentConfiguration.isClusterMode(); } @Override public String getChunkStoreEncryptionKey() { return currentConfiguration.getChunkStoreEncryptionKey(); } @Override public String getChunkStoreIV() { return currentConfiguration.getChunkStoreIV(); } @Override public String getSdfsCliPsw() { return currentConfiguration.getSdfsCliPsw(); } @Override public String getUUID() { return currentConfiguration.getUUID(); } @Override public boolean isSungardasSSO() { return currentConfiguration.isSungardasSSO(); } }