@Override public KafkaCheckpointLogKey fromBytes(byte[] bytes) { try { LinkedHashMap<String, String> deserializedKey = mapper.readValue(bytes, LinkedHashMap.class); if (!KafkaCheckpointLogKey.CHECKPOINT_KEY_TYPE.equals(deserializedKey.get(TYPE_FIELD))) { throw new IllegalArgumentException(String.format("Invalid key detected. Type of the key is %s", deserializedKey.get(TYPE_FIELD))); } return new KafkaCheckpointLogKey(deserializedKey.get(TYPE_FIELD), new TaskName(deserializedKey.get(TASK_NAME_FIELD)), deserializedKey.get(SSP_GROUPER_FACTORY_FIELD) ); } catch (Exception e) { throw new SamzaException(String.format("Exception in de-serializing checkpoint bytes: %s", Arrays.toString(bytes)), e); } } }
@Override public byte[] toBytes(KafkaCheckpointLogKey key) { try { return mapper.writeValueAsBytes(ImmutableMap.of( SSP_GROUPER_FACTORY_FIELD, key.getGrouperFactoryClassName(), TASK_NAME_FIELD, key.getTaskName().toString(), TYPE_FIELD, key.getType() )); } catch (Exception e) { throw new SamzaException(String.format("Exception in serializing: %s", key), e); } }
@Override public byte[] toBytes(KafkaCheckpointLogKey key) { try { return mapper.writeValueAsBytes(ImmutableMap.of( SSP_GROUPER_FACTORY_FIELD, key.getGrouperFactoryClassName(), TASK_NAME_FIELD, key.getTaskName().toString(), TYPE_FIELD, key.getType() )); } catch (Exception e) { throw new SamzaException(String.format("Exception in serializing: %s", key), e); } }
@Override public KafkaCheckpointLogKey fromBytes(byte[] bytes) { try { LinkedHashMap<String, String> deserializedKey = mapper.readValue(bytes, LinkedHashMap.class); if (!KafkaCheckpointLogKey.CHECKPOINT_KEY_TYPE.equals(deserializedKey.get(TYPE_FIELD))) { throw new IllegalArgumentException(String.format("Invalid key detected. Type of the key is %s", deserializedKey.get(TYPE_FIELD))); } return new KafkaCheckpointLogKey(deserializedKey.get(TYPE_FIELD), new TaskName(deserializedKey.get(TASK_NAME_FIELD)), deserializedKey.get(SSP_GROUPER_FACTORY_FIELD) ); } catch (Exception e) { throw new SamzaException(String.format("Exception in de-serializing checkpoint bytes: %s", Arrays.toString(bytes)), e); } } }
@Override public byte[] toBytes(KafkaCheckpointLogKey key) { try { return mapper.writeValueAsBytes(ImmutableMap.of( SSP_GROUPER_FACTORY_FIELD, key.getGrouperFactoryClassName(), TASK_NAME_FIELD, key.getTaskName().toString(), TYPE_FIELD, key.getType() )); } catch (Exception e) { throw new SamzaException(String.format("Exception in serializing: %s", key), e); } }
@Override public KafkaCheckpointLogKey fromBytes(byte[] bytes) { try { LinkedHashMap<String, String> deserializedKey = mapper.readValue(bytes, LinkedHashMap.class); if (!KafkaCheckpointLogKey.CHECKPOINT_KEY_TYPE.equals(deserializedKey.get(TYPE_FIELD))) { throw new IllegalArgumentException(String.format("Invalid key detected. Type of the key is %s", deserializedKey.get(TYPE_FIELD))); } return new KafkaCheckpointLogKey(deserializedKey.get(TYPE_FIELD), new TaskName(deserializedKey.get(TASK_NAME_FIELD)), deserializedKey.get(SSP_GROUPER_FACTORY_FIELD) ); } catch (Exception e) { throw new SamzaException(String.format("Exception in de-serializing checkpoint bytes: %s", Arrays.toString(bytes)), e); } } }
@Test public void testBinaryCompatibility() { KafkaCheckpointLogKey logKey1 = new KafkaCheckpointLogKey(KafkaCheckpointLogKey.CHECKPOINT_KEY_TYPE, new TaskName("Partition 0"), GroupByPartitionFactory.class.getCanonicalName()); KafkaCheckpointLogKeySerde checkpointSerde = new KafkaCheckpointLogKeySerde(); byte[] bytes = ("{\"systemstreampartition-grouper-factory\"" + ":\"org.apache.samza.container.grouper.stream.GroupByPartitionFactory\",\"taskName\":\"Partition 0\"," + "\"type\":\"checkpoint\"}").getBytes(); // test that the checkpoints returned by the Serde are byte-wise identical to an actual checkpoint in Kafka Assert.assertEquals(true, Arrays.equals(bytes, checkpointSerde.toBytes(logKey1))); }
/** * Creates a new checkpoint envelope for the provided task, ssp and offset */ private IncomingMessageEnvelope newCheckpointEnvelope(TaskName taskName, SystemStreamPartition ssp, String offset) { KafkaCheckpointLogKey checkpointKey = new KafkaCheckpointLogKey("checkpoint", taskName, GROUPER_FACTORY_CLASS); KafkaCheckpointLogKeySerde checkpointKeySerde = new KafkaCheckpointLogKeySerde(); Checkpoint checkpointMsg = new Checkpoint(ImmutableMap.of(ssp, offset)); CheckpointSerde checkpointMsgSerde = new CheckpointSerde(); return new IncomingMessageEnvelope(CHECKPOINT_SSP, offset, checkpointKeySerde.toBytes(checkpointKey), checkpointMsgSerde.toBytes(checkpointMsg)); }
@Test public void testSerde() { KafkaCheckpointLogKey key = new KafkaCheckpointLogKey(KafkaCheckpointLogKey.CHECKPOINT_KEY_TYPE, new TaskName("Partition 0"), GroupByPartitionFactory.class.getCanonicalName()); KafkaCheckpointLogKeySerde checkpointSerde = new KafkaCheckpointLogKeySerde(); // test that deserialize(serialize(k)) == k Assert.assertEquals(key, checkpointSerde.fromBytes(checkpointSerde.toBytes(key))); } }