On Thu, 2008-08-28 at 07:44 -0400, Vadim Gritsenko wrote: > On Aug 26, 2008, at 3:59 AM, Thorsten Scherler wrote: > > > On Mon, 2008-08-25 at 20:23 -0400, Vadim Gritsenko wrote: > >> On Aug 25, 2008, at 6:40 AM, Thorsten Scherler wrote: > > ... > >> Yes, ObjectModelHelper.REQUEST_OBJECT object is always unique. It is > >> actually unique in any environment. And since it is unique, it does > >> not make sense to lock on it at all - lock on unique object serves no > >> purpose :-) > > > > Makes me wonder since HttpServletRequest is always unique as well > > due to > > the headers, so does not violate as well the whole locking? > > HttpServletRequest is unique only in context of external request; but > it is same for multiple sub-requests of single external request. > Similarly, CommandLineRequest would be unique per single external > request, but shared across sub-requests. > > At the same time, ObjectModelHelper.REQUEST_OBJECT will be always > unique: it will either be HttpServletRequest/CommandLineRequest for > top level, or Wrapper for nested requests. > > > > >> You could, for example, have same effect with code: > >> > >> // Avoids NPE, does nothing > >> if (lock == null) lock = new Object(); > >> > >> > >> To get back to the problem... The original goal of pipeline locking > >> was to prevent separate external requests to start generating cached > >> response for the same resource-intensive resource. In other words, if > >> too external requests both (directly or through aggregation) hit '/ > >> slow/cached/foo' resource, only one request will trigger this > >> pipeline, while another will wait for the first to complete. > >> > >> This logic, in turn, had to be augmented to exclude single external > >> request hitting the same slow resource twice due to aggregation (and > >> parallel aggregation), hence locking against top level external > >> request was implemented. > >> > > > > Understand but I am confused due to the above fact that the > > HttpServletRequest is as well unique as it is my understanding. > > > >> Now, in situation when CommandLineEnvironment is used from the, ahem, > >> command line, two external requests will not happen. Which means that > >> whole pipeline locking thing is irrelevant and can be omitted > >> completely (like in 'lock = new Object()' snippet above). But, the > >> same CommandLineEnvironment stuff can be used in multi threaded > >> environment which uses the CocoonBean class. So, strictly speaking, > >> in > >> this scenario locking still should be performed against external > >> request object, and not against any RequestWrapper which is unique > >> for > >> each sub-request. > > > > I now are using the url as lock key since as I understand it perfectly > > qualifies as lock key. > > Why not CommandLineRequest?
Hmm, because it would be the same as ObjectModelHelper.REQUEST_OBJECT this.objectModel.put(ObjectModelHelper.REQUEST_OBJECT, new CommandLineRequest(this, null, uri, null, attributes, parameters, headers)); However if you recommend to do: CommandLineRequest request = new CommandLineRequest(this, null, uri, null, attributes, parameters, headers); this.objectModel.put(ObjectModelHelper.REQUEST_OBJECT, request); this.objectModel.put(CLI_REQUEST, request); That is as well fine with me. wdyt? Thanks for your feedback. salu2 > > > > The patch is attached to COCOON-2241. As soon you are ok with it I > > will > > commit it. > > I'd rather use CommandLineRequest; or at least change one line to be: > > this.objectModel.put(CLI_REQUEST_ID, new String(uri)); > > > > Vadim > > > > Thanks for your patience. > > > > salu2 > > > >> > >> Hope now it all makes more sense. > >> > >> Regards, > >> Vadim > >> > >> > >>> In comparison the HttpEnvironment has in the constructor: > >>> this.objectModel.put(HTTP_REQUEST_OBJECT, req); > >>> where HttpServletRequest req. > >>> > >>> The uniqueness in both cases are, as I understand, the headers. > >>> > >>> salu2 > >> > > -- > > Thorsten Scherler > > thorsten.at.apache.org > > Open Source Java consulting, training and > > solutions > > > -- Thorsten Scherler thorsten.at.apache.org Open Source Java consulting, training and solutions