From 3d51309e0b6a6bf2e81ecfec4ff9535096e70126 Mon Sep 17 00:00:00 2001 From: Jim Martens Date: Wed, 31 May 2017 14:56:11 +0200 Subject: [PATCH] Fixed file not found exception during recovery Signed-off-by: Jim Martens --- 04/src/PersistenceManager.java | 51 ++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/04/src/PersistenceManager.java b/04/src/PersistenceManager.java index 026a8de..97a370f 100644 --- a/04/src/PersistenceManager.java +++ b/04/src/PersistenceManager.java @@ -107,45 +107,62 @@ public class PersistenceManager { /** * Performs the recovery actions. */ - public void recovery() { + public synchronized void recovery() { try { - BufferedReader reader = new BufferedReader(new FileReader(_dataPath + "log.txt")); - String line; - List winner_tas = new ArrayList<>(); + BufferedReader reader = new BufferedReader(new FileReader(_dataPath + "log.txt")); + String line; + List winner_tas = new ArrayList<>(); + int lsnMax = 0; + int taidMax = 0; while ((line = reader.readLine()) != null) { String[] cols = line.split(","); if (cols[2].equals("COMMIT")) { winner_tas.add(Integer.valueOf(cols[1])); } + if (Integer.valueOf(cols[0]) >= lsnMax) { + lsnMax = Integer.valueOf(cols[0]); + } + if (Integer.valueOf(cols[1]) >= taidMax) { + taidMax = Integer.valueOf(cols[1]); + } } reader.close(); - + _nextLogSequenceNumber = lsnMax + 1; + _nextTransactionNumber = taidMax + 1; + reader = new BufferedReader(new FileReader(_dataPath + "log.txt")); while ((line = reader.readLine()) != null) { String[] cols = line.split(","); if (!cols[2].equals("WRITE") || !winner_tas.contains(Integer.valueOf(cols[1]))) { continue; } - - int lsn = Integer.valueOf(cols[0]); - int pageID = Integer.valueOf(cols[3]); - String data = cols[4]; - - BufferedReader readPage = new BufferedReader(new FileReader(_dataPath + pageID + ".txt")); - String pageLine = readPage.readLine(); - readPage.close(); - String[] pageCols = pageLine.split(","); - int pageLSN = Integer.parseInt(pageCols[1]); + + int lsn = Integer.valueOf(cols[0]); + int pageID = Integer.valueOf(cols[3]); + String data = cols[4]; + int pageLSN = -1; + try { + BufferedReader readPage = new BufferedReader(new FileReader(_dataPath + pageID + ".txt")); + String pageLine = readPage.readLine(); + readPage.close(); + String[] pageCols = pageLine.split(","); + pageLSN = Integer.parseInt(pageCols[1]); + } + catch (FileNotFoundException fne) { + //; + } + catch (IOException ioe) { + ioe.printStackTrace(); + } if (pageLSN >= lsn) { continue; } - + FileWriter writer = new FileWriter(_dataPath + pageID + ".txt"); writer.write("" + pageID + "," + lsn + "," + data + "\n"); writer.close(); } reader.close(); - } catch (IOException e) { e.printStackTrace(); }