001: package jdbm;
002:
003: import jdbm.RecordManager;
004: import jdbm.htree.HTree;
005: import java.io.IOException;
006:
007: /**
008: * Sample JDBM application to demonstrate the use of basic JDBM operations
009: *
010: * @author <a href="mailto:boisvert@intalio.com">Alex Boisvert</a>
011: * @version $Id: CrashTest.java,v 1.7 2002/05/31 06:34:29 boisvert Exp $
012: */
013: public class CrashTest {
014: private RecordManager _recman;
015: private HTree _htree;
016:
017: public CrashTest() {
018: try {
019: _recman = RecordManagerFactory
020: .createRecordManager("crashtest");
021:
022: // create or reload HTree
023: long recid = _recman.getNamedObject("htree");
024: if (recid == 0) {
025: _htree = HTree.createInstance(_recman);
026: _recman.setNamedObject("htree", _htree.getRecid());
027: } else {
028: _htree = HTree.load(_recman, recid);
029: }
030:
031: checkConsistency();
032:
033: while (true) {
034: Integer countInt = (Integer) _htree.get("count");
035: if (countInt == null) {
036: System.out.println("Create new crash test");
037: countInt = new Integer(0);
038: }
039: int count = countInt.intValue();
040:
041: System.out.print("," + count);
042: System.out.flush();
043:
044: int mod = count % 2;
045: int delete_window = 20;
046: int update_window = 10;
047:
048: if ((mod) == 0) {
049: // create some entries
050: for (int i = 0; i < 10; i++) {
051: String id = " " + count + "-" + i;
052: _htree.put("key" + id, "value" + id);
053: }
054:
055: // delete some entries
056: if (count > delete_window) {
057: for (int i = 0; i < 10; i++) {
058: String id = " " + (count - delete_window)
059: + "-" + i;
060: _htree.remove("key" + id);
061: }
062: }
063: } else if ((mod) == 1) {
064: if (count > update_window + 1) {
065: // update some stuff
066: for (int i = 0; i < 5; i++) {
067: String id = " "
068: + (count - update_window + 1) + "-"
069: + i;
070: String s = (String) _htree.get("key" + id);
071: if ((s == null) || !s.equals("value" + id)) {
072: throw new Error(
073: "Invalid value. Expected: "
074: + ("value" + id)
075: + ", got: " + s);
076: }
077: _htree.put("key" + id, s + "-updated");
078: }
079: }
080: }
081:
082: _htree.put("count", new Integer(count + 1));
083: _recman.commit();
084:
085: count++;
086: }
087:
088: // BTW: There is no cleanup. It's a crash test after all.
089:
090: } catch (IOException ioe) {
091: ioe.printStackTrace();
092: }
093: }
094:
095: void checkConsistency() {
096: // TODO
097: }
098:
099: public static void main(String[] args) {
100: System.out.print("Please try to stop me anytime. ");
101: System.out.println("CTRL-C, kill -9, anything goes!.");
102: new CrashTest();
103: }
104: }
|