[ https://issues.apache.org/jira/browse/BEAM-7427?focusedWorklogId=375714&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-375714 ]
ASF GitHub Bot logged work on BEAM-7427: ---------------------------------------- Author: ASF GitHub Bot Created on: 22/Jan/20 16:26 Start Date: 22/Jan/20 16:26 Worklog Time Spent: 10m Work Description: jbonofre commented on pull request #10644: [BEAM-7427] Refactore JmsCheckpointMark to be usage via Coder URL: https://github.com/apache/beam/pull/10644#discussion_r369664034 ########## File path: sdks/java/io/jms/src/main/java/org/apache/beam/sdk/io/jms/JmsIO.java ########## @@ -404,9 +408,96 @@ private JmsIO() {} T mapMessage(Message message) throws Exception; } + /** + * Checkpoint for an unbounded JMS source. Consists of the JMS messages waiting to be acknowledged + * and oldest pending message timestamp. + */ + @VisibleForTesting + static class JmsCheckpointMark implements UnboundedSource.CheckpointMark, Serializable { + + private static final Logger LOG = LoggerFactory.getLogger(JmsCheckpointMark.class); + + @VisibleForTesting Instant oldestMessageTimestamp = Instant.now(); + @VisibleForTesting transient List<Message> messages = new ArrayList<>(); Review comment: That's not possible, simply to execute the ack on messages. So, I'm using the same approach as in MqttIO. Just keep the oldest timestamp, and don't ack the messages. Then, the messages stay in the broker and will be consumed by another executor. ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org Issue Time Tracking ------------------- Worklog Id: (was: 375714) Time Spent: 5h 20m (was: 5h 10m) > JmsCheckpointMark Avro Serialization issue with UnboundedSource > --------------------------------------------------------------- > > Key: BEAM-7427 > URL: https://issues.apache.org/jira/browse/BEAM-7427 > Project: Beam > Issue Type: Bug > Components: io-java-jms > Affects Versions: 2.12.0 > Environment: Message Broker : solace > JMS Client (Over AMQP) : "org.apache.qpid:qpid-jms-client:0.42.0 > Reporter: Mourad > Assignee: Mourad > Priority: Major > Time Spent: 5h 20m > Remaining Estimate: 0h > > I get the following exception when reading from unbounded JMS Source: > > {code:java} > Caused by: org.apache.avro.SchemaParseException: Illegal character in: this$0 > at org.apache.avro.Schema.validateName(Schema.java:1151) > at org.apache.avro.Schema.access$200(Schema.java:81) > at org.apache.avro.Schema$Field.<init>(Schema.java:403) > at org.apache.avro.Schema$Field.<init>(Schema.java:396) > at org.apache.avro.reflect.ReflectData.createSchema(ReflectData.java:622) > at org.apache.avro.reflect.ReflectData.createFieldSchema(ReflectData.java:740) > at org.apache.avro.reflect.ReflectData.createSchema(ReflectData.java:604) > at org.apache.avro.specific.SpecificData$2.load(SpecificData.java:218) > at org.apache.avro.specific.SpecificData$2.load(SpecificData.java:215) > at > avro.shaded.com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3568) > at > avro.shaded.com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2350) > at > avro.shaded.com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2313) > at > avro.shaded.com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2228) > {code} > > The exception is thrown by Avro when introspecting {{JmsCheckpointMark}} to > generate schema. > JmsIO config : > > {code:java} > PCollection<DFAMessage> messages = pipeline.apply("read messages from the > events broker", JmsIO.<DFAMessage>readMessage() > .withConnectionFactory(jmsConnectionFactory) .withTopic(options.getTopic()) > .withMessageMapper(new DFAMessageMapper()) > .withCoder(AvroCoder.of(DFAMessage.class))); > {code} > > > > > -- This message was sent by Atlassian Jira (v8.3.4#803005)