01: /*
02:
03: Derby - Class org.apache.derbyTesting.functionTests.util.corruptio.CorruptDiskStorageFactory
04:
05: Licensed to the Apache Software Foundation (ASF) under one or more
06: contributor license agreements. See the NOTICE file distributed with
07: this work for additional information regarding copyright ownership.
08: The ASF licenses this file to You under the Apache License, Version 2.0
09: (the "License"); you may not use this file except in compliance with
10: the License. You may obtain a copy of the License at
11:
12: http://www.apache.org/licenses/LICENSE-2.0
13:
14: Unless required by applicable law or agreed to in writing, software
15: distributed under the License is distributed on an "AS IS" BASIS,
16: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17: See the License for the specific language governing permissions and
18: limitations under the License.
19:
20: */
21:
22: package org.apache.derbyTesting.functionTests.util.corruptio;
23:
24: import org.apache.derby.io.WritableStorageFactory;
25: import org.apache.derby.io.StorageFactory;
26: import org.apache.derby.iapi.services.info.JVMInfo;
27:
28: /**
29: * This class provides proxy implementation of the StorageFactory
30: * interface for testing.
31: *
32: * Storage Factory is used by the database engine to access
33: * persistent data and transaction logs. By default all the method calls
34: * delegate the work to the real disk storage factory
35: * (org.apache.derby.impl.io.DirStorageFactory)
36: * based on the classes in the java.io packgs. In some cases this factory
37: * instruments some methods to corrupt the io to simulate disk corruptions for
38: * testing. For example to simulate out of order partial writes to disk before
39: * the crash.
40: *
41: * Derby by default uses the storage factory implementation in
42: * DirStorageFactory/DirStorageFactory4 when a database is accessed with
43: * "jdbc:derby:<databaseName>". This factory can be specified instead using
44: * derby.subSubProtocol.<sub protocol name> For example:
45: *
46: * derby.subSubProtocol.csf=org.apache.derbyTesting.functionTests.
47: * util.corruptio.CorruptDiskStorageFactory
48: * database need to be accessed by specifying the subporotocol name like
49: * 'jdbc:derby:csf:wombat'.
50: *
51: * Interaction between the tests that requires instrumenting the i/o and
52: * this factory is through the flags in CorruptibleIo class. Tests should not
53: * call the methods in this factory directly. Database engine invokes the
54: * methods in this factory, so they can instrumented to do whatever is
55: * required for testing.
56: *
57: * @author <a href="mailto:suresh.thalamati@gmail.com">Suresh Thalamati</a>
58: * @version 1.0
59: * @see CorruptibleIo
60: * @see WritableStorageFactory
61: * @see StorageFactory
62: *
63: */
64:
65: public class CorruptDiskStorageFactory extends
66: CorruptBaseStorageFactory {
67: /*
68: * returns the real storage factory to which all the call should be
69: * delegated from the proxy methods.
70: */
71: WritableStorageFactory getRealStorageFactory() {
72: String dirStorageFactoryClass;
73: if (JVMInfo.JDK_ID >= JVMInfo.J2SE_14) {
74: dirStorageFactoryClass = "org.apache.derby.impl.io.DirStorageFactory4";
75: } else {
76: dirStorageFactoryClass = "org.apache.derby.impl.io.DirStorageFactory";
77: }
78:
79: WritableStorageFactory storageFactory = null;
80: try {
81: Class storageFactoryClass = Class
82: .forName(dirStorageFactoryClass);
83: storageFactory = (WritableStorageFactory) storageFactoryClass
84: .newInstance();
85: } catch (Exception e) {
86: System.out
87: .println("Failed to instantiate the disk storeage classes");
88: e.printStackTrace();
89: }
90:
91: return storageFactory;
92: }
93: }
|