Re: [JBoss-dev] High load...

2001-06-30 Thread Ole Husgaard

Hi,

David Jencks wrote:
 On 2001.06.28 08:32:18 -0400 Ole Husgaard wrote:
  This algorithm may be fine, but it seems to be for commit
  option A only.
 As written, yes, as you point out below, reloading from db for each new
 transaction is necessary for B/C
 
  I think we should also consider the other commit options,
 
 yes

Thinking some more, I do not see how we could support
snapshot isolation with other commit options than A
without some kind of special resource support for it,
because a reload is needed with the other options and
a later tx may have changed the DB before the reload,
thus violating the snapshot.

  and optimistic/pessimistic locking.
 
 Not sure why we would want more pessimistic locking-isn't that what we have
 now?

Pessimistic and optimistic locking both have advantages,
and it would be nice if we could support both, maybe
with a per-container setting.

   transactions are numbered sequentially when they are started.
 
  Sorry, but I don't think we can rely on that if we need
  to avoid dependencies on the transaction service used.
 
  (By hacking a special dummy XA resource that is
  registered with every new tx seen by JBoss, I
  guess we could get to the Xid, and maintain some
  kind of mapping from the GlobalID to a serial
  number. But that looks a bit ugly to me.)
 
 I agree this is a potential problem.  However I think you don't get
 snapshot isolation and maybe you might get more deadlock opportunities
 without it. (I think just read committed isolation)  I haven't really
 looked into it, but I wondered about using the transaction interceptors--
 this is where all new transactions come from, isn't it, and its definitely
 part of the container not the TM?

I guess that the problem with snapshot isolation is
that the logical locking happens at transaction
start, before anything is read or we even know what
is about to be read.

I have only been thinking about the case where only
a single container is involved in the transaction,
but such transactions may involve several containers,
and even several servers.

I cannot see how we could create transaction sequences
for multiple servers without some kind of centralized
ticket service, giving a single point of failure.

I have to warn against the obvious way of doing local
transaction numbering:
A server-wide WeakHashMap that maps Transaction to
Integer.
Problem with this is that there may not be a one-to-one
correspondence between Transaction instances and the
actual transactions they represent. Not long ago, the
fast in-VM TX service could create several Transaction
instances for the same transaction, and these different
Transaction instances could be active at the same time.
That is not a violation of the JTA specification. The
only sure way we can know if different instances are
the same transaction is by looking at the Xid of the
transaction. Unfortunately JTA only exposes that to
resources.

   When you change an entity, a new version is put in the cache with your
   transaction id ( of course no one else can see it till you commit: the
   entity versions need both the transaction sequence and some way of
  telling
   if they are committed.).
 
  I guess we could call isModified() after each invocation
  to avoid creating a new version until the entity is
  actually modified.
  But that means that we would use the same entity version
  for different transactions, and since it is too late to
  get the unmodified entity version after isModified()
  returns true, wouldn't we have to create another version
  before the invocation anyway?
 
 After I wrote this I thought about it some more.  I think it can only be
 made to work with ejb 2 abstract accessors-- as you say I think for ejb 1.1
 beans we need each transaction to get a copy in case they want to modify
 something, we can't tell.  I actually don't know if the ejb 2 beans can
 store state outside of their abstract accessors.  If so, they too would
 need instance/transaction in case whey changed state.  If not, at least
 conceptually copy on write is possible.

Entity bean _can_ have state besides what is saved in
ejbStore(), but: The bean cannot rely on such state
information to be saved, because what can be done in the
ejbPassivate() is quite limited (runs in an unspecified
transaction context, and may _not_ access resources).

Problem with copy-on-write is that we do not know before
the invocation returns if an invocation is a write (ie.
changes the state of the instance). And without the
isModified() method we do not know at all.
It would be nice if the bean provider could declare
methods as being read-only.

I guess we have two options here:

We could choose _not_ to copy before the invocation. That
means that we do not have an unmodified cached instance
ready, and that we may have to do an ejbLoad() to get one
if/when we need it. (Guess this one will not work with
snapshot isolation.)

We could choose to always copy before the invocation, and
throw away the copy if 

Re: [JBoss-dev] High load...

2001-06-30 Thread Dan OConnor

On 30 Jun 01, at 16:19, Ole Husgaard wrote:

 I have to warn against the obvious way of doing local
 transaction numbering:
 A server-wide WeakHashMap that maps Transaction to
 Integer.
 Problem with this is that there may not be a one-to-one
 correspondence between Transaction instances and the
 actual transactions they represent. Not long ago, the
 fast in-VM TX service could create several Transaction
 instances for the same transaction, and these different
 Transaction instances could be active at the same time.
 That is not a violation of the JTA specification. The
 only sure way we can know if different instances are
 the same transaction is by looking at the Xid of the
 transaction. Unfortunately JTA only exposes that to
 resources.

Hi Ole,

I wanted to ask about this... The JTA spec requires (in 3.3.4) that 
the Transaction object's equals and hashCode methods be 
overridden to return true or the same hash number, respectively, if 
the target object and parameter object both refer to the same 
global transaction. These are enough to ensure a HashMap 
functions correctly, and to allow us to find out if different instances 
refer to the same transaction. Did I misunderstand your point (or 
perhaps the spec)?

-Dan


___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-30 Thread Ole Husgaard

Hi,

Dan OConnor wrote:
 On 30 Jun 01, at 16:19, Ole Husgaard wrote:
  I have to warn against the obvious way of doing local
  transaction numbering:
  A server-wide WeakHashMap that maps Transaction to
  Integer.
 
 I wanted to ask about this... The JTA spec requires (in 3.3.4) that
 the Transaction object's equals and hashCode methods be
 overridden to return true or the same hash number, respectively, if
 the target object and parameter object both refer to the same
 global transaction. These are enough to ensure a HashMap
 functions correctly, and to allow us to find out if different instances
 refer to the same transaction. Did I misunderstand your point (or
 perhaps the spec)?

You are absolutely right: I was wrong here.
Thanks for reminding me.

And worse: I have to go fix a bug in the
class org.jboss.tm.TransactionImpl to be
spec-compliant.


Best Regards,

Ole Husgaard.

___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-28 Thread Ole Husgaard

Hi,

(Just brainstorming here, sorry if I'm wrong.)

This algorithm may be fine, but it seems to be for commit
option A only.

I think we should also consider the other commit options,
and optimistic/pessimistic locking.


David Jencks wrote:
 
 Hi, the algorithm is in the post marc was replying to.
 
 Here it is again, with garbage collection instructions and referring to
 entities rather than records.
 
 transactions are numbered sequentially when they are started.

Sorry, but I don't think we can rely on that if we need
to avoid dependencies on the transaction service used.

(By hacking a special dummy XA resource that is
registered with every new tx seen by JBoss, I
guess we could get to the Xid, and maintain some
kind of mapping from the GlobalID to a serial
number. But that looks a bit ugly to me.)


 Each entity (version) includes the transaction id of the last change to it.
 
 When an entity is first loaded from the db, the transaction id of the
 transaction in which it is loaded is associated with the entity version.
 
 When you find an entity (within a transaction), you get the entity
 version with the largest transaction id = your transaction id.

I think a DB load of the entity is needed, if the entity
has not yet been loaded in that particular transaction.
You want to see uncommitted changes made from elsewhere
in the same transaction to the database representation
of the entity. (That is, if you do _not_ use commit
option A.)

 When you change an entity, a new version is put in the cache with your
 transaction id ( of course no one else can see it till you commit: the
 entity versions need both the transaction sequence and some way of telling
 if they are committed.).

I guess we could call isModified() after each invocation
to avoid creating a new version until the entity is
actually modified.
But that means that we would use the same entity version
for different transactions, and since it is too late to
get the unmodified entity version after isModified()
returns true, wouldn't we have to create another version
before the invocation anyway?

 The
 older versions hang around until no transactions are active that could see
 them, then they are garbage collected. (see below)
 
 There is a transaction property that determines behavior when two
 transactions try to modify the same entity: either
 
 you get an immediate exception
 
 or
 
 your changes block until the other guy commits (you get an exception) or
 rolls back (your transaction succeeds)

If we should be optimistic here, I think that we should
get two different versions of the same entity here, each
with their own context associated with a different
transaction.

If both are changed, the last transaction commit should
fail, as we might have an unresolvable update conflict.

But if one of the entities are not changed, the commit
of the transaction it is associated with needs no
database update, and that particular entity version
can be thrown away at commit time (even if other
transactions have made (and possibly committed) changes
to other versions of the same entity).


 Note that only the most recent (committed) version can be modified by any
 transaction, and that the blocking/ exception behavior just described only
 applies to 2 transactions trying to modify the most recent committed
 version.
 
 Each transaction as it starts is put on an ordered (by transaction
 sequence) list of active transactions.  When it is committed or rolled
 back, it is removed.  The first transaction on this list is the oldest
 active transaction.
 
 The transaction associated with the oldest entity version we have to keep
 around is the oldest interesting transaction.
 
 Lets suppose we have an entity with versions for transactions t1, t7,
 t11,...
 
 We can discard the version for t1 when the oldest active transaction is at
 least t7, because all transactions that could possibly reference that
 version have completed.
 
 Note that this results in snapshot transaction isolation rather than read
 committed. (I don't know how read committed is implemented, and don't know
 why you would want to use it). I confess I don't quite understand how
 snapshot differs from serializable isolation -- its certainly close.
 
 This requires a version for each modifying transaction, rather than a
 single version or a version for each transaction.  You may need to keep
 several committed versions around at once until all transactions
 referencing them are complete.

I don't think we need this strict ordering of
transactions.

If we want to do optimistic transaction locking, we
need a cache that supports multiple versions of each
entity (one for each transaction that the entity is
participating in).

If we have that, and use commit option A, we just need
a reference to the version last committed. However, if
we pick that version to use in a tx, we might need to
clone it, as we may need it again for yet another tx.


 Interbase versioning is per transaction , not per 

Re: [JBoss-dev] High load...

2001-06-28 Thread David Jencks

Hi,
I agree with almost everything you say.


On 2001.06.28 08:32:18 -0400 Ole Husgaard wrote:
 Hi,
 
 (Just brainstorming here, sorry if I'm wrong.)
 
 This algorithm may be fine, but it seems to be for commit
 option A only.
As written, yes, as you point out below, reloading from db for each new
transaction is necessary for B/C
 
 I think we should also consider the other commit options,

yes

 and optimistic/pessimistic locking.

Not sure why we would want more pessimistic locking-isn't that what we have
now?
 
 
 David Jencks wrote:
  
  Hi, the algorithm is in the post marc was replying to.
  
  Here it is again, with garbage collection instructions and referring to
  entities rather than records.
  
  transactions are numbered sequentially when they are started.
 
 Sorry, but I don't think we can rely on that if we need
 to avoid dependencies on the transaction service used.
 
 (By hacking a special dummy XA resource that is
 registered with every new tx seen by JBoss, I
 guess we could get to the Xid, and maintain some
 kind of mapping from the GlobalID to a serial
 number. But that looks a bit ugly to me.)

I agree this is a potential problem.  However I think you don't get
snapshot isolation and maybe you might get more deadlock opportunities
without it. (I think just read committed isolation)  I haven't really
looked into it, but I wondered about using the transaction interceptors--
this is where all new transactions come from, isn't it, and its definitely
part of the container not the TM?
 
 
  Each entity (version) includes the transaction id of the last change to
 it.
  
  When an entity is first loaded from the db, the transaction id of the
  transaction in which it is loaded is associated with the entity
 version.
  
  When you find an entity (within a transaction), you get the entity
  version with the largest transaction id = your transaction id.
 
 I think a DB load of the entity is needed, if the entity
 has not yet been loaded in that particular transaction.
 You want to see uncommitted changes made from elsewhere
 in the same transaction to the database representation
 of the entity. (That is, if you do _not_ use commit
 option A.)

Agreed
 
  When you change an entity, a new version is put in the cache with your
  transaction id ( of course no one else can see it till you commit: the
  entity versions need both the transaction sequence and some way of
 telling
  if they are committed.).
 
 I guess we could call isModified() after each invocation
 to avoid creating a new version until the entity is
 actually modified.
 But that means that we would use the same entity version
 for different transactions, and since it is too late to
 get the unmodified entity version after isModified()
 returns true, wouldn't we have to create another version
 before the invocation anyway?

After I wrote this I thought about it some more.  I think it can only be
made to work with ejb 2 abstract accessors-- as you say I think for ejb 1.1
beans we need each transaction to get a copy in case they want to modify
something, we can't tell.  I actually don't know if the ejb 2 beans can
store state outside of their abstract accessors.  If so, they too would
need instance/transaction in case whey changed state.  If not, at least
conceptually copy on write is possible.
 
  The
  older versions hang around until no transactions are active that could
 see
  them, then they are garbage collected. (see below)
  
  There is a transaction property that determines behavior when two
  transactions try to modify the same entity: either
  
  you get an immediate exception
  
  or
  
  your changes block until the other guy commits (you get an exception)
 or
  rolls back (your transaction succeeds)
 
 If we should be optimistic here, I think that we should
 get two different versions of the same entity here, each
 with their own context associated with a different
 transaction.
 
 If both are changed, the last transaction commit should
 fail, as we might have an unresolvable update conflict.

This is also possible, as soon as the first transaction commits it sets the
other(s) Rollback Only.  Throwing an immediate exception or waiting
prevents the 2nd transaction from wasting time doing work that will be
rolled back if the first transaction commits.  It may also be easier to
keep track of.
 
 But if one of the entities are not changed, the commit
 of the transaction it is associated with needs no
 database update, and that particular entity version
 can be thrown away at commit time (even if other
 transactions have made (and possibly committed) changes
 to other versions of the same entity).

yes, the blocking/exception is only when 2 transactions try to modify the
same data at once.  Unlimited reads of all versions are fine.
 
 
  Note that only the most recent (committed) version can be modified by
 any
  transaction, and that the blocking/ exception behavior just described
 only
  applies to 2 transactions trying to 

RE: [JBoss-dev] High load...

2001-06-27 Thread Bill Burke



 -Original Message-
 From: [EMAIL PROTECTED]
 [mailto:[EMAIL PROTECTED]]On Behalf Of David
 Jencks
 Sent: Wednesday, June 27, 2001 9:44 AM
 To: [EMAIL PROTECTED]
 Subject: RE: [JBoss-dev] High load...


 Hi,
 On 2001.06.26 23:30:32 -0400 marc fleury wrote:
  |2 entity beans. 2 connection pools(but same database), each connection
  pool
  |is configured to use a certain JDBC isolation level. Entity 1 is attach
  to
  |pool 1, Entity 2 is attached to pool 2.
 
  yuck...
 
  I still don't have a clear answer to
 
  what we do = (does a jdbc connection support setting isolations level on
  the
  fly)? we use one pool and the container sets levels : we are stuck with
  many
  pools
 
 Well, a jdbc connection certainly supports setting isolation levels.  I
 think when you can do it depends on the db.  I think generally it only
 makes sense to change when there is no uncommitted work (between
 transactions), even though apparently some dbs (someone said informix) may
 let you change within a transaction.

  marcf
 
  PS: of course many pools works but yuck!
 
  |
  |1. Start JBoss transaction
  |2. Access Entity1.  A connection is grabbed from pool 1,
  |connection1.setIsolation(blah blah),
  |3. access entity2.  A connection is created from pool 2,
  |connection2.setIsolation(blah blah)
  |4. End JBoss transaction.  commit is called on connection 1 and
  connection
  |2.
  |
  |This should work, shouldn't it?
  |

 Well, maybe. To make this work, you require true xa capable drivers, and
 you need to use real 2pc, not the fake stuff from jbosspool wrappers.  The
 wrapped drivers will give you 2 independent conncurrent transactions.


I don't know about you, but I'm happy with the fake XA that the jbosspool
wrappers provide.  Shouldn't it work 99.999% of the time?

Bill



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-27 Thread David Jencks


On 2001.06.27 10:55:10 -0400 Bill Burke wrote:
 
 
snip
  
   |
   |1. Start JBoss transaction
   |2. Access Entity1.  A connection is grabbed from pool 1,
   |connection1.setIsolation(blah blah),
   |3. access entity2.  A connection is created from pool 2,
   |connection2.setIsolation(blah blah)
   |4. End JBoss transaction.  commit is called on connection 1 and
   connection
   |2.
   |
   |This should work, shouldn't it?
   |
 
  Well, maybe. To make this work, you require true xa capable drivers,
 and
  you need to use real 2pc, not the fake stuff from jbosspool wrappers. 
 The
  wrapped drivers will give you 2 independent conncurrent transactions.
 
 
 I don't know about you, but I'm happy with the fake XA that the jbosspool
 wrappers provide.  Shouldn't it work 99.999% of the time?
 
 Bill

It depends how critical data integrity is to you.  If you have only one
resource/pool, they work fine, because you only need 1pc.  If you have more
than one resource/pool (as you are suggesting), then if the second branch
fails to commit, you are stuck with the first branch having committed, the
second rolled back == data integrity failure.  If you can guarantee that
both transactions will commit when called (for instance deferring fk
constraints till end of transaction will not guarantee this), the only
thing you have to worry about is something crashing between commit branch1
and commit branch 2.  I don't know if there is some way to detect this in
the logs, but your db would be in an inconsistent state, with no automatic
way of recovering.  Whether this is a problem for you is another question,
but this is what xa/2pc addresses.

david jencks
 
 
 
 ___
 Jboss-development mailing list
 [EMAIL PROTECTED]
 http://lists.sourceforge.net/lists/listinfo/jboss-development
 


___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-27 Thread Georg Rehfeld

Hi,

 
 bean C is ISOLATION1 and D is ISOLATION2
 
 my question is can we reconfigure connection D with the new stuff?

Yes, at transaction start time you MAY call 
Connection.setTransactionIsolation(int level), the docs only
note: 'This method cannot be called while in the middle of a 
transaction.'

regards
georg
 ___   ___
| + | |__Georg Rehfeld  Woltmanstr. 12 20097 Hamburg
|_|_\ |___   [EMAIL PROTECTED]   +49 (40) 23 53 27 10



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-27 Thread Carlos Cardenas

Howdy,

--- Bill Burke [EMAIL PROTECTED] wrote:
 Databases are freakin' designed for concurrent
 access.  Why not leverage
 them?  I remember reading someplace that WebLogic
 6.x was starting to move
 more of its synching to the database layer. 

I agree with Bill.  I think we should rely on the
database's resource manager to handle isolation levels
and XA.  If there is no such resource manager, then
let's create it.

Trying to make jboss (jaws, minerva or whatever)
compensate for a faulty of missing resource manager(s)
will just make us go in circles when problems arise
and problems will be recurring in time, I am sure.

Now, maybe JCA is better solution than JTA's resource
managers I don't really know, what I want to say is
let's keep the division of work among modules and
let's make jboss code as simple as possible.
   
For what it's worth, thanks, CC

__
Do You Yahoo!?
Get personalized email addresses from Yahoo! Mail
http://personal.mail.yahoo.com/

___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-27 Thread Vinay Menon

I believe Oracle actually throws an exception if you had an existing
transaction and you tried to fool around with the transaction setting.

Vinay

- Original Message -
From: marc fleury [EMAIL PROTECTED]
To: [EMAIL PROTECTED]
Sent: Wednesday, June 27, 2001 5:19 AM
Subject: RE: [JBoss-dev] High load...


 |I think you missed one of the old messages (way to many today).
 |
 |It appears that if you changes the transaction isolation in the middle of
a
 |transaction the driver can perform an implicit commit (YUCK).
 |
 |So, I don't think we can trust drivers to allows us to change the level
on
 |the fly.

 well that is EXCELLENT NEWS... ?

 you are saying that I can actually change the isolation level on a jdbc
 connection for a new transaction ? ( I don't want to change in the middle)
 what I want to do is

 connection A gets assigned to transaction B

 transaction B encompasses bean C

 The container gets connection D

 Connection D was use with bean E previously

 bean C is ISOLATION1 and D is ISOLATION2

 my question is can we reconfigure connection D with the new stuff?

 you seem to say that yes...because you are aware of problems that arise if
 we do it INSIDE a transaction, when I really don't care about this fine a
 feature...

 marcf

 |
 |-dain
 |- Original Message -
 |From: marc fleury [EMAIL PROTECTED]
 |To: [EMAIL PROTECTED]
 |Sent: Tuesday, June 26, 2001 10:36 PM
 |Subject: RE: [JBoss-dev] High load...
 |
 |
 | | Sure, it would be useful to be able to specify different levels per
 | | bean, but given the apparent constraints that the databases
 |are putting
 | | us under, implementing it against the database isn't feasable.
 | |
 | |
 | |Just use a freakin' different connection pool for different beans and
 |there
 | |is no freakin' database constraint.
 |
 | oh wait reading old stuff, so you are saying that
 |
 | (do jdbc connection support setIsolationlevel on the fly) == false
 |
 | shit...
 |
 | databases is an UGLY world, you know what??? we can do MUCH better at
the
 | distributed cache level so screw delegating to the db...
 |
 | I am drunk and it is getting tough to think ...
 |
 | marcf
 |
 |
 |
 | ___
 | Jboss-development mailing list
 | [EMAIL PROTECTED]
 | http://lists.sourceforge.net/lists/listinfo/jboss-development
 |
 |
 |
 |___
 |Jboss-development mailing list
 |[EMAIL PROTECTED]
 |http://lists.sourceforge.net/lists/listinfo/jboss-development



 ___
 Jboss-development mailing list
 [EMAIL PROTECTED]
 http://lists.sourceforge.net/lists/listinfo/jboss-development


___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-27 Thread Ole Husgaard

Bill Burke wrote:
  Well, maybe. To make this work, you require true xa capable drivers, and
  you need to use real 2pc, not the fake stuff from jbosspool wrappers.  The
  wrapped drivers will give you 2 independent conncurrent transactions.
 
 I don't know about you, but I'm happy with the fake XA that the jbosspool
 wrappers provide.  Shouldn't it work 99.999% of the time?

Yes, but the problem is that 0.001% of the time you get
failures that may break your data integrity.

Anyway, *if* you only use one pool (and *no* other
resources), and have at most one connection open per
transaction at any time, XA is not really used, and
the fact that the pool re-issues the same connection
may make the fake XA work 100% of the time.
But that really is a special case.


Best Regards,

Ole Husgaard.


P.S: I also think that setting isolation levels per-pool
is the right thing to do.

___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-26 Thread Georg Rehfeld

Hi,

Bill:
 |- Somebody had a great idea earlier of adding optimistic locking for
 |CMP/JAWS.  Along with this feature, you could write a specialized
 |EntityInstanceInterceptor that did not do transactional locking with
 |commit Option 'A'.  This would be great for beans that had
 |read-only invoked operations 90% of the time.

I suggested that and did take the job implementing it (though I actually
did no coding yet because I have to earn some money).

Marc:
 yes, that would be interesting, BUT AGAIN I WANT TO FINISH OFF THE 2.X
 SERIES WITH THE BUGS REMOVED and the streamlined cache with transactional
 locking.
 ...
 WE NEED STABILITY IN FEATURES

Yes, agreed.

My suggestion was intended for the Rabbit Hole and originally
meant to be used with commit options B/C in case there are
multiple bean instances when Rabbit Hole is finished. 

Multiple instances would be not very usefull with pessimistic
locking done on the DB, as the pessimistic behaviour (and locking
waiting without a message) simply would remain viewed from the
clients perspective.

But maybe Bill is right, OL could be used with commit option A
and single bean instances too? I'm not really sure ... no I
don't think so, because then every TX is working on state
possibly modified by another TX and, even worse, with one
instance only the optimistic approach (based on the diff of the
actual beans state and the state before TX.begin) will fail, as
at commit time the 'old' state has to be set equal to the current
state and the next concurrent TX committing will succeed, where
it should see a 'you are too late to commit' exception!

regards
Georg
 ___   ___
| + | |__Georg Rehfeld  Woltmanstr. 12 20097 Hamburg
|_|_\ |___   [EMAIL PROTECTED]   +49 (40) 23 53 27 10



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-26 Thread Bill Burke



 -Original Message-
 From: [EMAIL PROTECTED]
 [mailto:[EMAIL PROTECTED]]On Behalf Of Georg
 Rehfeld
 Sent: Tuesday, June 26, 2001 11:25 AM
 To: [EMAIL PROTECTED]
 Subject: Re: [JBoss-dev] High load...


 Hi,

 Bill:
  |- Somebody had a great idea earlier of adding optimistic locking for
  |CMP/JAWS.  Along with this feature, you could write a specialized
  |EntityInstanceInterceptor that did not do transactional locking with
  |commit Option 'A'.  This would be great for beans that had
  |read-only invoked operations 90% of the time.

 I suggested that and did take the job implementing it (though I actually
 did no coding yet because I have to earn some money).

 Marc:
  yes, that would be interesting, BUT AGAIN I WANT TO FINISH OFF THE 2.X
  SERIES WITH THE BUGS REMOVED and the streamlined cache with
 transactional
  locking.
  ...
  WE NEED STABILITY IN FEATURES

 Yes, agreed.

 My suggestion was intended for the Rabbit Hole and originally
 meant to be used with commit options B/C in case there are
 multiple bean instances when Rabbit Hole is finished.

 Multiple instances would be not very usefull with pessimistic
 locking done on the DB, as the pessimistic behaviour (and locking
 waiting without a message) simply would remain viewed from the
 clients perspective.

 But maybe Bill is right, OL could be used with commit option A
 and single bean instances too? I'm not really sure ... no I
 don't think so, because then every TX is working on state
 possibly modified by another TX and, even worse, with one
 instance only the optimistic approach (based on the diff of the
 actual beans state and the state before TX.begin) will fail, as
 at commit time the 'old' state has to be set equal to the current
 state and the next concurrent TX committing will succeed, where
 it should see a 'you are too late to commit' exception!


Sorry Georg,  I don't what planet I was on when I made the option A with
optimistic locking comment.

Sort of related, I did a simple test with Oracle 8.1.7 in 2 separate
SQL*PLUS windows.  With autocommit off, it seems that if you try to update
the same row in 2 different windows, one window waits until the other
commits.  Wonder if this will happen with JDBC as well, I'll let you
knowAnybody know the behaviour on this with other DBs?  Is this common
locking behaviour?  If so, great!

All in all, I think JBOSS should delegate synching and locking to the DB
wherever it can because the DB is usually more efficient at this.  Also,
IMHO, this is really the best way to synch multiple instances of JBoss.

Regards,
Bill



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-26 Thread marc fleury

|My suggestion was intended for the Rabbit Hole and originally
|meant to be used with commit options B/C in case there are
|multiple bean instances when Rabbit Hole is finished.

yes, that would be interesting.

|Multiple instances would be not very usefull with pessimistic
|locking done on the DB, as the pessimistic behaviour (and locking
|waiting without a message) simply would remain viewed from the
|clients perspective.

precisely, I already fought with Vinay the many instances speedup fallacy

it's a lie...

if you don't break the pessimistic locking at the db then it is useless.

|But maybe Bill is right, OL could be used with commit option A
|and single bean instances too? I'm not really sure ... no I
|don't think so, because then every TX is working on state
|possibly modified by another TX and, even worse, with one

did he propose that? I don't think so (could be) in any case I am rewriting
the cache and one option would have to be a cache that upon looking up an
instance if there is a transaction associated with it would clone (deep
copy) the current instance so that each tx has a copy IN THE CACHE, this way
the container flow is un-affected.

Of course that supposes that we rely on the databases to synchronize the
updates, for that we need to know that transaction isolation work properly
across dbs.

btw this is why I am refactoring (rewriting really) the code in there. Well
the first reason is to get rid of the busy wait bug, but the nice by product
is that you can use the right cache with the right database.  I sent a small
note yesterday on the transaction isolation... did you guys see it?


marcf



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-26 Thread marc fleury

|Sorry Georg,  I don't what planet I was on when I made the option A with
|optimistic locking comment.

Option A with optimistic locking would be interesting.

it is Option A with pessimistic db locking that doesn't really bring
anything new.

He was criticizing the no copy of the cache for a new transaction.  I
answered with the clone idea in teh cache.

The point is that these are CACHE IMPLEMENTATION dependent, I will make sure
the container flow supports these.

|Sort of related, I did a simple test with Oracle 8.1.7 in 2 separate
|SQL*PLUS windows.  With autocommit off, it seems that if you try to update
|the same row in 2 different windows, one window waits until the other
|commits.  Wonder if this will happen with JDBC as well, I'll let you

pessimistic then...

|knowAnybody know the behaviour on this with other DBs?  Is this common
|locking behaviour?  If so, great!

we would have to implement the transaction isolation levels correctly in
jboss again I believe that lives at the jbossCMP level.  But if we are going
to support different vendors for the CMP engines we must take this part out
or at least offer a common API... hmmm must think about it.

|All in all, I think JBOSS should delegate synching and locking to the DB

sure but my point is that can be a cache decision, if you still want to
implement a pessimistic cache (like we have right now) with maybe a simple
read-only feature then you can.

In fact a READ ONLY cache could really improve throughput with copies of the
instances for the duration of the transaction.   It is then the cache
workspace that becomes XA aware... hmmm must think about it.

Add-on market??? here we come... we must enable these policies, that is what
I am fixing.

|wherever it can because the DB is usually more efficient at this.  Also,
|IMHO, this is really the best way to synch multiple instances of JBoss.

hm maybe... maybe not... some will argue that letting all the cache sync
on the database is not the best option... it is definitely the *simplest*
but certainly not the best.. :)

marcf

|
|Regards,
|Bill
|
|
|
|___
|Jboss-development mailing list
|[EMAIL PROTECTED]
|http://lists.sourceforge.net/lists/listinfo/jboss-development



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-26 Thread Jay Walters

That is standard locking, you should see that everywhere unless you can set
some bit to not wait for locks and just abort the statement.  SQL*Plus and
JDBC both look the same to the server.

Of course with Oracle it won't block readers, with some other databases you
will block readers in the second window as well as writers unless you are at
the whatever isolation level supports dirty reads.

Cheers
Jay

-Original Message-
From: Bill Burke [mailto:[EMAIL PROTECTED]]
Sent: Tuesday, June 26, 2001 12:59 PM
To: [EMAIL PROTECTED]
Subject: RE: [JBoss-dev] High load...




 -Original Message-
 From: [EMAIL PROTECTED]
 [mailto:[EMAIL PROTECTED]]On Behalf Of Georg
 Rehfeld
 Sent: Tuesday, June 26, 2001 11:25 AM
 To: [EMAIL PROTECTED]
 Subject: Re: [JBoss-dev] High load...


 Hi,

 Bill:
  |- Somebody had a great idea earlier of adding optimistic locking for
  |CMP/JAWS.  Along with this feature, you could write a specialized
  |EntityInstanceInterceptor that did not do transactional locking with
  |commit Option 'A'.  This would be great for beans that had
  |read-only invoked operations 90% of the time.

 I suggested that and did take the job implementing it (though I actually
 did no coding yet because I have to earn some money).

 Marc:
  yes, that would be interesting, BUT AGAIN I WANT TO FINISH OFF THE 2.X
  SERIES WITH THE BUGS REMOVED and the streamlined cache with
 transactional
  locking.
  ...
  WE NEED STABILITY IN FEATURES

 Yes, agreed.

 My suggestion was intended for the Rabbit Hole and originally
 meant to be used with commit options B/C in case there are
 multiple bean instances when Rabbit Hole is finished.

 Multiple instances would be not very usefull with pessimistic
 locking done on the DB, as the pessimistic behaviour (and locking
 waiting without a message) simply would remain viewed from the
 clients perspective.

 But maybe Bill is right, OL could be used with commit option A
 and single bean instances too? I'm not really sure ... no I
 don't think so, because then every TX is working on state
 possibly modified by another TX and, even worse, with one
 instance only the optimistic approach (based on the diff of the
 actual beans state and the state before TX.begin) will fail, as
 at commit time the 'old' state has to be set equal to the current
 state and the next concurrent TX committing will succeed, where
 it should see a 'you are too late to commit' exception!


Sorry Georg,  I don't what planet I was on when I made the option A with
optimistic locking comment.

Sort of related, I did a simple test with Oracle 8.1.7 in 2 separate
SQL*PLUS windows.  With autocommit off, it seems that if you try to update
the same row in 2 different windows, one window waits until the other
commits.  Wonder if this will happen with JDBC as well, I'll let you
knowAnybody know the behaviour on this with other DBs?  Is this common
locking behaviour?  If so, great!

All in all, I think JBOSS should delegate synching and locking to the DB
wherever it can because the DB is usually more efficient at this.  Also,
IMHO, this is really the best way to synch multiple instances of JBoss.

Regards,
Bill



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development

___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-26 Thread Dain Sundstrom

 we would have to implement the transaction isolation levels correctly in
 jboss again I believe that lives at the jbossCMP level.  But if we are
going
 to support different vendors for the CMP engines we must take this part
out
 or at least offer a common API... hmmm must think about it.


I added transaction isolation to the new cmp plugin. You can set it by
adding the  transaction-isolation element after the datasource element.
Valid levels are:
transaction-none
transaction-read-committed
transaction-read-uncommitted
transaction-repeatable-read
transaction-serializable

Give me 10 minutes and I'll add it to JAWS...

I don't know if you wanted with user configurable, but for now it will allow
you to play with different levels.  I can make it static later.

-dain



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-26 Thread marc fleury

|I added transaction isolation to the new cmp plugin. You can set it by
|adding the  transaction-isolation element after the datasource element.
|Valid levels are:
|transaction-none
|transaction-read-committed
|transaction-read-uncommitted
|transaction-repeatable-read
|transaction-serializable
|
|Give me 10 minutes and I'll add it to JAWS...

ok but these will be leveraged by new caches in JBoss 3.0



so I would imagine that each application can set its own datasource
isolation level, (different kinds of bean).  So it IS user configurable
right???

Also how does it play with the datasources, if the datasource is shared
across applications and different tables support different locking policies
(say one table is RO the other RW) can the driver support sequential
setIsolationLevel that only applies to the record and or table touched?
marcf

|I don't know if you wanted with user configurable, but for now it
|will allow
|you to play with different levels.  I can make it static later.
|
|-dain
|
|
|
|___
|Jboss-development mailing list
|[EMAIL PROTECTED]
|http://lists.sourceforge.net/lists/listinfo/jboss-development



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-26 Thread danch (Dan Christopherson)

Dain Sundstrom wrote:

 
 I don't know if you wanted with user configurable, but for now it will allow
 you to play with different levels.  I can make it static later.
 


static?





___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-26 Thread Bill Burke



 -Original Message-
 From: [EMAIL PROTECTED]
 [mailto:[EMAIL PROTECTED]]On Behalf Of marc
 fleury
 Sent: Tuesday, June 26, 2001 1:28 PM
 To: [EMAIL PROTECTED]
 Subject: RE: [JBoss-dev] High load...


 |Sorry Georg,  I don't what planet I was on when I made the option A with
 |optimistic locking comment.

 Option A with optimistic locking would be interesting.

 it is Option A with pessimistic db locking that doesn't really bring
 anything new.

 He was criticizing the no copy of the cache for a new transaction.  I
 answered with the clone idea in teh cache.


Yeah, I saw your reply to Georg about the deep copying the cache.  Good
idea...

 The point is that these are CACHE IMPLEMENTATION dependent, I
 will make sure
 the container flow supports these.

 |Sort of related, I did a simple test with Oracle 8.1.7 in 2 separate
 |SQL*PLUS windows.  With autocommit off, it seems that if you try
 to update
 |the same row in 2 different windows, one window waits until the other
 |commits.  Wonder if this will happen with JDBC as well, I'll let you

 pessimistic then...

 |knowAnybody know the behaviour on this with other DBs?  Is
 this common
 |locking behaviour?  If so, great!

 we would have to implement the transaction isolation levels correctly in
 jboss again I believe that lives at the jbossCMP level.  But if
 we are going
 to support different vendors for the CMP engines we must take
 this part out
 or at least offer a common API... hmmm must think about it.


Isolation levels and locking are really orthonogal, aren't they?

 |All in all, I think JBOSS should delegate synching and locking to the DB

 sure but my point is that can be a cache decision, if you still want to
 implement a pessimistic cache (like we have right now) with maybe a simple
 read-only feature then you can.


I still think you should enable the ability to push the pessimistic locking
onto the DB with CMP, or onto the developer for BMP.  In our app, for
instance, we have common, rarely-updated, entities that are shared alot
between transactions.  Since the current JBoss code-base locks entities into
a transaction we are forced to use straight JDBC to avoid the unnecessary
locks.  I'd really like to avoid mixing JDBC with EJB wherever possible.  I
guess this should be put off for 3.0 though...

 In fact a READ ONLY cache could really improve throughput with
 copies of the
 instances for the duration of the transaction.   It is then the cache
 workspace that becomes XA aware... hmmm must think about it.

 Add-on market??? here we come... we must enable these policies,
 that is what
 I am fixing.


Can't wait to use this stuff

 |wherever it can because the DB is usually more efficient at this.  Also,
 |IMHO, this is really the best way to synch multiple instances of JBoss.

 hm maybe... maybe not... some will argue that letting all the
 cache sync
 on the database is not the best option... it is definitely the *simplest*
 but certainly not the best.. :)


(This should really be in a separate thread, but...) I really can't see the
advantages of synching multiple instances of JBoss without using the DB.
Otherwise you'd have to have a lot of expensive network communication
between these instances and probably some pretty complex logic as well.  The
DB is made for this sort of thing, isn't it?  Actually, don't bother
replying to this, because I really lack the experience to comment on
this

Bill



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-26 Thread marc fleury

|Isolation levels and locking are really orthonogal, aren't they?

 not entirely for example if we decide to NOT lock at the cache level
something that the new cache design will allow then you need to make sure
that isolation levels are such that you don't corrupt your db.
yes the code that locks at the cache level is independent but the data
consistency picture requires one or the other to function properly.

|I still think you should enable the ability to push the pessimistic locking
|onto the DB with CMP, or onto the developer for BMP.  In our app, for

the new caches will allow that with really configurable caches and locking
policies.

|instance, we have common, rarely-updated, entities that are shared alot
|between transactions.  Since the current JBoss code-base locks
|entities into
|a transaction we are forced to use straight JDBC to avoid the unnecessary
|locks.  I'd really like to avoid mixing JDBC with EJB wherever possible.  I
|guess this should be put off for 3.0 though...

yes 3.0 (coding it right now) will allow you to specify read-only cache
policies, where a copy of the ctx will be enough (no need to copy the
instance)

|Can't wait to use this stuff

no dummy I am saying *I* can't wait for you to write the cache (I will just
make sure the container works in all cases, today it doesn't the policy for
locking is hardcoded and pessimistic.).

The moment you do, feel free to add it to the code base of JBO or sell it
for awhile to finance your work and then switch to a real free license
(LGPL).

| hm maybe... maybe not... some will argue that letting all the
| cache sync
| on the database is not the best option... it is definitely the *simplest*
| but certainly not the best.. :)
|(This should really be in a separate thread, but...) I really can't see the
|advantages of synching multiple instances of JBoss without using the DB.
|Otherwise you'd have to have a lot of expensive network communication
|between these instances and probably some pretty complex logic as
|well.  The
|DB is made for this sort of thing, isn't it?  Actually, don't bother
|replying to this, because I really lack the experience to comment on
|this

cache design is a bitch... my goal for 3.0 is to provide a DUMB DOWN
distributed cache (probably leveraging some JINI technology) will be slow
but will work... then we can graduate to oswego cache notifications.
Letting the db blindly update the distributed caches through heavy queries
is probably not the best use of network and resources.  It is the simplest,
clearly not the best.

In fact now that you mention it, the easiest way to provide the clustering
is indeed with a kill of the db by letting it refresh the distributed caches
on ejbLoad forced by option B... brain dead but will work tada! clustering
v0.0.1  db- jini-oswego-differential multicast

marcf
|Bill
|
|
|
|___
|Jboss-development mailing list
|[EMAIL PROTECTED]
|http://lists.sourceforge.net/lists/listinfo/jboss-development



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-26 Thread Dain Sundstrom

 
  I don't know if you wanted with user configurable, but for now it will
allow
  you to play with different levels.  I can make it static later.
 


 static?

fixed


___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-26 Thread Georg Rehfeld

Hi Bill,

 Sorry Georg,  I don't what planet I was on when I made the option A with
 optimistic locking comment.

Oh, might be, you had multiple instances with commit option A in
mind? Marc assumed that and seems to be about implementing that.
I have to rethink that scenario before commenting on it.

I assumed option A = single instance, because the EJB spec 1.1
section 9.1.11 seems to imply this, but then, they tell us:
'These strategies are illustrative, not prescriptive.'

 Sort of related, I did a simple test with Oracle 8.1.7 in 2 separate
 SQL*PLUS windows.  With autocommit off, it seems that if you try to update
 the same row in 2 different windows, one window waits until the other
 commits.

Yes, this is expected behaviour with Oracle when both clients
actually try to update the same bean/row. With Oracle reading
rows without FOR UPDATE ever reads the last committed state
without doing ANY locking. When one TX updates, Oracle keeps a
modified row copy for that TX, others still may read without
locking still seeing the last commited state, but Oracle puts a
write lock on the row. When the second TX tries to update, even
with my suggested optimistic locking where clause, the update
hits that very same row (as the old value for TX2 hasn't changed
yet) and must wait for the write lock to be placed.

You even can get deadlock situations (I just tested it with
SQL*Plus) where Oracle immediately detects it and throws an error
to one of the offending TX (which is a good thing, so the TX at
least can rollback and let others do their work).

I said it before, my suggestion only 'mimickes' optimistic
behaviour, real optimistic locking must be done by the DB.

To clarify, when my suggested OL where clause is usefull and when not:

TX 1TX 2

 read row A
  update A
 read row A  -- still gets old state
   commit
  update A   -- will fail with 'too late'



TX 1TX 2

 read row A
 read row A
  update A
  update A   -- will wait for lock

   time passes .


   commit
 ^
 +-- will fail with 'too late'


TX 1TX 2

 read row A
 read row B
  update A
  update B

 read row B -+- will get old state as seen
  |  by other TX before the update
 read row A -+

  update A  will wait for lock

  update B  Oracle will immediately detect dead lock
 and break it by SQL error: ORA-00060:
 deadlock detected while waiting for
resource
 to one of the TX


 Wonder if this will happen with JDBC as well, I'll let you
 know

For sure!

 Anybody know the behaviour on this with other DBs?  Is this common
 locking behaviour?  If so, great!

There seem to be DBs out, that can do real optimistic locking, someone
mentioned that.

But for many others (i.e. Informix) it depends on the isolation
level, Marc hinted us already twice (please note, my Informix
knowledge is somewhat oldfashioned, I kicked it out years ago
for this (and other) stupid behaviour):

There are 4 Informix isolation levels:
low dirty read  = ANSI read uncommitted
medium  committed read  = ANSI read committed
medium  cursor stability
highrepeatable read = ANSI repeatable read, ANSI serializable

With isolation level set to 'dirty read' Informix doesn't set
locks when reading, but it shows UNCOMMITTED changes done by
other TXs to you (phantom rows)!! It simply ignores locks at all.
This isolation level is useless for multi TX serious work
altogether.

'committed read' is documented as not setting locks when reading
rows and only retrieving committed rows. So this sounds to be the
right isolation to use for the OL approach.

  But when I remember right, it actually BLOCKS reading rows that
  are updated, but uncommitted by another TX. Some Informix guru
  here to correct me? If I'm right, this still remains the level
  to use, but with havy loaded Server/DB the concurrency will
  drop to only let the updating TX proceed, blocking out most read
  only access.

'cursor stability' is very similar to 'committed read' except
that it places a shared lock (preventing others from updating) on
the row under the cursor, not very usefull for our scenario,
where the JDBC driver processes the query completely or in pages
shifting that lock from row to row with read-ahead; with commit
option B/C and no read ahead this at best resembles to
pessimistic locking or is no difference to 'committed read'.

'repeatable read' places shared locks on ALL rows read,
preventing every modification to them. Lacks the same concurrency
problem when there are uncommited changed rows to read. For the
OL suggestion we won't 

Re: [JBoss-dev] High load...

2001-06-26 Thread Dain Sundstrom

 I don't know if you wanted with user configurable, but for now it will
 
  allow
 
 you to play with different levels.  I can make it static later.
 
 
 
 static?
 
 
  fixed
 

 Like at compile time, literally 'static' in the java sense static?
 Please god, not this again.

 Remember that the people responsible for care and feeding of JBoss
 server instances are liable to be system administrators who have just
 about 0 regard for products that require a recompile just to change a
 setting. Consider all the neat stuff you can change by catting some
 value into a psuedo-file under /proc on a linux box. Consider the things
 people bitch about _not_ being able to change there (per-user process
 limit, etc.).

Relax dan, I was implying that if we needed to only support one isolation
level, because of a cache configuration, I can remove the user-configurable
part and set it to always be one isolation level.  This is all moot because
I think I will be rolling back the change (read my other message).

-dain


___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-26 Thread David Jencks

Hi,
On 2001.06.26 11:24:43 -0400 Georg Rehfeld wrote:
snip
 But maybe Bill is right, OL could be used with commit option A
 and single bean instances too? I'm not really sure ... no I
 don't think so, because then every TX is working on state
 possibly modified by another TX and, even worse, with one
 instance only the optimistic approach (based on the diff of the
 actual beans state and the state before TX.begin) will fail, as
 at commit time the 'old' state has to be set equal to the current
 state and the next concurrent TX committing will succeed, where
 it should see a 'you are too late to commit' exception!
 

I don't think I understand what you are suggesting.  However...

Are you familiar with the lock-free versioning/ optimistic locking scheme
used in interbase/firebird?

transactions are numbered sequentially when they are started.

Each record (version) includes the transaction id of the last change to it.

When you query information (within a transaction), you get the record
version with the largest transaction id = your transaction id.

When you change a record, a new version is put in the db with your
transaction id ( of course no one else can see it till you commit).  The
older versions hang around until no transactions are active that could see
them, then they are garbage collected.

There is a transaction property that determines behavior when two
transactions try to modify the same record: either

you get an immediate exception

or

your changes block until the other guy commits (you get an exception) or
rolls back (your transaction succeeds)


Note that this results in snapshot transaction isolation rather than read
committed. (I don't know how read committed is implemented, and don't know
why you would want to use it). I confess I don't quite understand how
snapshot differs from serializable isolation -- its certainly close.

This requires a version for each modifying transaction, rather than a
single version or a version for each transaction.  You may need to keep
several committed versions around at once until all transactions
referencing them are complete.

I think you could use a scheme like this at least with commit option A.

david jencks


 regards
 Georg
  ___   ___
 | + | |__Georg Rehfeld  Woltmanstr. 12 20097 Hamburg
 |_|_\ |___   [EMAIL PROTECTED]   +49 (40) 23 53 27 10
 
 
 
 ___
 Jboss-development mailing list
 [EMAIL PROTECTED]
 http://lists.sourceforge.net/lists/listinfo/jboss-development
 


___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-26 Thread David Jencks

Hi,

Forgive me if I am talking nonsense, but doesn't it only make sense to have
transaction isolation per transaction  I very much doubt you will find
a db that can support several transaction isolation levels within one
transaction.  I can't quite figure out what it would mean, either.  So I
say, put it with the transaction requirements for methods - Requires,
Requires New, etc.  Then you can set the isolation each time you start a
new transaction, based on this specification.

david jencks

On 2001.06.26 14:48:00 -0400 Dain Sundstrom wrote:
  |I added transaction isolation to the new cmp plugin. You can set it by
  |adding the  transaction-isolation element after the datasource
 element.
  |Valid levels are:
  |transaction-none
  |transaction-read-committed
  |transaction-read-uncommitted
  |transaction-repeatable-read
  |transaction-serializable
  |
  |Give me 10 minutes and I'll add it to JAWS...
 
  ok but these will be leveraged by new caches in JBoss 3.0
 
 
 
  so I would imagine that each application can set its own datasource
  isolation level, (different kinds of bean).  So it IS user configurable
  right???
 
  Also how does it play with the datasources, if the datasource is shared
  across applications and different tables support different locking
 policies
  (say one table is RO the other RW) can the driver support sequential
  setIsolationLevel that only applies to the record and or table
 touched?
  marcf
 
 
 Right now this the jaws and jbosscmp code only support datasource per
 application.  When we implement datasource per bean, we can have
 isolation
 level per bean.  This leads to the intresting situation with EJB-QL
 queries
 that thouch multiput beans. May be we need to specify an isolation lever
 for
 each query.  Havn't thought about it much.  Right now you can only set it
 for the entire ejb-jar.
 
 Just tell me when you get the cache stuff figgured out and I can update
 jaws
 and jbosscmp to support what ever you want.
 
 -dain
 
 
 ___
 Jboss-development mailing list
 [EMAIL PROTECTED]
 http://lists.sourceforge.net/lists/listinfo/jboss-development
 


___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-26 Thread marc fleury

|I don't think I understand what you are suggesting.  However...
|
|Are you familiar with the lock-free versioning/ optimistic locking scheme
|used in interbase/firebird?
|
|transactions are numbered sequentially when they are started.
|
|Each record (version) includes the transaction id of the last change to it.
|
|When you query information (within a transaction), you get the record
|version with the largest transaction id = your transaction id.

yes ! this is what I asked for a couple of weeks ago, on a suggestion by
Farid of CPW (Vinay's collegue), versioning the records for long running
transactions and optimistic locking with distributions that have low rw
MAKES TOTAL SENSE.

However we can do it at the container level, not even at the db level

marcf



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-26 Thread danch (Dan Christopherson)

David Jencks wrote:
Read on - the problem with this occured to a few of us already. Although 
none of us mentioned putting it in the container-transaction - that's 
interesting. But what if a method at iso 'read-uncommitted' calls a 
method in an iso 'serializable' transaction?

thanks,
danch

 Hi,
 
 Forgive me if I am talking nonsense, but doesn't it only make sense to have
 transaction isolation per transaction  I very much doubt you will find
 a db that can support several transaction isolation levels within one
 transaction.  I can't quite figure out what it would mean, either.  So I
 say, put it with the transaction requirements for methods - Requires,
 Requires New, etc.  Then you can set the isolation each time you start a
 new transaction, based on this specification.
 
 david jencks
 
 On 2001.06.26 14:48:00 -0400 Dain Sundstrom wrote:
 
|I added transaction isolation to the new cmp plugin. You can set it by
|adding the  transaction-isolation element after the datasource

element.

|Valid levels are:
|transaction-none
|transaction-read-committed
|transaction-read-uncommitted
|transaction-repeatable-read
|transaction-serializable
|
|Give me 10 minutes and I'll add it to JAWS...

ok but these will be leveraged by new caches in JBoss 3.0



so I would imagine that each application can set its own datasource
isolation level, (different kinds of bean).  So it IS user configurable
right???

Also how does it play with the datasources, if the datasource is shared
across applications and different tables support different locking

policies

(say one table is RO the other RW) can the driver support sequential
setIsolationLevel that only applies to the record and or table

touched?

marcf


Right now this the jaws and jbosscmp code only support datasource per
application.  When we implement datasource per bean, we can have
isolation
level per bean.  This leads to the intresting situation with EJB-QL
queries
that thouch multiput beans. May be we need to specify an isolation lever
for
each query.  Havn't thought about it much.  Right now you can only set it
for the entire ejb-jar.

Just tell me when you get the cache stuff figgured out and I can update
jaws
and jbosscmp to support what ever you want.

-dain




___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-26 Thread Bill Burke

I disagreewell, at least for our app, we have transactions where some
entities really need to be serialized and other entities within the
transaction are just fine with read_committed.

Bill

 -Original Message-
 From: [EMAIL PROTECTED]
 [mailto:[EMAIL PROTECTED]]On Behalf Of David
 Jencks
 Sent: Tuesday, June 26, 2001 4:43 PM
 To: [EMAIL PROTECTED]
 Subject: Re: [JBoss-dev] High load...


 Hi,

 Forgive me if I am talking nonsense, but doesn't it only make
 sense to have
 transaction isolation per transaction  I very much doubt you will find
 a db that can support several transaction isolation levels within one
 transaction.  I can't quite figure out what it would mean, either.  So I
 say, put it with the transaction requirements for methods - Requires,
 Requires New, etc.  Then you can set the isolation each time you start a
 new transaction, based on this specification.

 david jencks

 On 2001.06.26 14:48:00 -0400 Dain Sundstrom wrote:
   |I added transaction isolation to the new cmp plugin. You can
 set it by
   |adding the  transaction-isolation element after the datasource
  element.
   |Valid levels are:
   |transaction-none
   |transaction-read-committed
   |transaction-read-uncommitted
   |transaction-repeatable-read
   |transaction-serializable
   |
   |Give me 10 minutes and I'll add it to JAWS...
  
   ok but these will be leveraged by new caches in JBoss 3.0
  
  
  
   so I would imagine that each application can set its own datasource
   isolation level, (different kinds of bean).  So it IS user
 configurable
   right???
  
   Also how does it play with the datasources, if the datasource
 is shared
   across applications and different tables support different locking
  policies
   (say one table is RO the other RW) can the driver support sequential
   setIsolationLevel that only applies to the record and or table
  touched?
   marcf
  
 
  Right now this the jaws and jbosscmp code only support datasource per
  application.  When we implement datasource per bean, we can have
  isolation
  level per bean.  This leads to the intresting situation with EJB-QL
  queries
  that thouch multiput beans. May be we need to specify an isolation lever
  for
  each query.  Havn't thought about it much.  Right now you can
 only set it
  for the entire ejb-jar.
 
  Just tell me when you get the cache stuff figgured out and I can update
  jaws
  and jbosscmp to support what ever you want.
 
  -dain
 
 
  ___
  Jboss-development mailing list
  [EMAIL PROTECTED]
  http://lists.sourceforge.net/lists/listinfo/jboss-development
 


 ___
 Jboss-development mailing list
 [EMAIL PROTECTED]
 http://lists.sourceforge.net/lists/listinfo/jboss-development




___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-26 Thread marc fleury

|I disagreewell, at least for our app, we have transactions where some
|entities really need to be serialized and other entities within the
|transaction are just fine with read_committed.

we will need to express this in code, but there are really 2 levels of
synchronization that need to happen. One is the db, one is the container
cache*s*..

the db will isolate the transaction very well, and provide read bla bla at
the connection level, whether the drivers support it and whether it is the
same consequences on all dbs is to be seen but that is a way.

We can also do read only beans in cache that would REALLY speed things up
(no need to always reload no need to go to the DB AT ALL, except the first
time we get in cache) and that is very configurable, as low as we want.

2 different things, same result isolation, one is superior in throughput and
management,

marcf
|
|Bill
|
| -Original Message-
| From: [EMAIL PROTECTED]
| [mailto:[EMAIL PROTECTED]]On Behalf Of David
| Jencks
| Sent: Tuesday, June 26, 2001 4:43 PM
| To: [EMAIL PROTECTED]
| Subject: Re: [JBoss-dev] High load...
|
|
| Hi,
|
| Forgive me if I am talking nonsense, but doesn't it only make
| sense to have
| transaction isolation per transaction  I very much doubt you
|will find
| a db that can support several transaction isolation levels within one
| transaction.  I can't quite figure out what it would mean, either.  So I
| say, put it with the transaction requirements for methods - Requires,
| Requires New, etc.  Then you can set the isolation each time you start a
| new transaction, based on this specification.
|
| david jencks
|
| On 2001.06.26 14:48:00 -0400 Dain Sundstrom wrote:
|   |I added transaction isolation to the new cmp plugin. You can
| set it by
|   |adding the  transaction-isolation element after the datasource
|  element.
|   |Valid levels are:
|   |transaction-none
|   |transaction-read-committed
|   |transaction-read-uncommitted
|   |transaction-repeatable-read
|   |transaction-serializable
|   |
|   |Give me 10 minutes and I'll add it to JAWS...
|  
|   ok but these will be leveraged by new caches in JBoss 3.0
|  
|  
|  
|   so I would imagine that each application can set its own datasource
|   isolation level, (different kinds of bean).  So it IS user
| configurable
|   right???
|  
|   Also how does it play with the datasources, if the datasource
| is shared
|   across applications and different tables support different locking
|  policies
|   (say one table is RO the other RW) can the driver support sequential
|   setIsolationLevel that only applies to the record and or table
|  touched?
|   marcf
|  
| 
|  Right now this the jaws and jbosscmp code only support datasource per
|  application.  When we implement datasource per bean, we can have
|  isolation
|  level per bean.  This leads to the intresting situation with EJB-QL
|  queries
|  that thouch multiput beans. May be we need to specify an
|isolation lever
|  for
|  each query.  Havn't thought about it much.  Right now you can
| only set it
|  for the entire ejb-jar.
| 
|  Just tell me when you get the cache stuff figgured out and I can update
|  jaws
|  and jbosscmp to support what ever you want.
| 
|  -dain
| 
| 
|  ___
|  Jboss-development mailing list
|  [EMAIL PROTECTED]
|  http://lists.sourceforge.net/lists/listinfo/jboss-development
| 
|
|
| ___
| Jboss-development mailing list
| [EMAIL PROTECTED]
| http://lists.sourceforge.net/lists/listinfo/jboss-development
|
|
|
|
|___
|Jboss-development mailing list
|[EMAIL PROTECTED]
|http://lists.sourceforge.net/lists/listinfo/jboss-development



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-26 Thread marc fleury

|But if they're in the same transaction, they must use the same isolation
|level - per our discussion on the database doing an implicite commit
|when you try to change levels. I don't think it makes logical sense to
|talk about having two different transaction isolation levels in the same
|transaction, either - either the transaction is serializable or the
|transaction is read-committed.

why not?

the STATE is read-committed or not, meaning that a theoretical level I
have no problem saying that a transaction can encompass beans that are
read-only (most of them, like a calendar and a whachamakalit list of stuff
(menu) from where you select your products taht doesn't change (catalog?))
but the order would of course be read write.  For design reasons I might
want to use the global transaction to emcompass the records and have
different isolations on their state.

You don't agree?

marcf
|
|-danch
|
|Bill Burke wrote:
|
| I disagreewell, at least for our app, we have transactions where some
| entities really need to be serialized and other entities within the
| transaction are just fine with read_committed.
|
| Bill
|
|
|-Original Message-
|From: [EMAIL PROTECTED]
|[mailto:[EMAIL PROTECTED]]On Behalf Of David
|Jencks
|Sent: Tuesday, June 26, 2001 4:43 PM
|To: [EMAIL PROTECTED]
|Subject: Re: [JBoss-dev] High load...
|
|
|Hi,
|
|Forgive me if I am talking nonsense, but doesn't it only make
|sense to have
|transaction isolation per transaction  I very much doubt you
|will find
|a db that can support several transaction isolation levels within one
|transaction.  I can't quite figure out what it would mean, either.  So I
|say, put it with the transaction requirements for methods - Requires,
|Requires New, etc.  Then you can set the isolation each time you start a
|new transaction, based on this specification.
|
|david jencks
|
|
|
|___
|Jboss-development mailing list
|[EMAIL PROTECTED]
|http://lists.sourceforge.net/lists/listinfo/jboss-development



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-26 Thread David Jencks

Hi,

since you can't change the transaction isolation after you start the
transaction, the isolation is determined by the outermost isolation
specifier.

david jencks

On 2001.06.26 16:47:16 -0400 danch (Dan Christopherson) wrote:
 David Jencks wrote:
 Read on - the problem with this occured to a few of us already. Although 
 none of us mentioned putting it in the container-transaction - that's 
 interesting. But what if a method at iso 'read-uncommitted' calls a 
 method in an iso 'serializable' transaction?
 
 thanks,
 danch
 
  Hi,
  
  Forgive me if I am talking nonsense, but doesn't it only make sense to
 have
  transaction isolation per transaction  I very much doubt you will
 find
  a db that can support several transaction isolation levels within one
  transaction.  I can't quite figure out what it would mean, either.  So
 I
  say, put it with the transaction requirements for methods - Requires,
  Requires New, etc.  Then you can set the isolation each time you start
 a
  new transaction, based on this specification.
  
  david jencks
  
  On 2001.06.26 14:48:00 -0400 Dain Sundstrom wrote:
  
 |I added transaction isolation to the new cmp plugin. You can set it
 by
 |adding the  transaction-isolation element after the datasource
 
 element.
 
 |Valid levels are:
 |transaction-none
 |transaction-read-committed
 |transaction-read-uncommitted
 |transaction-repeatable-read
 |transaction-serializable
 |
 |Give me 10 minutes and I'll add it to JAWS...
 
 ok but these will be leveraged by new caches in JBoss 3.0
 
 
 
 so I would imagine that each application can set its own datasource
 isolation level, (different kinds of bean).  So it IS user
 configurable
 right???
 
 Also how does it play with the datasources, if the datasource is
 shared
 across applications and different tables support different locking
 
 policies
 
 (say one table is RO the other RW) can the driver support sequential
 setIsolationLevel that only applies to the record and or table
 
 touched?
 
 marcf
 
 
 Right now this the jaws and jbosscmp code only support datasource per
 application.  When we implement datasource per bean, we can have
 isolation
 level per bean.  This leads to the intresting situation with EJB-QL
 queries
 that thouch multiput beans. May be we need to specify an isolation
 lever
 for
 each query.  Havn't thought about it much.  Right now you can only set
 it
 for the entire ejb-jar.
 
 Just tell me when you get the cache stuff figgured out and I can update
 jaws
 and jbosscmp to support what ever you want.
 
 -dain
 
 
 
 
 ___
 Jboss-development mailing list
 [EMAIL PROTECTED]
 http://lists.sourceforge.net/lists/listinfo/jboss-development
 


___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-26 Thread Georg Rehfeld

Hi,

David Jencks:
 I don't think I understand what you are suggesting.  However...

Just as a reminder, my suggestions for mimicked optimistic
locking was:

generate SQL for update/delete with a where clause not only
using the primary key fields, but also the old values of changed
fields / all fields; then interpret a '0 rows affected' response
from executeUpdate() as you're to late, you must rollback and
throw an Exception.

 Are you familiar with the lock-free versioning/ optimistic 
 locking scheme used in interbase/firebird?
 
 transactions are numbered sequentially when they are started.

I know, someone mentioned it before. Interbase does that at the
database level, I assume, no need to have the TX ID in the EJB
server/container/bean? My suggestion is meant for DB's, that don't
have native optimistic locking support (and only mimickes OL, see 
one of my last mails with the diagram, showing pitfalls).

I also originally considered 'versioning', but this whould require
a persistet version number in every table, possibly not a good
option for existing DB's or tables with very few columns and very
much rows, because of the size overhead.

 you get an immediate exception
 
 or
 
 your changes block until the other guy commits (you get an 
 exception) or rolls back (your transaction succeeds)

As you may have seen from the diagram already, the first option
is impossible with my approach due to the DB really locking on
updates, it ever behaves as with the second option above.

 I think you could use a scheme like this at least with commit 
 option A.

Hmmm, I'm still unsure, if commit option A, multiple instances
and locking play nicely together, need more time to consider
different scenarios, I already said, I'm too slow thinking :-)

Thanks and regards
Georg
 ___   ___
| + | |__Georg Rehfeld  Woltmanstr. 12 20097 Hamburg
|_|_\ |___   [EMAIL PROTECTED]   +49 (40) 23 53 27 10



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-26 Thread Bill Burke

Why can't a transaction manage different resources and each of those
resources use a different transaction-isolation level?  What's wrong with
that?

Bill

 -Original Message-
 From: [EMAIL PROTECTED]
 [mailto:[EMAIL PROTECTED]]On Behalf Of David
 Jencks
 Sent: Tuesday, June 26, 2001 5:38 PM
 To: [EMAIL PROTECTED]
 Subject: Re: [JBoss-dev] High load...


 Hi,

 since you can't change the transaction isolation after you start the
 transaction, the isolation is determined by the outermost isolation
 specifier.

 david jencks

 On 2001.06.26 16:47:16 -0400 danch (Dan Christopherson) wrote:
  David Jencks wrote:
  Read on - the problem with this occured to a few of us already.
 Although
  none of us mentioned putting it in the container-transaction - that's
  interesting. But what if a method at iso 'read-uncommitted' calls a
  method in an iso 'serializable' transaction?
 
  thanks,
  danch
 
   Hi,
  
   Forgive me if I am talking nonsense, but doesn't it only make sense to
  have
   transaction isolation per transaction  I very much doubt you will
  find
   a db that can support several transaction isolation levels within one
   transaction.  I can't quite figure out what it would mean, either.  So
  I
   say, put it with the transaction requirements for methods - Requires,
   Requires New, etc.  Then you can set the isolation each time you start
  a
   new transaction, based on this specification.
  
   david jencks
  
   On 2001.06.26 14:48:00 -0400 Dain Sundstrom wrote:
  
  |I added transaction isolation to the new cmp plugin. You can set it
  by
  |adding the  transaction-isolation element after the datasource
  
  element.
  
  |Valid levels are:
  |transaction-none
  |transaction-read-committed
  |transaction-read-uncommitted
  |transaction-repeatable-read
  |transaction-serializable
  |
  |Give me 10 minutes and I'll add it to JAWS...
  
  ok but these will be leveraged by new caches in JBoss 3.0
  
  
  
  so I would imagine that each application can set its own datasource
  isolation level, (different kinds of bean).  So it IS user
  configurable
  right???
  
  Also how does it play with the datasources, if the datasource is
  shared
  across applications and different tables support different locking
  
  policies
  
  (say one table is RO the other RW) can the driver support sequential
  setIsolationLevel that only applies to the record and or table
  
  touched?
  
  marcf
  
  
  Right now this the jaws and jbosscmp code only support datasource per
  application.  When we implement datasource per bean, we can have
  isolation
  level per bean.  This leads to the intresting situation with EJB-QL
  queries
  that thouch multiput beans. May be we need to specify an isolation
  lever
  for
  each query.  Havn't thought about it much.  Right now you can only set
  it
  for the entire ejb-jar.
  
  Just tell me when you get the cache stuff figgured out and I
 can update
  jaws
  and jbosscmp to support what ever you want.
  
  -dain
  
 
 
 
  ___
  Jboss-development mailing list
  [EMAIL PROTECTED]
  http://lists.sourceforge.net/lists/listinfo/jboss-development
 


 ___
 Jboss-development mailing list
 [EMAIL PROTECTED]
 http://lists.sourceforge.net/lists/listinfo/jboss-development




___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-26 Thread marc fleury

|Why can't a transaction manage different resources and each of those
|resources use a different transaction-isolation level?  What's wrong with
|that?

imho nothing

marcf


___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-26 Thread danch

Bill Burke wrote:

 Why can't a transaction manage different resources and each of those
 resources use a different transaction-isolation level?  What's wrong with
 that?

If different resources == different DB connections, i suppose it could. 
Maybe. But I keep thinking of the isolation level as an attribute of the 
transaction itself.

-danch



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-26 Thread Georg Rehfeld

Hi,

Bill Burke:
 Why can't a transaction manage different resources and each of those
 resources use a different transaction-isolation level?  What's wrong with
 that?

There is nothing wrong with the idea IMHO.

As I told earlier, some DB's (Informix) actually can do such
isolation level switching inside a transaction. ANSI seems to not
support that and so there might be DBs out, that follow ANSI and
can't do it (or even worse, do an implicit commit). And the EJB 
specs seem to not like it, considering the least advanced common 
behaviour.

No need for us, to do it better (and warn the user, that it is
possibly not portable to other EJB servers, but who would wan't 
that anyway :-) (Ok, just kidding).

regards
Georg
 ___   ___
| + | |__Georg Rehfeld  Woltmanstr. 12 20097 Hamburg
|_|_\ |___   [EMAIL PROTECTED]   +49 (40) 23 53 27 10



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-26 Thread danch

marc fleury wrote:

 |But if they're in the same transaction, they must use the same isolation
 |level - per our discussion on the database doing an implicite commit
 |when you try to change levels. I don't think it makes logical sense to
 |talk about having two different transaction isolation levels in the same
 |transaction, either - either the transaction is serializable or the
 |transaction is read-committed.
 
 why not?
 
 the STATE is read-committed or not, meaning that a theoretical level I
 have no problem saying that a transaction can encompass beans that are
 read-only (most of them, like a calendar and a whachamakalit list of stuff
 (menu) from where you select your products taht doesn't change (catalog?))
 but the order would of course be read write.  For design reasons I might
 want to use the global transaction to emcompass the records and have
 different isolations on their state.
 
 You don't agree?
 
 marcf

I'm thinking of the isolation level as an immutable part of the 
transaction - partly because this is how the databases implement it (at 
least as far as JDBC goes).

Sure, it would be useful to be able to specify different levels per 
bean, but given the apparent constraints that the databases are putting 
us under, implementing it against the database isn't feasable.

Now, if we do move the notion of isolation level into the container 
further (which I think we've both mentioned) so that we can get the 
cache's et. al. helping us out, then I can certainly agree with your 
'theoretical' case.

-danch


___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-26 Thread Georg Rehfeld

Hi,

David Jencks wrote:

 Yes, I was trying to point out that interbase/firebird has been
 doing this successfully for 15 years, we can have our container
 do it too, here's an algorithm

you left out the most interesting: the algorithm! Please forward!

 Someone mentioned that there might be dbs using optimistic
 locking: interbase/firebird is one such.

:-)

 As an aside, this versioning idea of Jim Starkey is the reason
 interbase/firebird exists. It allows a production database to
 generate meaningful reports: the report runs in a transaction
 that only sees the data present when the report started, yet
 production transactions can freely modify all the data in the db
 without affecting the report.

This is the same with Oracle (one reason Oracle exists and still
is one of the marked leaders :-). Note, that I'm not affiliated
with Oracle in any way. Just used it the last 13 years (and other
DBs as well, went back to Oracle most of the time).

Oracle calls this 'read consistency' and at the lowest possible
level only reads committed data and returns only data as of the
time the query started, even when the read would need hours to
complete and without hindering any other TX to update freely
(including deleting ALL rows from the table). At that lowest
level, this is not repeatable, the next same query then sees the
data as of the new query start time, but there is a setting to do
it repeatabe (which then USES locks, whereas the default
behaviour is lock free).

regards
Georg
 ___   ___
| + | |__Georg Rehfeld  Woltmanstr. 12 20097 Hamburg
|_|_\ |___   [EMAIL PROTECTED]   +49 (40) 23 53 27 10



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-26 Thread Bill Burke



 -Original Message-
 From: [EMAIL PROTECTED]
 [mailto:[EMAIL PROTECTED]]On Behalf Of danch
 Sent: Tuesday, June 26, 2001 6:31 PM
 To: [EMAIL PROTECTED]
 Subject: Re: [JBoss-dev] High load...


 marc fleury wrote:

  |But if they're in the same transaction, they must use the same
 isolation
  |level - per our discussion on the database doing an implicite commit
  |when you try to change levels. I don't think it makes logical sense to
  |talk about having two different transaction isolation levels
 in the same
  |transaction, either - either the transaction is serializable or the
  |transaction is read-committed.
 
  why not?
 
  the STATE is read-committed or not, meaning that a theoretical level I
  have no problem saying that a transaction can encompass beans that are
  read-only (most of them, like a calendar and a whachamakalit
 list of stuff
  (menu) from where you select your products taht doesn't change
 (catalog?))
  but the order would of course be read write.  For design
 reasons I might
  want to use the global transaction to emcompass the records and have
  different isolations on their state.
 
  You don't agree?
 
  marcf

 I'm thinking of the isolation level as an immutable part of the
 transaction - partly because this is how the databases implement it (at
 least as far as JDBC goes).

 Sure, it would be useful to be able to specify different levels per
 bean, but given the apparent constraints that the databases are putting
 us under, implementing it against the database isn't feasable.


Just use a freakin' different connection pool for different beans and there
is no freakin' database constraint.

Bill



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-26 Thread David Jencks

Hi,

Ok, I was thinking of within one db.  I'm working on a logical
inconsistency example if you change isolation within one db, but I don't
have it yet.  I agree, if you have a loosely coupled distributed
transaction, even on one resource manager, the different branches can have
different isolation levels with no problems.

Do you have a suggestion for a declarative isolation specification that
will result in one isolation level/transaction-branch and be simpler than
using bmt?  So far I can't think of one.

flame-baitI tend to think perhaps the best solution is to use a db that
gives you snapshot isolation with no performance penalty/flame-bait 
although perhaps this is not always possible.

david jencks


On 2001.06.26 17:49:42 -0400 Bill Burke wrote:
 Why can't a transaction manage different resources and each of those
 resources use a different transaction-isolation level?  What's wrong with
 that?
 
 Bill
 
  -Original Message-
  From: [EMAIL PROTECTED]
  [mailto:[EMAIL PROTECTED]]On Behalf Of
 David
  Jencks
  Sent: Tuesday, June 26, 2001 5:38 PM
  To: [EMAIL PROTECTED]
  Subject: Re: [JBoss-dev] High load...
 
 
  Hi,
 
  since you can't change the transaction isolation after you start the
  transaction, the isolation is determined by the outermost isolation
  specifier.
 
  david jencks
 
  On 2001.06.26 16:47:16 -0400 danch (Dan Christopherson) wrote:
   David Jencks wrote:
   Read on - the problem with this occured to a few of us already.
  Although
   none of us mentioned putting it in the container-transaction - that's
   interesting. But what if a method at iso 'read-uncommitted' calls a
   method in an iso 'serializable' transaction?
  
   thanks,
   danch
  
Hi,
   
Forgive me if I am talking nonsense, but doesn't it only make sense
 to
   have
transaction isolation per transaction  I very much doubt you
 will
   find
a db that can support several transaction isolation levels within
 one
transaction.  I can't quite figure out what it would mean, either. 
 So
   I
say, put it with the transaction requirements for methods -
 Requires,
Requires New, etc.  Then you can set the isolation each time you
 start
   a
new transaction, based on this specification.
   
david jencks
   
On 2001.06.26 14:48:00 -0400 Dain Sundstrom wrote:
   
   |I added transaction isolation to the new cmp plugin. You can set
 it
   by
   |adding the  transaction-isolation element after the datasource
   
   element.
   
   |Valid levels are:
   |transaction-none
   |transaction-read-committed
   |transaction-read-uncommitted
   |transaction-repeatable-read
   |transaction-serializable
   |
   |Give me 10 minutes and I'll add it to JAWS...
   
   ok but these will be leveraged by new caches in JBoss 3.0
   
   
   
   so I would imagine that each application can set its own
 datasource
   isolation level, (different kinds of bean).  So it IS user
   configurable
   right???
   
   Also how does it play with the datasources, if the datasource is
   shared
   across applications and different tables support different locking
   
   policies
   
   (say one table is RO the other RW) can the driver support
 sequential
   setIsolationLevel that only applies to the record and or table
   
   touched?
   
   marcf
   
   
   Right now this the jaws and jbosscmp code only support datasource
 per
   application.  When we implement datasource per bean, we can have
   isolation
   level per bean.  This leads to the intresting situation with EJB-QL
   queries
   that thouch multiput beans. May be we need to specify an isolation
   lever
   for
   each query.  Havn't thought about it much.  Right now you can only
 set
   it
   for the entire ejb-jar.
   
   Just tell me when you get the cache stuff figgured out and I
  can update
   jaws
   and jbosscmp to support what ever you want.
   
   -dain
   
  
  
  
   ___
   Jboss-development mailing list
   [EMAIL PROTECTED]
   http://lists.sourceforge.net/lists/listinfo/jboss-development
  
 
 
  ___
  Jboss-development mailing list
  [EMAIL PROTECTED]
  http://lists.sourceforge.net/lists/listinfo/jboss-development
 
 
 
 
 ___
 Jboss-development mailing list
 [EMAIL PROTECTED]
 http://lists.sourceforge.net/lists/listinfo/jboss-development
 


___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-26 Thread Bill Burke



 -Original Message-
 From: [EMAIL PROTECTED]
 [mailto:[EMAIL PROTECTED]]On Behalf Of David
 Jencks
 Sent: Tuesday, June 26, 2001 6:57 PM
 To: [EMAIL PROTECTED]
 Subject: RE: [JBoss-dev] High load...


 Hi,

 Ok, I was thinking of within one db.  I'm working on a logical
 inconsistency example if you change isolation within one db, but I don't
 have it yet.  I agree, if you have a loosely coupled distributed
 transaction, even on one resource manager, the different branches can have
 different isolation levels with no problems.

 Do you have a suggestion for a declarative isolation specification that
 will result in one isolation level/transaction-branch and be simpler than
 using bmt?  So far I can't think of one.

Yes,

1. Make JDBC transaction isolation level configurable for connection pools.
2. Create a connection pool for READ_COMMITTED
3. Create a connection pool for SERIALIZED
4. Attach your CMP/CMT entity to the desired pool

Am I making sense?  Is this what you're asking for?

Bill



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-26 Thread Georg Rehfeld

Hi

Marc Fleury wrote:

 precisely, I already fought with Vinay the many instances
 speedup fallacy

 it's a lie...

 if you don't break the pessimistic locking at the db then it is
 useless.

so this puts more stress on me to implement it, as it is usefull
already with multiple server instances. I still can't promise to
start that before next weekend.

 |But maybe Bill is right, OL could be used with commit option A
 |and single bean instances too? I'm not really sure ... no I
 |don't think so, because then every TX is working on state
 |possibly modified by another TX and, even worse, with one

 did he propose that? I don't think so (could be) in any case I am
 rewriting the cache and one option would have to be a cache that
 upon looking up an instance if there is a transaction associated
 with it would clone (deep copy) the current instance so that each
 tx has a copy IN THE CACHE, this way the container flow is
 un-affected.

If I understand you right, you would keep an unmodified original
and give every TX a clone of that, right? As cloning, when the
second TX comes in, would be too late, the cached instance could
already been modified and then rolled back. Non TX threads get
what, the original? Or better a clobber this when you don't know
what you are doing clone handed out to every thread outside TX?

 Of course that supposes that we rely on the databases to
 synchronize the updates, for that we need to know that
 transaction isolation work properly across dbs.

Not sure what you mean here, several DBs in same TX? Nevertheless
I think the multiple instances cache would nicely fit together
with the optimisting locking, wether it is naturally done by the
DB or mimicked on top of pessimistic locking DBs (the latter
having some pitfalls, see my earlier message with the diagram).

Though I can't come up yet with a scenario where this will fail,
why does the EJB spec 1.1 section 9.1.11 suggest a correspondence
between commit option A and single bean instances? Does someone
have a hint?

 btw this is why I am refactoring (rewriting really) the code in
 there. Well the first reason is to get rid of the busy wait bug,

Really happy about that!

 but the nice by product is that you can use the right cache with
 the right database. I sent a small note yesterday on the
 transaction isolation... did you guys see it?

yes, as you already might have seen from my other messages.

regards
Georg
 ___   ___
| + | |__Georg Rehfeld  Woltmanstr. 12 20097 Hamburg
|_|_\ |___   [EMAIL PROTECTED]   +49 (40) 23 53 27 10



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-26 Thread Georg Rehfeld

Hi

who ever it was, said:
  I'm thinking of the isolation level as an immutable part of the
  transaction - partly because this is how the databases implement it (at
  least as far as JDBC goes).
 
  Sure, it would be useful to be able to specify different levels per
  bean, but given the apparent constraints that the databases are putting
  us under, implementing it against the database isn't feasable.
 

Bill Burke answered:
 Just use a freakin' different connection pool for different beans and
there
 is no freakin' database constraint.

That would cause a problem with transactions and not XA compliant
JDBC drivers, wouldn't it? The reason why JBoss pool pickes a
connection from the pool based on the TX (reuses a connection
with a TX when another connection is requested in the same TX)
is, because current drivers often have a one to one correspondence
between connection and transaction (as of comments in JBoss pool).

As a result, when you wanted to switch isolation inside one TX the
CMP code had to issue 'SET ISOLATION whatever' (or similar syntax
for non Informix DBs), the JDBC call setTransactionIsolation()
most probably can't be used, as it seems to behave ANSI like
(does not allow switching inside a TX as of java.sql.Connection
docs).

regards
Georg
 ___   ___
| + | |__Georg Rehfeld  Woltmanstr. 12 20097 Hamburg
|_|_\ |___   [EMAIL PROTECTED]   +49 (40) 23 53 27 10



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-26 Thread Bill Burke



 -Original Message-
 From: [EMAIL PROTECTED]
 [mailto:[EMAIL PROTECTED]]On Behalf Of Georg
 Rehfeld
 Sent: Tuesday, June 26, 2001 8:17 PM
 To: [EMAIL PROTECTED]
 Subject: Re: [JBoss-dev] High load...


 Hi

 who ever it was, said:
   I'm thinking of the isolation level as an immutable part of the
   transaction - partly because this is how the databases
 implement it (at
   least as far as JDBC goes).
  
   Sure, it would be useful to be able to specify different levels per
   bean, but given the apparent constraints that the databases
 are putting
   us under, implementing it against the database isn't feasable.
  

 Bill Burke answered:
  Just use a freakin' different connection pool for different beans and
 there
  is no freakin' database constraint.

 That would cause a problem with transactions and not XA compliant
 JDBC drivers, wouldn't it? The reason why JBoss pool pickes a
 connection from the pool based on the TX (reuses a connection
 with a TX when another connection is requested in the same TX)
 is, because current drivers often have a one to one correspondence
 between connection and transaction (as of comments in JBoss pool).


2 entity beans. 2 connection pools(but same database), each connection pool
is configured to use a certain JDBC isolation level. Entity 1 is attach to
pool 1, Entity 2 is attached to pool 2.

1. Start JBoss transaction
2. Access Entity1.  A connection is grabbed from pool 1,
connection1.setIsolation(blah blah),
3. access entity2.  A connection is created from pool 2,
connection2.setIsolation(blah blah)
4. End JBoss transaction.  commit is called on connection 1 and connection
2.

This should work, shouldn't it?

Regards,

Bill



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-26 Thread marc fleury

| Sure, it would be useful to be able to specify different levels per
| bean, but given the apparent constraints that the databases are putting
| us under, implementing it against the database isn't feasable.
|
|
|Just use a freakin' different connection pool for different beans and there
|is no freakin' database constraint.

oh wait reading old stuff, so you are saying that

(do jdbc connection support setIsolationlevel on the fly) == false

shit...

databases is an UGLY world, you know what??? we can do MUCH better at the
distributed cache level so screw delegating to the db...

I am drunk and it is getting tough to think ...

marcf



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-26 Thread Hiram Chirino


Talking about pools,  While looking at the ASF stuff, it looks like every 
depolyed MDB gets it's own Thread Pool..  I have a feeling that this is NOT 
how it's soposed to be.

Regards,
Hiram

From: marc fleury [EMAIL PROTECTED]
Reply-To: [EMAIL PROTECTED]
To: [EMAIL PROTECTED]
Subject: RE: [JBoss-dev] High load...
Date: Tue, 26 Jun 2001 23:30:32 -0400

|2 entity beans. 2 connection pools(but same database), each connection 
pool
|is configured to use a certain JDBC isolation level. Entity 1 is attach to
|pool 1, Entity 2 is attached to pool 2.

yuck...

I still don't have a clear answer to

what we do = (does a jdbc connection support setting isolations level on 
the
fly)? we use one pool and the container sets levels : we are stuck with 
many
pools

marcf

PS: of course many pools works but yuck!

|
|1. Start JBoss transaction
|2. Access Entity1.  A connection is grabbed from pool 1,
|connection1.setIsolation(blah blah),
|3. access entity2.  A connection is created from pool 2,
|connection2.setIsolation(blah blah)
|4. End JBoss transaction.  commit is called on connection 1 and connection
|2.
|
|This should work, shouldn't it?
|
|Regards,
|
|Bill
|
|
|
|___
|Jboss-development mailing list
|[EMAIL PROTECTED]
|http://lists.sourceforge.net/lists/listinfo/jboss-development



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development

_
Get your FREE download of MSN Explorer at http://explorer.msn.com


___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-26 Thread Dain Sundstrom

I think you missed one of the old messages (way to many today).

It appears that if you changes the transaction isolation in the middle of a
transaction the driver can perform an implicit commit (YUCK).

So, I don't think we can trust drivers to allows us to change the level on
the fly.

-dain
- Original Message -
From: marc fleury [EMAIL PROTECTED]
To: [EMAIL PROTECTED]
Sent: Tuesday, June 26, 2001 10:36 PM
Subject: RE: [JBoss-dev] High load...


 | Sure, it would be useful to be able to specify different levels per
 | bean, but given the apparent constraints that the databases are putting
 | us under, implementing it against the database isn't feasable.
 |
 |
 |Just use a freakin' different connection pool for different beans and
there
 |is no freakin' database constraint.

 oh wait reading old stuff, so you are saying that

 (do jdbc connection support setIsolationlevel on the fly) == false

 shit...

 databases is an UGLY world, you know what??? we can do MUCH better at the
 distributed cache level so screw delegating to the db...

 I am drunk and it is getting tough to think ...

 marcf



 ___
 Jboss-development mailing list
 [EMAIL PROTECTED]
 http://lists.sourceforge.net/lists/listinfo/jboss-development



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-26 Thread marc fleury

|I think you missed one of the old messages (way to many today).
|
|It appears that if you changes the transaction isolation in the middle of a
|transaction the driver can perform an implicit commit (YUCK).
|
|So, I don't think we can trust drivers to allows us to change the level on
|the fly.

well that is EXCELLENT NEWS... ?

you are saying that I can actually change the isolation level on a jdbc
connection for a new transaction ? ( I don't want to change in the middle)
what I want to do is

connection A gets assigned to transaction B

transaction B encompasses bean C

The container gets connection D

Connection D was use with bean E previously

bean C is ISOLATION1 and D is ISOLATION2

my question is can we reconfigure connection D with the new stuff?

you seem to say that yes...because you are aware of problems that arise if
we do it INSIDE a transaction, when I really don't care about this fine a
feature...

marcf

|
|-dain
|- Original Message -
|From: marc fleury [EMAIL PROTECTED]
|To: [EMAIL PROTECTED]
|Sent: Tuesday, June 26, 2001 10:36 PM
|Subject: RE: [JBoss-dev] High load...
|
|
| | Sure, it would be useful to be able to specify different levels per
| | bean, but given the apparent constraints that the databases
|are putting
| | us under, implementing it against the database isn't feasable.
| |
| |
| |Just use a freakin' different connection pool for different beans and
|there
| |is no freakin' database constraint.
|
| oh wait reading old stuff, so you are saying that
|
| (do jdbc connection support setIsolationlevel on the fly) == false
|
| shit...
|
| databases is an UGLY world, you know what??? we can do MUCH better at the
| distributed cache level so screw delegating to the db...
|
| I am drunk and it is getting tough to think ...
|
| marcf
|
|
|
| ___
| Jboss-development mailing list
| [EMAIL PROTECTED]
| http://lists.sourceforge.net/lists/listinfo/jboss-development
|
|
|
|___
|Jboss-development mailing list
|[EMAIL PROTECTED]
|http://lists.sourceforge.net/lists/listinfo/jboss-development



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-25 Thread marc fleury

|You should try this on some other OSes.  I believe that the sun vm on linux
|uses a one-to-one mode (one java thread to one native thread).  This model
|has problems with thread contension becase all thread contension
|is resolved
|in the kernel which has to pass through the native layer.  Other OSes have

I will try that on windows 2000, I will commit the code soon,

|I think the important question is Why do we have a passivation
|cache?  Why
|did we add it and is the circumstances that led us to add it still
|valid.  I
|often find optimiztions in my client's code for situations that simply are
|not a problem any more.  Optimizations make code more difficult to read and
|therefore maintian.  (By the way, we could make a arument along
|the lines of
|scaleability vs. performance of a single instance)
|
|I am all for making the code as simple a possible,

as I said the simpler design is with nopassivation stuff in it.  I believe
with gig ram machines floating around you can carefully design your
deployment so that you will never need passivation.

I will try to keep it in but seriously need to revisit that code,

I will take a couple of days of rabbit hole (paid time) to try and
streamline it, it is key to the scalability and speed of execution

On the other hand it seems to be pretty robust, I can't say I have BROKEN it
;-)

which is good news

marcf
|
|-dain
|
|
|- Original Message -
|From: marc fleury [EMAIL PROTECTED]
|To: Jboss-Development@Lists. Sourceforge. Net
|[EMAIL PROTECTED]
|Sent: Monday, June 25, 2001 11:17 AM
|Subject: [JBoss-dev] High load...
|
|
| I am about to commit an MBean / EJB pair whose only purpose in life is to
| stress the cache locking logic.
|
| Because it is an MBean it never goes through the RMI layers and so we are
| seeing RAW performance of the logic that does the thread mutex semaphore
|and
| all taht... that was the part I had to optimize when I went to SUN... now
| with the new logic 50 threads all pinging on 1 object.
|
| on my new athlon it crawls to an halt at 50 clients in parallel
|(they wait
| 100ms before pinging again) and there is almost no invocation going
| through...
|
| :(
|
| anybody ELSE seen this? I am almost leaning towards TOTALLY removing the
| passivating caches and associated mutex logic as is
|
| Ok I will say the word... this is shite ...
|
| or is it just me?
|
| marcf
|
| _
| Marc Fleury, Ph.D
| [EMAIL PROTECTED]
| _
|
|
|
| ___
| Jboss-development mailing list
| [EMAIL PROTECTED]
| http://lists.sourceforge.net/lists/listinfo/jboss-development
|
|
|
|___
|Jboss-development mailing list
|[EMAIL PROTECTED]
|http://lists.sourceforge.net/lists/listinfo/jboss-development



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-25 Thread Jesper Pedersen

On Monday 25 June 2001 18:50, you wrote:

 |You should try this on some other OSes.  I believe that the sun vm on
 | linux uses a one-to-one mode (one java thread to one native thread). 
 | This model has problems with thread contension becase all thread
 | contension
 |is resolved
 |in the kernel which has to pass through the native layer.  Other OSes have

 I will try that on windows 2000, I will commit the code soon,


 marcf


The Volano report has some numbers (performance and network scalability) 
which can give an idea of the different JVM's on various OS'es.

 http://www.volano.com/report/index.html

Cheers,

 Jesper

___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-25 Thread marc fleury

|Will this affect commit Option A and B, which doesn't passivate?  I'm

not true.

Even under option A if you are under heavy load, the cache can passivate
under you.

marcf
|curious because in the new cmp stuff, I delete my persistence context on
|passivation.  The persistence context is where I store the cmp 2.x
|cmp field
|data.  So, when a bean is passivated I assume that I have to
|reload the data
|from the db.  I can work arround this if the assumtion won't hold anymore.
|
|-dain
|
|
|___
|Jboss-development mailing list
|[EMAIL PROTECTED]
|http://lists.sourceforge.net/lists/listinfo/jboss-development



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-25 Thread Peter Fagerlund

on 1-06-25 18.39, Dain Sundstrom at [EMAIL PROTECTED] wrote:

 You should try this on some other OSes.

and with Blackdowns VM http://www.blackdown.org if or when time permits ...

/p


___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-25 Thread marc fleury

I am running blackdown and IBM

marcf

|-Original Message-
|From: [EMAIL PROTECTED]
|[mailto:[EMAIL PROTECTED]]On Behalf Of Peter
|Fagerlund
|Sent: Monday, June 25, 2001 1:12 PM
|To: [EMAIL PROTECTED]
|Subject: Re: [JBoss-dev] High load...
|
|
|on 1-06-25 18.39, Dain Sundstrom at [EMAIL PROTECTED] wrote:
|
| You should try this on some other OSes.
|
|and with Blackdowns VM http://www.blackdown.org if or when time permits ...
|
|/p
|
|
|___
|Jboss-development mailing list
|[EMAIL PROTECTED]
|http://lists.sourceforge.net/lists/listinfo/jboss-development



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-25 Thread danch (Dan Christopherson)

marc fleury wrote:

 
 as I said the simpler design is with nopassivation stuff in it.  I believe
 with gig ram machines floating around you can carefully design your
 deployment so that you will never need passivation.
 


That's true for 99% of possible installations, but there will always be 
databases that won't fit into memory. Also, if you run a single VM on a 
1GB linux box and try to give it that big a heap and have the number of 
users that that size implies, i suspect you'll have some mighty big 
threading and garbage collection issues with the current Tomcat/RMI 
implementations.

-danch



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-25 Thread danch (Dan Christopherson)

marc fleury wrote:

 I am about to commit an MBean / EJB pair whose only purpose in life is to
 stress the cache locking logic.
 
 Because it is an MBean it never goes through the RMI layers and so we are
 seeing RAW performance of the logic that does the thread mutex semaphore and
 all taht... that was the part I had to optimize when I went to SUN... now
 with the new logic 50 threads all pinging on 1 object.
 
 on my new athlon it crawls to an halt at 50 clients in parallel (they wait
 100ms before pinging again) and there is almost no invocation going
 through...


This is a good test because it shows worst case, but can it be called a 
realistic test? I'm only bringing this up because, well, if I saw 
somebody with an application designed such that every user had to share 
a single synchronized object, I'd say well, yah, that'll perform fer 
shite!


 
 :(
 
 anybody ELSE seen this? I am almost leaning towards TOTALLY removing the
 passivating caches and associated mutex logic as is


It does look like the behavior people have been complaining about. I'd 
not be in favor of permanently removing the passivating caches, however 
- making them non-default, sure, rewrite them absolutely, but they 
really have to be available for truly large installations. Truly large 
installations (running over N terabyte databases) will still need memory 
management. No that's not a typical installation, but don't you want to 
be able to support it?


 
 Ok I will say the word... this is shite ...
 
 or is it just me?
 
 marcf
 
 _
 Marc Fleury, Ph.D
 [EMAIL PROTECTED]
 _


___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-25 Thread Bill Burke



 -Original Message-
 From: [EMAIL PROTECTED]
 [mailto:[EMAIL PROTECTED]]On Behalf Of marc
 fleury
 Sent: Monday, June 25, 2001 12:50 PM
 To: [EMAIL PROTECTED]
 Subject: RE: [JBoss-dev] High load...


 |You should try this on some other OSes.  I believe that the sun
 vm on linux
 |uses a one-to-one mode (one java thread to one native thread).
 This model
 |has problems with thread contension becase all thread contension
 |is resolved
 |in the kernel which has to pass through the native layer.  Other
 OSes have

 I will try that on windows 2000, I will commit the code soon,

 |I think the important question is Why do we have a passivation
 |cache?  Why
 |did we add it and is the circumstances that led us to add it still
 |valid.  I
 |often find optimiztions in my client's code for situations that
 simply are
 |not a problem any more.  Optimizations make code more difficult
 to read and
 |therefore maintian.  (By the way, we could make a arument along
 |the lines of
 |scaleability vs. performance of a single instance)
 |
 |I am all for making the code as simple a possible,

 as I said the simpler design is with nopassivation stuff in it.
  I believe
 with gig ram machines floating around you can carefully design your
 deployment so that you will never need passivation.

 I will try to keep it in but seriously need to revisit that code,

 I will take a couple of days of rabbit hole (paid time) to try and
 streamline it, it is key to the scalability and speed of execution

 On the other hand it seems to be pretty robust, I can't say I
 have BROKEN it
 ;-)


A couple of points:

- Does your test MBean chuck random rollbacks into the stress test as well?
The original locking code seemed to be designed great if everything was
working well, but seemed to have less thought put into when error conditions
showed up(rollbacks).

- Also, do you really have to have transactional locks for entities when
you have commit option B and C?  Wouldn't it be better to have an
instance per transaction and only do method locks?

- I plan on implementing a read-only instance interceptor for our app.  We
never want to lock for any reason with read-only entities.  Maybe this would
be useful in the code base.

- Somebody had a great idea earlier of adding optimistic locking for
CMP/JAWS.  Along with this feature, you could write a specialized
EntityInstanceInterceptor that did not do transactional locking with
commit Option 'A'.  This would be great for beans that had read-only invoked
operations 90% of the time.

Bill



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-25 Thread marc fleury

hell,

one thing at a time, my brain can work so fast

|A couple of points:
|
|- Does your test MBean chuck random rollbacks into the stress test as well?
|The original locking code seemed to be designed great if everything was
|working well, but seemed to have less thought put into when error
|conditions
|showed up(rollbacks).

yes it does, I randomly simulate exceptions,null pointers, and timeouts (by
waiting) and see what happens in the cache.

|- Also, do you really have to have transactional locks for entities when
|you have commit option B and C?  Wouldn't it be better to have an
|instance per transaction and only do method locks?

by design jboss2.0 does a transactional lock.

|- I plan on implementing a read-only instance interceptor for our app.  We
|never want to lock for any reason with read-only entities.  Maybe
|this would
|be useful in the code base.

yes it would be very useful but put in 3.0...

WE NEED TO FREEZE 2.4-2.6 AND MOVE DEVELOPMENT TO THE NEW BRANCH.

(I thought it was frozen already?)

anyway I will try to commit rabbit hole alpha this week (need to fix this
poopoo first) and then we can go hog wash on the rewrite of the
interceptors.  It needs a serious overhaul.

|- Somebody had a great idea earlier of adding optimistic locking for
|CMP/JAWS.  Along with this feature, you could write a specialized
|EntityInstanceInterceptor that did not do transactional locking with
|commit Option 'A'.  This would be great for beans that had
|read-only invoked
|operations 90% of the time.

yes, that would be interesting, BUT AGAIN I WANT TO FINISH OFF THE 2.X
SERIES WITH THE BUGS REMOVED and the streamlined cache with transactional
locking.

I want 2.x to become a household name and for that I would want to fix what
we have.  It is not what you want today? I agree! code it and move it to
3.0.

WE NEED STABILITY IN FEATURES

So put all that good stuff in the new version.

marcf
|
|Bill
|
|
|
|___
|Jboss-development mailing list
|[EMAIL PROTECTED]
|http://lists.sourceforge.net/lists/listinfo/jboss-development



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-25 Thread danch (Dan Christopherson)

Dain Sundstrom wrote:

|Will this affect commit Option A and B, which doesn't passivate?  I'm

not true.

Even under option A if you are under heavy load, the cache can passivate
under you.


 
 Good, I guessed from the code that passivation ment that we need to reload
 the data after activation (i.e., bean data should not be keept, in the vm,
 after a passivation).  During passivation I de-referance the bean data.  I'm
 just curious what was the passivation cache for?
 
 -dain
 


Memory management. If your database contains 10 GB and you only have 1GB 
of memory, you'll need to swap out some bean based on some criteria (LRU 
by default) to make room.


-danch




___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-25 Thread marc fleury

|This is a good test because it shows worst case, but can it be called a
|realistic test? I'm only bringing this up because, well, if I saw
|somebody with an application designed such that every user had to share
|a single synchronized object, I'd say well, yah, that'll perform fer
|shite!

you don't get it, I don't want something realistic I want a COMPLETELY
SYNTHETIC test banging on the cache so I can see where it leaks and breaks.

You know how early planes were tested for air tightness? they are put under
water with pressured cabins and they look for bubbles in the pool.

Was that realistic ? hell no! was that useful? hell yes!


| anybody ELSE seen this? I am almost leaning towards TOTALLY removing the
| passivating caches and associated mutex logic as is
|
|
|It does look like the behavior people have been complaining about. I'd
|not be in favor of permanently removing the passivating caches, however

well frankly part of the test is making sure that I see EXACTLY what doesn't
work.  We have a lot of noise but nothing concrete no repro case that I can
work with.

|- making them non-default, sure, rewrite them absolutely, but they
|really have to be available for truly large installations. Truly large
|installations (running over N terabyte databases) will still need memory
|management. No that's not a typical installation, but don't you want to
|be able to support it?

yes...

marcf
|
|
|
| Ok I will say the word... this is shite ...
|
| or is it just me?
|
| marcf
|
| _
| Marc Fleury, Ph.D
| [EMAIL PROTECTED]
| _
|
|
|___
|Jboss-development mailing list
|[EMAIL PROTECTED]
|http://lists.sourceforge.net/lists/listinfo/jboss-development



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-25 Thread Dain Sundstrom

  I'm just curious what was the passivation cache for?
 


 Memory management. If your database contains 10 GB and you only have 1GB
 of memory, you'll need to swap out some bean based on some criteria (LRU
 by default) to make room.


 -danch


Exactly, so what was the passivation cache?  During passivation we want to
dump data to make room for new objects.  I think I'm lost... Why would we
want to cache objects that we are tring to remove from memory?

-dain


___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-25 Thread danch (Dan Christopherson)

Dain Sundstrom wrote:

I'm just curious what was the passivation cache for?



Memory management. If your database contains 10 GB and you only have 1GB
of memory, you'll need to swap out some bean based on some criteria (LRU
by default) to make room.


-danch


 
 Exactly, so what was the passivation cache?  During passivation we want to
 dump data to make room for new objects.  I think I'm lost... Why would we
 want to cache objects that we are tring to remove from memory?
 
 -dain

It's a cache that passivates when it has over a certain number of object 
within it. It doesn't passivate what it's trying to cache, it passivates 
the overage.

___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



RE: [JBoss-dev] High load...

2001-06-25 Thread Dain Sundstrom

 I'm just curious what was the passivation cache for?
 
 
 
 Memory management. If your database contains 10 GB and you 
 only have 1GB
 of memory, you'll need to swap out some bean based on some 
 criteria (LRU
 by default) to make room.
 
 
 -danch
 
 
  
  Exactly, so what was the passivation cache?  During 
 passivation we want to
  dump data to make room for new objects.  I think I'm 
 lost... Why would we
  want to cache objects that we are tiring to remove from memory?
  
  -dain
 
 It's a cache that passivates when it has over a certain 
 number of object 
 within it. It doesn't passivate what it's trying to cache, it 
 passivates 
 the overage.
 

So if we remove the passivation cache, do we loose commit Option A? If not,
how do we keep bean data alive while passivated?

I still may not understand this.

-dain

___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-25 Thread danch (Dan Christopherson)

Dain Sundstrom wrote:


 
 So if we remove the passivation cache, do we loose commit Option A? If not,
 how do we keep bean data alive while passivated?
 
 I still may not understand this.


I think Mark is just suggesting losing the passivation part of the 
cache. The cache we keep, it just keeps growing and growing and growing.


-danch

___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development



Re: [JBoss-dev] High load...

2001-06-25 Thread Dain Sundstrom

 
  So if we remove the passivation cache, do we loose commit Option A? If
not,
  how do we keep bean data alive while passivated?
 
  I still may not understand this.


 I think Mark is just suggesting losing the passivation part of the
 cache. The cache we keep, it just keeps growing and growing and growing.


 -danch


I find that hard to believe. Would we reboot the server to cear the cache? I
thought he was suggesting removing the cache and just passivating the beans.
I don't want to put words into marc's mouth so hopefully he will expand on
his suggestion.



___
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development