From commits-return-2242-apmail-jackrabbit-commits-archive=jackrabbit.apache.org@jackrabbit.apache.org Wed Apr 19 20:21:55 2006 Return-Path: Delivered-To: apmail-jackrabbit-commits-archive@www.apache.org Received: (qmail 80596 invoked from network); 19 Apr 2006 20:21:54 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 19 Apr 2006 20:21:54 -0000 Received: (qmail 73342 invoked by uid 500); 19 Apr 2006 20:21:54 -0000 Delivered-To: apmail-jackrabbit-commits-archive@jackrabbit.apache.org Received: (qmail 73304 invoked by uid 500); 19 Apr 2006 20:21:53 -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 73295 invoked by uid 99); 19 Apr 2006 20:21:53 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 19 Apr 2006 13:21:53 -0700 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [209.237.227.194] (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.29) with SMTP; Wed, 19 Apr 2006 13:21:52 -0700 Received: (qmail 80484 invoked by uid 65534); 19 Apr 2006 20:21:32 -0000 Message-ID: <20060419202132.80476.qmail@minotaur.apache.org> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r395386 - /jackrabbit/trunk/contrib/bdb-persistence/src/java/org/apache/jackrabbit/core/state/bdb/BerkeleyDBPersistenceManager.java Date: Wed, 19 Apr 2006 20:21:31 -0000 To: commits@jackrabbit.apache.org From: jukka@apache.org X-Mailer: svnmailer-1.0.8 X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: jukka Date: Wed Apr 19 13:21:29 2006 New Revision: 395386 URL: http://svn.apache.org/viewcvs?rev=395386&view=rev Log: JCR-298: Remove blobs when property state is removed. Fix contributed by Alexandru Popescu. Modified: jackrabbit/trunk/contrib/bdb-persistence/src/java/org/apache/jackrabbit/core/state/bdb/BerkeleyDBPersistenceManager.java Modified: jackrabbit/trunk/contrib/bdb-persistence/src/java/org/apache/jackrabbit/core/state/bdb/BerkeleyDBPersistenceManager.java URL: http://svn.apache.org/viewcvs/jackrabbit/trunk/contrib/bdb-persistence/src/java/org/apache/jackrabbit/core/state/bdb/BerkeleyDBPersistenceManager.java?rev=395386&r1=395385&r2=395386&view=diff ============================================================================== --- jackrabbit/trunk/contrib/bdb-persistence/src/java/org/apache/jackrabbit/core/state/bdb/BerkeleyDBPersistenceManager.java (original) +++ jackrabbit/trunk/contrib/bdb-persistence/src/java/org/apache/jackrabbit/core/state/bdb/BerkeleyDBPersistenceManager.java Wed Apr 19 13:21:29 2006 @@ -15,6 +15,8 @@ */ package org.apache.jackrabbit.core.state.bdb; +import javax.jcr.PropertyType; + import com.sleepycat.je.Database; import com.sleepycat.je.DatabaseConfig; import com.sleepycat.je.DatabaseEntry; @@ -40,6 +42,8 @@ import org.apache.jackrabbit.core.state.PropertyState; import org.apache.jackrabbit.core.state.util.BLOBStore; import org.apache.jackrabbit.core.state.util.FileSystemBLOBStore; +import org.apache.jackrabbit.core.value.InternalValue; +import org.apache.jackrabbit.core.value.BLOBFileValue; import java.io.File; @@ -318,6 +322,27 @@ if (!operationStatus.equals(OperationStatus.SUCCESS)) { throw new ItemStateException(operationStatus.toString()); } + + InternalValue[] values = state.getValues(); + if (values != null) { + for (int i = 0; i < values.length; i++) { + InternalValue val = values[i]; + if (val != null) { + if (val.getType() == PropertyType.BINARY) { + BLOBFileValue blobVal = (BLOBFileValue) val.internalValue(); + // delete internal resource representation of BLOB value + blobVal.delete(true); + // also remove from BLOBStore + String blobId = blobStore.createId((PropertyId) state.getId(), i); + try { + blobStore.remove(blobId); + } catch (Exception e) { + log.warn("failed to remove from BLOBStore: " + blobId, e); + } + } + } + } + } } catch (Exception e) { log.error(e); throw new ItemStateException(e.getMessage(), e);