Adding serializer for application state to lease info
This commit is contained in:
parent
ae005ce0f8
commit
b335246a30
2 changed files with 33 additions and 0 deletions
|
|
@ -14,6 +14,7 @@
|
||||||
*/
|
*/
|
||||||
package software.amazon.kinesis.leases;
|
package software.amazon.kinesis.leases;
|
||||||
|
|
||||||
|
import software.amazon.awssdk.core.SdkBytes;
|
||||||
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
|
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
|
||||||
import software.amazon.kinesis.annotations.KinesisClientInternalApi;
|
import software.amazon.kinesis.annotations.KinesisClientInternalApi;
|
||||||
|
|
||||||
|
|
@ -36,6 +37,14 @@ public class DynamoUtils {
|
||||||
return AttributeValue.builder().ss(collectionValue).build();
|
return AttributeValue.builder().ss(collectionValue).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static AttributeValue createAttributeValue(byte[] byteBufferValue) {
|
||||||
|
if (byteBufferValue == null) {
|
||||||
|
throw new IllegalArgumentException("Byte buffer attributeValues cannot be null or empty.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return AttributeValue.builder().b(SdkBytes.fromByteArray(byteBufferValue)).build();
|
||||||
|
}
|
||||||
|
|
||||||
public static AttributeValue createAttributeValue(String stringValue) {
|
public static AttributeValue createAttributeValue(String stringValue) {
|
||||||
if (stringValue == null || stringValue.isEmpty()) {
|
if (stringValue == null || stringValue.isEmpty()) {
|
||||||
throw new IllegalArgumentException("String attributeValues cannot be null or empty.");
|
throw new IllegalArgumentException("String attributeValues cannot be null or empty.");
|
||||||
|
|
@ -52,6 +61,15 @@ public class DynamoUtils {
|
||||||
return AttributeValue.builder().n(longValue.toString()).build();
|
return AttributeValue.builder().n(longValue.toString()).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static byte[] safeGetByteArray(Map<String, AttributeValue> dynamoRecord, String key) {
|
||||||
|
AttributeValue av = dynamoRecord.get(key);
|
||||||
|
if (av == null) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return av.b().asByteArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static Long safeGetLong(Map<String, AttributeValue> dynamoRecord, String key) {
|
public static Long safeGetLong(Map<String, AttributeValue> dynamoRecord, String key) {
|
||||||
AttributeValue av = dynamoRecord.get(key);
|
AttributeValue av = dynamoRecord.get(key);
|
||||||
if (av == null) {
|
if (av == null) {
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,7 @@ public class DynamoDBLeaseSerializer implements LeaseSerializer {
|
||||||
private static final String CHECKPOINT_SUBSEQUENCE_NUMBER_KEY = "checkpointSubSequenceNumber";
|
private static final String CHECKPOINT_SUBSEQUENCE_NUMBER_KEY = "checkpointSubSequenceNumber";
|
||||||
private static final String PENDING_CHECKPOINT_SEQUENCE_KEY = "pendingCheckpoint";
|
private static final String PENDING_CHECKPOINT_SEQUENCE_KEY = "pendingCheckpoint";
|
||||||
private static final String PENDING_CHECKPOINT_SUBSEQUENCE_KEY = "pendingCheckpointSubSequenceNumber";
|
private static final String PENDING_CHECKPOINT_SUBSEQUENCE_KEY = "pendingCheckpointSubSequenceNumber";
|
||||||
|
private static final String PENDING_CHECKPOINT_STATE_KEY = "pendingCheckpointState";
|
||||||
private static final String PARENT_SHARD_ID_KEY = "parentShardId";
|
private static final String PARENT_SHARD_ID_KEY = "parentShardId";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -75,6 +76,10 @@ public class DynamoDBLeaseSerializer implements LeaseSerializer {
|
||||||
result.put(PENDING_CHECKPOINT_SUBSEQUENCE_KEY, DynamoUtils.createAttributeValue(lease.pendingCheckpoint().subSequenceNumber()));
|
result.put(PENDING_CHECKPOINT_SUBSEQUENCE_KEY, DynamoUtils.createAttributeValue(lease.pendingCheckpoint().subSequenceNumber()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (lease.pendingCheckpointState() != null) {
|
||||||
|
result.put(PENDING_CHECKPOINT_STATE_KEY, DynamoUtils.createAttributeValue(lease.checkpoint().subSequenceNumber()));
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -105,6 +110,9 @@ public class DynamoDBLeaseSerializer implements LeaseSerializer {
|
||||||
DynamoUtils.safeGetLong(dynamoRecord, PENDING_CHECKPOINT_SUBSEQUENCE_KEY))
|
DynamoUtils.safeGetLong(dynamoRecord, PENDING_CHECKPOINT_SUBSEQUENCE_KEY))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
leaseToUpdate.pendingCheckpointState(DynamoUtils.safeGetByteArray(dynamoRecord, PENDING_CHECKPOINT_STATE_KEY));
|
||||||
|
|
||||||
return leaseToUpdate;
|
return leaseToUpdate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -220,6 +228,13 @@ public class DynamoDBLeaseSerializer implements LeaseSerializer {
|
||||||
result.put(PENDING_CHECKPOINT_SEQUENCE_KEY, AttributeValueUpdate.builder().action(AttributeAction.DELETE).build());
|
result.put(PENDING_CHECKPOINT_SEQUENCE_KEY, AttributeValueUpdate.builder().action(AttributeAction.DELETE).build());
|
||||||
result.put(PENDING_CHECKPOINT_SUBSEQUENCE_KEY, AttributeValueUpdate.builder().action(AttributeAction.DELETE).build());
|
result.put(PENDING_CHECKPOINT_SUBSEQUENCE_KEY, AttributeValueUpdate.builder().action(AttributeAction.DELETE).build());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (lease.pendingCheckpointState() != null) {
|
||||||
|
result.put(PENDING_CHECKPOINT_STATE_KEY, putUpdate(DynamoUtils.createAttributeValue(lease.pendingCheckpointState())));
|
||||||
|
} else {
|
||||||
|
result.put(PENDING_CHECKPOINT_STATE_KEY, AttributeValueUpdate.builder().action(AttributeAction.DELETE).build());
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue