Return-Path: Delivered-To: apmail-directory-commits-archive@www.apache.org Received: (qmail 89540 invoked from network); 26 May 2010 18:29:47 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 26 May 2010 18:29:47 -0000 Received: (qmail 97852 invoked by uid 500); 26 May 2010 18:29:47 -0000 Delivered-To: apmail-directory-commits-archive@directory.apache.org Received: (qmail 97791 invoked by uid 500); 26 May 2010 18:29:47 -0000 Mailing-List: contact commits-help@directory.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@directory.apache.org Delivered-To: mailing list commits@directory.apache.org Received: (qmail 97784 invoked by uid 99); 26 May 2010 18:29:47 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 26 May 2010 18:29:47 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 26 May 2010 18:29:44 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 5AE6623889ED; Wed, 26 May 2010 18:29:23 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r948522 - in /directory/apacheds/trunk/jdbm-store/src: main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java Date: Wed, 26 May 2010 18:29:23 -0000 To: commits@directory.apache.org From: kayyagari@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100526182923.5AE6623889ED@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: kayyagari Date: Wed May 26 18:29:22 2010 New Revision: 948522 URL: http://svn.apache.org/viewvc?rev=948522&view=rev Log: fix for DIRSERVER-1417 Modified: directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java directory/apacheds/trunk/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java Modified: directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java?rev=948522&r1=948521&r2=948522&view=diff ============================================================================== --- directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java (original) +++ directory/apacheds/trunk/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java Wed May 26 18:29:22 2010 @@ -21,6 +21,7 @@ package org.apache.directory.server.core import java.io.File; +import java.io.FilenameFilter; import java.util.ArrayList; import java.util.List; @@ -128,6 +129,8 @@ public class JdbmStore extends Abstra setupSystemIndices(); setupUserIndices(); + deleteUnusedIndexFiles(); + // We are done ! initialized = true; } @@ -274,4 +277,57 @@ public class JdbmStore extends Abstra return jdbmIndex; } + + /** + * removes any unused/removed attribute index files present under the partition's + * working directory + */ + private void deleteUnusedIndexFiles() + { + final String jdbmDbFileExtn = ".db"; + + FilenameFilter filter = new FilenameFilter() + { + + public boolean accept( File dir, String name ) + { + // really important to filter master.db and master.lg files + return ( name.endsWith( jdbmDbFileExtn ) && !name.startsWith( "master." ) ); + } + }; + + File[] dbFiles = getPartitionDir().listFiles( filter ); + + List allIndices = new ArrayList(); + for( Index i : systemIndices.values() ) + { + allIndices.addAll( i.getAttribute().getNames() ); + } + + for( Index i : userIndices.values() ) + { + allIndices.addAll( i.getAttribute().getNames() ); + } + + for( File file : dbFiles ) + { + String name = file.getName(); + // take the part after removing .db from the + name = name.substring( 0, name.lastIndexOf( jdbmDbFileExtn ) ); + + // remove the file if not found in the list of names of indices + if( !allIndices.contains( name ) ) + { + boolean deleted = file.delete(); + if( deleted ) + { + LOG.info( "Deleted unused index file {}", file.getAbsolutePath() ); + } + else + { + LOG.warn( "Failed to delete unused index file {}", file.getAbsolutePath() ); + } + } + } + } } Modified: directory/apacheds/trunk/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java?rev=948522&r1=948521&r2=948522&view=diff ============================================================================== --- directory/apacheds/trunk/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java (original) +++ directory/apacheds/trunk/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java Wed May 26 18:29:22 2010 @@ -889,4 +889,42 @@ public class JdbmStoreTest store.modify( dn, mods ); assertEquals( attribVal, lookedup.get( "ou" ).get().getString() ); } + + + @Test + public void testDeleteUnusedIndexFiles() throws Exception + { + File ouIndexDbFile = new File( wkdir, "ou.db" ); + File uuidIndexDbFile = new File( wkdir, "entryUUID.db" ); + + assertTrue( ouIndexDbFile.exists() ); + assertTrue( uuidIndexDbFile.exists() ); + + // destroy the store to manually start the init phase + // by keeping the same work dir + store.destroy(); + + // just assert again that ou and entryUUID files exist even after destroying the store + assertTrue( ouIndexDbFile.exists() ); + assertTrue( uuidIndexDbFile.exists() ); + + store = new JdbmStore(); + store.setId( "example" ); + store.setCacheSize( 10 ); + store.setPartitionDir( wkdir ); + store.setSyncOnWrite( false ); + // do not add ou index this time + store.addIndex( new JdbmIndex( SchemaConstants.UID_AT_OID ) ); + + + DN suffixDn = new DN( "o=Good Times Co." ); + suffixDn.normalize( schemaManager.getNormalizerMapping() ); + store.setSuffixDn( suffixDn ); + // init the store to call deleteUnusedIndexFiles() method + store.init( schemaManager ); + + assertFalse( ouIndexDbFile.exists() ); + assertTrue( uuidIndexDbFile.exists() ); + } + }