Skip to content

Commit 99c1578

Browse files
Neil DEVASNeil DEVAS
authored andcommitted
wip milestone03
1 parent 5aae76b commit 99c1578

21 files changed

Lines changed: 361 additions & 206 deletions

configs/exampleConfigFile.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
TCP_OR_RMI <val> # <val> must be TCP or RMI
21
MID_RM hostname port
32
CAR_RM hostname port
43
FLIGHT_RM hostname port

configs/local_rmi

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
TCP_OR_RMI RMI
21
MID_RM localhost 2005
32
CAR_RM localhost 2000
43
FLIGHT_RM localhost 2001

configs/remote_rmi

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
TCP_OR_RMI RMI
21
MID_RM cs-10 2005
32
CAR_RM cs-11 2000
43
FLIGHT_RM cs-12 2001

run.sh

Lines changed: 29 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,6 @@ fi
7171

7272
while read key value1 value2; do
7373
case "${key}" in
74-
"TCP_OR_RMI")
75-
TCP_OR_RMI="${value1}"
76-
;;
7774
"MID_RM")
7875
MID_RM_HOST="${value1}"
7976
MID_RM_PORT="${value2}"
@@ -100,11 +97,6 @@ done < "${configFile}"
10097
# validate data read from config file
10198
#-----------------------------------
10299

103-
if [ -z "${TCP_OR_RMI}" ] || [ "${TCP_OR_RMI}" != "RMI" ] && [ "${TCP_OR_RMI}" != "TCP" ]; then
104-
echo "error in config file: key 'TCP_OR_RMI' must have value 'TCP' or 'RMI'"
105-
exit 1
106-
fi
107-
108100
for host in "${MID_RM_HOST}" "${CAR_RM_HOST}" "${FLIGHT_RM_HOST}" "${ROOM_RM_HOST}" "${CUST_RM_HOST}"; do
109101
if [ -z "${host}" ]; then
110102
echo "error in config file: empty hostname"
@@ -130,7 +122,7 @@ if [ "${2}" == "--client" ]; then
130122
cd "${BUILD_DIR}"
131123
java_secpol_flag="-Djava.security.policy=${RES_DIR}/java.policy"
132124
java "${java_secpol_flag}" -classpath "${LIB_DIR}/*:."\
133-
"group25.Client.${TCP_OR_RMI}Client"\
125+
"group25.Client.RMIClient"\
134126
-mwh "${MID_RM_HOST}"\
135127
-mwp "${MID_RM_PORT}"
136128
exit 0
@@ -171,7 +163,7 @@ if [ "${2}" == "--testclient" ]; then
171163
cd "${BUILD_DIR}"
172164
java_secpol_flag="-Djava.security.policy=${RES_DIR}/java.policy"
173165
java "${java_secpol_flag}" -classpath "${LIB_DIR}/*:."\
174-
"group25.Client.${TCP_OR_RMI}TestClient"\
166+
"group25.Client.RMITestClient"\
175167
"${MID_RM_HOST}"\
176168
"${MID_RM_PORT}"\
177169
"${@}"
@@ -214,69 +206,33 @@ function run_rmi_middleware() {
214206
"${@}"
215207
}
216208

217-
function run_tcp_server() {
218-
# ${1}: type of resource manager ('Car','Flight','Room','Customer')
219-
# ${2}: listening hostname
220-
# ${3}: listening port
221-
# ${4}: customer resource manager hostname
222-
# ${5}: customer resource manager port
223-
rm_type="${1}"
224-
shift
225-
echo \
226-
"echo -n 'Connected to '; hostname; "\
227-
"cd ${BUILD_DIR} > /dev/null; "\
228-
"java -Djava.security.policy=${RES_DIR}/java.policy"\
229-
"-classpath \"${LIB_DIR}/*:.\""\
230-
"group25.Server.TCP.TCP${rm_type}ResourceManager"\
231-
"${@}"
232-
}
233-
234-
function run_tcp_middleware() {
235-
# ${1}: middleware hostname
236-
# ${2}: middleware port
237-
# ${3}: customer hostname
238-
# ${4}: customer port
239-
# ${5}: flight hostname
240-
# ${6}: flight port
241-
# ${7}: room hostname
242-
# ${8}: room port
243-
# ${9}: car hostname
244-
# ${10}: car port
245-
echo \
246-
"echo -n 'Connected to '; hostname; "\
247-
"cd ${BUILD_DIR} > /dev/null; "\
248-
"java -Djava.security.policy=${RES_DIR}/java.policy"\
249-
"-classpath \"${LIB_DIR}/*:.\""\
250-
"Server.TCP.TCPMiddlewareResourceManager"\
251-
"${@}"
252-
}
253-
254209
# run code in tmux splits over ssh
255210
#-----------------------------------
256211

257-
if [ "${TCP_OR_RMI}" == "RMI" ]; then
258-
tmux new-session \; \
259-
split-window -v \; \
260-
split-window -h \; \
261-
split-window -h \; \
262-
select-pane -t 1 \; \
263-
split-window -h \; \
264-
select-pane -t 0 \; \
265-
split-window -h \; \
266-
select-pane -t 5 \; \
267-
send-keys "ssh -t ${CUST_RM_HOST} \"$(run_rmi_server Customer ${CUST_RM_PORT} "\
268-
"-cup ${CUST_RM_PORT})\"" C-m \; \
269-
select-pane -t 4 \; \
270-
send-keys "ssh -t ${FLIGHT_RM_HOST} \"$(run_rmi_server Flight ${FLIGHT_RM_PORT} "\
271-
"-fp ${FLIGHT_RM_PORT} -cuh ${CUST_RM_HOST} -cup ${CUST_RM_PORT})\"" C-m \; \
272-
select-pane -t 3 \; \
273-
send-keys "ssh -t ${CAR_RM_HOST} \"$(run_rmi_server Car ${CAR_RM_PORT} "\
274-
"-cp ${CAR_RM_PORT} -cuh ${CUST_RM_HOST} -cup ${CUST_RM_PORT})\"" C-m \; \
275-
select-pane -t 2 \; \
276-
send-keys "ssh -t ${ROOM_RM_HOST} \"$(run_rmi_server Room ${ROOM_RM_PORT} "\
277-
"-rp ${ROOM_RM_PORT} -cuh ${CUST_RM_HOST} -cup ${CUST_RM_PORT})\"" C-m \; \
278-
select-pane -t 1 \; \
279-
send-keys "ssh -t ${MID_RM_HOST} \"$(run_rmi_middleware ${MID_RM_PORT} -mwp ${MID_RM_PORT} "\
280-
"-cuh ${CUST_RM_HOST} -cup ${CUST_RM_PORT} -fh ${FLIGHT_RM_HOST} -fp ${FLIGHT_RM_PORT} "\
281-
"-rh ${ROOM_RM_HOST} -rp ${ROOM_RM_PORT} -ch ${CAR_RM_HOST}) -cp ${CAR_RM_PORT}\"" C-m \;
282-
fi
212+
tmux new-session \; \
213+
split-window -v \; \
214+
split-window -h \; \
215+
split-window -h \; \
216+
select-pane -t 1 \; \
217+
split-window -h \; \
218+
select-pane -t 0 \; \
219+
split-window -h \; \
220+
select-pane -t 5 \; \
221+
send-keys "ssh -t ${CUST_RM_HOST} \"$(run_rmi_server Customer ${CUST_RM_PORT} "\
222+
"-cup ${CUST_RM_PORT} -mwh ${MID_RM_HOST} -mwp ${MID_RM_PORT})\"" C-m \; \
223+
select-pane -t 4 \; \
224+
send-keys "ssh -t ${FLIGHT_RM_HOST} \"$(run_rmi_server Flight ${FLIGHT_RM_PORT} "\
225+
"-fp ${FLIGHT_RM_PORT} -cuh ${CUST_RM_HOST} -cup ${CUST_RM_PORT} "\
226+
"-mwh ${MID_RM_HOST} -mwp ${MID_RM_PORT})\"" C-m \; \
227+
select-pane -t 3 \; \
228+
send-keys "ssh -t ${CAR_RM_HOST} \"$(run_rmi_server Car ${CAR_RM_PORT} "\
229+
"-cp ${CAR_RM_PORT} -cuh ${CUST_RM_HOST} -cup ${CUST_RM_PORT} "\
230+
"-mwh ${MID_RM_HOST} -mwp ${MID_RM_PORT})\"" C-m \; \
231+
select-pane -t 2 \; \
232+
send-keys "ssh -t ${ROOM_RM_HOST} \"$(run_rmi_server Room ${ROOM_RM_PORT} "\
233+
"-rp ${ROOM_RM_PORT} -cuh ${CUST_RM_HOST} -cup ${CUST_RM_PORT} "\
234+
"-mwh ${MID_RM_HOST} -mwp ${MID_RM_PORT})\"" C-m \; \
235+
select-pane -t 1 \; \
236+
send-keys "ssh -t ${MID_RM_HOST} \"$(run_rmi_middleware ${MID_RM_PORT} -mwp ${MID_RM_PORT} "\
237+
"-cuh ${CUST_RM_HOST} -cup ${CUST_RM_PORT} -fh ${FLIGHT_RM_HOST} -fp ${FLIGHT_RM_PORT} "\
238+
"-rh ${ROOM_RM_HOST} -rp ${ROOM_RM_PORT} -ch ${CAR_RM_HOST}) -cp ${CAR_RM_PORT}\"" C-m \;

src/main/java/group25/Server/Common/AbstractRMHashMapManager.java

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package group25.Server.Common;
22

33
import group25.Server.Interface.*;
4+
import group25.Utils.CrashMode;
45
import group25.Utils.XMLPersistor;
6+
import static group25.Utils.AnsiColors.RED;
57

68
import java.util.*;
79
import java.rmi.RemoteException;
@@ -11,19 +13,24 @@ public abstract class AbstractRMHashMapManager {
1113
private String m_name = "";
1214
protected RMHashMap globalState;
1315
protected HashMap<Integer, RMHashMap> transactionStates = new HashMap<>();
14-
protected XMLPersistor xmlPersistor = new XMLPersistor(RMHashMap.class);
15-
protected final String filename1, filename2, pointerFile;
16+
protected XMLPersistor xmlPersistor = new XMLPersistor();
17+
protected final String filename1, filename2, pointerFile, logFile;
1618
protected String currentCommitFile;
1719
protected FairWaitInterruptibleLock globalLock = new FairWaitInterruptibleLock();
20+
protected IMiddlewareResourceManager middlewareRM;
21+
22+
private CrashMode crashMode = CrashMode.NO_CRASH;
1823

1924
// TODO: give lock to correct transaction on wakeup from failure
20-
public AbstractRMHashMapManager(String p_name, String filename1, String filename2, String pointerFile) {
21-
System.out.println(pointerFile);
25+
public AbstractRMHashMapManager(String p_name, String filename1, String filename2, String pointerFile, String logFile,
26+
IMiddlewareResourceManager middlewareRM) {
2227
this.m_name = p_name;
2328
this.filename1 = filename1;
2429
this.filename2 = filename2;
2530
this.pointerFile = pointerFile;
26-
31+
this.logFile = logFile;
32+
this.middlewareRM = middlewareRM;
33+
2734
currentCommitFile = xmlPersistor.readObject(pointerFile);
2835
if (currentCommitFile == null) {
2936
currentCommitFile = filename1;
@@ -33,15 +40,23 @@ public AbstractRMHashMapManager(String p_name, String filename1, String filename
3340
}
3441
}
3542

36-
public boolean vote(int xid) throws RemoteException {
37-
if (!transactionExists(xid)) return false;
43+
public void crashResourceManager(CrashMode cm) {
44+
if (cm.toString().substring(0,2).equals("TM")) {
45+
System.out.println(RED.colorString("ERROR: ")+"Invalid crash mode for RM: "+cm.toString());
46+
return;
47+
}
48+
crashMode = cm;
49+
}
50+
51+
public void vote(int xid) throws RemoteException {
52+
if (!transactionExists(xid)) middlewareRM.receiveVote(xid, false, this.m_name);
3853

3954
// get global lock
4055
boolean gotLock = globalLock.lock(xid);
41-
if (!gotLock) return false;
56+
if (!gotLock) middlewareRM.receiveVote(xid, false, this.m_name);
4257

4358
updateThenPersistGlobalState(xid);
44-
return true;
59+
middlewareRM.receiveVote(xid, true, this.m_name);
4560
}
4661

4762
public boolean doCommit(int xid) throws RemoteException {
@@ -112,14 +127,10 @@ public void updateThenPersistGlobalState(int xid) {
112127

113128
// write to file
114129
if (currentCommitFile.equals(filename1)) {
115-
System.out.println("commit file is " + filename1);
116130
xmlPersistor.writeObject(globalState, filename2);
117131
} else if (currentCommitFile.equals(filename2)) {
118-
System.out.println("commit file is " + filename2);
119132
xmlPersistor.writeObject(globalState, filename1);
120-
} else {
121-
System.out.println("fuck off");
122-
}
133+
}
123134
}
124135
}
125136

@@ -212,7 +223,9 @@ public int queryPrice(int xid, String key) {
212223
public String getName() throws RemoteException {
213224
return m_name;
214225
}
226+
215227
public void shutdown() {
216228
System.exit(0);
217229
}
230+
218231
}

src/main/java/group25/Server/Common/CarResourceManager.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ public abstract class CarResourceManager extends AbstractRMHashMapManager implem
1414
// NOTE: if price <= 0 and the location already exists, it maintains its current price
1515
protected ICustomerResourceManager customerRM;
1616

17-
public CarResourceManager(String p_name, String filename1, String filename2, String pointerFile) {
18-
super(p_name, filename1, filename2, pointerFile);
17+
public CarResourceManager(String p_name, String filename1, String filename2, String pointerFile, String logFile,
18+
IMiddlewareResourceManager middlewareRM) {
19+
super(p_name, filename1, filename2, pointerFile, logFile, middlewareRM);
1920
}
2021

2122
public boolean addCars(int xid, String location, int count, int price) throws RemoteException {

src/main/java/group25/Server/Common/CustomerResourceManager.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@
99

1010
public class CustomerResourceManager extends AbstractRMHashMapManager implements ICustomerResourceManager {
1111

12-
public CustomerResourceManager(String p_name, String filename1, String filename2, String pointerFile) {
13-
super(p_name, filename1, filename2, pointerFile);
12+
public CustomerResourceManager(
13+
String p_name, String filename1, String filename2, String pointerFile, String logFile,
14+
IMiddlewareResourceManager middlewareRM) {
15+
super(p_name, filename1, filename2, pointerFile, logFile, middlewareRM);
1416
}
1517

1618
public synchronized int getNewCustomerId(int xid) {

src/main/java/group25/Server/Common/FlightResourceManager.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@ public abstract class FlightResourceManager extends AbstractRMHashMapManager imp
1212
// NOTE: if flightPrice <= 0 and the flight already exists, it maintains its current price
1313
protected ICustomerResourceManager customerRM;
1414

15-
public FlightResourceManager(String p_name, String filename1, String filename2, String pointerFile) {
16-
super(p_name, filename1, filename2, pointerFile);
15+
public FlightResourceManager(String p_name, String filename1, String filename2, String pointerFile, String logFile,
16+
IMiddlewareResourceManager middlwareRM) {
17+
super(p_name, filename1, filename2, pointerFile, logFile, middlwareRM);
1718
}
1819

1920
public boolean addFlight(int xid, int flightNum, int flightSeats, int flightPrice) throws RemoteException {

src/main/java/group25/Server/Common/MiddlewareResourceManager.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,10 @@ public boolean bundle(int xid, int customerID, Vector<Integer> flightNumbers, St
187187
return true;
188188
}
189189

190+
public void receiveVote(int xid, boolean voteYes, String rmName) {
191+
transactionManager.receiveVote(xid, voteYes, rmName);
192+
}
193+
190194
public String getName() throws RemoteException, DeadlockException {
191195
return m_name;
192196
}

src/main/java/group25/Server/Common/RoomResourceManager.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@ public abstract class RoomResourceManager extends AbstractRMHashMapManager imple
1212
// NOTE: if price <= 0 and the room location already exists, it maintains its current price
1313
protected ICustomerResourceManager customerRM;
1414

15-
public RoomResourceManager(String p_name, String filename1, String filename2, String pointerFile) {
16-
super(p_name, filename1, filename2, pointerFile);
15+
public RoomResourceManager(String p_name, String filename1, String filename2, String pointerFile, String logFile,
16+
IMiddlewareResourceManager middlewareRM) {
17+
super(p_name, filename1, filename2, pointerFile, logFile, middlewareRM);
1718
}
1819

1920
public boolean addRooms(int xid, String location, int count, int price) throws RemoteException {

0 commit comments

Comments
 (0)