Bug 43463

GemStone/S

6.6.4, 6.6.3.3, 6.6.3.2, 6.6.3, 6.6.2, 6.6, 6.5.8, 6.5.7.5, 6.5.7, 6.5.6, 6.3.1, 6.1.6, 6.1.5

All Platforms

6.6.5

Logins during commitRestore can cause commitRestore to fail

Repository>>commitRestore requires that the session performing the commitRestore
be the only session logged in.  It does a suspendLogins, and then checks
that it is the only one, failing with #rtErrNotOnlyUser (2140) if it isn't.

But under certain conditions, a session login that takes a long time can
be missed by this check.  It may have started logging in just before the
suspendLogins, but not yet completed the process when the commitRestore
session checks to see if it is the only one.  This can happen with remote
gems when they have to set up a remote cache.

The presence of this second session will cause the commitRestore to fail
with the error:

RecovCommitRestore: problem disposing commit records.

Workaround

Before performing the commitRestore, you should do the following to guarantee
that there is only one session:

   System suspendLogins.
   System sleep: 5.
   System stopOtherSessions.

The 5 second sleep is to give any sessions that sneak by the suspendLogins
time to complete their login, so that they will be properly terminated
by the stopOtherSessions.  Depending on your site you may have to make
the sleep longer.


Last updated: 5/29/14