You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ka...@apache.org on 2010/05/26 20:29:23 UTC
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
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<E> extends Abstra
setupSystemIndices();
setupUserIndices();
+ deleteUnusedIndexFiles();
+
// We are done !
initialized = true;
}
@@ -274,4 +277,57 @@ public class JdbmStore<E> 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<String> allIndices = new ArrayList<String>();
+ 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<Entry>();
+ 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() );
+ }
+
}