-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
HTTP 500 fix when having many requests in parallel #283
base: branch-5.0
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I didn't run the code but the change makes sense to me! Thanks, @ErykKul!
@@ -109,7 +108,7 @@ protected void writeXml(XmlWriter writer) throws IOException { | |||
|
|||
String firstChars = new String(bytes, StandardCharsets.UTF_8); | |||
// match the start with the compiled regex and replace with nothing when matching. | |||
firstChars = xmlDeclaration.reset(firstChars).replaceFirst(""); | |||
firstChars = xmlDeclaration.matcher(firstChars).replaceFirst(""); | |||
|
|||
// write the chars to the output stream | |||
writer.getOutputStream().write(firstChars.getBytes(StandardCharsets.UTF_8)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm just leaving this comment at the bottom.
The Sonar test is failing with the same error we saw in this issue:
@@ -14,7 +14,6 @@ | |||
import java.io.InputStream; | |||
import java.nio.charset.StandardCharsets; | |||
import java.util.Objects; | |||
import java.util.regex.Matcher; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I haven't run the code but yes, what @ErykKul is saying about thread safety seems well documented.
"Instances of this class are not safe for use by multiple concurrent threads." -- https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/regex/Matcher.html
"Instances of this class are immutable and are safe for use by multiple concurrent threads. Instances of the Matcher class are not safe for such use." -- https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/regex/Pattern.html
So, yes, it sounds good to me to swap Matcher for Pattern!
Hi,
We have implemented an OAI interface using this library and our DB as source. When doing a load test, we noticed some HTTP 500 errors caused by the use of an instance (in a static field) of the java.util.regex.Matcher class, which is not safe to use in concurrent threads. In this PR, the static field is replaced by an instance of java.util.regex.Pattern class, which is thread safe, and should fix the problem.