HDFS-5519. COMMIT handler should update the commit status after sync. Contributed by Brandon Li
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1542437 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
f7efa0b86e
commit
a2200a6417
|
@ -726,6 +726,7 @@ class OpenFileCtx {
|
||||||
try {
|
try {
|
||||||
// Sync file data and length
|
// Sync file data and length
|
||||||
fos.hsync(EnumSet.of(SyncFlag.UPDATE_LENGTH));
|
fos.hsync(EnumSet.of(SyncFlag.UPDATE_LENGTH));
|
||||||
|
ret = COMMIT_STATUS.COMMIT_FINISHED; // Remove COMMIT_DO_SYNC status
|
||||||
// Nothing to do for metadata since attr related change is pass-through
|
// Nothing to do for metadata since attr related change is pass-through
|
||||||
} catch (ClosedChannelException cce) {
|
} catch (ClosedChannelException cce) {
|
||||||
if (pendingWrites.isEmpty()) {
|
if (pendingWrites.isEmpty()) {
|
||||||
|
@ -747,7 +748,8 @@ class OpenFileCtx {
|
||||||
* return one commit status: COMMIT_FINISHED, COMMIT_WAIT,
|
* return one commit status: COMMIT_FINISHED, COMMIT_WAIT,
|
||||||
* COMMIT_INACTIVE_CTX, COMMIT_INACTIVE_WITH_PENDING_WRITE, COMMIT_ERROR
|
* COMMIT_INACTIVE_CTX, COMMIT_INACTIVE_WITH_PENDING_WRITE, COMMIT_ERROR
|
||||||
*/
|
*/
|
||||||
private synchronized COMMIT_STATUS checkCommitInternal(long commitOffset,
|
@VisibleForTesting
|
||||||
|
synchronized COMMIT_STATUS checkCommitInternal(long commitOffset,
|
||||||
Channel channel, int xid, Nfs3FileAttributes preOpAttr) {
|
Channel channel, int xid, Nfs3FileAttributes preOpAttr) {
|
||||||
if (!activeState) {
|
if (!activeState) {
|
||||||
if (pendingWrites.isEmpty()) {
|
if (pendingWrites.isEmpty()) {
|
||||||
|
|
|
@ -150,10 +150,16 @@ public class TestWrites {
|
||||||
// Test request with non zero commit offset
|
// Test request with non zero commit offset
|
||||||
ctx.setActiveStatusForTest(true);
|
ctx.setActiveStatusForTest(true);
|
||||||
Mockito.when(fos.getPos()).thenReturn((long) 10);
|
Mockito.when(fos.getPos()).thenReturn((long) 10);
|
||||||
|
COMMIT_STATUS status = ctx.checkCommitInternal(5, null, 1, attr);
|
||||||
|
Assert.assertTrue(status == COMMIT_STATUS.COMMIT_DO_SYNC);
|
||||||
|
// Do_SYNC state will be updated to FINISHED after data sync
|
||||||
ret = ctx.checkCommit(dfsClient, 5, null, 1, attr);
|
ret = ctx.checkCommit(dfsClient, 5, null, 1, attr);
|
||||||
Assert.assertTrue(ret == COMMIT_STATUS.COMMIT_DO_SYNC);
|
Assert.assertTrue(ret == COMMIT_STATUS.COMMIT_FINISHED);
|
||||||
|
|
||||||
|
status = ctx.checkCommitInternal(10, null, 1, attr);
|
||||||
|
Assert.assertTrue(status == COMMIT_STATUS.COMMIT_DO_SYNC);
|
||||||
ret = ctx.checkCommit(dfsClient, 10, null, 1, attr);
|
ret = ctx.checkCommit(dfsClient, 10, null, 1, attr);
|
||||||
Assert.assertTrue(ret == COMMIT_STATUS.COMMIT_DO_SYNC);
|
Assert.assertTrue(ret == COMMIT_STATUS.COMMIT_FINISHED);
|
||||||
|
|
||||||
ConcurrentNavigableMap<Long, CommitCtx> commits = ctx
|
ConcurrentNavigableMap<Long, CommitCtx> commits = ctx
|
||||||
.getPendingCommitsForTest();
|
.getPendingCommitsForTest();
|
||||||
|
|
|
@ -661,6 +661,9 @@ Release 2.2.1 - UNRELEASED
|
||||||
HDFS-5469. Add configuration property for the sub-directroy export path
|
HDFS-5469. Add configuration property for the sub-directroy export path
|
||||||
(brandonli)
|
(brandonli)
|
||||||
|
|
||||||
|
HDFS-5519. COMMIT handler should update the commit status after sync
|
||||||
|
(brandonli)
|
||||||
|
|
||||||
Release 2.2.0 - 2013-10-13
|
Release 2.2.0 - 2013-10-13
|
||||||
|
|
||||||
INCOMPATIBLE CHANGES
|
INCOMPATIBLE CHANGES
|
||||||
|
|
Loading…
Reference in New Issue