public void writeToFileSystem(RFile rfile) { try { BufferedWriter bw = new BufferedWriter(new FileWriter("FileStore/" + rfile.getMeta().getFilename())); bw.write(rfile.getContent()); bw.flush(); bw.close(); } catch (IOException e) { System.err.println(e.getMessage()); } }
@Override public TwoPhaseCommitMessage writeFile(RFile rFile, TwoPhaseCommitMessage tpcm) throws SystemException, TException { if (tpcm.getMessage().equals("vote_request")) { if (knowConcurrencyStatus(rFile.getMeta().getFilename())) { tpcm.setMessage("vote_abort"); createLogEntry(tpcm, rFile, "write"); return tpcm; } else { createLogEntry(tpcm, rFile, "write"); } System.out.println("****writeFile TEST CASES****"); System.out.println("1. reply vote_commit for " + rFile.getMeta().getFilename()); System.out.println( "2. reply vote_commit for " + rFile.getMeta().getFilename() + " and crash"); System.out.println("3. reply vote_abort for " + rFile.getMeta().getFilename()); System.out.println("Enter choice: "); Scanner sc = new Scanner(System.in); int choice = sc.nextInt(); switch (choice) { case 1: tpcm.setMessage("vote_commit"); updateLogEntry(tpcm); return tpcm; case 2: tpcm.setMessage("vote_commit"); updateLogEntry(tpcm); tpcm.setMessage("vote_commit_and_crash"); Runnable crash = new Runnable() { @Override public void run() { crash(); } }; new Thread(crash).start(); return tpcm; case 3: tpcm.setMessage("vote_abort"); updateLogEntry(tpcm); return tpcm; default: System.out.println("Wrong choice! Transaction being aborted!"); tpcm.setMessage("vote_abort"); break; } } else if (tpcm.getMessage().equals("global_commit")) { Connection con = null; Statement statement = null; String filename = null; String content = null; try { Class.forName("org.sqlite.JDBC"); con = DriverManager.getConnection("jdbc:sqlite:twoPC.db"); statement = con.createStatement(); ResultSet rs = statement.executeQuery("SELECT * FROM LOG WHERE TID = " + tpcm.getTid() + ";"); filename = rs.getString("FILENAME"); content = rs.getString("CONTENT"); rs.close(); statement.close(); con.close(); } catch (Exception e) { e.printStackTrace(); System.err.println(e.getClass().getName() + ": " + e.getMessage()); } fileStoreMap.put(filename, content); RFile rFile2 = new RFile(); rFile2.setContent(content); RFileMetadata rFileMetadata = new RFileMetadata(); rFileMetadata.setFilename(filename); rFile2.setMeta(rFileMetadata); writeToFileSystem(rFile2); updateLogEntry(tpcm); } else if (tpcm.getMessage().equals("global_abort")) { updateLogEntry(tpcm); } return tpcm; }