Skip to content

Commit

Permalink
Improve protocol's log messages and fix bugs with incorrect number of…
Browse files Browse the repository at this point in the history
… params #403
  • Loading branch information
rhusar committed Jan 17, 2025
1 parent f3db50f commit 51eb693
Showing 1 changed file with 27 additions and 28 deletions.
55 changes: 27 additions & 28 deletions src/main/java/org/jgroups/protocols/aws/S3_PING.java
Original file line number Diff line number Diff line change
Expand Up @@ -93,10 +93,9 @@ public class S3_PING extends FILE_PING {
if(isDefined(System.getProperty(MAGIC_NUMBER_SYSTEM_PROPERTY))) {
try {
magicNumber=Short.parseShort(System.getProperty(MAGIC_NUMBER_SYSTEM_PROPERTY));
}
catch(NumberFormatException e) {
LogFactory.getLog(S3_PING.class).warn("Could not convert " + System.getProperty(MAGIC_NUMBER_SYSTEM_PROPERTY)
+ " to short. Using default magic number " + JGROUPS_PROTOCOL_DEFAULT_MAGIC_NUMBER);
} catch (NumberFormatException e) {
LogFactory.getLog(S3_PING.class).warn("Could not convert provided property '%s' to short. Using default magic number: %d.",
System.getProperty(MAGIC_NUMBER_SYSTEM_PROPERTY), JGROUPS_PROTOCOL_DEFAULT_MAGIC_NUMBER);
}
}
//noinspection deprecation
Expand Down Expand Up @@ -125,10 +124,10 @@ public void init() throws Exception {

if (isDefined(endpoint)) {
builder.endpointOverride(new URI(endpoint));
log.info("Set Amazon S3 endpoint to %s", endpoint);
log.info("Overriding AWS endpoint to '%s'.", endpoint);
}
s3Client = builder.build();
log.info("Using Amazon S3 ping in region %s with bucket '%s' and prefix '%s'", region, bucket_name, bucket_prefix);
log.info("Using AWS S3 ping in region '%s' with bucket '%s' and prefix '%s'.", region, bucket_name, bucket_prefix);

if(!check_if_bucket_exists) return;

Expand All @@ -142,12 +141,12 @@ public void init() throws Exception {
}

if (!bucket_exists) {
log.info("Bucket %s does not exist, creating it", bucket_name);
log.info("Bucket '%s' does not exist, creating it.", bucket_name);
CreateBucketRequest createBucketRequest = CreateBucketRequest.builder().bucket(bucket_name).build();
s3Client.createBucket(createBucketRequest);
log.info("Created bucket %s", bucket_name);
log.info("Created bucket '%s'.", bucket_name);
} else {
log.info("Found bucket %s", bucket_name);
log.info("Found bucket '%s'.", bucket_name);
}
}

Expand All @@ -168,57 +167,57 @@ protected void readAll(final List<Address> members, final String clustername, fi
final String clusterPrefix=getClusterPrefix(clustername);

if(log.isTraceEnabled())
log.trace("Getting entries for %s ...", clusterPrefix);
log.trace("Getting entries for cluster '%s'.", clusterPrefix);

try {
ListObjectsRequest listObjectsRequest = ListObjectsRequest.builder().bucket(bucket_name).prefix(clusterPrefix).build();
final ListObjectsResponse objects = s3Client.listObjects(listObjectsRequest);

if(log.isTraceEnabled())
log.trace("Got object listing, %d entries [%s]", objects.contents().size(), clusterPrefix);
log.trace("Got object listing, %d entries for cluster '%s'.", objects.contents().size(), clusterPrefix);

// TODO batching not supported; can result in wrong lists if bucket has too many entries

for (final S3Object s3Object : objects.contents()) {
if (log.isTraceEnabled())
log.trace("Fetching data for object %s ...", s3Object.key());
log.trace("Fetching data for object '%s'.", s3Object.key());

if (s3Object.size() > 0) {
GetObjectRequest getObjectRequest = GetObjectRequest.builder().bucket(bucket_name).key(s3Object.key()).build();
ResponseBytes<GetObjectResponse> objectAsBytes = s3Client.getObjectAsBytes(getObjectRequest);

if (log.isTraceEnabled()) {
log.trace("Parsing data for object %s (%s)...", s3Object.key(), objectAsBytes.toString());
log.trace("Parsing data for object '%s': '%s'.", s3Object.key(), objectAsBytes.toString());
}

final List<PingData> data = this.read(objectAsBytes.asInputStream());
if (data == null) {
log.debug("Fetched update for member list in Amazon S3 is empty [%s]", clusterPrefix);
log.debug("Fetched update for cluster '%s' member list in AWS S3 is empty.", clusterPrefix);
break;
}
for (final PingData pingData : data) {
if (members == null || members.contains(pingData.getAddress())) {
responses.addResponse(pingData, pingData.isCoord());
if (log.isTraceEnabled())
log.trace("Added member %s [members: %s]", pingData, members != null);
log.trace("Added member '%s', members '%s'.", pingData, members != null);
}
if (local_addr != null && !local_addr.equals(pingData.getAddress())) {
addDiscoveryResponseToCaches(pingData.getAddress(), pingData.getLogicalName(), pingData.getPhysicalAddr());
if (log.isTraceEnabled()) {
log.trace("Added possible member %s [local address: %s]", pingData, local_addr);
log.trace("Added possible member '%s' with local address '%s'.", pingData, local_addr);
}
}
if (log.isTraceEnabled())
log.trace("Processed entry in Amazon S3 [%s -> %s]", s3Object.key(), pingData);
log.trace("Processed entry in AWS S3: '%s' -> '%s'.", s3Object.key(), pingData);
}
} else {
if (log.isTraceEnabled())
log.trace("Skipping object %s as it is empty", s3Object.key());
log.trace("Skipping empty object '%s'.", s3Object.key());
}
}
log.debug("Fetched update for member list in Amazon S3 [%s]", clusterPrefix);
log.debug("Fetched update for member list in AWS S3 for cluster '%s'.", clusterPrefix);
} catch (final Exception e) {
log.error(String.format("Failed getting member list from Amazon S3 [%s]", clusterPrefix), e);
log.error(String.format("Failed getting member list from AWS S3 for cluster '%s'.", clusterPrefix), e);
}
}

Expand All @@ -233,7 +232,7 @@ protected void write(final List<PingData> list, final String clustername) {
final byte[] data = outStream.toByteArray();

if (log.isTraceEnabled()) {
log.trace("New S3 file content (%d bytes): %s", data.length, new String(data));
log.trace("New AWS S3 file content (%d bytes): %s", data.length, new String(data));
}

PutObjectRequest.Builder putRequestBuilder = PutObjectRequest.builder()
Expand All @@ -253,9 +252,9 @@ protected void write(final List<PingData> list, final String clustername) {
RequestBody requestBody = RequestBody.fromBytes(data);
s3Client.putObject(putRequestBuilder.build(), requestBody);

log.debug("Wrote member list to Amazon S3 [%s -> %s]", key, list);
log.debug("Wrote member list to AWS S3: '%s' -> '%s'.", key, list);
} catch (final Exception e) {
log.error(String.format("Failed to update member list in Amazon S3 [%s]", key), e);
log.error(String.format("Failed to update member list in AWS S3 in '%s'.", key), e);
}
}

Expand All @@ -269,7 +268,7 @@ protected void remove(final String clustername, final Address addr) {
DeleteObjectRequest deleteObjectRequest = DeleteObjectRequest.builder().bucket(bucket_name).key(key).build();
s3Client.deleteObject(deleteObjectRequest);
if(log.isTraceEnabled())
log.trace("removing " + key);
log.trace("Removing key '%s'.", key);
}
catch(Exception e) {
log.error(Util.getMessage("FailureRemovingData"), e);
Expand All @@ -288,19 +287,19 @@ protected void removeAll(String clustername) {
final ListObjectsResponse objects = s3Client.listObjects(listRequest);

if(log.isTraceEnabled())
log.trace("Got object listing, %d entries [%s]", objects.contents().size(), clusterPrefix);
log.trace("Got object listing, '%d' entries for cluster '%s'.", objects.contents().size(), clusterPrefix);

for(final S3Object object : objects.contents()) {
if(log.isTraceEnabled())
log.trace("Fetching data for object %s ...", object.key());
log.trace("Fetching data for object '%s'.", object.key());
try {
DeleteObjectRequest deleteObjectRequest = DeleteObjectRequest.builder().bucket(bucket_name).key(object.key()).build();
s3Client.deleteObject(deleteObjectRequest);
if(log.isTraceEnabled())
log.trace("Removing %s/%s", object.key());
log.trace("Removing '%s'.", object.key());
}
catch(Throwable t) {
log.error("Failed deleting object %s/%s: %s", object.key(), t);
log.error("Failed deleting object '%s': %s", object.key(), t);
}
}
}
Expand Down

0 comments on commit 51eb693

Please sign in to comment.