1 8 9 package com.sleepycat.je.log; 10 11 import java.io.File ; 12 import java.io.IOException ; 13 import java.util.ArrayList ; 14 import java.util.Arrays ; 15 import java.util.Iterator ; 16 17 import junit.framework.TestCase; 18 19 import com.sleepycat.je.DatabaseException; 20 import com.sleepycat.je.DbInternal; 21 import com.sleepycat.je.Environment; 22 import com.sleepycat.je.EnvironmentConfig; 23 import com.sleepycat.je.config.EnvironmentParams; 24 import com.sleepycat.je.dbi.EnvironmentImpl; 25 import com.sleepycat.je.util.TestUtils; 26 import com.sleepycat.je.utilint.DbLsn; 27 import com.sleepycat.je.utilint.Tracer; 28 29 32 public class FileReaderBufferingTest extends TestCase { 33 34 private File envHome; 35 private Environment env; 36 private EnvironmentImpl envImpl; 37 private ArrayList expectedLsns; 38 private ArrayList expectedVals; 39 40 public FileReaderBufferingTest() { 41 super(); 42 envHome = new File (System.getProperty(TestUtils.DEST_DIR)); 43 } 44 45 public void setUp() 46 throws IOException , DatabaseException { 47 48 TestUtils.removeLogFiles("Setup", envHome, false); 49 } 50 51 public void tearDown() 52 throws IOException , DatabaseException { 53 54 TestUtils.removeFiles("TearDown", envHome, FileManager.JE_SUFFIX); 55 } 56 57 60 public void testBasic() 61 throws Exception { 62 readLog(1050, 0, 100, "3000", 0); } 68 69 72 public void testCantGrow() 73 throws Exception { 74 readLog(2000, 0, 100, "1000", 11); } 82 83 86 public void testReachMax() 87 throws Exception { 88 readLog(1000, 1000, 100, "3500", 8); } 94 97 private void readLog(int entrySize, 98 int entrySizeIncrement, 99 int readBufferSize, 100 String bufferMaxSize, 101 int expectedOverflows) 102 throws Exception { 103 104 try { 105 106 EnvironmentConfig envConfig = TestUtils.initEnvConfig(); 107 envConfig.setAllowCreate(true); 108 envConfig.setConfigParam( 109 EnvironmentParams.LOG_ITERATOR_MAX_SIZE.getName(), 110 bufferMaxSize); 111 env = new Environment(envHome, envConfig); 112 113 envImpl = DbInternal.envGetEnvironmentImpl(env); 114 115 116 createLogFile(10, entrySize, entrySizeIncrement); 117 SearchFileReader reader = 118 new SearchFileReader(envImpl, 119 readBufferSize, 120 true, 121 DbLsn.longToLsn 122 ((Long ) expectedLsns.get(0)), 123 DbLsn.NULL_LSN, 124 LogEntryType.LOG_TRACE); 125 126 Iterator lsnIter = expectedLsns.iterator(); 127 Iterator valIter = expectedVals.iterator(); 128 while (reader.readNextEntry()) { 129 Tracer rec = (Tracer)reader.getLastObject(); 130 assertTrue(lsnIter.hasNext()); 131 assertEquals(reader.getLastLsn(), 132 DbLsn.longToLsn((Long ) lsnIter.next())); 133 assertEquals((String ) valIter.next(), rec.getMessage()); 134 } 135 assertEquals(10, reader.getNumRead()); 136 assertEquals(expectedOverflows, reader.getNRepeatIteratorReads()); 137 138 } catch (Exception e) { 139 e.printStackTrace(); 140 throw e; 141 } finally { 142 env.close(); 143 } 144 } 145 146 151 private void createLogFile(int numItems, int size, int sizeIncrement) 152 throws IOException , DatabaseException { 153 154 LogManager logManager = envImpl.getLogManager(); 155 expectedLsns = new ArrayList (); 156 expectedVals = new ArrayList (); 157 158 for (int i = 0; i < numItems; i++) { 159 160 int recordSize = size + (i * sizeIncrement); 161 byte [] filler = new byte[recordSize]; 162 Arrays.fill(filler, (byte)i); 163 String val = new String (filler); 164 165 Tracer rec = new Tracer(val); 166 long lsn = logManager.log(rec); 167 expectedLsns.add(new Long (lsn)); 168 expectedVals.add(val); 169 } 170 171 logManager.flush(); 172 envImpl.getFileManager().clear(); 173 } 174 } 175 | Popular Tags |