[ 
https://issues.apache.org/jira/browse/ARTEMIS-2490?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16932290#comment-16932290
 ] 

Bernd Eckenfels commented on ARTEMIS-2490:
------------------------------------------

we also wonder that. it looks like it happens that a large expired message is 
requeued in dlq and somehow its JMS msg id ends up in the core orig msg id 
(therefore not beeing a long). the patch will not fix the problem, but the code 
path is just not taken for our case (looks like this is a format upgrade?)

we currently try to see if it is a general problem, if it is only present in 
hornetq or if we somehow abuse core api to trigger it, will update jira with 
the finding. the patch however seems not only bening but also is a micro 
optimization and decreases variable scope.

> JournalStorageManager#parseLargeMessage may produce fatal issue when reading 
> ORIG_ID
> ------------------------------------------------------------------------------------
>
>                 Key: ARTEMIS-2490
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-2490
>             Project: ActiveMQ Artemis
>          Issue Type: Bug
>    Affects Versions: 2.10.0
>            Reporter: Rico Neubauer
>            Priority: Major
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> Preface: Found the issue initially with HornetQ and Stacktrace below is from 
> HornetQ, but checked Artemis and issue there exists in the same manner.
> If there is a large-message in journal, this gets parsed on startup while 
> doing initialization.
>  While doing that property "__AMQ_ORIG_MESSAGE_ID_" (in HornetQ "HQ" instead 
> of "AMQ") is always read, _for compatibility_ according to code.
> Problem with that: In case the property does not hold a number, but sth. like 
> "_ID:c6e2e3..._", then a NumberFormatException is thrown, which falls thru 
> the entire initialization mechanism and leads to a non-functioning server.
> I have no idea, who sets this, but seems internally, since we have no code 
> doing this. Looks like a JMS-Message-ID to me.
>  Mabye this whole compatibility code is not needed anymore - cannot say 
> though.
> What I would like to request:
>  # Move the retrieval of the property inside the compatibility-block in 
> org.apache.activemq.artemis.core.persistence.impl.journal.JournalStorageManager.parseLargeMessage
>  - since it is not needed otherwise and already avoids the issue in the vast 
> majority where no compatibility must be done.
>  # -In addition, a check for the "ID:" prefix and removing it before parsing 
> to Long.-
> Edit: Sorry that was wrong, but:
> Adding a try for parsing to Long and handling not-a-number gracefully, so 
> server continues startup.
> See PR for first.
> Just fyi: the fix for HornetQ: [Github (containing wrong logic for 
> parsing)|https://github.com/seeburger-ag/hornetq/commit/8ef99744f219b23d76803435201e4af33a53b3c5]
>  Stacktrace (as said: based on HornetQ code, but class- and method-names are 
> the same):
> {code:java}
> Failure in initialisation: java.lang.NumberFormatException: For input string: 
> "ID:c6e2e367-d77e-11e9-9471-005056b7cdce"
>     at 
> java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
>     at java.lang.Long.parseLong(Long.java:589)
>     at java.lang.Long.parseLong(Long.java:631)
>     at 
> org.hornetq.utils.TypedProperties.getLongProperty(TypedProperties.java:330)
>     at 
> org.hornetq.core.message.impl.MessageImpl.getLongProperty(MessageImpl.java:762)
>     at 
> org.hornetq.core.persistence.impl.journal.JournalStorageManager.parseLargeMessage(JournalStorageManager.java:1764)
>     at 
> org.hornetq.core.persistence.impl.journal.JournalStorageManager.loadMessageJournal(JournalStorageManager.java:953)
>     at 
> org.hornetq.core.server.impl.HornetQServerImpl.loadJournals(HornetQServerImpl.java:1603)
>     at 
> org.hornetq.core.server.impl.HornetQServerImpl.initialisePart2(HornetQServerImpl.java:1445)
>     at 
> org.hornetq.core.server.impl.HornetQServerImpl.access$1200(HornetQServerImpl.java:138)
>     at 
> org.hornetq.core.server.impl.HornetQServerImpl$SharedStoreLiveActivation.run(HornetQServerImpl.java:1919)
>     at 
> org.hornetq.core.server.impl.HornetQServerImpl.start(HornetQServerImpl.java:366)
>     at 
> org.hornetq.jms.server.impl.JMSServerManagerImpl.start(JMSServerManagerImpl.java:269)
> {code}
>  
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to