Looks good with small comments/questions. http://codereview.appspot.com/181148/diff/12/1006 File java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java (right): http://codereview.appspot.com/181148/diff/12/1006#newcode63 java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java:63: public synchronized Gadget setGadgetFeatureRegistry(FeatureRegistry ...
15 years, 8 months ago
(2010-01-06 20:34:59 UTC)
#4
Looks good with small comments/questions.
http://codereview.appspot.com/181148/diff/12/1006
File java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java (right):
http://codereview.appspot.com/181148/diff/12/1006#newcode63
java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java:63: public
synchronized Gadget setGadgetFeatureRegistry(FeatureRegistry registry) {
I am not sure why this method need to be synchronized since each Gadget instance
is has request scope which run on a a single thread?
http://codereview.appspot.com/181148/diff/12/1005
File
java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/RpcServlet.java
(right):
http://codereview.appspot.com/181148/diff/12/1005#newcode89
java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/RpcServlet.java:89:
InputStreamReader is = new InputStreamReader(request.getInputStream(),
Should the stream reader be close in finally clause?
http://codereview.appspot.com/181148/diff/12/1006 File java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java (right): http://codereview.appspot.com/181148/diff/12/1006#newcode63 java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java:63: public synchronized Gadget setGadgetFeatureRegistry(FeatureRegistry registry) { See the comment ...
15 years, 8 months ago
(2010-01-06 21:02:07 UTC)
#5
http://codereview.appspot.com/181148/diff/12/1006
File java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java (right):
http://codereview.appspot.com/181148/diff/12/1006#newcode63
java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java:63: public
synchronized Gadget setGadgetFeatureRegistry(FeatureRegistry registry) {
See the comment below. Basic "static analysis" says if you access variables in a
synchronized block one place do it for all. As long as we are sure this is
single threaded access, then we can remove synchronized everywhere.
This is the patch it went in on:
http://fisheye6.atlassian.com/browse/shindig/trunk/java/gadgets/src/main/java...
Maybe johnh or Balaji Srinivasan could enlighten us as to why synchronized was
done.
http://codereview.appspot.com/181148/diff/12/1006#newcode98
java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java:98: public
synchronized List<String> getAllFeatures() {
This is the matching synchronize referenced above.
http://codereview.appspot.com/181148/diff/12/1005
File
java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/RpcServlet.java
(right):
http://codereview.appspot.com/181148/diff/12/1005#newcode89
java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/RpcServlet.java:89:
InputStreamReader is = new InputStreamReader(request.getInputStream(),
On 2010/01/06 20:34:59, henry.saputra wrote:
> Should the stream reader be close in finally clause?
good catch, new patch soon.
http://codereview.appspot.com/181148/diff/12/1005 File java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/RpcServlet.java (right): http://codereview.appspot.com/181148/diff/12/1005#newcode89 java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/RpcServlet.java:89: InputStreamReader is = new InputStreamReader(request.getInputStream(), The answer to your ...
15 years, 8 months ago
(2010-01-06 21:30:41 UTC)
#6
http://codereview.appspot.com/181148/diff/12/1005
File
java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/RpcServlet.java
(right):
http://codereview.appspot.com/181148/diff/12/1005#newcode89
java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/RpcServlet.java:89:
InputStreamReader is = new InputStreamReader(request.getInputStream(),
The answer to your question may not be as obvious as it seems. I've been doing a
bit of googling about closing input streams from an HttpServletRequest. Seems
most of the responses are "no, don't do it". But I have yet to find some
"official" documentation on that issue.
Anybody out there have some ideas?
Hi, Here is my 2 cents about the why synchronized is added before. - Henry ...
15 years, 8 months ago
(2010-01-07 00:38:54 UTC)
#7
Hi,
Here is my 2 cents about the why synchronized is added before.
- Henry
http://codereview.appspot.com/181148/diff/12/1006
File java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java (right):
http://codereview.appspot.com/181148/diff/12/1006#newcode63
java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java:63: public
synchronized Gadget setGadgetFeatureRegistry(FeatureRegistry registry) {
I think the synchronized keyword was added because FeatureRegistry is a
singleton the method FeatureRegistry.getFeatures is not thread safe so it needs
synchronized method to call it since FeatureRegistery also has public method
FeatureRegister.register to manipulate underlying featureMap variable accessed
by the getFeatures().
However I dont think the synchronized modifier is needed here because the Gadget
itself should be thread safe meaning that only its current thread setting
FeatureRegistry instance to it.
Please let me know if I somehow misunderstood the logic.
On 2010/01/06 21:02:08, Jon Weygandt wrote:
> See the comment below. Basic "static analysis" says if you access variables in
a
> synchronized block one place do it for all. As long as we are sure this is
> single threaded access, then we can remove synchronized everywhere.
>
> This is the patch it went in on:
>
http://fisheye6.atlassian.com/browse/shindig/trunk/java/gadgets/src/main/java...
>
> Maybe johnh or Balaji Srinivasan could enlighten us as to why synchronized was
> done.
http://codereview.appspot.com/181148/diff/12/1006 File java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java (right): http://codereview.appspot.com/181148/diff/12/1006#newcode63 java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java:63: public synchronized Gadget setGadgetFeatureRegistry(FeatureRegistry registry) { I propose to ...
15 years, 8 months ago
(2010-01-08 16:47:39 UTC)
#8
http://codereview.appspot.com/181148/diff/12/1006
File java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java (right):
http://codereview.appspot.com/181148/diff/12/1006#newcode63
java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java:63: public
synchronized Gadget setGadgetFeatureRegistry(FeatureRegistry registry) {
I propose to NOT do this change.
1) I cannot find any evidence that Gadget is used in a mulththreaded
environment.
2) If Gadget is really used in a single thread, we can remove synchronized
everywhere. But since an uncontested synchronized is cheap I won't propose to
remove it from "getAllFeatures()", this is a bug fix patch, not a clean up
patch, besides someone put it there for some reason.
3) Should it be used in a multithreaded environment: there is really more:
"directFeatureDeps" is also referenced in the getAllFeatures. There may be more
issues.
http://codereview.appspot.com/181148/diff/12/1005
File
java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/RpcServlet.java
(right):
http://codereview.appspot.com/181148/diff/12/1005#newcode89
java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/RpcServlet.java:89:
InputStreamReader is = new InputStreamReader(request.getInputStream(),
I'm going to propose that for this fix, we do NOT close the input stream.
1) Seems the general consensus from a google search is not to close it.
2) Searching some code of app servers shows the stream is really wrapped (e.g.
not direct to a socket), closing it would do no harm. (which seems to be why
people say not to close it)
3) So far no one has reported any memory leaks in this area for Shindig.
4) This bug focus on fixing character encoding.
http://codereview.appspot.com/181148/diff/12/1006 File java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java (right): http://codereview.appspot.com/181148/diff/12/1006#newcode63 java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java:63: public synchronized Gadget setGadgetFeatureRegistry(FeatureRegistry registry) { Yeah I agree ...
15 years, 8 months ago
(2010-01-08 19:17:23 UTC)
#9
http://codereview.appspot.com/181148/diff/12/1006
File java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java (right):
http://codereview.appspot.com/181148/diff/12/1006#newcode63
java/gadgets/src/main/java/org/apache/shindig/gadgets/Gadget.java:63: public
synchronized Gadget setGadgetFeatureRegistry(FeatureRegistry registry) {
Yeah I agree uncontested synchronized wont cause problem.
+1
On 2010/01/08 16:47:39, Jon Weygandt wrote:
> I propose to NOT do this change.
>
> 1) I cannot find any evidence that Gadget is used in a mulththreaded
> environment.
>
> 2) If Gadget is really used in a single thread, we can remove synchronized
> everywhere. But since an uncontested synchronized is cheap I won't propose to
> remove it from "getAllFeatures()", this is a bug fix patch, not a clean up
> patch, besides someone put it there for some reason.
>
> 3) Should it be used in a multithreaded environment: there is really more:
> "directFeatureDeps" is also referenced in the getAllFeatures. There may be
more
> issues.
>
http://codereview.appspot.com/181148/diff/12/1005
File
java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/RpcServlet.java
(right):
http://codereview.appspot.com/181148/diff/12/1005#newcode89
java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/RpcServlet.java:89:
InputStreamReader is = new InputStreamReader(request.getInputStream(),
+1
On 2010/01/08 16:47:39, Jon Weygandt wrote:
> I'm going to propose that for this fix, we do NOT close the input stream.
> 1) Seems the general consensus from a google search is not to close it.
> 2) Searching some code of app servers shows the stream is really wrapped (e.g.
> not direct to a socket), closing it would do no harm. (which seems to be why
> people say not to close it)
> 3) So far no one has reported any memory leaks in this area for Shindig.
> 4) This bug focus on fixing character encoding.
Done.
Issue 181148: [SHINDIG-1256] Fixing several small bugs
Created 15 years, 8 months ago by Jon Weygandt
Modified 10 years, 12 months ago
Reviewers: shindig.remailer_gmail.com, henry.saputra
Base URL: http://svn.apache.org/repos/asf/incubator/shindig/trunk/
Comments: 19