1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
/*
* See the file LICENSE for redistribution information.
*
* Copyright (c) 2002,2010 Oracle. All rights reserved.
*
* $Id: MemoryBudgetTest.java,v 1.19.2.2 2010/01/04 15:30:43 cwl Exp $
*/
package com.sleepycat.je.dbi;
import java.io.File;
import java.io.IOException;
import junit.framework.TestCase;
import com.sleepycat.je.DbInternal;
import com.sleepycat.je.Environment;
import com.sleepycat.je.EnvironmentConfig;
import com.sleepycat.je.config.EnvironmentParams;
import com.sleepycat.je.dbi.MemoryBudget;
import com.sleepycat.je.util.TestUtils;
/**
*/
public class MemoryBudgetTest extends TestCase {
private File envHome;
public MemoryBudgetTest() {
envHome = new File(System.getProperty(TestUtils.DEST_DIR));
}
public void setUp()
throws IOException {
TestUtils.removeLogFiles("Setup", envHome, false);
}
public void tearDown()
throws Exception {
TestUtils.removeLogFiles("TearDown", envHome, false);
}
public void testDefaults()
throws Exception {
EnvironmentConfig envConfig = TestUtils.initEnvConfig();
envConfig.setAllowCreate(true);
Environment env = new Environment(envHome, envConfig);
EnvironmentImpl envImpl = DbInternal.envGetEnvironmentImpl(env);
MemoryBudget testBudget = envImpl.getMemoryBudget();
/*
System.out.println("max= " + testBudget.getMaxMemory());
System.out.println("log= " + testBudget.getLogBufferBudget());
System.out.println("thresh= " + testBudget.getEvictorCheckThreshold());
*/
assertTrue(testBudget.getMaxMemory() > 0);
assertTrue(testBudget.getLogBufferBudget() > 0);
assertTrue(testBudget.getMaxMemory() <=
MemoryBudget.getRuntimeMaxMemory());
env.close();
}
/* Verify that the proportionally based setting works. */
public void testCacheSizing()
throws Exception {
long jvmMemory = MemoryBudget.getRuntimeMaxMemory();
/*
* Runtime.maxMemory() may return Long.MAX_VALUE if there is no
* inherent limit.
*/
if (jvmMemory == Long.MAX_VALUE) {
jvmMemory = 1 << 26;
}
/* The default cache size ought to be percentage based. */
EnvironmentConfig envConfig = TestUtils.initEnvConfig();
envConfig.setAllowCreate(true);
Environment env = new Environment(envHome, envConfig);
EnvironmentImpl envImpl = DbInternal.envGetEnvironmentImpl(env);
long percentConfig = envImpl.getConfigManager().
getInt(EnvironmentParams.MAX_MEMORY_PERCENT);
EnvironmentConfig c = env.getConfig();
long expectedMem = (jvmMemory * percentConfig) / 100;
assertEquals(expectedMem, c.getCacheSize());
assertEquals(expectedMem, envImpl.getMemoryBudget().getMaxMemory());
env.close();
/* Try setting the percentage.*/
expectedMem = (jvmMemory * 30) / 100;
envConfig = TestUtils.initEnvConfig();
envConfig.setCachePercent(30);
env = new Environment(envHome, envConfig);
envImpl = DbInternal.envGetEnvironmentImpl(env);
c = env.getConfig();
assertEquals(expectedMem, c.getCacheSize());
assertEquals(expectedMem, envImpl.getMemoryBudget().getMaxMemory());
env.close();
/* Try overriding */
envConfig = TestUtils.initEnvConfig();
envConfig.setCacheSize(MemoryBudget.MIN_MAX_MEMORY_SIZE + 10);
env = new Environment(envHome, envConfig);
envImpl = DbInternal.envGetEnvironmentImpl(env);
c = env.getConfig();
assertEquals(MemoryBudget.MIN_MAX_MEMORY_SIZE + 10, c.getCacheSize());
assertEquals(MemoryBudget.MIN_MAX_MEMORY_SIZE + 10,
envImpl.getMemoryBudget().getMaxMemory());
env.close();
}
}
|