You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@asterixdb.apache.org by "Murtadha Hubail (Code Review)" <do...@asterixdb.incubator.apache.org> on 2015/11/17 07:25:29 UTC
Change in hyracks[master]: ASTERIXDB-1137: Prevent file from being deleted while a page...
Murtadha Hubail has uploaded a new change for review.
https://asterix-gerrit.ics.uci.edu/499
Change subject: ASTERIXDB-1137: Prevent file from being deleted while a page is being flushed.
......................................................................
ASTERIXDB-1137: Prevent file from being deleted while a page is being flushed.
Change-Id: I256a84c416bf9d7251b1ee788d028d6b2928e747
---
M hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/io/IOManager.java
M hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
2 files changed, 22 insertions(+), 13 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/hyracks refs/changes/99/499/1
diff --git a/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/io/IOManager.java b/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/io/IOManager.java
index 3b88f02..f673a07 100644
--- a/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/io/IOManager.java
+++ b/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/io/IOManager.java
@@ -86,13 +86,16 @@
@Override
public int syncWrite(IFileHandle fHandle, long offset, ByteBuffer data) throws HyracksDataException {
try {
+ if (fHandle == null) {
+ throw new IllegalStateException("Trying to write to a deleted file.");
+ }
int n = 0;
int remaining = data.remaining();
while (remaining > 0) {
int len = ((FileHandle) fHandle).getFileChannel().write(data, offset);
if (len < 0) {
- throw new HyracksDataException("Error writing to file: "
- + ((FileHandle) fHandle).getFileReference().toString());
+ throw new HyracksDataException(
+ "Error writing to file: " + ((FileHandle) fHandle).getFileReference().toString());
}
remaining -= len;
offset += len;
diff --git a/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java b/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
index 58ba988..af8f0e1 100644
--- a/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
+++ b/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
@@ -427,13 +427,17 @@
private void write(CachedPage cPage) throws HyracksDataException {
BufferedFileHandle fInfo = getFileInfo(cPage);
- if (fInfo.fileHasBeenDeleted()) {
- return;
+ if (!fInfo.fileHasBeenDeleted()) {
+ //synchronize on fInfo to prevent the file handle from being deleted until the page is written.
+ synchronized (fInfo) {
+ if (!fInfo.fileHasBeenDeleted()) {
+ cPage.buffer.position(0);
+ cPage.buffer.limit(pageSize);
+ ioManager.syncWrite(fInfo.getFileHandle(),
+ (long) BufferedFileHandle.getPageId(cPage.dpid) * pageSize, cPage.buffer);
+ }
+ }
}
- cPage.buffer.position(0);
- cPage.buffer.limit(pageSize);
- ioManager.syncWrite(fInfo.getFileHandle(), (long) BufferedFileHandle.getPageId(cPage.dpid) * pageSize,
- cPage.buffer);
}
@Override
@@ -516,8 +520,8 @@
}
}
} else if (shutdownStart) {
- throw new IllegalStateException("Cache closed, but unable to acquire read lock on dirty page: "
- + cPage.dpid);
+ throw new IllegalStateException(
+ "Cache closed, but unable to acquire read lock on dirty page: " + cPage.dpid);
}
}
}
@@ -765,9 +769,11 @@
// Mark the fInfo as deleted,
// such that when its pages are reclaimed in openFile(),
// the pages are not flushed to disk but only invalidated.
- if (!fInfo.fileHasBeenDeleted()) {
- ioManager.close(fInfo.getFileHandle());
- fInfo.markAsDeleted();
+ synchronized (fInfo) {
+ if (!fInfo.fileHasBeenDeleted()) {
+ ioManager.close(fInfo.getFileHandle());
+ fInfo.markAsDeleted();
+ }
}
}
}
--
To view, visit https://asterix-gerrit.ics.uci.edu/499
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I256a84c416bf9d7251b1ee788d028d6b2928e747
Gerrit-PatchSet: 1
Gerrit-Project: hyracks
Gerrit-Branch: master
Gerrit-Owner: Murtadha Hubail <hu...@gmail.com>
Change in hyracks[master]: ASTERIXDB-1137: Prevent file from being deleted while a page...
Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.
Change subject: ASTERIXDB-1137: Prevent file from being deleted while a page is being flushed.
......................................................................
Patch Set 1:
Build Started https://asterix-jenkins.ics.uci.edu/job/hyracks-gerrit/590/
--
To view, visit https://asterix-gerrit.ics.uci.edu/499
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: comment
Gerrit-Change-Id: I256a84c416bf9d7251b1ee788d028d6b2928e747
Gerrit-PatchSet: 1
Gerrit-Project: hyracks
Gerrit-Branch: master
Gerrit-Owner: Murtadha Hubail <hu...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-HasComments: No
Change in hyracks[master]: ASTERIXDB-1137: Prevent file from being deleted while a page...
Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.
Change subject: ASTERIXDB-1137: Prevent file from being deleted while a page is being flushed.
......................................................................
Patch Set 2: -Verified
Build Started https://asterix-jenkins.ics.uci.edu/job/hyracks-gerrit/595/
--
To view, visit https://asterix-gerrit.ics.uci.edu/499
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: comment
Gerrit-Change-Id: I256a84c416bf9d7251b1ee788d028d6b2928e747
Gerrit-PatchSet: 2
Gerrit-Project: hyracks
Gerrit-Branch: master
Gerrit-Owner: Murtadha Hubail <hu...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: No
Change in hyracks[master]: ASTERIXDB-1137: Prevent file from being deleted while a page...
Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.
Change subject: ASTERIXDB-1137: Prevent file from being deleted while a page is being flushed.
......................................................................
Patch Set 2: -Verified
Build Started https://asterix-jenkins.ics.uci.edu/job/hyracks-gerrit/592/
--
To view, visit https://asterix-gerrit.ics.uci.edu/499
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: comment
Gerrit-Change-Id: I256a84c416bf9d7251b1ee788d028d6b2928e747
Gerrit-PatchSet: 2
Gerrit-Project: hyracks
Gerrit-Branch: master
Gerrit-Owner: Murtadha Hubail <hu...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: No
Change in hyracks[master]: ASTERIXDB-1137: Prevent file from being deleted while a page...
Posted by "Ian Maxon (Code Review)" <do...@asterixdb.incubator.apache.org>.
Ian Maxon has posted comments on this change.
Change subject: ASTERIXDB-1137: Prevent file from being deleted while a page is being flushed.
......................................................................
Patch Set 2: Code-Review+2
This seems like the inplace equivalent of what was happening on my branch. For me, the queue was null due to a race in the instantiation of it. Here it looks like this ameliorates a fairly similar scenario.
--
To view, visit https://asterix-gerrit.ics.uci.edu/499
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: comment
Gerrit-Change-Id: I256a84c416bf9d7251b1ee788d028d6b2928e747
Gerrit-PatchSet: 2
Gerrit-Project: hyracks
Gerrit-Branch: master
Gerrit-Owner: Murtadha Hubail <hu...@gmail.com>
Gerrit-Reviewer: Ian Maxon <im...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Murtadha Hubail <hu...@gmail.com>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: No
Change in hyracks[master]: ASTERIXDB-1137: Prevent file from being deleted while a page...
Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.
Change subject: ASTERIXDB-1137: Prevent file from being deleted while a page is being flushed.
......................................................................
Patch Set 2: Verified+1
Build Successful
https://asterix-jenkins.ics.uci.edu/job/hyracks-gerrit/591/ : SUCCESS
--
To view, visit https://asterix-gerrit.ics.uci.edu/499
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: comment
Gerrit-Change-Id: I256a84c416bf9d7251b1ee788d028d6b2928e747
Gerrit-PatchSet: 2
Gerrit-Project: hyracks
Gerrit-Branch: master
Gerrit-Owner: Murtadha Hubail <hu...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: No
Change in hyracks[master]: ASTERIXDB-1137: Prevent file from being deleted while a page...
Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.
Change subject: ASTERIXDB-1137: Prevent file from being deleted while a page is being flushed.
......................................................................
Patch Set 2: Verified+1
Build Successful
https://asterix-jenkins.ics.uci.edu/job/hyracks-gerrit/595/ : SUCCESS
--
To view, visit https://asterix-gerrit.ics.uci.edu/499
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: comment
Gerrit-Change-Id: I256a84c416bf9d7251b1ee788d028d6b2928e747
Gerrit-PatchSet: 2
Gerrit-Project: hyracks
Gerrit-Branch: master
Gerrit-Owner: Murtadha Hubail <hu...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: No
Change in hyracks[master]: ASTERIXDB-1137: Prevent file from being deleted while a page...
Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.
Change subject: ASTERIXDB-1137: Prevent file from being deleted while a page is being flushed.
......................................................................
Patch Set 2: Verified+1
Build Successful
https://asterix-jenkins.ics.uci.edu/job/hyracks-gerrit/594/ : SUCCESS
--
To view, visit https://asterix-gerrit.ics.uci.edu/499
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: comment
Gerrit-Change-Id: I256a84c416bf9d7251b1ee788d028d6b2928e747
Gerrit-PatchSet: 2
Gerrit-Project: hyracks
Gerrit-Branch: master
Gerrit-Owner: Murtadha Hubail <hu...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: No
Change in hyracks[master]: ASTERIXDB-1137: Prevent file from being deleted while a page...
Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.
Change subject: ASTERIXDB-1137: Prevent file from being deleted while a page is being flushed.
......................................................................
Patch Set 1: Verified+1
Build Successful
https://asterix-jenkins.ics.uci.edu/job/hyracks-gerrit/590/ : SUCCESS
--
To view, visit https://asterix-gerrit.ics.uci.edu/499
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: comment
Gerrit-Change-Id: I256a84c416bf9d7251b1ee788d028d6b2928e747
Gerrit-PatchSet: 1
Gerrit-Project: hyracks
Gerrit-Branch: master
Gerrit-Owner: Murtadha Hubail <hu...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-HasComments: No
Change in hyracks[master]: ASTERIXDB-1137: Prevent file from being deleted while a page...
Posted by "Murtadha Hubail (Code Review)" <do...@asterixdb.incubator.apache.org>.
Hello Jenkins,
I'd like you to reexamine a change. Please visit
https://asterix-gerrit.ics.uci.edu/499
to look at the new patch set (#2).
Change subject: ASTERIXDB-1137: Prevent file from being deleted while a page is being flushed.
......................................................................
ASTERIXDB-1137: Prevent file from being deleted while a page is being flushed.
Change-Id: I256a84c416bf9d7251b1ee788d028d6b2928e747
---
M hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/io/IOManager.java
M hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
2 files changed, 20 insertions(+), 13 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/hyracks refs/changes/99/499/2
--
To view, visit https://asterix-gerrit.ics.uci.edu/499
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: newpatchset
Gerrit-Change-Id: I256a84c416bf9d7251b1ee788d028d6b2928e747
Gerrit-PatchSet: 2
Gerrit-Project: hyracks
Gerrit-Branch: master
Gerrit-Owner: Murtadha Hubail <hu...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Change in hyracks[master]: ASTERIXDB-1137: Prevent file from being deleted while a page...
Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.
Change subject: ASTERIXDB-1137: Prevent file from being deleted while a page is being flushed.
......................................................................
Patch Set 2:
Build Started https://asterix-jenkins.ics.uci.edu/job/hyracks-gerrit/591/
--
To view, visit https://asterix-gerrit.ics.uci.edu/499
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: comment
Gerrit-Change-Id: I256a84c416bf9d7251b1ee788d028d6b2928e747
Gerrit-PatchSet: 2
Gerrit-Project: hyracks
Gerrit-Branch: master
Gerrit-Owner: Murtadha Hubail <hu...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: No
Change in hyracks[master]: ASTERIXDB-1137: Prevent file from being deleted while a page...
Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.
Change subject: ASTERIXDB-1137: Prevent file from being deleted while a page is being flushed.
......................................................................
Patch Set 2: Verified+1
Build Successful
https://asterix-jenkins.ics.uci.edu/job/hyracks-gerrit/592/ : SUCCESS
--
To view, visit https://asterix-gerrit.ics.uci.edu/499
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: comment
Gerrit-Change-Id: I256a84c416bf9d7251b1ee788d028d6b2928e747
Gerrit-PatchSet: 2
Gerrit-Project: hyracks
Gerrit-Branch: master
Gerrit-Owner: Murtadha Hubail <hu...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: No
Change in hyracks[master]: ASTERIXDB-1137: Prevent file from being deleted while a page...
Posted by "Murtadha Hubail (Code Review)" <do...@asterixdb.incubator.apache.org>.
Murtadha Hubail has posted comments on this change.
Change subject: ASTERIXDB-1137: Prevent file from being deleted while a page is being flushed.
......................................................................
Patch Set 1:
(1 comment)
I re-triggered the build 6 times to see if the issue would appear and things look good so far. I also built Asterix locally to make sure this didn't break anything there.
https://asterix-gerrit.ics.uci.edu/#/c/499/1/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
File hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java:
Line 430: if (!fInfo.fileHasBeenDeleted()) {
> My memory might be a bit rusty, but I think that double-checked locking wor
As we discussed. I removed the first check and made it after the synchronization since the synchronization cost is already paid on the getFileInfo(.) and a file pages are flushed one at a time.
--
To view, visit https://asterix-gerrit.ics.uci.edu/499
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: comment
Gerrit-Change-Id: I256a84c416bf9d7251b1ee788d028d6b2928e747
Gerrit-PatchSet: 1
Gerrit-Project: hyracks
Gerrit-Branch: master
Gerrit-Owner: Murtadha Hubail <hu...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Murtadha Hubail <hu...@gmail.com>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: Yes
Change in hyracks[master]: ASTERIXDB-1137: Prevent file from being deleted while a page...
Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.
Change subject: ASTERIXDB-1137: Prevent file from being deleted while a page is being flushed.
......................................................................
Patch Set 2: -Verified
Build Started https://asterix-jenkins.ics.uci.edu/job/hyracks-gerrit/594/
--
To view, visit https://asterix-gerrit.ics.uci.edu/499
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: comment
Gerrit-Change-Id: I256a84c416bf9d7251b1ee788d028d6b2928e747
Gerrit-PatchSet: 2
Gerrit-Project: hyracks
Gerrit-Branch: master
Gerrit-Owner: Murtadha Hubail <hu...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: No
Change in hyracks[master]: ASTERIXDB-1137: Prevent file from being deleted while a page...
Posted by "Till Westmann (Code Review)" <do...@asterixdb.incubator.apache.org>.
Till Westmann has posted comments on this change.
Change subject: ASTERIXDB-1137: Prevent file from being deleted while a page is being flushed.
......................................................................
Patch Set 1:
(2 comments)
https://asterix-gerrit.ics.uci.edu/#/c/499/1/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
File hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java:
Line 430: if (!fInfo.fileHasBeenDeleted()) {
My memory might be a bit rusty, but I think that double-checked locking works in Java only if the variable is volatile ...
Line 772: synchronized (fInfo) {
same here
--
To view, visit https://asterix-gerrit.ics.uci.edu/499
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: comment
Gerrit-Change-Id: I256a84c416bf9d7251b1ee788d028d6b2928e747
Gerrit-PatchSet: 1
Gerrit-Project: hyracks
Gerrit-Branch: master
Gerrit-Owner: Murtadha Hubail <hu...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: Yes
Change in hyracks[master]: ASTERIXDB-1137: Prevent file from being deleted while a page...
Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.
Change subject: ASTERIXDB-1137: Prevent file from being deleted while a page is being flushed.
......................................................................
Patch Set 2: Verified+1
Build Successful
https://asterix-jenkins.ics.uci.edu/job/hyracks-gerrit/593/ : SUCCESS
--
To view, visit https://asterix-gerrit.ics.uci.edu/499
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: comment
Gerrit-Change-Id: I256a84c416bf9d7251b1ee788d028d6b2928e747
Gerrit-PatchSet: 2
Gerrit-Project: hyracks
Gerrit-Branch: master
Gerrit-Owner: Murtadha Hubail <hu...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: No
Change in hyracks[master]: ASTERIXDB-1137: Prevent file from being deleted while a page...
Posted by "Jenkins (Code Review)" <do...@asterixdb.incubator.apache.org>.
Jenkins has posted comments on this change.
Change subject: ASTERIXDB-1137: Prevent file from being deleted while a page is being flushed.
......................................................................
Patch Set 2: -Verified
Build Started https://asterix-jenkins.ics.uci.edu/job/hyracks-gerrit/593/
--
To view, visit https://asterix-gerrit.ics.uci.edu/499
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: comment
Gerrit-Change-Id: I256a84c416bf9d7251b1ee788d028d6b2928e747
Gerrit-PatchSet: 2
Gerrit-Project: hyracks
Gerrit-Branch: master
Gerrit-Owner: Murtadha Hubail <hu...@gmail.com>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-HasComments: No
Change in hyracks[master]: ASTERIXDB-1137: Prevent file from being deleted while a page...
Posted by "Murtadha Hubail (Code Review)" <do...@asterixdb.incubator.apache.org>.
Murtadha Hubail has submitted this change and it was merged.
Change subject: ASTERIXDB-1137: Prevent file from being deleted while a page is being flushed.
......................................................................
ASTERIXDB-1137: Prevent file from being deleted while a page is being flushed.
Change-Id: I256a84c416bf9d7251b1ee788d028d6b2928e747
Reviewed-on: https://asterix-gerrit.ics.uci.edu/499
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Ian Maxon <im...@apache.org>
---
M hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/io/IOManager.java
M hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
2 files changed, 20 insertions(+), 13 deletions(-)
Approvals:
Ian Maxon: Looks good to me, approved
Jenkins: Verified
diff --git a/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/io/IOManager.java b/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/io/IOManager.java
index 3b88f02..f673a07 100644
--- a/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/io/IOManager.java
+++ b/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/io/IOManager.java
@@ -86,13 +86,16 @@
@Override
public int syncWrite(IFileHandle fHandle, long offset, ByteBuffer data) throws HyracksDataException {
try {
+ if (fHandle == null) {
+ throw new IllegalStateException("Trying to write to a deleted file.");
+ }
int n = 0;
int remaining = data.remaining();
while (remaining > 0) {
int len = ((FileHandle) fHandle).getFileChannel().write(data, offset);
if (len < 0) {
- throw new HyracksDataException("Error writing to file: "
- + ((FileHandle) fHandle).getFileReference().toString());
+ throw new HyracksDataException(
+ "Error writing to file: " + ((FileHandle) fHandle).getFileReference().toString());
}
remaining -= len;
offset += len;
diff --git a/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java b/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
index 58ba988..3892e0a 100644
--- a/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
+++ b/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
@@ -427,13 +427,15 @@
private void write(CachedPage cPage) throws HyracksDataException {
BufferedFileHandle fInfo = getFileInfo(cPage);
- if (fInfo.fileHasBeenDeleted()) {
- return;
+ //synchronize on fInfo to prevent the file handle from being deleted until the page is written.
+ synchronized (fInfo) {
+ if (!fInfo.fileHasBeenDeleted()) {
+ cPage.buffer.position(0);
+ cPage.buffer.limit(pageSize);
+ ioManager.syncWrite(fInfo.getFileHandle(), (long) BufferedFileHandle.getPageId(cPage.dpid) * pageSize,
+ cPage.buffer);
+ }
}
- cPage.buffer.position(0);
- cPage.buffer.limit(pageSize);
- ioManager.syncWrite(fInfo.getFileHandle(), (long) BufferedFileHandle.getPageId(cPage.dpid) * pageSize,
- cPage.buffer);
}
@Override
@@ -516,8 +518,8 @@
}
}
} else if (shutdownStart) {
- throw new IllegalStateException("Cache closed, but unable to acquire read lock on dirty page: "
- + cPage.dpid);
+ throw new IllegalStateException(
+ "Cache closed, but unable to acquire read lock on dirty page: " + cPage.dpid);
}
}
}
@@ -765,9 +767,11 @@
// Mark the fInfo as deleted,
// such that when its pages are reclaimed in openFile(),
// the pages are not flushed to disk but only invalidated.
- if (!fInfo.fileHasBeenDeleted()) {
- ioManager.close(fInfo.getFileHandle());
- fInfo.markAsDeleted();
+ synchronized (fInfo) {
+ if (!fInfo.fileHasBeenDeleted()) {
+ ioManager.close(fInfo.getFileHandle());
+ fInfo.markAsDeleted();
+ }
}
}
}
--
To view, visit https://asterix-gerrit.ics.uci.edu/499
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I256a84c416bf9d7251b1ee788d028d6b2928e747
Gerrit-PatchSet: 3
Gerrit-Project: hyracks
Gerrit-Branch: master
Gerrit-Owner: Murtadha Hubail <hu...@gmail.com>
Gerrit-Reviewer: Ian Maxon <im...@apache.org>
Gerrit-Reviewer: Jenkins <je...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Murtadha Hubail <hu...@gmail.com>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>