You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jackrabbit.apache.org by Alan R <ar...@messagio.com> on 2007/04/16 11:29:21 UTC

Re: About the parameter config of Mysql autoReconnect

Hi.  I'm using connection pooling and not using autoReconnect, but sometimes
I get the same broken pipe problem.  I'm using Jackrabbit 1.2.2 on linux
with tomcat 5.5 and MySQL 5 (JDBC connector version 5.0.4).  The problem is
intermittent and unpredictable. I'm not quite sure how to reproduce it, but
it's in the logs.  

In case there's a config problem, here's my config info (slightly sanitized
for security):

>From repository.xml (and the same in workspace.xml):

         <PersistenceManager 

class="org.apache.jackrabbit.core.persistence.db.JNDIDatabasePersistenceManager">
           <param name="dataSourceLocation"
value="java:comp/env/jdbc/mmjcr"/>
           <param name="schemaObjectPrefix" value="${wsp.name}_"/>
           <param name="externalBLOBs" value="true"/>
           <param name="schema" value="mysql"/>
       </PersistenceManager>


>From context file for tomcat:

 <Resource      name="jdbc/mmjcr"
                auth="Container"
                type="javax.sql.DataSource"
            maxActive="4"
            maxIdle="2"
            maxWait="5000"
            username="<DB_NAME>"
            password="<PASSWORD>"
            driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://<DB_HOST>/<DB_NAME>"/>


<Resource name="jcr/repository"
          auth="Container"
          type="javax.jcr.Repository"
         
factory="org.apache.jackrabbit.core.jndi.BindableRepositoryFactory"
          configFilePath="<HOME_DIR>/repository.xml"
          repHomeDir="<HOME_DIR>" /> 


Any idea why this might be happening?
-Alan

P.S.: FYI, here's the log info for the first problem encountered:

08:57:55,052 ERROR [DatabasePersistenceManager] failed closing Statement
08:57:55,053 ERROR [DatabasePersistenceManager]     reason: Communications
link failure\
 due to underlying exception:

** BEGIN NESTED EXCEPTION **

java.net.SocketException
MESSAGE: Broken pipe

STACKTRACE:

java.net.SocketException: Broken pipe
        at java.net.SocketOutputStream.socketWrite0(Native Method)
        at
java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
        at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
        at
java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
        at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
        at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2637)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1554)
        at
com.mysql.jdbc.ServerPreparedStatement.realClose(ServerPreparedStatement.jav\
a:908)
        at
com.mysql.jdbc.ServerPreparedStatement.close(ServerPreparedStatement.java:47\
6)
        at
org.apache.tomcat.dbcp.dbcp.DelegatingStatement.close(DelegatingStatement.ja\
va:165)
        at
org.apache.jackrabbit.core.persistence.db.DatabasePersistenceManager.closeSt\
atement(DatabasePersistenceManager.java:915)
        at
org.apache.jackrabbit.core.persistence.db.DatabasePersistenceManager.reestab\
lishConnection(DatabasePersistenceManager.java:781)
        at
org.apache.jackrabbit.core.persistence.db.DatabasePersistenceManager.execute\
Stmt(DatabasePersistenceManager.java:845)
        at
org.apache.jackrabbit.core.persistence.db.DatabasePersistenceManager.exists(\
DatabasePersistenceManager.java:673)
        at
org.apache.jackrabbit.core.state.SharedItemStateManager.hasNonVirtualItemSta\
te(SharedItemStateManager.java:1052)
        at
org.apache.jackrabbit.core.state.SharedItemStateManager.hasItemState(SharedI\
temStateManager.java:287)
        at
org.apache.jackrabbit.core.state.LocalItemStateManager.hasItemState(LocalIte\
mStateManager.java:180)
        at
org.apache.jackrabbit.core.state.XAItemStateManager.hasItemState(XAItemState\
Manager.java:252)
        at
org.apache.jackrabbit.core.state.SessionItemStateManager.getItemState(Sessio\
nItemStateManager.java:176)
        at
org.apache.jackrabbit.core.ItemManager.createItemInstance(ItemManager.java:4\
65)
        at
org.apache.jackrabbit.core.ItemManager.getItem(ItemManager.java:323)
        at
org.apache.jackrabbit.core.NodeImpl.getProperty(NodeImpl.java:2492)

-- 
View this message in context: http://www.nabble.com/About-the-parameter-config-of-Mysql-autoReconnect-tf2649052.html#a10012897
Sent from the Jackrabbit - Users mailing list archive at Nabble.com.


Re: About the parameter config of Mysql autoReconnect

Posted by Jukka Zitting <ju...@gmail.com>.
Hi,

On 4/16/07, Stefan Guggisberg <st...@gmail.com> wrote:
> On 4/16/07, Alan R <ar...@messagio.com> wrote:
> > No issues I know of.  When using the SimpleDatabasePersistenceManager MySQL
> > would freeze indefinitely not for Jackrabbit but for other connected apps
> > when we got this issue.  Now with JNDIDatabasePersistenceManager it does not
> > crash MySQL, but looking at the log, I see that each time it happened it
> > occurred exactly 15 times in a period of less than 1 second.  I'm curious as
> > to why that might be.  Does Jackrabbit try 15 times to reconnect and then
> > give up?
>
> strange. if the execution of a sql statement fails jackrabbit tries
> one more time after re-establishing.

The multiple logged warnings could be caused by Jackrabbit closing all
the old statement handles, see issue JCR-765.

BR,

Jukka Zitting

Re: About the parameter config of Mysql autoReconnect

Posted by Stefan Guggisberg <st...@gmail.com>.
On 4/16/07, Alan R <ar...@messagio.com> wrote:
>
>
> Stefan Guggisberg wrote:
> >
> > apart from the log messages, are there any other related issues?
> >>
>
> No issues I know of.  When using the SimpleDatabasePersistenceManager MySQL
> would freeze indefinitely not for Jackrabbit but for other connected apps
> when we got this issue.  Now with JNDIDatabasePersistenceManager it does not
> crash MySQL, but looking at the log, I see that each time it happened it
> occurred exactly 15 times in a period of less than 1 second.  I'm curious as
> to why that might be.  Does Jackrabbit try 15 times to reconnect and then
> give up?

strange. if the execution of a sql statement fails jackrabbit tries
one more time after
re-establishing. see
o.a.j.c.persistence.db.DatabasePersistenceManager#executeStmt
for details.

right now i don't have a plausible explanation at hand, i would need
to do further
investigations (analyze your setup, logs, stack traces etc).

cheers
stefan

> --
> View this message in context: http://www.nabble.com/About-the-parameter-config-of-Mysql-autoReconnect-tf2649052.html#a10013548
> Sent from the Jackrabbit - Users mailing list archive at Nabble.com.
>
>

Re: About the parameter config of Mysql autoReconnect

Posted by Alan R <ar...@messagio.com>.
I spoke too soon about no other issues.  Things exploded so badly since I
posted that response that I'm considering reverting back to Derby, where
things seemed to work well.  We had the same issue come back, which may or
may not related to Jackrabbit, where one of our other apps freezes when
connecting to MySQL.  And this morning we had a new error I had not seen
before in Jackrabbit, where we got an EOFException between Jackrabbit and
MySQL: 

java.io.EOFException
        at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1913)
        at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2304)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2803)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)
        at
com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement\
.java:1169)
        at
com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStateme\
nt.java:693)
        at
com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:794)
        at
org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.execute(DelegatingPr\
eparedStatement.java:168)
        at
org.apache.jackrabbit.core.persistence.db.DatabasePersistenceManager.execute\
Stmt(DatabasePersistenceManager.java:834)
        at
org.apache.jackrabbit.core.persistence.db.DatabasePersistenceManager.store(D\
atabasePersistenceManager.java:466)
        at
org.apache.jackrabbit.core.persistence.AbstractPersistenceManager.store(Abst\
ractPersistenceManager.java:84)
        at
org.apache.jackrabbit.core.persistence.db.DatabasePersistenceManager.store(D\
atabasePersistenceManager.java:274)
        at
org.apache.jackrabbit.core.state.SharedItemStateManager$Update.end(SharedIte\
mStateManager.java:675)
        at
org.apache.jackrabbit.core.state.SharedItemStateManager.update(SharedItemSta\
teManager.java:808)
        at
org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemState\
Manager.java:326)
        at
org.apache.jackrabbit.core.state.XAItemStateManager.update(XAItemStateManage\
r.java:313)
        at
org.apache.jackrabbit.core.state.LocalItemStateManager.update(LocalItemState\
Manager.java:302)
        at
org.apache.jackrabbit.core.state.SessionItemStateManager.update(SessionItemS\
tateManager.java:308)
        at org.apache.jackrabbit.core.ItemImpl.save(ItemImpl.java:1204)




Alan R wrote:
> 
> 
> Stefan Guggisberg wrote:
>> 
>> apart from the log messages, are there any other related issues?
>>>
> 
> No issues I know of.  When using the SimpleDatabasePersistenceManager
> MySQL would freeze indefinitely not for Jackrabbit but for other connected
> apps when we got this issue.  Now with JNDIDatabasePersistenceManager it
> does not crash MySQL, but looking at the log, I see that each time it
> happened it occurred exactly 15 times in a period of less than 1 second. 
> I'm curious as to why that might be.  Does Jackrabbit try 15 times to
> reconnect and then give up?  
> 

-- 
View this message in context: http://www.nabble.com/About-the-parameter-config-of-Mysql-autoReconnect-tf2649052.html#a10031436
Sent from the Jackrabbit - Users mailing list archive at Nabble.com.


Re: About the parameter config of Mysql autoReconnect

Posted by Alan R <ar...@messagio.com>.

Stefan Guggisberg wrote:
> 
> apart from the log messages, are there any other related issues?
>>

No issues I know of.  When using the SimpleDatabasePersistenceManager MySQL
would freeze indefinitely not for Jackrabbit but for other connected apps
when we got this issue.  Now with JNDIDatabasePersistenceManager it does not
crash MySQL, but looking at the log, I see that each time it happened it
occurred exactly 15 times in a period of less than 1 second.  I'm curious as
to why that might be.  Does Jackrabbit try 15 times to reconnect and then
give up?  
-- 
View this message in context: http://www.nabble.com/About-the-parameter-config-of-Mysql-autoReconnect-tf2649052.html#a10013548
Sent from the Jackrabbit - Users mailing list archive at Nabble.com.


Re: About the parameter config of Mysql autoReconnect

Posted by Stefan Guggisberg <st...@gmail.com>.
hi alan,

On 4/16/07, Alan R <ar...@messagio.com> wrote:
>
> Hi.  I'm using connection pooling and not using autoReconnect, but sometimes

please note that JNDIDatabasePersistenceManager does not actively make use
of connection pooling as the warning in the javadoc indicates:
http://jackrabbit.apache.org/api-1/org/apache/jackrabbit/core/state/db/JNDIDatabasePersistenceManager.html

> I get the same broken pipe problem.  I'm using Jackrabbit 1.2.2 on linux
> with tomcat 5.5 and MySQL 5 (JDBC connector version 5.0.4).  The problem is
> intermittent and unpredictable. I'm not quite sure how to reproduce it, but
> it's in the logs.
>
> In case there's a config problem, here's my config info (slightly sanitized
> for security):
>
> From repository.xml (and the same in workspace.xml):
>
>          <PersistenceManager
>
> class="org.apache.jackrabbit.core.persistence.db.JNDIDatabasePersistenceManager">
>            <param name="dataSourceLocation"
> value="java:comp/env/jdbc/mmjcr"/>
>            <param name="schemaObjectPrefix" value="${wsp.name}_"/>
>            <param name="externalBLOBs" value="true"/>
>            <param name="schema" value="mysql"/>
>        </PersistenceManager>
>
>
> From context file for tomcat:
>
>  <Resource      name="jdbc/mmjcr"
>                 auth="Container"
>                 type="javax.sql.DataSource"
>             maxActive="4"
>             maxIdle="2"
>             maxWait="5000"
>             username="<DB_NAME>"
>             password="<PASSWORD>"
>             driverClassName="com.mysql.jdbc.Driver"
>         url="jdbc:mysql://<DB_HOST>/<DB_NAME>"/>
>
>
> <Resource name="jcr/repository"
>           auth="Container"
>           type="javax.jcr.Repository"
>
> factory="org.apache.jackrabbit.core.jndi.BindableRepositoryFactory"
>           configFilePath="<HOME_DIR>/repository.xml"
>           repHomeDir="<HOME_DIR>" />
>
>
> Any idea why this might be happening?

mysql does shutdown connections that have been idle for some period of time.
'broken pipe' errors in the log are therefore to be expected and per se
nothing to be worried about since jackrabbit tries to silently reestablish
a broken connection.

apart from the log messages, are there any other related issues?

cheers
stefan

> -Alan
>
> P.S.: FYI, here's the log info for the first problem encountered:
>
> 08:57:55,052 ERROR [DatabasePersistenceManager] failed closing Statement
> 08:57:55,053 ERROR [DatabasePersistenceManager]     reason: Communications
> link failure\
>  due to underlying exception:
>
> ** BEGIN NESTED EXCEPTION **
>
> java.net.SocketException
> MESSAGE: Broken pipe
>
> STACKTRACE:
>
> java.net.SocketException: Broken pipe
>         at java.net.SocketOutputStream.socketWrite0(Native Method)
>         at
> java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
>         at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
>         at
> java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
>         at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
>         at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2637)
>         at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1554)
>         at
> com.mysql.jdbc.ServerPreparedStatement.realClose(ServerPreparedStatement.jav\
> a:908)
>         at
> com.mysql.jdbc.ServerPreparedStatement.close(ServerPreparedStatement.java:47\
> 6)
>         at
> org.apache.tomcat.dbcp.dbcp.DelegatingStatement.close(DelegatingStatement.ja\
> va:165)
>         at
> org.apache.jackrabbit.core.persistence.db.DatabasePersistenceManager.closeSt\
> atement(DatabasePersistenceManager.java:915)
>         at
> org.apache.jackrabbit.core.persistence.db.DatabasePersistenceManager.reestab\
> lishConnection(DatabasePersistenceManager.java:781)
>         at
> org.apache.jackrabbit.core.persistence.db.DatabasePersistenceManager.execute\
> Stmt(DatabasePersistenceManager.java:845)
>         at
> org.apache.jackrabbit.core.persistence.db.DatabasePersistenceManager.exists(\
> DatabasePersistenceManager.java:673)
>         at
> org.apache.jackrabbit.core.state.SharedItemStateManager.hasNonVirtualItemSta\
> te(SharedItemStateManager.java:1052)
>         at
> org.apache.jackrabbit.core.state.SharedItemStateManager.hasItemState(SharedI\
> temStateManager.java:287)
>         at
> org.apache.jackrabbit.core.state.LocalItemStateManager.hasItemState(LocalIte\
> mStateManager.java:180)
>         at
> org.apache.jackrabbit.core.state.XAItemStateManager.hasItemState(XAItemState\
> Manager.java:252)
>         at
> org.apache.jackrabbit.core.state.SessionItemStateManager.getItemState(Sessio\
> nItemStateManager.java:176)
>         at
> org.apache.jackrabbit.core.ItemManager.createItemInstance(ItemManager.java:4\
> 65)
>         at
> org.apache.jackrabbit.core.ItemManager.getItem(ItemManager.java:323)
>         at
> org.apache.jackrabbit.core.NodeImpl.getProperty(NodeImpl.java:2492)
>
> --
> View this message in context: http://www.nabble.com/About-the-parameter-config-of-Mysql-autoReconnect-tf2649052.html#a10012897
> Sent from the Jackrabbit - Users mailing list archive at Nabble.com.
>
>