Return-Path: Delivered-To: apmail-jackrabbit-commits-archive@www.apache.org Received: (qmail 63496 invoked from network); 27 Apr 2007 08:49:48 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 27 Apr 2007 08:49:48 -0000 Received: (qmail 15458 invoked by uid 500); 27 Apr 2007 08:49:54 -0000 Delivered-To: apmail-jackrabbit-commits-archive@jackrabbit.apache.org Received: (qmail 15427 invoked by uid 500); 27 Apr 2007 08:49:54 -0000 Mailing-List: contact commits-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@jackrabbit.apache.org Delivered-To: mailing list commits@jackrabbit.apache.org Received: (qmail 15417 invoked by uid 99); 27 Apr 2007 08:49:54 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 27 Apr 2007 01:49:54 -0700 X-ASF-Spam-Status: No, hits=-99.5 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 27 Apr 2007 01:49:46 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id 9D0B21A9838; Fri, 27 Apr 2007 01:49:26 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r533019 - in /jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal: AbstractJournal.java AppendRecord.java DatabaseJournal.java DefaultRecordProducer.java FileJournal.java Date: Fri, 27 Apr 2007 08:49:26 -0000 To: commits@jackrabbit.apache.org From: dpfister@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070427084926.9D0B21A9838@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: dpfister Date: Fri Apr 27 01:49:25 2007 New Revision: 533019 URL: http://svn.apache.org/viewvc?view=rev&rev=533019 Log: JCR-884 - DatabaseJournal assigns same revision id to different revisions Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AbstractJournal.java jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AppendRecord.java jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/DatabaseJournal.java jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/DefaultRecordProducer.java jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/FileJournal.java Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AbstractJournal.java URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AbstractJournal.java?view=diff&rev=533019&r1=533018&r2=533019 ============================================================================== --- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AbstractJournal.java (original) +++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AbstractJournal.java Fri Apr 27 01:49:25 2007 @@ -272,16 +272,27 @@ protected abstract void doLock() throws JournalException; /** - * Append a record backed by a file. Subclass responsibility. + * Notification method called by an appended record at creation time. + * May be overridden by subclasses to save some context information + * inside the appended record. * - * @param producerId producer identifier + * @param record record that was appended + */ + protected void appending(AppendRecord record) { + // nothing to be done here + } + + /** + * Append a record backed by a file. On exit, the new revision must have + * been set inside the appended record. Subclass responsibility. + * + * @param record record to append * @param in input stream * @param length number of bytes in input stream - * @return the new record's revision * * @throws JournalException if an error occurs */ - protected abstract long append(String producerId, InputStream in, int length) + protected abstract void append(AppendRecord record, InputStream in, int length) throws JournalException; /** Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AppendRecord.java URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AppendRecord.java?view=diff&rev=533019&r1=533018&r2=533019 ============================================================================== --- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AppendRecord.java (original) +++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/AppendRecord.java Fri Apr 27 01:49:25 2007 @@ -138,6 +138,15 @@ } /** + * Set the revision this record represents. + * + * @param revision revision + */ + protected void setRevision(long revision) { + this.revision = revision; + } + + /** * {@inheritDoc} */ public void writeByte(int n) throws JournalException { @@ -239,7 +248,7 @@ InputStream in = openInput(); try { - revision = journal.append(producerId, in, length); + journal.append(this, in, length); succeeded = true; } finally { try { Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/DatabaseJournal.java URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/DatabaseJournal.java?view=diff&rev=533019&r1=533018&r2=533019 ============================================================================== --- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/DatabaseJournal.java (original) +++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/DatabaseJournal.java Fri Apr 27 01:49:25 2007 @@ -215,6 +215,11 @@ /** * {@inheritDoc} + *

+ * This journal is locked by incrementing the current value in the table + * named GLOBAL_REVISION, which effectively write-locks this + * table. The updated value is then saved away and remembered in the + * appended record, because a save may entail multiple appends (JCR-884). */ protected void doLock() throws JournalException { ResultSet rs = null; @@ -278,22 +283,32 @@ /** * {@inheritDoc} + *

+ * Save away the locked revision inside the newly appended record. */ - protected long append(String producerId, InputStream in, int length) + protected void appending(AppendRecord record) { + record.setRevision(lockedRevision); + } + + /** + * {@inheritDoc} + *

+ * We have already saved away the revision for this record. + */ + protected void append(AppendRecord record, InputStream in, int length) throws JournalException { try { try { insertRevisionStmt.clearParameters(); insertRevisionStmt.clearWarnings(); - insertRevisionStmt.setLong(1, lockedRevision); + insertRevisionStmt.setLong(1, record.getRevision()); insertRevisionStmt.setString(2, getId()); - insertRevisionStmt.setString(3, producerId); + insertRevisionStmt.setString(3, record.getProducerId()); insertRevisionStmt.setBinaryStream(4, in, length); insertRevisionStmt.execute(); con.commit(); - return lockedRevision; } finally { try { con.setAutoCommit(true); Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/DefaultRecordProducer.java URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/DefaultRecordProducer.java?view=diff&rev=533019&r1=533018&r2=533019 ============================================================================== --- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/DefaultRecordProducer.java (original) +++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/DefaultRecordProducer.java Fri Apr 27 01:49:25 2007 @@ -46,12 +46,13 @@ * {@inheritDoc} */ public Record append() throws JournalException { - Record record = null; + AppendRecord record = null; journal.lockAndSync(); try { record = createRecord(); + journal.appending(record); return record; } finally { if (record == null) { Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/FileJournal.java URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/FileJournal.java?view=diff&rev=533019&r1=533018&r2=533019 ============================================================================== --- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/FileJournal.java (original) +++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/FileJournal.java Fri Apr 27 01:49:25 2007 @@ -169,7 +169,7 @@ /** * {@inheritDoc} */ - protected long append(String producerId, InputStream in, int length) + protected void append(AppendRecord record, InputStream in, int length) throws JournalException { try { @@ -181,9 +181,10 @@ if (recordLog.isNew()) { recordLog.init(globalRevision.get()); } - long revision = recordLog.append(getId(), producerId, in, length); + long revision = recordLog.append(getId(), + record.getProducerId(), in, length); globalRevision.set(revision); - return revision; + record.setRevision(revision); } catch (IOException e) { String msg = "Unable to append new record to journal '" + journalFile + "'.";