Fixed first failed test

This commit is contained in:
Max O'Cull 2019-02-24 18:31:33 -05:00
parent a226b132d0
commit edcf0e8b80
2 changed files with 696 additions and 3 deletions

View File

@ -1,8 +1,563 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="d7d3389b-0262-48b5-81ce-827f8aae7d1b" name="Default Changelist" comment="">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/bufmgr/BufMgr.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/bufmgr/BufMgr.java" afterDir="false" />
</list>
<ignored path="$PROJECT_DIR$/out/" />
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="FUSProjectUsageTrigger">
<session id="338916417">
<usages-collector id="statistics.lifecycle.project">
<counts>
<entry key="project.closed" value="1" />
<entry key="project.open.time.18" value="1" />
<entry key="project.open.time.2" value="1" />
<entry key="project.opened" value="2" />
</counts>
</usages-collector>
<usages-collector id="statistics.file.types.open">
<counts>
<entry key="CLASS" value="4" />
<entry key="JAVA" value="8" />
<entry key="Makefile" value="1" />
<entry key="PLAIN_TEXT" value="2" />
</counts>
</usages-collector>
<usages-collector id="statistics.file.types.edit">
<counts>
<entry key="JAVA" value="2946" />
<entry key="PLAIN_TEXT" value="2" />
</counts>
</usages-collector>
</session>
</component>
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/tests/BMTest.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="404">
<caret line="778" selection-start-line="778" selection-end-line="778" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/tests/TestDriver.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="225">
<caret line="17" selection-start-line="17" selection-end-line="17" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/diskmgr/DiskMgr.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-480">
<caret line="204" column="18" selection-start-line="204" selection-start-column="18" selection-end-line="204" selection-end-column="18" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/bufmgr/BufMgr.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="379">
<caret line="110" column="24" selection-start-line="110" selection-start-column="24" selection-end-line="110" selection-end-column="24" />
<folding>
<element signature="e#13728#13729#0" expanded="true" />
<element signature="e#13762#13763#0" expanded="true" />
<element signature="e#14251#14252#0" expanded="true" />
<element signature="e#14292#14293#0" expanded="true" />
<element signature="e#14342#14343#0" expanded="true" />
<element signature="e#14384#14385#0" expanded="true" />
<element signature="e#14435#14436#0" expanded="true" />
<element signature="e#14493#14494#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/bufmgr/FrameDescriptor.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="45">
<caret line="3" column="13" selection-start-line="3" selection-start-column="13" selection-end-line="3" selection-end-column="13" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/bufmgr/HashEntryNotFoundException.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="135">
<caret line="9" column="11" selection-start-line="9" selection-start-column="11" selection-end-line="9" selection-end-column="11" />
<folding>
<element signature="e#229#230#0" expanded="true" />
<element signature="e#255#256#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/bufmgr/BufferPoolExceededException.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="30">
<caret line="2" column="13" selection-start-line="2" selection-start-column="13" selection-end-line="2" selection-end-column="13" />
</state>
</provider>
</entry>
</file>
</leaf>
</component>
<component name="FindInProjectRecents">
<replaceStrings>
<replace />
</replaceStrings>
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/.." />
</component>
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/src/diskmgr/DiskMgr.java" />
<option value="$PROJECT_DIR$/src/bufmgr/BufMgr.java" />
</list>
</option>
</component>
<component name="ProjectFrameBounds" extendedState="6">
<option name="x" value="1917" />
<option name="width" value="1926" />
<option name="height" value="1203" />
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectView">
<navigator proportions="" version="1">
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="PackagesPane" />
<pane id="Scope" />
<pane id="ProjectPane">
<subPane>
<expand>
<path>
<item name="p2" type="b2602c69:ProjectViewProjectNode" />
<item name="p2" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="p2" type="b2602c69:ProjectViewProjectNode" />
<item name="p2" type="462c0819:PsiDirectoryNode" />
<item name="lib" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="p2" type="b2602c69:ProjectViewProjectNode" />
<item name="p2" type="462c0819:PsiDirectoryNode" />
<item name="out" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="p2" type="b2602c69:ProjectViewProjectNode" />
<item name="p2" type="462c0819:PsiDirectoryNode" />
<item name="out" type="462c0819:PsiDirectoryNode" />
<item name="production" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="p2" type="b2602c69:ProjectViewProjectNode" />
<item name="p2" type="462c0819:PsiDirectoryNode" />
<item name="out" type="462c0819:PsiDirectoryNode" />
<item name="production" type="462c0819:PsiDirectoryNode" />
<item name="p2" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="p2" type="b2602c69:ProjectViewProjectNode" />
<item name="p2" type="462c0819:PsiDirectoryNode" />
<item name="out" type="462c0819:PsiDirectoryNode" />
<item name="production" type="462c0819:PsiDirectoryNode" />
<item name="p2" type="462c0819:PsiDirectoryNode" />
<item name="bufmgr" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="p2" type="b2602c69:ProjectViewProjectNode" />
<item name="p2" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="p2" type="b2602c69:ProjectViewProjectNode" />
<item name="p2" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="bufmgr" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="p2" type="b2602c69:ProjectViewProjectNode" />
<item name="p2" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="diskmgr" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="p2" type="b2602c69:ProjectViewProjectNode" />
<item name="p2" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="diskmgr" type="462c0819:PsiDirectoryNode" />
<item name="DiskMgr.java" type="529ef68f:ClassesTreeStructureProvider$PsiClassOwnerTreeNode" />
</path>
<path>
<item name="p2" type="b2602c69:ProjectViewProjectNode" />
<item name="p2" type="462c0819:PsiDirectoryNode" />
<item name="src" type="462c0819:PsiDirectoryNode" />
<item name="tests" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="p2" type="b2602c69:ProjectViewProjectNode" />
<item name="External Libraries" type="cb654da1:ExternalLibrariesNode" />
</path>
</expand>
<select />
</subPane>
</pane>
</panes>
</component>
<component name="PropertiesComponent">
<property name="last_opened_file_path" value="$PROJECT_DIR$/Makefile" />
<property name="project.structure.last.edited" value="Project" />
<property name="project.structure.proportion" value="0.0" />
<property name="project.structure.side.proportion" value="0.0" />
<property name="settings.editor.selected.configurable" value="preferences.pluginManager" />
</component>
<component name="RunDashboard">
<option name="ruleStates">
<list>
<RuleState>
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
</RuleState>
<RuleState>
<option name="name" value="StatusDashboardGroupingRule" />
</RuleState>
</list>
</option>
</component>
<component name="RunManager" selected="JUnit.BMTest">
<configuration name="BMTest" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
<module name="p2" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="tests.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<option name="PACKAGE_NAME" value="tests" />
<option name="MAIN_CLASS_NAME" value="tests.BMTest" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="BMTest.TestL_NewPageDeallocation" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
<module name="p2" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="tests.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<option name="PACKAGE_NAME" value="tests" />
<option name="MAIN_CLASS_NAME" value="tests.BMTest" />
<option name="METHOD_NAME" value="TestL_NewPageDeallocation" />
<option name="TEST_OBJECT" value="method" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="Make and Test" type="MAKEFILE_TARGET_RUN_CONFIGURATION" factoryName="Makefile">
<makefile filename="$PROJECT_DIR$/Makefile" target="all" workingDirectory="" arguments="">
<envs />
</makefile>
<method v="2" />
</configuration>
<list>
<item itemvalue="Makefile.Make and Test" />
<item itemvalue="JUnit.BMTest" />
<item itemvalue="JUnit.BMTest.TestL_NewPageDeallocation" />
</list>
<recent_temporary>
<list>
<item itemvalue="JUnit.BMTest" />
<item itemvalue="JUnit.BMTest.TestL_NewPageDeallocation" />
</list>
</recent_temporary>
</component>
<component name="SvnConfiguration">
<configuration />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="d7d3389b-0262-48b5-81ce-827f8aae7d1b" name="Default Changelist" comment="" />
<created>1551027011045</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1551027011045</updated>
</task>
<servers />
</component>
<component name="TestHistory">
<history-entry file="BMTest_TestL_NewPageDeallocation - 2019.02.24 at 17h 23m 53s.xml">
<configuration name="BMTest.TestL_NewPageDeallocation" configurationId="JUnit" />
</history-entry>
<history-entry file="BMTest - 2019.02.24 at 17h 27m 01s.xml">
<configuration name="BMTest" configurationId="JUnit" />
</history-entry>
<history-entry file="BMTest - 2019.02.24 at 17h 29m 37s.xml">
<configuration name="BMTest" configurationId="JUnit" />
</history-entry>
<history-entry file="BMTest - 2019.02.24 at 17h 33m 36s.xml">
<configuration name="BMTest" configurationId="JUnit" />
</history-entry>
<history-entry file="BMTest - 2019.02.24 at 17h 33m 47s.xml">
<configuration name="BMTest" configurationId="JUnit" />
</history-entry>
<history-entry file="BMTest - 2019.02.24 at 17h 33m 58s.xml">
<configuration name="BMTest" configurationId="JUnit" />
</history-entry>
<history-entry file="BMTest - 2019.02.24 at 17h 34m 23s.xml">
<configuration name="BMTest" configurationId="JUnit" />
</history-entry>
<history-entry file="BMTest - 2019.02.24 at 17h 34m 43s.xml">
<configuration name="BMTest" configurationId="JUnit" />
</history-entry>
<history-entry file="BMTest - 2019.02.24 at 17h 35m 05s.xml">
<configuration name="BMTest" configurationId="JUnit" />
</history-entry>
<history-entry file="BMTest - 2019.02.24 at 18h 18m 24s.xml">
<configuration name="BMTest" configurationId="JUnit" />
</history-entry>
</component>
<component name="ToolWindowManager">
<frame x="1917" y="0" width="1926" height="1203" extended-state="6" />
<editor active="true" />
<layout>
<window_info content_ui="combo" id="Project" order="0" sideWeight="0.5249538" visible="true" weight="0.1996805" />
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
<window_info id="Project Explorer" order="2" />
<window_info id="DB Browser" order="3" />
<window_info id="Designer" order="4" />
<window_info id="UI Designer" order="5" />
<window_info id="Job Explorer" order="6" />
<window_info id="Favorites" order="7" side_tool="true" />
<window_info anchor="bottom" id="Message" order="0" />
<window_info anchor="bottom" id="Find" order="1" />
<window_info anchor="bottom" id="Debug" order="2" weight="0.44547135" />
<window_info anchor="bottom" id="Cvs" order="3" weight="0.25" />
<window_info anchor="bottom" id="Inspection" order="4" weight="0.4" />
<window_info anchor="bottom" id="TODO" order="5" />
<window_info anchor="bottom" id="Console" order="6" />
<window_info anchor="bottom" id="DB Execution Console" order="7" />
<window_info anchor="bottom" id="Terminal" order="8" />
<window_info anchor="bottom" id="Event Log" order="9" sideWeight="0.5005325" side_tool="true" weight="0.1608133" />
<window_info anchor="bottom" id="Version Control" order="10" show_stripe_button="false" />
<window_info anchor="bottom" id="Messages" order="11" weight="0.15711646" />
<window_info active="true" anchor="bottom" x="2625" y="145" width="1133" height="601" id="Run" order="12" sideWeight="0.47504622" visible="true" weight="0.22181146" />
<window_info anchor="right" id="make" />
<window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
<window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
<window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
<window_info anchor="right" id="Palette" order="3" />
<window_info anchor="right" id="Palette&#9;" order="4" />
<window_info anchor="right" id="Maven Projects" order="5" />
</layout>
</component>
<component name="VcsContentAnnotationSettings">
<option name="myLimit" value="2678400000" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager>
<breakpoints>
<line-breakpoint enabled="true" type="java-line">
<url>file://$PROJECT_DIR$/src/tests/BMTest.java</url>
<line>769</line>
<properties />
<option name="timeStamp" value="20" />
</line-breakpoint>
</breakpoints>
</breakpoint-manager>
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/.gitignore">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/src/tests/TestDriver.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="225">
<caret line="17" selection-start-line="17" selection-end-line="17" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/Makefile">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="210">
<caret line="14" selection-start-line="14" selection-end-line="14" />
</state>
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/lib/bufmgrAssign.jar!/global/Page.class">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="105">
<caret line="7" column="13" selection-start-line="7" selection-start-column="13" selection-end-line="7" selection-end-column="13" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/bufmgr/BufferPoolExceededException.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="30">
<caret line="2" column="13" selection-start-line="2" selection-start-column="13" selection-end-line="2" selection-end-column="13" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/diskmgr/DiskMgr.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-480">
<caret line="204" column="18" selection-start-line="204" selection-start-column="18" selection-end-line="204" selection-end-column="18" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/bufmgr/HashEntryNotFoundException.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="135">
<caret line="9" column="11" selection-start-line="9" selection-start-column="11" selection-end-line="9" selection-end-column="11" />
<folding>
<element signature="e#229#230#0" expanded="true" />
<element signature="e#255#256#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/bufmgr/FrameDescriptor.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="45">
<caret line="3" column="13" selection-start-line="3" selection-start-column="13" selection-end-line="3" selection-end-column="13" />
</state>
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/lib/junit.jar!/org/junit/internal/runners/statements/RunAfters.class">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="450">
<caret line="38" selection-start-line="38" selection-end-line="38" />
</state>
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/lib/junit.jar!/org/junit/internal/runners/model/ReflectiveCallable.class">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="210">
<caret line="17" selection-start-line="17" selection-end-line="17" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/tests/BMTest.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="404">
<caret line="778" selection-start-line="778" selection-end-line="778" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/bufmgr/BufMgr.java">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="379">
<caret line="110" column="24" selection-start-line="110" selection-start-column="24" selection-end-line="110" selection-end-column="24" />
<folding>
<element signature="e#13728#13729#0" expanded="true" />
<element signature="e#13762#13763#0" expanded="true" />
<element signature="e#14251#14252#0" expanded="true" />
<element signature="e#14292#14293#0" expanded="true" />
<element signature="e#14342#14343#0" expanded="true" />
<element signature="e#14384#14385#0" expanded="true" />
<element signature="e#14435#14436#0" expanded="true" />
<element signature="e#14493#14494#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</component>
<component name="masterDetails">
<states>
<state key="ArtifactsStructureConfigurable.UI">
<settings>
<artifact-editor />
<splitter-proportions>
<option name="proportions">
<list>
<option value="0.2" />
</list>
</option>
</splitter-proportions>
</settings>
</state>
<state key="FacetStructureConfigurable.UI">
<settings>
<last-edited>No facets are configured</last-edited>
<splitter-proportions>
<option name="proportions">
<list>
<option value="0.2" />
</list>
</option>
</splitter-proportions>
</settings>
</state>
<state key="GlobalLibrariesConfigurable.UI">
<settings>
<splitter-proportions>
<option name="proportions">
<list>
<option value="0.2" />
</list>
</option>
</splitter-proportions>
</settings>
</state>
<state key="JdkListConfigurable.UI">
<settings>
<last-edited>1.8</last-edited>
<splitter-proportions>
<option name="proportions">
<list>
<option value="0.2" />
</list>
</option>
</splitter-proportions>
</settings>
</state>
<state key="ModuleStructureConfigurable.UI">
<settings>
<last-edited>p2</last-edited>
<splitter-proportions>
<option name="proportions">
<list>
<option value="0.2" />
<option value="0.6" />
</list>
</option>
</splitter-proportions>
</settings>
</state>
<state key="ProjectLibrariesConfigurable.UI">
<settings>
<last-edited>lib</last-edited>
<splitter-proportions>
<option name="proportions">
<list>
<option value="0.2" />
</list>
</option>
</splitter-proportions>
</settings>
</state>
</states>
</component>
</project>

View File

@ -1,5 +1,6 @@
package bufmgr;
import diskmgr.DiskMgr;
import diskmgr.DiskMgrException;
import global.Minibase;
import global.Page;
@ -30,6 +31,9 @@ public class BufMgr {
// ago
private Queue<Integer> fifo = null;
//END OF REQUIRED INSTANCE VARIABLES
private int nextIndex = 0;
private boolean isFull = false;
/**
* Create the BufMgr object. Allocate pages (frames) for the buffer pool in main
@ -92,7 +96,86 @@ public class BufMgr {
*/
public void pinPage(PageId pageno, Page page, boolean emptyPage)
throws BufferPoolExceededException, DiskMgrException {
//YOUR CODE HERE
Integer foundEntry = hashTable.get(pageno.pid);
if (foundEntry != null) {
FrameDescriptor desc = bufDescr[foundEntry];
desc.PinCount++;
page.setPage(bufFrames[foundEntry]);
} else {
Page foundPage = new Page();
if (isFull) {
int index = -1;
for (Integer item : fifo) {
Integer pointer = hashTable.get(item);
if (pointer != null && bufDescr[pointer].PinCount <= 0) {
index = pointer;
break;
}
}
if (index <= -1) {
throw new BufferPoolExceededException("No item found with 0 pin count");
}
// Integer head = fifo.poll();
//
// if (head != null) {
// index = hashTable.get(head);
// } else {
// throw new BufferPoolExceededException("No head found in FIFO Queue");
// }
if (bufDescr[index].DirtyBit) {
try {
// TODO: May be wrong error.
flushPage(new PageId(bufDescr[index].PageNumber));
} catch (HashEntryNotFoundException e) {
throw new DiskMgrException(e.getMessage());
}
}
Minibase.DiskManager.read_page(pageno, foundPage);
// Something to do with pin counts?
if (bufDescr[index] != null) {
hashTable.remove(bufDescr[index].PageNumber);
}
bufFrames[index] = foundPage;
FrameDescriptor desc = new FrameDescriptor();
desc.PageNumber = pageno.pid;
desc.PinCount = 1;
bufDescr[index] = desc;
hashTable.put(pageno.pid, index);
} else {
Minibase.DiskManager.read_page(pageno, foundPage);
if (bufDescr[nextIndex] != null) {
hashTable.remove(bufDescr[nextIndex].PageNumber);
}
bufFrames[nextIndex] = foundPage;
FrameDescriptor desc = new FrameDescriptor();
desc.PageNumber = pageno.pid;
bufDescr[nextIndex] = desc;
desc.PinCount++;
hashTable.put(pageno.pid, nextIndex);
if (nextIndex < bufFrames.length) {
nextIndex++;
}
if (nextIndex >= bufFrames.length) {
isFull = true;
}
}
page.setPage(foundPage);
}
fifo.remove(foundEntry);
}
/**
@ -110,7 +193,27 @@ public class BufMgr {
*/
public void unpinPage(PageId pageno, boolean dirty)
throws HashEntryNotFoundException, PageUnpinnedException {
//YOUR CODE HERE
Integer foundEntry = hashTable.get(pageno.pid);
if (foundEntry != null) {
FrameDescriptor desc = bufDescr[foundEntry];
if (dirty) {
desc.DirtyBit = true;
}
if (desc.PinCount > 0) {
desc.PinCount--;
if (desc.PinCount == 0) {
fifo.offer(foundEntry);
}
} else {
throw new PageUnpinnedException("Pin count for Page ID " + pageno.pid + " is " + desc.PinCount);
}
} else {
throw new HashEntryNotFoundException("Could not fine Page ID: " + pageno.pid);
}
}
/**
@ -127,7 +230,30 @@ public class BufMgr {
* @throws BufferPoolExceededException if the new page cannot be pinned after the run is allocated due to the buffer being full. If this exception is thrown, the newly allocated pages should be deallocated
*/
public PageId newPage(Page firstpage, int howmany) throws DiskMgrException, BufferPoolExceededException {
//YOUR CODE HERE
// if (!isFull) {
PageId pageId = null;
try {
pageId = Minibase.DiskManager.allocate_page(howmany);
} catch (BufMgrException e) {
throw new DiskMgrException(e.getMessage());
}
try {
pinPage(pageId, firstpage, false);
return pageId;
} catch (BufferPoolExceededException e) {
try {
Minibase.DiskManager.deallocate_page(pageId, howmany);
} catch (BufMgrException e1) {
throw new DiskMgrException(e1.getMessage());
}
throw new BufferPoolExceededException(e.getMessage());
}
// } else {
// throw new BufferPoolExceededException("Pool is full, cannot hold anymore pages");
// }
}
/**
@ -151,6 +277,18 @@ public class BufMgr {
hashTable.remove(globalPageId.pid);
resetFrameDescriptor(frameId);
}
if (isFull) {
isFull = false;
}
if (nextIndex > 0) {
int move = nextIndex;
nextIndex--;
fifo.remove(hashTable.get(globalPageId.pid));
}
// then delete from disk
try {
Minibase.DiskManager.deallocate_page(globalPageId);