package io.fathom.cloud.mq;
import io.fathom.cloud.blobs.BlobStore;
import io.fathom.cloud.blobs.replicated.ReplicaRepair;
import io.fathom.cloud.blobs.replicated.ReplicatedBlobStore;
import io.fathom.cloud.mq.RequestExecutor;
import io.fathom.cloud.protobuf.CloudCommons.FixReplica;
import io.fathom.cloud.protobuf.CloudCommons.PeerRequest;
import java.io.IOException;
import com.google.protobuf.ByteString;
public class LocalRequestExecutor implements RequestExecutor {
final ReplicatedBlobStore replicatedBlobStore;
final BlobStore localBlobStore;
public LocalRequestExecutor(ReplicatedBlobStore replicatedBlobStore, BlobStore localBlobStore) {
super();
this.replicatedBlobStore = replicatedBlobStore;
this.localBlobStore = localBlobStore;
}
@Override
public void execute(byte[] bytes) throws IOException {
// TODO: Use injection to make this cleaner??
PeerRequest pr = PeerRequest.parseFrom(bytes);
if (pr.getFixReplicaCount() != 0) {
for (FixReplica fr : pr.getFixReplicaList()) {
ReplicaRepair repair = new ReplicaRepair(replicatedBlobStore.getCluster(), fr.getBlobStoreKey());
// TODO: Run in parallel??
for (ByteString blobKey : fr.getBlobKeyList()) {
repair.fixReplicate(replicatedBlobStore, localBlobStore, blobKey);
}
}
}
}
}