@@ -127,19 +127,18 @@ public synchronized boolean commit(int xid) throws InvalidTransactionException,
127127 }
128128
129129 crashIf (CrashMode .TM_BEFORE_VOTE_REQUEST );
130- System .out .println ("acquired it" );
131130 synchronized (resourceManagers ) {
132- resourceManagers = (ArrayList <Name_RM_Vote >)resourceManagers .clone ();
133- }
134- for (Name_RM_Vote name_rm_vote : resourceManagers ) {
135- name_rm_vote .rm .vote (xid );
131+ for (Name_RM_Vote name_rm_vote : resourceManagers ) {
132+ name_rm_vote .rm .vote (xid );
133+ }
136134 }
137- System . out . println ( "released it" );
135+
138136 crashIf (CrashMode .TM_BEFORE_ANY_VOTE_REPLIES );
139137
140138 Semaphore sem = new Semaphore (1 );
141139 synchronized (voteReplyWaitMap ) {
142140 voteReplyWaitMap .put (xid , sem );
141+ System .out .println ("getting semaphore " + voteReplyWaitMap .get (xid ));
143142 }
144143 try {
145144 sem .acquire ();
@@ -155,7 +154,10 @@ public synchronized boolean commit(int xid) throws InvalidTransactionException,
155154 }
156155
157156 public void receiveVote (int xid , boolean voteYes , String rmName ) {
158- Semaphore sem = voteReplyWaitMap .get (xid );
157+ Semaphore sem = null ;
158+ synchronized (voteReplyWaitMap ) {
159+ sem = voteReplyWaitMap .get (xid );
160+ }
159161 if (!voteYes ) {
160162 System .out .println ("vote no" );
161163 try {
@@ -177,25 +179,18 @@ public void receiveVote(int xid, boolean voteYes, String rmName) {
177179 synchronized (resourceManagerRecorder ) {
178180 resourceManagers = resourceManagerRecorder .get (xid );
179181 }
180- System .out .println ("got it!!!! " + resourceManagerRecorder );
181182
182183 if (resourceManagers == null ) {
183184 System .out .println ("resource managers is null" );
184185 return ;
185186 }; // already aborted
186187
187- boolean allYes = false ;
188- System .out .println ("about to go into the resourcemanagers" );
189188 synchronized (resourceManagers ) {
190- System .out .println ("about to do more shit" );
191189 int numRMs = resourceManagers .size ();
192- System .out .println (xid + " used " + " numRMs " + numRMs );
193190 int yesCount = 0 ;
194191 for (Name_RM_Vote name_rm_vote : resourceManagers ) {
195192 if (name_rm_vote .rmName .equals (rmName )) {
196- System .out .println ("got the dudes vote" );
197193 if (voteYes ) {
198- System .out .println ("voted yes" );
199194 name_rm_vote .votedYes = true ;
200195 }
201196 }
@@ -204,26 +199,21 @@ public void receiveVote(int xid, boolean voteYes, String rmName) {
204199 }
205200 }
206201 if (yesCount == numRMs ) {
207- System .out .println ("all yesses" );
208- allYes = true ;
209- }
210- if (allYes ) {
211202 for (Name_RM_Vote name_rm_vote : resourceManagers ) {
212203 try {
213- System .out .println ("calling do commit" );
204+ System .out .println ("calling do commit on " + name_rm_vote . rmName );
214205 name_rm_vote .rm .doCommit (xid );
215206 } catch (RemoteException e ) {
216207 // TODO handle this
217208 e .printStackTrace ();
218209 }
219210 }
211+ lockManager .UnlockAll (xid );
212+ resourceManagerRecorder .remove (xid );
213+ sem .release ();
220214 }
221215 }
222216 // ------------- HERE ENDS 2PC -------------
223- System .out .println ("unlocking and releasing" );
224- lockManager .UnlockAll (xid );
225- resourceManagerRecorder .remove (xid );
226- sem .release ();
227217 return ;
228218 }
229219
0 commit comments