package io.fathom.cloud.blobs.replicated; import io.fathom.cloud.CloudException; import io.fathom.cloud.blobs.BlobStoreFactory; import io.fathom.cloud.tasks.ScheduledTask; import java.io.IOException; import javax.inject.Inject; import javax.inject.Singleton; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.fathomdb.Configuration; import com.fathomdb.TimeSpan; @Singleton public class UpdateClusterTask extends ScheduledTask { private static final Logger log = LoggerFactory.getLogger(UpdateClusterTask.class); @Inject BlobStoreFactory blobStoreFactory; @Inject StorageClusterBuilder storageClusterBuilder; @Inject Configuration config; @Override public synchronized void run() throws IOException, CloudException { int dataReplicaCount = storageClusterBuilder.getConfiguredDataReplicaCount(); ReplicatedBlobStore.Factory replicatedBlobStore = (ReplicatedBlobStore.Factory) blobStoreFactory; String ifModifiedSince = null; ClusterState clusterState = replicatedBlobStore.getClusterState(); StorageCluster current = clusterState.getCluster(); if (current != null) { ifModifiedSince = current.getEtag(); if (dataReplicaCount != current.getDataReplicaCount()) { ifModifiedSince = null; } } StorageCluster storageCluster = clusterState.getStorageClusterBuilder() .build(dataReplicaCount, ifModifiedSince); current = storageCluster; clusterState.setCluster(storageCluster); } @Override protected TimeSpan getInterval() { return TimeSpan.ONE_MINUTE; } }