[ 
https://issues.apache.org/jira/browse/DERBY-4299?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12730861#action_12730861
 ] 

Knut Anders Hatlen commented on DERBY-4299:
-------------------------------------------

I also see this if I run with authentication disabled 
(derby.connection.requireAuthentication), and it seems the reason is that 
impl.drda.Database.makeDummyConnection() creates a connection with all the 
connection attributes specified by the client, except user name and password. 
When authentication is disabled, the default user APP will be allowed to 
connect to the database, and since startMaster is one of the connection 
attributes, the master will be started. If authentication is enabled, the 
creation of the dummy connection will fail, and the master is not started until 
the real start master (with correct user name and password) is issued right 
after.

The problem with startSlave is similar. It's makeDummyConnection() that's 
causing the problems there as well, but it doesn't have a problem with 
authentication being disabled since there is code in EmbedConnection to shut 
down the database if it was booted just for credentials checking while booting 
the slave. startSlave's problem is that the APP user must not be a noAccess 
user in order to be able to shut down the database again.

The whole makeDummyConnection() scheme looks broken in the context of 
replication. Since it's only used to verify whether or not we're allowed to use 
securityMechanism=8 for the given database, I don't think much harm will be 
done if we just skip that step for replication commands. It is already coded so 
that it will report that the security mechanism is OK to use if it cannot be 
determined (despite comments in DRDAConnThread.validateSecMecUSRSSBPWD() saying 
the opposite).

It is currently only possible to use securityMechanism=8 together with Derby's 
BUILTIN authentication provider, regardless of replication.

> Slave start fails with message that the database is already booted, even when 
> it is not.
> ----------------------------------------------------------------------------------------
>
>                 Key: DERBY-4299
>                 URL: https://issues.apache.org/jira/browse/DERBY-4299
>             Project: Derby
>          Issue Type: Bug
>          Components: Replication
>    Affects Versions: 10.5.1.1, 10.6.0.0
>         Environment: java version "1.6.0_13"
> Java(TM) SE Runtime Environment (build 1.6.0_13-b03)
> Java HotSpot(TM) Client VM (build 11.3-b02, mixed mode)
> SunOS opensolaris 5.11 snv_117 i86pc i386 i86pc Solaris
>            Reporter: Dag H. Wanvik
>         Attachments: assert.sh, auth.tar.bz2, reproscript, workingscript
>
>
> Seen by Alan Burlison, cf. 
> http://mail-archives.apache.org/mod_mbox/db-derby-user/200907.mbox/ajax/%[email protected]%3e
> ij> connect 
> 'jdbc:derby://bleaklow/opensolaris;user=auth;password=CHANGEME;securityMechanism=8;startSlave=true';
> ERROR XRE09: DERBY SQL error: SQLCODE: -1, SQLSTATE: XRE09, SQLERRMC: 
> Cannot start replication slave mode for database 'opensolaris'. The 
> database has already been booted.
> I can reproduce it using Alan's database (thanks, Alan!). When running a 
> debug build of Derby, however, I hit an ASSERT:
> ASSERT FAILED Wrong LogInstant on log record (0,0) version real position 
> (4,3304)
>       at 
> org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:162)
> at 
> org.apache.derby.shared.common.sanity.SanityManager.THROWASSERT(SanityManager.java:147)
>       at 
> org.apache.derby.impl.store.raw.log.Scan.getNextRecordBackward(Scan.java:403)
>       at org.apache.derby.impl.store.raw.log.Scan.getNextRecord(Scan.java:204)
>       at 
> org.apache.derby.impl.store.raw.log.FileLogger.undo(FileLogger.java:939)
>       at org.apache.derby.impl.store.raw.xact.Xact.abort(Xact.java:949)
>       at org.apache.derby.impl.store.raw.xact.Xact.destroy(Xact.java:1105)
>       at 
> org.apache.derby.impl.store.access.RAMTransaction.destroy(RAMTransaction.java:2030)
>       at 
> org.apache.derby.impl.sql.catalog.DataDictionaryImpl.boot(DataDictionaryImpl.java:802)
>       at 
> org.apache.derby.impl.services.monitor.BaseMonitor.boot(BaseMonitor.java:2021)
>       at 
> org.apache.derby.impl.services.monitor.TopService.bootModule(TopService.java:333)
>       at 
> org.apache.derby.impl.services.monitor.BaseMonitor.startModule(BaseMonitor.java:573)
>       at 
> org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Monitor.java:427)
>       at org.apache.derby.impl.db.BasicDatabase.boot(BasicDatabase.java:214)
>       at 
> org.apache.derby.impl.services.monitor.BaseMonitor.boot(BaseMonitor.java:2021)
>       at 
> org.apache.derby.impl.services.monitor.TopService.bootModule(TopService.java:333)
>       at 
> org.apache.derby.impl.services.monitor.BaseMonitor.bootService(BaseMonitor.java:1858)
>       at 
> org.apache.derby.impl.services.monitor.BaseMonitor.startProviderService(BaseMonitor.java:1724)
>       at 
> org.apache.derby.impl.services.monitor.BaseMonitor.findProviderAndStartService(BaseMonitor.java:1602)
>       at 
> org.apache.derby.impl.services.monitor.BaseMonitor.startPersistentService(BaseMonitor.java:1021)
>       at 
> org.apache.derby.iapi.services.monitor.Monitor.startPersistentService(Monitor.java:550)
>       at 
> org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(EmbedConnection.java:2580)
> so there seems to be an issue with the log. It could be related to 
> DERBY-3896. In Alan's original repre he used client/Server mode, but I can 
> reproduce the error with embedded more, cf. the attached script.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to