1 8 package com.sleepycat.je.recovery; 9 10 import com.sleepycat.je.CheckpointConfig; 11 import com.sleepycat.je.Cursor; 12 import com.sleepycat.je.Database; 13 import com.sleepycat.je.DatabaseConfig; 14 import com.sleepycat.je.DatabaseEntry; 15 import com.sleepycat.je.DatabaseException; 16 import com.sleepycat.je.DbInternal; 17 import com.sleepycat.je.EnvironmentConfig; 18 import com.sleepycat.je.OperationStatus; 19 import com.sleepycat.je.dbi.DatabaseImpl; 20 import com.sleepycat.je.dbi.EnvironmentImpl; 21 import com.sleepycat.je.tree.BIN; 22 import com.sleepycat.je.tree.DBIN; 23 import com.sleepycat.je.tree.DIN; 24 import com.sleepycat.je.tree.Key; 25 import com.sleepycat.je.tree.Tree.SearchType; 26 import com.sleepycat.je.util.TestUtils; 27 28 public class CheckSR11307Test extends CheckBase { 29 30 private static final String DB_NAME = "simpleDB"; 31 32 35 public void testSR11307() 36 throws Throwable { 37 38 EnvironmentConfig envConfig = TestUtils.initEnvConfig(); 39 turnOffEnvDaemons(envConfig); 40 envConfig.setAllowCreate(true); 41 42 DatabaseConfig dbConfig = new DatabaseConfig(); 43 dbConfig.setAllowCreate(true); 44 dbConfig.setSortedDuplicates(true); 45 46 DatabaseConfig validateDbConfig = new DatabaseConfig(); 47 validateDbConfig.setSortedDuplicates(true); 48 49 EnvironmentConfig restartConfig = TestUtils.initEnvConfig(); 50 turnOffEnvDaemons(restartConfig); 51 52 setCheckLsns(false); 53 testOneCase(DB_NAME, 54 envConfig, 55 dbConfig, 56 new TestGenerator(){ 57 void generateData(Database db) 58 throws DatabaseException { 59 60 addData(db); 61 } 62 }, 63 restartConfig, 64 validateDbConfig); 65 } 66 67 private void put(Database db, String keyString, String dataString) 68 throws DatabaseException { 69 70 DatabaseEntry key = new DatabaseEntry(keyString.getBytes()); 71 DatabaseEntry data = new DatabaseEntry(dataString.getBytes()); 72 assertEquals(OperationStatus.SUCCESS, db.put(null, key, data)); 73 } 74 75 private void delete(Database db, String keyString, String dataString) 76 throws DatabaseException { 77 78 DatabaseEntry key = new DatabaseEntry(keyString.getBytes()); 79 DatabaseEntry data = new DatabaseEntry(dataString.getBytes()); 80 81 Cursor c = db.openCursor(null, null); 82 assertEquals(OperationStatus.SUCCESS, 83 c.getSearchBoth(key, data, null)); 84 assertEquals(OperationStatus.SUCCESS, c.delete()); 85 c.close(); 86 } 87 88 132 private void addData(Database db) 133 throws DatabaseException { 134 135 DatabaseImpl dbImpl = DbInternal.dbGetDatabaseImpl(db); 136 EnvironmentImpl envImpl = DbInternal.envGetEnvironmentImpl(env); 137 CheckpointConfig ckptConfig = new CheckpointConfig(); 138 ckptConfig.setForce(true); 139 140 144 put(db, "cfhaa", "yrhwlvlgvq"); 145 put(db, "cfhaa", "blort"); 146 delete(db, "cfhaa", "blort"); 147 env.compress(); 148 env.sync(); 149 150 151 put(db, "cfgaa", "urhwlvlgvq"); 152 put(db, "cfgaa", "blort"); 153 delete(db, "cfgaa", "blort"); 154 put(db, "cfiaa", "yrhwlvlgvq"); 155 put(db, "cffaa", "yrhwlvlgvq"); 156 env.sync(); 157 env.sync(); 158 159 160 delete(db, "cfhaa", "yrhwlvlgvq"); 161 BIN bin = (BIN) dbImpl.getTree().search("cfhaa".getBytes(), 162 SearchType.NORMAL, 163 -1, 164 null, 165 true); 166 assertNotNull(bin); 167 int idx = bin.findEntry("cfhaa".getBytes(), false, true); 168 DIN din = (DIN) bin.getTarget(idx); 169 din.latch(); 170 assertNotNull(din); 171 idx = din.findEntry("yrhwlvlgvq".getBytes(), false, true); 172 DBIN dbin = (DBIN) din.getTarget(idx); 173 Key.DUMP_BINARY = false; 174 dbin.latch(); 175 dbin.log(envImpl.getLogManager()); 176 din.log(envImpl.getLogManager()); 177 din.releaseLatch(); 178 dbin.releaseLatch(); 179 bin.releaseLatch(); 180 env.compress(); 181 bin.latch(); 182 bin.log(envImpl.getLogManager()); 183 bin.releaseLatch(); 184 } 185 } 186 | Popular Tags |