comparison src/org/dancres/blitz/txn/PersistentPersonality.java @ 0:3dc0c5604566

Initial checkin of blitz 2.0 fcs - no installer yet.
author Dan Creswell <dan.creswell@gmail.com>
date Sat, 21 Mar 2009 11:00:06 +0000
parents
children 4580bb12db30
comparison
equal deleted inserted replaced
-1:000000000000 0:3dc0c5604566
1 package org.dancres.blitz.txn;
2
3 import java.util.logging.Level;
4
5 import org.prevayler.implementation.SnapshotPrevayler;
6 import org.prevayler.implementation.SnapshotPrevaylerImpl;
7
8 import org.prevayler.PrevalentSystem;
9
10 import org.dancres.blitz.config.Persistent;
11
12 import org.dancres.blitz.disk.Disk;
13
14 import org.dancres.blitz.txn.batch.*;
15
16 /**
17 Understands how to translate Persistent into core component configuration.
18
19 @see org.dancres.blitz.config.Persistent
20 */
21 class PersistentPersonality implements StoragePersonality {
22 private Persistent theModel;
23 private String theLogDir;
24
25 PersistentPersonality(Persistent aModel, String aLogDir) {
26 theModel = aModel;
27 theLogDir = aLogDir;
28
29 TxnManager.theLogger.log(Level.INFO, "PersistentPersonality");
30 TxnManager.theLogger.log(Level.INFO, "Max logs before sync: " +
31 theModel.getMaxLogsBeforeSync());
32 TxnManager.theLogger.log(Level.INFO, "Reset log stream: " +
33 theModel.shouldResetLogStream());
34 TxnManager.theLogger.log(Level.INFO, "Write barrier window: " +
35 theModel.getBatchWriteWindowSize());
36
37 if (theModel.useConcurrentWriteBatcher())
38 TxnManager.theLogger.log(Level.INFO,
39 "*** Using concurrent batcher ***");
40
41 if (theModel.shouldCleanLogs()) {
42 TxnManager.theLogger.log(Level.WARNING,
43 "*** Automatically cleaning logs *** [EXPERIMENTAL]");
44 }
45
46 Disk.init();
47 }
48
49 public CheckpointTrigger getCheckpointTrigger(Checkpointer aCheckpointer) {
50 return
51 new OpCountingCheckpointTrigger(aCheckpointer,
52 theModel.getMaxLogsBeforeSync());
53 }
54
55 public SnapshotPrevayler getPrevayler(PrevalentSystem aSystem)
56 throws Exception {
57
58 PersistentReboot myReboot = new PersistentReboot(theModel);
59 myReboot.execute();
60
61 SnapshotPrevayler myPrevayler =
62 new SnapshotPrevaylerImpl(aSystem,
63 theLogDir,
64 theModel.shouldResetLogStream(),
65 theModel.shouldCleanLogs(),
66 theModel.getLogBufferSize());
67
68 if (theModel.getBatchWriteWindowSize() != 0) {
69 int myWindowSize = theModel.getBatchWriteWindowSize();
70
71 if (theModel.useConcurrentWriteBatcher()) {
72 myPrevayler =
73 new ConcurrentWriteBatcher(myPrevayler, myWindowSize);
74 } else {
75 myPrevayler =
76 new WriteBatcher(myPrevayler, myWindowSize);
77 }
78 }
79
80 return myPrevayler;
81 }
82
83 public void destroy() {
84 Disk.destroy();
85 Disk.clean(theLogDir);
86 }
87 }