Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ public SecretVersion postAcrossCluster(SecretKey key, String value) {

UUID operationId = UUID.randomUUID();
long version = 1L;
log.info("Starting distributed post: operationId={}, key={}, version={}", operationId, key, version);
List<SecretPart> parts = createParts(key, value, version);
SecretPart localPart = parts.get(0);
List<SecretPart> peerParts = parts.subList(1, parts.size());
Expand All @@ -72,7 +73,11 @@ public SecretVersion postAcrossCluster(SecretKey key, String value) {
int peerAcks = broadcastPrepare(peerUrls, peerParts, operationId);
int totalAcks = peerAcks + 1;
int requiredAcks = computeRequiredAcks();
log.info("Post prepare phase complete: operationId={}, totalAcks={}, requiredAcks={}",
operationId, totalAcks, requiredAcks);
if (totalAcks < requiredAcks) {
log.warn("Quorum not reached for post: operationId={}, totalAcks={}, requiredAcks={}",
operationId, totalAcks, requiredAcks);
pendingActionsBuffer.discard(operationId);
throw new QuorumNotReachedException(
"Post failed - received " + totalAcks + " ACKs, required " + requiredAcks);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ public SecretVersion putAcrossCluster(SecretKey key, String value) {

UUID operationId = UUID.randomUUID();
long version = currentLocalPart.getVersion() + 1L;
log.info("Starting distributed put: operationId={}, key={}, version={}", operationId, key, version);
List<SecretPart> parts = createParts(key, value, version);
SecretPart localPart = parts.get(0);
List<SecretPart> peerParts = parts.subList(1, parts.size());
Expand All @@ -72,7 +73,11 @@ public SecretVersion putAcrossCluster(SecretKey key, String value) {
int peerAcks = broadcastPrepare(peerUrls, peerParts, operationId);
int totalAcks = peerAcks + 1;
int requiredAcks = computeRequiredAcks();
log.info("Put prepare phase complete: operationId={}, totalAcks={}, requiredAcks={}",
operationId, totalAcks, requiredAcks);
if (totalAcks < requiredAcks) {
log.warn("Quorum not reached for put: operationId={}, totalAcks={}, requiredAcks={}",
operationId, totalAcks, requiredAcks);
pendingActionsBuffer.discard(operationId);
throw new QuorumNotReachedException(
"Put failed - received " + totalAcks + " ACKs, required " + requiredAcks);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package edu.yu.capstone.DistributedSecretsVault.service.secret;

import org.springframework.http.ResponseEntity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import edu.yu.capstone.DistributedSecretsVault.domain.model.SecretKey;
Expand All @@ -9,6 +11,8 @@

@Service
public class DeleteSecretService implements SecretCommand<DeleteSecretRequest, Void> {
private static final Logger log = LoggerFactory.getLogger(DeleteSecretService.class);

private final InternalDeleteService internalDeleteService;

public DeleteSecretService(InternalDeleteService internalDeleteService) {
Expand All @@ -24,7 +28,9 @@ public ResponseEntity<Void> execute(DeleteSecretRequest input) {
throw new IllegalArgumentException("User is required");
}
SecretKey key = new SecretKey(input.getUser(), input.getDeleteName());
log.info("Delete secret requested: user={}, secretName={}", key.getOwnerId(), key.getName());
internalDeleteService.deleteAcrossCluster(key);
log.info("Delete secret completed: user={}, secretName={}", key.getOwnerId(), key.getName());
return ResponseEntity.noContent().build();
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package edu.yu.capstone.DistributedSecretsVault.service.secret;

import org.springframework.http.ResponseEntity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import edu.yu.capstone.DistributedSecretsVault.domain.model.SecretKey;
Expand All @@ -10,6 +12,8 @@

@Service
public class GetSecretService {
private static final Logger log = LoggerFactory.getLogger(GetSecretService.class);

private final InternalGetService internalGetService;

public GetSecretService(InternalGetService internalGetService) {
Expand All @@ -18,13 +22,22 @@ public GetSecretService(InternalGetService internalGetService) {

public ResponseEntity<String> getVersion(String user, String secretName, Long version) {
SecretKey key = validate(user, secretName);
log.info("Retrieve secret requested: user={}, secretName={}, version={}",
key.getOwnerId(), key.getName(), version == null ? "latest" : version);
String secretValue = internalGetService.getAcrossCluster(key, version);
log.info("Retrieve secret completed: user={}, secretName={}, version={}",
key.getOwnerId(), key.getName(), version == null ? "latest" : version);
return ResponseEntity.ok(secretValue);
}

public ResponseEntity<Map<Long, String>> getAllVersions(String user, String secretName) {
SecretKey key = validate(user, secretName);
return ResponseEntity.ok(internalGetService.getAllVersionsAcrossCluster(key));
log.info("Retrieve all secret versions requested: user={}, secretName={}",
key.getOwnerId(), key.getName());
Map<Long, String> versions = internalGetService.getAllVersionsAcrossCluster(key);
log.info("Retrieve all secret versions completed: user={}, secretName={}, versionCount={}",
key.getOwnerId(), key.getName(), versions.size());
return ResponseEntity.ok(versions);
}

private SecretKey validate(String user, String secretName) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import edu.yu.capstone.DistributedSecretsVault.domain.model.SecretKey;
Expand All @@ -11,6 +13,8 @@

@Service
public class PostSecretService implements SecretCommand<PostSecretRequest, String> {
private static final Logger log = LoggerFactory.getLogger(PostSecretService.class);

private final InternalPostService internalPostService;

public PostSecretService(InternalPostService internalPostService) {
Expand All @@ -26,7 +30,10 @@ public ResponseEntity<String> execute(PostSecretRequest input) {
throw new IllegalArgumentException("User is required");
}
SecretKey key = new SecretKey(input.getUser(), input.getSecretName());
log.info("Create secret requested: user={}, secretName={}", key.getOwnerId(), key.getName());
SecretVersion version = internalPostService.postAcrossCluster(key, input.getSecretValue());
log.info("Create secret completed: user={}, secretName={}, version={}",
key.getOwnerId(), key.getName(), version.getVersion());
return ResponseEntity.status(HttpStatus.CREATED)
.body("Secret created (version: " + version.getVersion() + ")");
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package edu.yu.capstone.DistributedSecretsVault.service.secret;

import org.springframework.http.ResponseEntity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import edu.yu.capstone.DistributedSecretsVault.dto.secret.PutSecretRequest;
Expand All @@ -10,6 +12,8 @@

@Service
public class PutSecretService implements SecretCommand<PutSecretRequest, String> {
private static final Logger log = LoggerFactory.getLogger(PutSecretService.class);

private final InternalPutService internalPutService;

public PutSecretService(InternalPutService internalPutService) {
Expand All @@ -25,7 +29,10 @@ public ResponseEntity<String> execute(PutSecretRequest input) {
throw new IllegalArgumentException("User is required");
}
SecretKey key = new SecretKey(input.getUser(), input.getSecretCurrentName());
log.info("Update secret requested: user={}, secretName={}", key.getOwnerId(), key.getName());
SecretVersion version = internalPutService.putAcrossCluster(key, input.getSecretUpdatedValue());
log.info("Update secret completed: user={}, secretName={}, version={}",
key.getOwnerId(), key.getName(), version.getVersion());
return ResponseEntity.ok("Secret updated (version: " + version.getVersion() + ")");
}
}
Loading