[CF-Talk] RE: cflocking.. -- ATTENTION -- MY CASE STUDY

2000-09-18 Thread Mike Amburn

 Yes but during that test were those variables being written to at
 the same time? I beleive that if you do a read without locking,
 and a write occurs or is occuring at the same time, you will have
 problems.
 
 But what if there is no writing? Say you setup a datasource name if
 its not defined. Then thats it, it will never be written to again
 until the server restarts and application variables are lost.
 
 In this situation can't you do reads without locking?

after the application loaded, there were no additional variables being
written, just read. and yes, that was what caused the fatalities.

there is a setting in CF Admin that can do the read locks automatically.
that is what we're currently using and even under load testing we cannot
find any real performance degradation.

i know it sounds really bad. i've asked myself over and over "why the
#$(* did allaire implement something that would force me to possibly
rewrite everything i've done". to tell you the truth, that's exactly why
we'll be moving to JSP/EJB in the next six months -- vendor
independence. i can only wonder how many other development companies
have or will be moving off ColdFusion because v4.5 was so unstable and
questionable.

-mike
--
Archives: http://www.mail-archive.com/cf-talk@houseoffusion.com/
To Unsubscribe visit 
http://www.houseoffusion.com/index.cfm?sidebarRstsbodyRsts/cf_talk or send a message 
to [EMAIL PROTECTED] with 'unsubscribe' in the body.



Re: cflocking.. -- ATTENTION -- MY CASE STUDY

2000-09-17 Thread Xing Li

I totally agree with you Al. The final judgement should be on our shoulders.
Give us the extra option and we will know which will be the best strategy
for our unique situations. Even though I love speed, I would take stability
any day. I don't mind a few  a few milliseconds here and there but I do mind
coming in to the server room on a weekend because the coldfusion service has
stopped responding again. =)

Adding cflocks aren't that bad at all but I would still like the option. I
think allaire should concentrate on stability a little more to be honest.

Xing

 From: "Al Musella, DPM" [EMAIL PROTECTED]
 Reply-To: [EMAIL PROTECTED]
 Date: Sat, 16 Sep 2000 20:57:26 -0400
 To: [EMAIL PROTECTED]
 Subject: RE: cflocking.. -- ATTENTION -- MY CASE STUDY
 
 
 I read that paper, and still would like to have an option for automatic
 locking. Maybe add an attribute to the cfapplication tag:  automatic
 locking: on |off
 The development time saved on it will more than offset the cost of a
 faster processor needed for the 2 or 3 microseconds added to each template
 that will be wasted:)  And if you have a transaction problem or a
 performance problem, you can do it manually. The best of both worlds.
 I think this one issue is what made  Turbobasic and quickbasic such a
 hit in the 80s and early 90s and VB now. You didn't have to worry about nit
 picky little things that could crash your program, but which would be
 easily automated.  Developers were free to just worry about the logic.
 
 Do you agree with Allaire's reasoning?
 (By the way - I am a big fan of CF from way back in the 2.0 years..
 
 Al Musella
 a1webs.com
 
 
 Yes, they explained why.  See Allaire's recent paper,
 "ColdFusion Locking Best Practices"
 http://www.allaire.com/handlers/index.cfm?ID=17318Method=Full
 
 best,  paul
 
 At 11:56 AM 9/16/00 -0400, you wrote:
 Why can't cold fusion just automatically lock
 them? Has Allaire ever responded on this issue?
 
 

- -
 
 --
 Archives: http://www.mail-archive.com/cf-talk@houseoffusion.com/
 To Unsubscribe visit
 http://www.houseoffusion.com/index.cfm?sidebar=listsbody=lists/cf_talk or
 send a message to [EMAIL PROTECTED] with 'unsubscribe' in the
 body.

--
Archives: http://www.mail-archive.com/cf-talk@houseoffusion.com/
To Unsubscribe visit 
http://www.houseoffusion.com/index.cfm?sidebar=listsbody=lists/cf_talk or send a 
message to [EMAIL PROTECTED] with 'unsubscribe' in the body.



RE: cflocking.. -- ATTENTION -- MY CASE STUDY

2000-09-17 Thread Peter Theobald

html
font size=3I agree. The article claims they don't automate locking for
(1) performance issues. Well, if I do all the same locks by hand the
performance will be WORSE, and (2) to give the developer the option to do
less granular locks. How about giving me the option to set a manual lock
but otherwise automatically locking it?br
br
This issue is going to become a major problem as scores of
unsophisticated Cold Fusion developers create sites that crash. Cold
Fusion will get a reputation for being unstable NO MATTER that it is the
developer's fault.br
br
At 08:57 PM 9/16/00 -0400, Al Musella, DPM wrote:br
br
blockquote type=cite citenbsp;nbsp;nbsp; I read that paper, and
still would like to have an option for automatic br
locking. Maybe add an attribute to the cfapplication tag:nbsp; automatic
br
locking: on |offbr
nbsp;nbsp;nbsp; The development time saved on it will more than offset
the cost of a br
faster processor needed for the 2 or 3 microseconds added to each
template br
that will be wasted:)nbsp; And if you have a transaction problem or a
br
performance problem, you can do it manually. The best of both
worlds.br
nbsp;nbsp;nbsp;nbsp; I think this one issue is what madenbsp;
Turbobasic and quickbasic such a br
hit in the 80s and early 90s and VB now. You didn't have to worry about
nit br
picky little things that could crash your program, but which would be
br
easily automated.nbsp; Developers were free to just worry about the
logic.br
br
Do you agree with Allaire's reasoning?br
nbsp;nbsp; (By the way - I am a big fan of CF from way back in the 2.0
years..br
br
Al Musellabr
a1webs.combr
br
br
Yes, they explained why.nbsp; See Allaire's recent paper,br
gt;quot;ColdFusion Locking Best Practicesquot;br
gt;a href="http://www.allaire.com/handlers/index.cfm?ID=17318amp;Method=Full" 
eudora="autourl"http://www.allaire.com/handlers/index.cfm?ID=17318amp;Method=Full/abr
gt;br
gt;best,nbsp; paulbr
gt;br
gt;At 11:56 AM 9/16/00 -0400, you wrote:br
gt; gt;Why can't cold fusion just automatically lockbr
gt; gt;them? Has Allaire ever responded on this issue?br
gt;br
gt;--br
br
--br
Archives:
a href="http://www.mail-archive.com/cf-talk@houseoffusion.com/" 
eudora="autourl"http://www.mail-archive.com/cf-talk@houseoffusion.com//abr
To Unsubscribe visit
a href="http://www.houseoffusion.com/index.cfm?sidebar=listsamp;body=lists/cf_talk" 
eudora="autourl"http://www.houseoffusion.com/index.cfm?sidebar=listsamp;body=lists/cf_talk/a
or send a message to [EMAIL PROTECTED] with 'unsubscribe' in the body. 
/font/blockquotebr

br
-font 
size=3--br
Peter Theobald, Chief Technology Officerbr
LiquidStreaming a href="http://www.liquidstreaming.com/" 
eudora="autourl"http://www.liquidstreaming.com/abr
[EMAIL PROTECTED]br
Phone 1.212.545.1232 Fax 1.212.679.8032br
/font/html

--
Archives: http://www.mail-archive.com/cf-talk@houseoffusion.com/
To Unsubscribe visit 
http://www.houseoffusion.com/index.cfm?sidebar=listsbody=lists/cf_talk or send a 
message to [EMAIL PROTECTED] with 'unsubscribe' in the body.



Re: cflocking.. -- ATTENTION -- MY CASE STUDY

2000-09-17 Thread [EMAIL PROTECTED]

say, there is a cool regex example in Ben's "Advanced Cold Fusion (Green)"
book dealing with
ParamaterExists()

Anyone want to build one for Locking?

--
Archives: http://www.mail-archive.com/cf-talk@houseoffusion.com/
To Unsubscribe visit 
http://www.houseoffusion.com/index.cfm?sidebar=listsbody=lists/cf_talk or send a 
message to [EMAIL PROTECTED] with 'unsubscribe' in the body.



RE: cflocking.. -- ATTENTION -- MY CASE STUDY

2000-09-16 Thread Al Musella, DPM


IF all reads and writes of memory variables have to be locked, why do we 
have to be concerned with it? Why can't cold fusion just automatically lock 
them? Has Allaire ever responded on this issue?  Maybe we could all email 
the request to allaire?
I have thousands of templates that were written before this issue came 
into being, that don't have locks. That is probably the #1 reason for 
instability in my server:)


Al Musella
World Wide Websites


At 03:12 PM 9/15/2000 -0400, you wrote:
Yeah I thought it was agreed that all memory locking was suggested. Even in
my presentation that I gave over a month ago I stated in there that there
was disagreement but basically every memory variable whether written or read
had to be locked. Ben Forta disagreed with that since his article had stated
it was ok to not lock reads of memory variable(if he changed that I do not
know), but as you can see with the performance test it was needed.

Robert Everland III

--
Archives: http://www.mail-archive.com/cf-talk@houseoffusion.com/
To Unsubscribe visit 
http://www.houseoffusion.com/index.cfm?sidebar=listsbody=lists/cf_talk or send a 
message to [EMAIL PROTECTED] with 'unsubscribe' in the body.



RE: cflocking.. -- ATTENTION -- MY CASE STUDY

2000-09-16 Thread paul smith

Yes, they explained why.  See Allaire's recent paper,
"ColdFusion Locking Best Practices"
http://www.allaire.com/handlers/index.cfm?ID=17318Method=Full

best,  paul

At 11:56 AM 9/16/00 -0400, you wrote:
Why can't cold fusion just automatically lock
them? Has Allaire ever responded on this issue?

--
Archives: http://www.mail-archive.com/cf-talk@houseoffusion.com/
To Unsubscribe visit 
http://www.houseoffusion.com/index.cfm?sidebar=listsbody=lists/cf_talk or send a 
message to [EMAIL PROTECTED] with 'unsubscribe' in the body.



RE: cflocking.. -- ATTENTION -- MY CASE STUDY

2000-09-16 Thread Al Musella, DPM


I read that paper, and still would like to have an option for automatic 
locking. Maybe add an attribute to the cfapplication tag:  automatic 
locking: on |off
The development time saved on it will more than offset the cost of a 
faster processor needed for the 2 or 3 microseconds added to each template 
that will be wasted:)  And if you have a transaction problem or a 
performance problem, you can do it manually. The best of both worlds.
 I think this one issue is what made  Turbobasic and quickbasic such a 
hit in the 80s and early 90s and VB now. You didn't have to worry about nit 
picky little things that could crash your program, but which would be 
easily automated.  Developers were free to just worry about the logic.

Do you agree with Allaire's reasoning?
   (By the way - I am a big fan of CF from way back in the 2.0 years..

Al Musella
a1webs.com


Yes, they explained why.  See Allaire's recent paper,
"ColdFusion Locking Best Practices"
http://www.allaire.com/handlers/index.cfm?ID=17318Method=Full

best,  paul

At 11:56 AM 9/16/00 -0400, you wrote:
 Why can't cold fusion just automatically lock
 them? Has Allaire ever responded on this issue?

--

--
Archives: http://www.mail-archive.com/cf-talk@houseoffusion.com/
To Unsubscribe visit 
http://www.houseoffusion.com/index.cfm?sidebar=listsbody=lists/cf_talk or send a 
message to [EMAIL PROTECTED] with 'unsubscribe' in the body.



RE: cflocking.. -- ATTENTION -- MY CASE STUDY

2000-09-15 Thread Peter Theobald

html
font size=3Oh. That may be true, but it is important to point out that
that is wrong and won't work.br
br
At 01:16 PM 9/14/00 -0400, Mike Amburn wrote:br
blockquote type=cite citei'd disagree... if you look back over all the
emails in all of thebr
threads, you should see that more people only lock writes versus
lockingbr
both. that consensus by the majority is what i was commenting too.br
br
-mikebr
br
gt; -Original Message-br
gt; From: Peter Theobald
[a href="mailto:[EMAIL PROTECTED]" 
eudora="autourl"mailto:[EMAIL PROTECTED]/a]br
gt; Sent: Wednesday, September 13, 2000 8:30 PMbr
gt; To: [EMAIL PROTECTED]br
gt; Subject: RE: cflocking.. -- ATTENTION -- MY CASE STUDYbr
gt; br
gt; br
gt; The consensus was *NEVER* that you didn't have to lock reads.br
gt; Cold Fusion doesn't FORCE locking - it is up to you to lock br
gt; access to an Application variable.br
gt; If you lock the writes but don't lock the reads, then when br
gt; Cold Fusion comes upon a read without a lock it will blindly br
gt; run the read even if there is a (locked) write executing at br
gt; the same time. In other words, locking writes without locking br
gt; reads is completely useless.br
gt; br
gt; All an Exclusive lock does is mark the variable so that br
gt; ANOTHER ATTEMPT TO LOCK IT will have to wait until the lock is
freed. br
gt; It is totally up to YOUR LOCKS to ensure the variable is not br
gt; used by two threads at the same time.br
gt; br
gt; br
gt; At 06:05 PM 9/13/00 -0400, Mike Amburn wrote:br
gt; gt;i've been following the CFLOCK threads for months and months
br
gt; now. i evenbr
gt; gt;started several. unfortunately, the problem is that there br
gt; doesn't seembr
gt; gt;to be any consensus on what's the end-all, be-all, br
gt; definitive answer tobr
gt; gt;the question quot;do you have to lock reads or just
writes?quot; now i can'tbr
gt; gt;speak for anyone else, however, i can tell you what we found
br
gt; during loadbr
gt; gt;testing and you can do judge for yourself.br
gt; gt;br
gt; gt;recently, we hired Allaire to come in and load test (usingbr
gt; gt;SilkPerformer) one of our main applications, which is
incrediblybr
gt; gt;database intensive and uses a lot of CFMODULES and br
gt; application variablesbr
gt; gt;(no client or session variables). before the test, the br
gt; application ranbr
gt; gt;perfect under normal load. however, as soon as we added
simultaneousbr
gt; gt;load (users requesting the same resources at the same exact
time), webr
gt; gt;immediately crashed with deadlocks in the database and
applicationbr
gt; gt;errors. again, runs perfect with all of our customers in br
gt; production, butbr
gt; gt;fails immediately under load.br
gt; gt;br
gt; gt;up until this point, our strategy had followed the majority
br
gt; consensus:br
gt; gt;lock your writes, but not your reads. however, after 14 hours
ofbr
gt; gt;analyzing the problems of the load testing between Allaire and
I, webr
gt; gt;finally just enabled the auto-locking capabilities in CF br
gt; Admin to see ifbr
gt; gt;that did anything. (keep in mind, the Allaire rep had warned
beforebr
gt; gt;about locking reads) the result after enabling auto-lock? br
gt; not a singlebr
gt; gt;problem for the remainder of the engagement! that's right...
br
gt; no errors,br
gt; gt;no deadlocks, nothing. it functioned under load BEAUTIFULLY with
thebr
gt; gt;auto-lock enabled until we finally got the numbers we wanted
andbr
gt; gt;finished the analysis.br
gt; gt;br
gt; gt;so again, i don't want to argue with anyone about their own
strategy.br
gt; gt;however, seeing it happen right in front of my eyes has me
absolutelybr
gt; gt;convinced WITHOUT A SHADOW OF A DOUBT that allaire is br
gt; COMPLETELY correctbr
gt; gt;when they suggest everyone lock BOTH application writes AND
br
gt; reads. andbr
gt; gt;to tell you the truth, the performance hit for using the br
gt; auto-lock seemsbr
gt; gt;to be very minimal (at least on our application) so don't br
gt; worry too muchbr
gt; gt;about that if you don't want to go back and insert all the
read-onlybr
gt; gt;locks.br
gt; gt;br
gt; gt;so that's my two cents. hope it helps. =)br
gt; gt;br
gt; gt;-mikebr
gt;
gt;-br
gt; -br
gt; gt;Archives:
a href="http://www.mail-archive.com/cf-talk@houseoffusion.com/" 
eudora="autourl"http://www.mail-archive.com/cf-talk@houseoffusion.com//abr
gt; gt;To Unsubscribe visit br
gt;
a href="http://www.houseoffusion.com/index.cfm?sidebarstsamp;bodysts/cf_t" 
eudora="autourl"http://www.houseoffusion.com/index.cfm?sidebarstsamp;bodysts/cf_t/abr
alk or send a message to [EMAIL PROTECTED] withbr
'unsubscribe' in the body. br
br
br
br
---br
Peter Theobald, Chief Technology Officerbr
LiquidStreaming
a href="http://www.liquidstreaming.com/" 
eudora="autourl"http://www.liquidstreaming.com/abr
[EMAIL PROTECTED]br
Phone 1.212.545.1232 Fax 1.212.679.8032br

RE: cflocking.. -- ATTENTION -- MY CASE STUDY

2000-09-15 Thread Dave Watts

 The sad thing is this pretty much means that Allaire is 
 admitting that the memory model in CF needs serious work. 
 I'm paraphrasing of course ;) The way CF deals with memory 
 in general is pretty weak. "Restart the service to release 
 unused memory" is not my idea of an acceptable policy. As 
 it's been explained to me by various people, including some 
 Allaire folks, the memory model is also the source of the 
 problems associated with not having an OnSessionTimeout or 
 OnSessionEnd function/template. Basically, the server doesn't 
 "know" when a session ends. It looks at the timeout parameter 
 of each session and simply makes the ones that are past the 
 current time inaccessible, or, I should say, refuses to read 
 them. From what I've been told, the information still exists 
 in memory until it is overwritten by new information. Has 
 anyone tried using low-level diagnostics to see if they can
 access session information that has expired, i.e. test whether 
 the information truly remains until overwritten? Don't anyone 
 go writing a CFX that allows you to do this, if it's possible. 
 That would be too cool and might make Allaire look bad ;)

I'd like to differ slightly from your conclusion.

In CF 4.5.x, the memory model changed so that CF would no longer release any
memory that the service acquired. This actually was a change in the
third-party memory manager, SmartHeap, used by CF. It doesn't matter whether
the memory is consumed with session variables, cached queries, or whatever -
CF simply won't release it. Whether the original information is still stored
in memory or not doesn't really matter, as long as it's marked for deletion.

The justification for this behavior is that CF is designed to be the
"dominant" service on a box, and thus should be the only service consuming
any serious resources - the typical NT deployment model of one service per
machine. By holding on to acquired memory, CF can avoid the relatively
significant costs involved in releasing and reacquiring memory. As long as
the CF service can reuse the memory previously acquired, then there
shouldn't be any problems.

The real problem comes in when you have a component which causes a memory
leak. For example, a while back I found that the Oracle client library in
use on a specific server had a severe memory leak. Because of this, CF would
continually consume more memory, even though it had already acquired enough
to perform a repetition of previous activity. Eventually, the server would
run out of memory and crash. However, if you have an environment without
memory leaks, CF's behavior isn't necessarily unreliable or weak. It simply
assumes that everything else (outside of CF) is in perfect working order.

Personally, given the likelihood of memory problems in ODBC components and
other things, I'd prefer that CF used the "release and reacquire" process as
it did prior to 4.5.x. However, this isn't a "weak" memory model - it's
simply a prioritization of performance over stability. Throughout the
history of the CF product, Allaire has always favored performance over
stability whenever the two may conflict.

Dave Watts, CTO, Fig Leaf Software
http://www.figleaf.com/
voice: (202) 797-5496
fax: (202) 797-5444
--
Archives: http://www.mail-archive.com/cf-talk@houseoffusion.com/
To Unsubscribe visit 
http://www.houseoffusion.com/index.cfm?sidebar=listsbody=lists/cf_talk or send a 
message to [EMAIL PROTECTED] with 'unsubscribe' in the body.



RE: cflocking.. -- ATTENTION -- MY CASE STUDY

2000-09-15 Thread Dave Watts

 i'd disagree... if you look back over all the emails in all 
 of the threads, you should see that more people only lock 
 writes versus locking both. that consensus by the majority 
 is what i was commenting too.

You may see more emails here recommending the locking of writes only, but
that's not a consensus. A consensus is not the same as a majority. If one
faction disagrees violently, you don't have a consensus.

In any case, the guys at Allaire, from the lead developer on down, have
recommended locking all access to memory variables. They might have offered
differing opinions on how to best do that, but they've all agreed that it
should be done. I'm surprised that you're surprised at your outcome!

Dave Watts, CTO, Fig Leaf Software
http://www.figleaf.com/
voice: (202) 797-5496
fax: (202) 797-5444
--
Archives: http://www.mail-archive.com/cf-talk@houseoffusion.com/
To Unsubscribe visit 
http://www.houseoffusion.com/index.cfm?sidebar=listsbody=lists/cf_talk or send a 
message to [EMAIL PROTECTED] with 'unsubscribe' in the body.



RE: cflocking.. -- ATTENTION -- MY CASE STUDY

2000-09-15 Thread Robert Everland

Yeah I thought it was agreed that all memory locking was suggested. Even in
my presentation that I gave over a month ago I stated in there that there
was disagreement but basically every memory variable whether written or read
had to be locked. Ben Forta disagreed with that since his article had stated
it was ok to not lock reads of memory variable(if he changed that I do not
know), but as you can see with the performance test it was needed.

Robert Everland III
Web Developer
Dixon Ticonderoga


-Original Message-
From: Dave Watts [mailto:[EMAIL PROTECTED]]
Sent: Friday, September 15, 2000 1:08 PM
To: '[EMAIL PROTECTED]'
Cc: '[EMAIL PROTECTED]'
Subject: RE: cflocking.. -- ATTENTION -- MY CASE STUDY


 i'd disagree... if you look back over all the emails in all 
 of the threads, you should see that more people only lock 
 writes versus locking both. that consensus by the majority 
 is what i was commenting too.

You may see more emails here recommending the locking of writes only, but
that's not a consensus. A consensus is not the same as a majority. If one
faction disagrees violently, you don't have a consensus.

In any case, the guys at Allaire, from the lead developer on down, have
recommended locking all access to memory variables. They might have offered
differing opinions on how to best do that, but they've all agreed that it
should be done. I'm surprised that you're surprised at your outcome!

Dave Watts, CTO, Fig Leaf Software
http://www.figleaf.com/
voice: (202) 797-5496
fax: (202) 797-5444

--
Archives: http://www.mail-archive.com/cf-talk@houseoffusion.com/
To Unsubscribe visit
http://www.houseoffusion.com/index.cfm?sidebar=listsbody=lists/cf_talk or
send a message to [EMAIL PROTECTED] with 'unsubscribe' in
the body.
--
Archives: http://www.mail-archive.com/cf-talk@houseoffusion.com/
To Unsubscribe visit 
http://www.houseoffusion.com/index.cfm?sidebar=listsbody=lists/cf_talk or send a 
message to [EMAIL PROTECTED] with 'unsubscribe' in the body.



RE: cflocking.. -- ATTENTION -- MY CASE STUDY

2000-09-15 Thread Ryan

At 15:12 9/15/00 -0400, you wrote:
Yeah I thought it was agreed that all memory locking was suggested. Even in
my presentation that I gave over a month ago I stated in there that there
was disagreement but basically every memory variable whether written or read
had to be locked. Ben Forta disagreed with that since his article had stated
it was ok to not lock reads of memory variable(if he changed that I do not
know), but as you can see with the performance test it was needed.

Yes but during that test were those variables being written to at
the same time? I beleive that if you do a read without locking,
and a write occurs or is occuring at the same time, you will have
problems.

But what if there is no writing? Say you setup a datasource name if
its not defined. Then thats it, it will never be written to again
until the server restarts and application variables are lost.

In this situation can't you do reads without locking?

Ryan

--
Archives: http://www.mail-archive.com/cf-talk@houseoffusion.com/
To Unsubscribe visit 
http://www.houseoffusion.com/index.cfm?sidebar=listsbody=lists/cf_talk or send a 
message to [EMAIL PROTECTED] with 'unsubscribe' in the body.



RE: cflocking.. -- ATTENTION -- MY CASE STUDY

2000-09-14 Thread Mike Amburn

i'd disagree... if you look back over all the emails in all of the
threads, you should see that more people only lock writes versus locking
both. that consensus by the majority is what i was commenting too.

-mike

 -Original Message-
 From: Peter Theobald [mailto:[EMAIL PROTECTED]]
 Sent: Wednesday, September 13, 2000 8:30 PM
 To: [EMAIL PROTECTED]
 Subject: RE: cflocking.. -- ATTENTION -- MY CASE STUDY
 
 
 The consensus was *NEVER* that you didn't have to lock reads.
 Cold Fusion doesn't FORCE locking - it is up to you to lock 
 access to an Application variable.
 If you lock the writes but don't lock the reads, then when 
 Cold Fusion comes upon a read without a lock it will blindly 
 run the read even if there is a (locked) write executing at 
 the same time. In other words, locking writes without locking 
 reads is completely useless.
 
 All an Exclusive lock does is mark the variable so that 
 ANOTHER ATTEMPT TO LOCK IT will have to wait until the lock is freed. 
 It is totally up to YOUR LOCKS to ensure the variable is not 
 used by two threads at the same time.
 
 
 At 06:05 PM 9/13/00 -0400, Mike Amburn wrote:
 i've been following the CFLOCK threads for months and months 
 now. i even
 started several. unfortunately, the problem is that there 
 doesn't seem
 to be any consensus on what's the end-all, be-all, 
 definitive answer to
 the question "do you have to lock reads or just writes?" now i can't
 speak for anyone else, however, i can tell you what we found 
 during load
 testing and you can do judge for yourself.
 
 recently, we hired Allaire to come in and load test (using
 SilkPerformer) one of our main applications, which is incredibly
 database intensive and uses a lot of CFMODULES and 
 application variables
 (no client or session variables). before the test, the 
 application ran
 perfect under normal load. however, as soon as we added simultaneous
 load (users requesting the same resources at the same exact time), we
 immediately crashed with deadlocks in the database and application
 errors. again, runs perfect with all of our customers in 
 production, but
 fails immediately under load.
 
 up until this point, our strategy had followed the majority 
 consensus:
 lock your writes, but not your reads. however, after 14 hours of
 analyzing the problems of the load testing between Allaire and I, we
 finally just enabled the auto-locking capabilities in CF 
 Admin to see if
 that did anything. (keep in mind, the Allaire rep had warned before
 about locking reads) the result after enabling auto-lock? 
 not a single
 problem for the remainder of the engagement! that's right... 
 no errors,
 no deadlocks, nothing. it functioned under load BEAUTIFULLY with the
 auto-lock enabled until we finally got the numbers we wanted and
 finished the analysis.
 
 so again, i don't want to argue with anyone about their own strategy.
 however, seeing it happen right in front of my eyes has me absolutely
 convinced WITHOUT A SHADOW OF A DOUBT that allaire is 
 COMPLETELY correct
 when they suggest everyone lock BOTH application writes AND 
 reads. and
 to tell you the truth, the performance hit for using the 
 auto-lock seems
 to be very minimal (at least on our application) so don't 
 worry too much
 about that if you don't want to go back and insert all the read-only
 locks.
 
 so that's my two cents. hope it helps. =)
 
 -mike
 -
 -
 Archives: http://www.mail-archive.com/cf-talk@houseoffusion.com/
 To Unsubscribe visit 
 http://www.houseoffusion.com/index.cfm?sidebarstsbodysts/cf_t
alk or send a message to [EMAIL PROTECTED] with
'unsubscribe' in the body. 



---
Peter Theobald, Chief Technology Officer
LiquidStreaming http://www.liquidstreaming.com
[EMAIL PROTECTED]
Phone 1.212.545.1232 Fax 1.212.679.8032


--
Archives: http://www.mail-archive.com/cf-talk@houseoffusion.com/
To Unsubscribe visit
http://www.houseoffusion.com/index.cfm?sidebar=listsbody=lists/cf_talk
or send a message to [EMAIL PROTECTED] with
'unsubscribe' in the body.
--
Archives: http://www.mail-archive.com/cf-talk@houseoffusion.com/
To Unsubscribe visit 
http://www.houseoffusion.com/index.cfm?sidebarRstsbodyRsts/cf_talk or send a message 
to [EMAIL PROTECTED] with 'unsubscribe' in the body.



RE: cflocking.. -- ATTENTION -- MY CASE STUDY

2000-09-13 Thread Mike Amburn

i've been following the CFLOCK threads for months and months now. i even
started several. unfortunately, the problem is that there doesn't seem
to be any consensus on what's the end-all, be-all, definitive answer to
the question "do you have to lock reads or just writes?" now i can't
speak for anyone else, however, i can tell you what we found during load
testing and you can do judge for yourself.

recently, we hired Allaire to come in and load test (using
SilkPerformer) one of our main applications, which is incredibly
database intensive and uses a lot of CFMODULES and application variables
(no client or session variables). before the test, the application ran
perfect under normal load. however, as soon as we added simultaneous
load (users requesting the same resources at the same exact time), we
immediately crashed with deadlocks in the database and application
errors. again, runs perfect with all of our customers in production, but
fails immediately under load.

up until this point, our strategy had followed the majority consensus:
lock your writes, but not your reads. however, after 14 hours of
analyzing the problems of the load testing between Allaire and I, we
finally just enabled the auto-locking capabilities in CF Admin to see if
that did anything. (keep in mind, the Allaire rep had warned before
about locking reads) the result after enabling auto-lock? not a single
problem for the remainder of the engagement! that's right... no errors,
no deadlocks, nothing. it functioned under load BEAUTIFULLY with the
auto-lock enabled until we finally got the numbers we wanted and
finished the analysis.

so again, i don't want to argue with anyone about their own strategy.
however, seeing it happen right in front of my eyes has me absolutely
convinced WITHOUT A SHADOW OF A DOUBT that allaire is COMPLETELY correct
when they suggest everyone lock BOTH application writes AND reads. and
to tell you the truth, the performance hit for using the auto-lock seems
to be very minimal (at least on our application) so don't worry too much
about that if you don't want to go back and insert all the read-only
locks.

so that's my two cents. hope it helps. =)

-mike
--
Archives: http://www.mail-archive.com/cf-talk@houseoffusion.com/
To Unsubscribe visit 
http://www.houseoffusion.com/index.cfm?sidebarRstsbodyRsts/cf_talk or send a message 
to [EMAIL PROTECTED] with 'unsubscribe' in the body.



Re: cflocking.. -- ATTENTION -- MY CASE STUDY

2000-09-13 Thread John Cummings

To add to Mike's message, I submitted an article on the Defusion site which
covers fairly extensively how to do this (which scenarios, other options,
etc, along with links to other resources, including many that were
referenced in creating the article. It is basically a distillation of my
personal experiences, along with references from other info I have).

The title of the article (stealing a page from Ben Forta's titling strategy)
is called "To lock, or not to lock".  Let me know if there are any errors
that any of you find in the article so I can correct them if need be.

HTH,
John Cummings
- Original Message -
From: "Mike Amburn" [EMAIL PROTECTED]
To: [EMAIL PROTECTED]
Sent: Wednesday, September 13, 2000 6:05 PM
Subject: RE: cflocking.. -- ATTENTION -- MY CASE STUDY


i've been following the CFLOCK threads for months and months now. i even
started several. unfortunately, the problem is that there doesn't seem
to be any consensus on what's the end-all, be-all, definitive answer to
the question "do you have to lock reads or just writes?" now i can't
speak for anyone else, however, i can tell you what we found during load
testing and you can do judge for yourself.

recently, we hired Allaire to come in and load test (using
SilkPerformer) one of our main applications, which is incredibly
database intensive and uses a lot of CFMODULES and application variables
(no client or session variables). before the test, the application ran
perfect under normal load. however, as soon as we added simultaneous
load (users requesting the same resources at the same exact time), we
immediately crashed with deadlocks in the database and application
errors. again, runs perfect with all of our customers in production, but
fails immediately under load.

up until this point, our strategy had followed the majority consensus:
lock your writes, but not your reads. however, after 14 hours of
analyzing the problems of the load testing between Allaire and I, we
finally just enabled the auto-locking capabilities in CF Admin to see if
that did anything. (keep in mind, the Allaire rep had warned before
about locking reads) the result after enabling auto-lock? not a single
problem for the remainder of the engagement! that's right... no errors,
no deadlocks, nothing. it functioned under load BEAUTIFULLY with the
auto-lock enabled until we finally got the numbers we wanted and
finished the analysis.

so again, i don't want to argue with anyone about their own strategy.
however, seeing it happen right in front of my eyes has me absolutely
convinced WITHOUT A SHADOW OF A DOUBT that allaire is COMPLETELY correct
when they suggest everyone lock BOTH application writes AND reads. and
to tell you the truth, the performance hit for using the auto-lock seems
to be very minimal (at least on our application) so don't worry too much
about that if you don't want to go back and insert all the read-only
locks.

so that's my two cents. hope it helps. =)

-mike

--
Archives: http://www.mail-archive.com/cf-talk@houseoffusion.com/
To Unsubscribe visit
http://www.houseoffusion.com/index.cfm?sidebar=stsbody=sts/cf_talk or send
a message to [EMAIL PROTECTED] with 'unsubscribe' in the
body.


--
Archives: http://www.mail-archive.com/cf-talk@houseoffusion.com/
To Unsubscribe visit 
http://www.houseoffusion.com/index.cfm?sidebar=listsbody=lists/cf_talk or send a 
message to [EMAIL PROTECTED] with 'unsubscribe' in the body.



RE: cflocking.. -- ATTENTION -- MY CASE STUDY

2000-09-13 Thread Steve Bernard

The sad thing is this pretty much means that Allaire is admitting that the
memory model in CF needs serious work. I'm paraphrasing of course ;) The way
CF deals with memory in general is pretty weak. "Restart the service to
release unused memory" is not my idea of an acceptable policy. As it's been
explained to me by various people, including some Allaire folks, the memory
model is also the source of the problems associated with not having an
OnSessionTimeout or OnSessionEnd function/template. Basically, the server
doesn't "know" when a session ends. It looks at the timeout parameter of
each session and simply makes the ones that are past the current time
inaccessible, or, I should say, refuses to read them. From what I've been
told, the information still exists in memory until it is overwritten by new
information. Has anyone tried using low-level diagnostics to see if they can
access session information that has expired, i.e. test whether the
information truly remains until overwritten? Don't anyone go writing a CFX
that allows you to do this, if it's possible. That would be too cool and
might make Allaire look bad ;)

Steve

p.s. Here's the definition of "memory leak" from a book on C programming
that I have ...

"A bug in a program that prevents it from freeing up memory that it no
longer needs. As a result, the program grabs more and more memory until it
finally crashes because there is no more memory left." Sounds like a CF
Server that isn't restarted on a nightly basis ;)


-Original Message-
From: Mike Amburn [mailto:[EMAIL PROTECTED]]
Sent: Wednesday, September 13, 2000 6:06 PM
To: [EMAIL PROTECTED]
Subject: RE: cflocking.. -- ATTENTION -- MY CASE STUDY


i've been following the CFLOCK threads for months and months now. i even
started several. unfortunately, the problem is that there doesn't seem
to be any consensus on what's the end-all, be-all, definitive answer to
the question "do you have to lock reads or just writes?" now i can't
speak for anyone else, however, i can tell you what we found during load
testing and you can do judge for yourself.

recently, we hired Allaire to come in and load test (using
SilkPerformer) one of our main applications, which is incredibly
database intensive and uses a lot of CFMODULES and application variables
(no client or session variables). before the test, the application ran
perfect under normal load. however, as soon as we added simultaneous
load (users requesting the same resources at the same exact time), we
immediately crashed with deadlocks in the database and application
errors. again, runs perfect with all of our customers in production, but
fails immediately under load.

up until this point, our strategy had followed the majority consensus:
lock your writes, but not your reads. however, after 14 hours of
analyzing the problems of the load testing between Allaire and I, we
finally just enabled the auto-locking capabilities in CF Admin to see if
that did anything. (keep in mind, the Allaire rep had warned before
about locking reads) the result after enabling auto-lock? not a single
problem for the remainder of the engagement! that's right... no errors,
no deadlocks, nothing. it functioned under load BEAUTIFULLY with the
auto-lock enabled until we finally got the numbers we wanted and
finished the analysis.

so again, i don't want to argue with anyone about their own strategy.
however, seeing it happen right in front of my eyes has me absolutely
convinced WITHOUT A SHADOW OF A DOUBT that allaire is COMPLETELY correct
when they suggest everyone lock BOTH application writes AND reads. and
to tell you the truth, the performance hit for using the auto-lock seems
to be very minimal (at least on our application) so don't worry too much
about that if you don't want to go back and insert all the read-only
locks.

so that's my two cents. hope it helps. =)

-mike

--
Archives: http://www.mail-archive.com/cf-talk@houseoffusion.com/
To Unsubscribe visit
http://www.houseoffusion.com/index.cfm?sidebar=stsbody=sts/cf_talk or send
a message to [EMAIL PROTECTED] with 'unsubscribe' in the
body.

--
Archives: http://www.mail-archive.com/cf-talk@houseoffusion.com/
To Unsubscribe visit 
http://www.houseoffusion.com/index.cfm?sidebar=listsbody=lists/cf_talk or send a 
message to [EMAIL PROTECTED] with 'unsubscribe' in the body.



Re: cflocking.. -- ATTENTION -- MY CASE STUDY

2000-09-13 Thread John Cummings

Steve,

Cold Fusion itself gets what ammounts to a bad wrap for it's memory usage.
Before you consider it problematic, remember that it depends on a lot of
other factors to manage memory correctly.  First of all, if you have a
dedicated CF server, CF is written to store more of itself in RAM over time
to improve performance.  This is what you want if you have a dedicated box.

Secondly, applications that have infinite memory growth do actually usually
plateau at some point, it is just that most people freak out and force a
reboot before that plateau is acheived.

Third, and most importantly, since CF is an application server, it depends
on a lot of other things to work properly.  It needs a properly functioning
DB driver, your server needs to be configured correctly (i.e. enough swap
space, IIS tweaks and CF tweaks in place, the application itself needs to be
written (and locked) properly, and all third party stuff (CFX, etc.) needs
to be examined for functionality.

I have seen a lot of CF memory problems turn out to be completely unrelated
to CF.  A lot of the time, it is due to something else that is overlooked
because it is simpiler, and in the short run only, easier to blame CF.
That's not to say that there can't be memory handling issues with CF, but if
you are having a memory issue, I would recommend a thorough read through
http://www.allaire.com/Handlers/index.cfm?ID=15014Method=Full to make sure
you have examined the problem from all angles.

Just my two cents.

HTH,
John Cummings
- Original Message -
From: "Steve Bernard" [EMAIL PROTECTED]
To: [EMAIL PROTECTED]
Sent: Wednesday, September 13, 2000 6:41 PM
Subject: RE: cflocking.. -- ATTENTION -- MY CASE STUDY


 The sad thing is this pretty much means that Allaire is admitting that the
 memory model in CF needs serious work. I'm paraphrasing of course ;) The
way
 CF deals with memory in general is pretty weak. "Restart the service to
 release unused memory" is not my idea of an acceptable policy. As it's
been
 explained to me by various people, including some Allaire folks, the
memory
 model is also the source of the problems associated with not having an
 OnSessionTimeout or OnSessionEnd function/template. Basically, the server
 doesn't "know" when a session ends. It looks at the timeout parameter of
 each session and simply makes the ones that are past the current time
 inaccessible, or, I should say, refuses to read them. From what I've been
 told, the information still exists in memory until it is overwritten by
new
 information. Has anyone tried using low-level diagnostics to see if they
can
 access session information that has expired, i.e. test whether the
 information truly remains until overwritten? Don't anyone go writing a CFX
 that allows you to do this, if it's possible. That would be too cool and
 might make Allaire look bad ;)

 Steve

 p.s. Here's the definition of "memory leak" from a book on C programming
 that I have ...

 "A bug in a program that prevents it from freeing up memory that it no
 longer needs. As a result, the program grabs more and more memory until it
 finally crashes because there is no more memory left." Sounds like a CF
 Server that isn't restarted on a nightly basis ;)


 -Original Message-
 From: Mike Amburn [mailto:[EMAIL PROTECTED]]
 Sent: Wednesday, September 13, 2000 6:06 PM
 To: [EMAIL PROTECTED]
 Subject: RE: cflocking.. -- ATTENTION -- MY CASE STUDY


 i've been following the CFLOCK threads for months and months now. i even
 started several. unfortunately, the problem is that there doesn't seem
 to be any consensus on what's the end-all, be-all, definitive answer to
 the question "do you have to lock reads or just writes?" now i can't
 speak for anyone else, however, i can tell you what we found during load
 testing and you can do judge for yourself.

 recently, we hired Allaire to come in and load test (using
 SilkPerformer) one of our main applications, which is incredibly
 database intensive and uses a lot of CFMODULES and application variables
 (no client or session variables). before the test, the application ran
 perfect under normal load. however, as soon as we added simultaneous
 load (users requesting the same resources at the same exact time), we
 immediately crashed with deadlocks in the database and application
 errors. again, runs perfect with all of our customers in production, but
 fails immediately under load.

 up until this point, our strategy had followed the majority consensus:
 lock your writes, but not your reads. however, after 14 hours of
 analyzing the problems of the load testing between Allaire and I, we
 finally just enabled the auto-locking capabilities in CF Admin to see if
 that did anything. (keep in mind, the Allaire rep had warned before
 about locking reads) the result after enabling auto-lock? not a single
 problem for the remainder of the engagement! that's right... no errors,

RE: cflocking.. -- ATTENTION -- MY CASE STUDY

2000-09-13 Thread Ryan

You had problems reading without locking, BUT, were you possibly
writing to those variables at the same time? I was at a CF
seminar and the speaker said you do not need to lock application
variables IF YOU KNOW they will not be written to during the read.
Maybe its a datasource name thats only written to once when its
found not to be defined or something. Do you think this would
be OK?

Ryan

--
Archives: http://www.mail-archive.com/cf-talk@houseoffusion.com/
To Unsubscribe visit 
http://www.houseoffusion.com/index.cfm?sidebar=listsbody=lists/cf_talk or send a 
message to [EMAIL PROTECTED] with 'unsubscribe' in the body.



RE: cflocking.. -- ATTENTION -- MY CASE STUDY

2000-09-13 Thread Steve Bernard

I understand everything that you pointed out, and agree with it. I have done
a good deal of performance analysis and optimization of CF, I was actually
offered a position as an Allaire Consultant, the guys who do that for a
living. Anyway, the point is, I understand why it was done like it is, and
that there are numerous factors involved, and ways to work around them but,
when you really get down to it, should you have to "work around" the memory
model? You have to agree that OnSessionTimeout and OnSessionEnd would be
kickass additions. The memory leak quote was added because I find it funny
that the definition applies to the way CF will sometimes act. I have been at
this for going on 6 years now so I've learned to accept some things but,
that doesn't stop me from wanting to raise the point every now-and-again. I
appreciate your points though, and hope that others will take your and my
comments together to reach their own conclusions.

Steve

-Original Message-
From: John Cummings [mailto:[EMAIL PROTECTED]]
Sent: Wednesday, September 13, 2000 7:06 PM
To: [EMAIL PROTECTED]
Subject: Re: cflocking.. -- ATTENTION -- MY CASE STUDY


Steve,

Cold Fusion itself gets what ammounts to a bad wrap for it's memory usage.
Before you consider it problematic, remember that it depends on a lot of
other factors to manage memory correctly.  First of all, if you have a
dedicated CF server, CF is written to store more of itself in RAM over time
to improve performance.  This is what you want if you have a dedicated box.

Secondly, applications that have infinite memory growth do actually usually
plateau at some point, it is just that most people freak out and force a
reboot before that plateau is acheived.

Third, and most importantly, since CF is an application server, it depends
on a lot of other things to work properly.  It needs a properly functioning
DB driver, your server needs to be configured correctly (i.e. enough swap
space, IIS tweaks and CF tweaks in place, the application itself needs to be
written (and locked) properly, and all third party stuff (CFX, etc.) needs
to be examined for functionality.

I have seen a lot of CF memory problems turn out to be completely unrelated
to CF.  A lot of the time, it is due to something else that is overlooked
because it is simpiler, and in the short run only, easier to blame CF.
That's not to say that there can't be memory handling issues with CF, but if
you are having a memory issue, I would recommend a thorough read through
http://www.allaire.com/Handlers/index.cfm?ID=15014Method=Full to make sure
you have examined the problem from all angles.

Just my two cents.

HTH,
John Cummings
- Original Message -
From: "Steve Bernard" [EMAIL PROTECTED]
To: [EMAIL PROTECTED]
Sent: Wednesday, September 13, 2000 6:41 PM
Subject: RE: cflocking.. -- ATTENTION -- MY CASE STUDY


 The sad thing is this pretty much means that Allaire is admitting that the
 memory model in CF needs serious work. I'm paraphrasing of course ;) The
way
 CF deals with memory in general is pretty weak. "Restart the service to
 release unused memory" is not my idea of an acceptable policy. As it's
been
 explained to me by various people, including some Allaire folks, the
memory
 model is also the source of the problems associated with not having an
 OnSessionTimeout or OnSessionEnd function/template. Basically, the server
 doesn't "know" when a session ends. It looks at the timeout parameter of
 each session and simply makes the ones that are past the current time
 inaccessible, or, I should say, refuses to read them. From what I've been
 told, the information still exists in memory until it is overwritten by
new
 information. Has anyone tried using low-level diagnostics to see if they
can
 access session information that has expired, i.e. test whether the
 information truly remains until overwritten? Don't anyone go writing a CFX
 that allows you to do this, if it's possible. That would be too cool and
 might make Allaire look bad ;)

 Steve

 p.s. Here's the definition of "memory leak" from a book on C programming
 that I have ...

 "A bug in a program that prevents it from freeing up memory that it no
 longer needs. As a result, the program grabs more and more memory until it
 finally crashes because there is no more memory left." Sounds like a CF
 Server that isn't restarted on a nightly basis ;)


 -Original Message-
 From: Mike Amburn [mailto:[EMAIL PROTECTED]]
 Sent: Wednesday, September 13, 2000 6:06 PM
 To: [EMAIL PROTECTED]
 Subject: RE: cflocking.. -- ATTENTION -- MY CASE STUDY


 i've been following the CFLOCK threads for months and months now. i even
 started several. unfortunately, the problem is that there doesn't seem
 to be any consensus on what's the end-all, be-all, definitive answer to
 the question "do you have to lock reads or just writes?" now i can't
 speak for anyone else, however, i can tell yo

RE: cflocking.. -- ATTENTION -- MY CASE STUDY

2000-09-13 Thread Peter Theobald

The consensus was *NEVER* that you didn't have to lock reads.
Cold Fusion doesn't FORCE locking - it is up to you to lock access to an Application 
variable.
If you lock the writes but don't lock the reads, then when Cold Fusion comes upon a 
read without a lock it will blindly run the read even if there is a (locked) write 
executing at the same time. In other words, locking writes without locking reads is 
completely useless.

All an Exclusive lock does is mark the variable so that ANOTHER ATTEMPT TO LOCK IT 
will have to wait until the lock is freed. 
It is totally up to YOUR LOCKS to ensure the variable is not used by two threads at 
the same time.


At 06:05 PM 9/13/00 -0400, Mike Amburn wrote:
i've been following the CFLOCK threads for months and months now. i even
started several. unfortunately, the problem is that there doesn't seem
to be any consensus on what's the end-all, be-all, definitive answer to
the question "do you have to lock reads or just writes?" now i can't
speak for anyone else, however, i can tell you what we found during load
testing and you can do judge for yourself.

recently, we hired Allaire to come in and load test (using
SilkPerformer) one of our main applications, which is incredibly
database intensive and uses a lot of CFMODULES and application variables
(no client or session variables). before the test, the application ran
perfect under normal load. however, as soon as we added simultaneous
load (users requesting the same resources at the same exact time), we
immediately crashed with deadlocks in the database and application
errors. again, runs perfect with all of our customers in production, but
fails immediately under load.

up until this point, our strategy had followed the majority consensus:
lock your writes, but not your reads. however, after 14 hours of
analyzing the problems of the load testing between Allaire and I, we
finally just enabled the auto-locking capabilities in CF Admin to see if
that did anything. (keep in mind, the Allaire rep had warned before
about locking reads) the result after enabling auto-lock? not a single
problem for the remainder of the engagement! that's right... no errors,
no deadlocks, nothing. it functioned under load BEAUTIFULLY with the
auto-lock enabled until we finally got the numbers we wanted and
finished the analysis.

so again, i don't want to argue with anyone about their own strategy.
however, seeing it happen right in front of my eyes has me absolutely
convinced WITHOUT A SHADOW OF A DOUBT that allaire is COMPLETELY correct
when they suggest everyone lock BOTH application writes AND reads. and
to tell you the truth, the performance hit for using the auto-lock seems
to be very minimal (at least on our application) so don't worry too much
about that if you don't want to go back and insert all the read-only
locks.

so that's my two cents. hope it helps. =)

-mike
--
Archives: http://www.mail-archive.com/cf-talk@houseoffusion.com/
To Unsubscribe visit 
http://www.houseoffusion.com/index.cfm?sidebarstsbodysts/cf_talk or send a message 
to [EMAIL PROTECTED] with 'unsubscribe' in the body. 


---
Peter Theobald, Chief Technology Officer
LiquidStreaming http://www.liquidstreaming.com
[EMAIL PROTECTED]
Phone 1.212.545.1232 Fax 1.212.679.8032

--
Archives: http://www.mail-archive.com/cf-talk@houseoffusion.com/
To Unsubscribe visit 
http://www.houseoffusion.com/index.cfm?sidebar=listsbody=lists/cf_talk or send a 
message to [EMAIL PROTECTED] with 'unsubscribe' in the body.