|
@@ -27,6 +27,7 @@ import org.apache.hadoop.fs.XAttrSetFlag;
|
|
|
import org.apache.hadoop.fs.permission.AclEntry;
|
|
|
import org.apache.hadoop.fs.permission.FsPermission;
|
|
|
import org.apache.hadoop.hdfs.inotify.Event;
|
|
|
+import org.apache.hadoop.hdfs.inotify.EventBatch;
|
|
|
import org.apache.hadoop.hdfs.inotify.MissingEventsException;
|
|
|
import org.apache.hadoop.hdfs.qjournal.MiniQJMHACluster;
|
|
|
import org.apache.hadoop.hdfs.server.namenode.FSEditLogOpCodes;
|
|
@@ -49,11 +50,17 @@ public class TestDFSInotifyEventInputStream {
|
|
|
private static final Log LOG = LogFactory.getLog(
|
|
|
TestDFSInotifyEventInputStream.class);
|
|
|
|
|
|
- private static Event waitForNextEvent(DFSInotifyEventInputStream eis)
|
|
|
+ private static EventBatch waitForNextEvents(DFSInotifyEventInputStream eis)
|
|
|
throws IOException, MissingEventsException {
|
|
|
- Event next = null;
|
|
|
- while ((next = eis.poll()) == null);
|
|
|
- return next;
|
|
|
+ EventBatch batch = null;
|
|
|
+ while ((batch = eis.poll()) == null);
|
|
|
+ return batch;
|
|
|
+ }
|
|
|
+
|
|
|
+ private static long checkTxid(EventBatch batch, long prevTxid){
|
|
|
+ Assert.assertTrue("Previous txid " + prevTxid + " was not less than " +
|
|
|
+ "new txid " + batch.getTxid(), prevTxid < batch.getTxid());
|
|
|
+ return batch.getTxid();
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -64,7 +71,7 @@ public class TestDFSInotifyEventInputStream {
|
|
|
*/
|
|
|
@Test
|
|
|
public void testOpcodeCount() {
|
|
|
- Assert.assertTrue(FSEditLogOpCodes.values().length == 47);
|
|
|
+ Assert.assertEquals(47, FSEditLogOpCodes.values().length);
|
|
|
}
|
|
|
|
|
|
|
|
@@ -127,30 +134,36 @@ public class TestDFSInotifyEventInputStream {
|
|
|
"user::rwx,user:foo:rw-,group::r--,other::---", true));
|
|
|
client.removeAcl("/file5"); // SetAclOp -> MetadataUpdateEvent
|
|
|
|
|
|
- Event next = null;
|
|
|
+ EventBatch batch = null;
|
|
|
|
|
|
// RenameOp
|
|
|
- next = waitForNextEvent(eis);
|
|
|
- Assert.assertTrue(next.getEventType() == Event.EventType.RENAME);
|
|
|
- Event.RenameEvent re = (Event.RenameEvent) next;
|
|
|
- Assert.assertTrue(re.getDstPath().equals("/file4"));
|
|
|
- Assert.assertTrue(re.getSrcPath().equals("/file"));
|
|
|
+ batch = waitForNextEvents(eis);
|
|
|
+ Assert.assertEquals(1, batch.getEvents().length);
|
|
|
+ long txid = batch.getTxid();
|
|
|
+ Assert.assertTrue(batch.getEvents()[0].getEventType() == Event.EventType.RENAME);
|
|
|
+ Event.RenameEvent re = (Event.RenameEvent) batch.getEvents()[0];
|
|
|
+ Assert.assertEquals("/file4", re.getDstPath());
|
|
|
+ Assert.assertEquals("/file", re.getSrcPath());
|
|
|
Assert.assertTrue(re.getTimestamp() > 0);
|
|
|
|
|
|
- long eventsBehind = eis.getEventsBehindEstimate();
|
|
|
+ long eventsBehind = eis.getTxidsBehindEstimate();
|
|
|
|
|
|
// RenameOldOp
|
|
|
- next = waitForNextEvent(eis);
|
|
|
- Assert.assertTrue(next.getEventType() == Event.EventType.RENAME);
|
|
|
- Event.RenameEvent re2 = (Event.RenameEvent) next;
|
|
|
+ batch = waitForNextEvents(eis);
|
|
|
+ Assert.assertEquals(1, batch.getEvents().length);
|
|
|
+ txid = checkTxid(batch, txid);
|
|
|
+ Assert.assertTrue(batch.getEvents()[0].getEventType() == Event.EventType.RENAME);
|
|
|
+ Event.RenameEvent re2 = (Event.RenameEvent) batch.getEvents()[0];
|
|
|
Assert.assertTrue(re2.getDstPath().equals("/file2"));
|
|
|
Assert.assertTrue(re2.getSrcPath().equals("/file4"));
|
|
|
Assert.assertTrue(re.getTimestamp() > 0);
|
|
|
|
|
|
// AddOp with overwrite
|
|
|
- next = waitForNextEvent(eis);
|
|
|
- Assert.assertTrue(next.getEventType() == Event.EventType.CREATE);
|
|
|
- Event.CreateEvent ce = (Event.CreateEvent) next;
|
|
|
+ batch = waitForNextEvents(eis);
|
|
|
+ Assert.assertEquals(1, batch.getEvents().length);
|
|
|
+ txid = checkTxid(batch, txid);
|
|
|
+ Assert.assertTrue(batch.getEvents()[0].getEventType() == Event.EventType.CREATE);
|
|
|
+ Event.CreateEvent ce = (Event.CreateEvent) batch.getEvents()[0];
|
|
|
Assert.assertTrue(ce.getiNodeType() == Event.CreateEvent.INodeType.FILE);
|
|
|
Assert.assertTrue(ce.getPath().equals("/file2"));
|
|
|
Assert.assertTrue(ce.getCtime() > 0);
|
|
@@ -159,66 +172,80 @@ public class TestDFSInotifyEventInputStream {
|
|
|
Assert.assertTrue(ce.getOverwrite());
|
|
|
|
|
|
// CloseOp
|
|
|
- next = waitForNextEvent(eis);
|
|
|
- Assert.assertTrue(next.getEventType() == Event.EventType.CLOSE);
|
|
|
- Event.CloseEvent ce2 = (Event.CloseEvent) next;
|
|
|
+ batch = waitForNextEvents(eis);
|
|
|
+ Assert.assertEquals(1, batch.getEvents().length);
|
|
|
+ txid = checkTxid(batch, txid);
|
|
|
+ Assert.assertTrue(batch.getEvents()[0].getEventType() == Event.EventType.CLOSE);
|
|
|
+ Event.CloseEvent ce2 = (Event.CloseEvent) batch.getEvents()[0];
|
|
|
Assert.assertTrue(ce2.getPath().equals("/file2"));
|
|
|
Assert.assertTrue(ce2.getFileSize() > 0);
|
|
|
Assert.assertTrue(ce2.getTimestamp() > 0);
|
|
|
|
|
|
// AddOp
|
|
|
- next = waitForNextEvent(eis);
|
|
|
- Assert.assertTrue(next.getEventType() == Event.EventType.APPEND);
|
|
|
- Assert.assertTrue(((Event.AppendEvent) next).getPath().equals("/file2"));
|
|
|
+ batch = waitForNextEvents(eis);
|
|
|
+ Assert.assertEquals(1, batch.getEvents().length);
|
|
|
+ txid = checkTxid(batch, txid);
|
|
|
+ Assert.assertTrue(batch.getEvents()[0].getEventType() == Event.EventType.APPEND);
|
|
|
+ Assert.assertTrue(((Event.AppendEvent) batch.getEvents()[0]).getPath().equals("/file2"));
|
|
|
|
|
|
// CloseOp
|
|
|
- next = waitForNextEvent(eis);
|
|
|
- Assert.assertTrue(next.getEventType() == Event.EventType.CLOSE);
|
|
|
- Assert.assertTrue(((Event.CloseEvent) next).getPath().equals("/file2"));
|
|
|
+ batch = waitForNextEvents(eis);
|
|
|
+ Assert.assertEquals(1, batch.getEvents().length);
|
|
|
+ txid = checkTxid(batch, txid);
|
|
|
+ Assert.assertTrue(batch.getEvents()[0].getEventType() == Event.EventType.CLOSE);
|
|
|
+ Assert.assertTrue(((Event.CloseEvent) batch.getEvents()[0]).getPath().equals("/file2"));
|
|
|
|
|
|
// TimesOp
|
|
|
- next = waitForNextEvent(eis);
|
|
|
- Assert.assertTrue(next.getEventType() == Event.EventType.METADATA);
|
|
|
- Event.MetadataUpdateEvent mue = (Event.MetadataUpdateEvent) next;
|
|
|
+ batch = waitForNextEvents(eis);
|
|
|
+ Assert.assertEquals(1, batch.getEvents().length);
|
|
|
+ txid = checkTxid(batch, txid);
|
|
|
+ Assert.assertTrue(batch.getEvents()[0].getEventType() == Event.EventType.METADATA);
|
|
|
+ Event.MetadataUpdateEvent mue = (Event.MetadataUpdateEvent) batch.getEvents()[0];
|
|
|
Assert.assertTrue(mue.getPath().equals("/file2"));
|
|
|
Assert.assertTrue(mue.getMetadataType() ==
|
|
|
Event.MetadataUpdateEvent.MetadataType.TIMES);
|
|
|
|
|
|
// SetReplicationOp
|
|
|
- next = waitForNextEvent(eis);
|
|
|
- Assert.assertTrue(next.getEventType() == Event.EventType.METADATA);
|
|
|
- Event.MetadataUpdateEvent mue2 = (Event.MetadataUpdateEvent) next;
|
|
|
+ batch = waitForNextEvents(eis);
|
|
|
+ Assert.assertEquals(1, batch.getEvents().length);
|
|
|
+ txid = checkTxid(batch, txid);
|
|
|
+ Assert.assertTrue(batch.getEvents()[0].getEventType() == Event.EventType.METADATA);
|
|
|
+ Event.MetadataUpdateEvent mue2 = (Event.MetadataUpdateEvent) batch.getEvents()[0];
|
|
|
Assert.assertTrue(mue2.getPath().equals("/file2"));
|
|
|
Assert.assertTrue(mue2.getMetadataType() ==
|
|
|
Event.MetadataUpdateEvent.MetadataType.REPLICATION);
|
|
|
Assert.assertTrue(mue2.getReplication() == 1);
|
|
|
|
|
|
// ConcatDeleteOp
|
|
|
- next = waitForNextEvent(eis);
|
|
|
- Assert.assertTrue(next.getEventType() == Event.EventType.APPEND);
|
|
|
- Assert.assertTrue(((Event.AppendEvent) next).getPath().equals("/file2"));
|
|
|
- next = waitForNextEvent(eis);
|
|
|
- Assert.assertTrue(next.getEventType() == Event.EventType.UNLINK);
|
|
|
- Event.UnlinkEvent ue2 = (Event.UnlinkEvent) next;
|
|
|
+ batch = waitForNextEvents(eis);
|
|
|
+ Assert.assertEquals(3, batch.getEvents().length);
|
|
|
+ txid = checkTxid(batch, txid);
|
|
|
+ Assert.assertTrue(batch.getEvents()[0].getEventType() == Event.EventType.APPEND);
|
|
|
+ Assert.assertTrue(((Event.AppendEvent) batch.getEvents()[0]).getPath().equals("/file2"));
|
|
|
+ Assert.assertTrue(batch.getEvents()[1].getEventType() == Event.EventType.UNLINK);
|
|
|
+ Event.UnlinkEvent ue2 = (Event.UnlinkEvent) batch.getEvents()[1];
|
|
|
Assert.assertTrue(ue2.getPath().equals("/file3"));
|
|
|
Assert.assertTrue(ue2.getTimestamp() > 0);
|
|
|
- next = waitForNextEvent(eis);
|
|
|
- Assert.assertTrue(next.getEventType() == Event.EventType.CLOSE);
|
|
|
- Event.CloseEvent ce3 = (Event.CloseEvent) next;
|
|
|
+ Assert.assertTrue(batch.getEvents()[2].getEventType() == Event.EventType.CLOSE);
|
|
|
+ Event.CloseEvent ce3 = (Event.CloseEvent) batch.getEvents()[2];
|
|
|
Assert.assertTrue(ce3.getPath().equals("/file2"));
|
|
|
Assert.assertTrue(ce3.getTimestamp() > 0);
|
|
|
|
|
|
// DeleteOp
|
|
|
- next = waitForNextEvent(eis);
|
|
|
- Assert.assertTrue(next.getEventType() == Event.EventType.UNLINK);
|
|
|
- Event.UnlinkEvent ue = (Event.UnlinkEvent) next;
|
|
|
+ batch = waitForNextEvents(eis);
|
|
|
+ Assert.assertEquals(1, batch.getEvents().length);
|
|
|
+ txid = checkTxid(batch, txid);
|
|
|
+ Assert.assertTrue(batch.getEvents()[0].getEventType() == Event.EventType.UNLINK);
|
|
|
+ Event.UnlinkEvent ue = (Event.UnlinkEvent) batch.getEvents()[0];
|
|
|
Assert.assertTrue(ue.getPath().equals("/file2"));
|
|
|
Assert.assertTrue(ue.getTimestamp() > 0);
|
|
|
|
|
|
// MkdirOp
|
|
|
- next = waitForNextEvent(eis);
|
|
|
- Assert.assertTrue(next.getEventType() == Event.EventType.CREATE);
|
|
|
- Event.CreateEvent ce4 = (Event.CreateEvent) next;
|
|
|
+ batch = waitForNextEvents(eis);
|
|
|
+ Assert.assertEquals(1, batch.getEvents().length);
|
|
|
+ txid = checkTxid(batch, txid);
|
|
|
+ Assert.assertTrue(batch.getEvents()[0].getEventType() == Event.EventType.CREATE);
|
|
|
+ Event.CreateEvent ce4 = (Event.CreateEvent) batch.getEvents()[0];
|
|
|
Assert.assertTrue(ce4.getiNodeType() ==
|
|
|
Event.CreateEvent.INodeType.DIRECTORY);
|
|
|
Assert.assertTrue(ce4.getPath().equals("/dir"));
|
|
@@ -227,18 +254,22 @@ public class TestDFSInotifyEventInputStream {
|
|
|
Assert.assertTrue(ce4.getSymlinkTarget() == null);
|
|
|
|
|
|
// SetPermissionsOp
|
|
|
- next = waitForNextEvent(eis);
|
|
|
- Assert.assertTrue(next.getEventType() == Event.EventType.METADATA);
|
|
|
- Event.MetadataUpdateEvent mue3 = (Event.MetadataUpdateEvent) next;
|
|
|
+ batch = waitForNextEvents(eis);
|
|
|
+ Assert.assertEquals(1, batch.getEvents().length);
|
|
|
+ txid = checkTxid(batch, txid);
|
|
|
+ Assert.assertTrue(batch.getEvents()[0].getEventType() == Event.EventType.METADATA);
|
|
|
+ Event.MetadataUpdateEvent mue3 = (Event.MetadataUpdateEvent) batch.getEvents()[0];
|
|
|
Assert.assertTrue(mue3.getPath().equals("/dir"));
|
|
|
Assert.assertTrue(mue3.getMetadataType() ==
|
|
|
Event.MetadataUpdateEvent.MetadataType.PERMS);
|
|
|
Assert.assertTrue(mue3.getPerms().toString().contains("rw-rw-rw-"));
|
|
|
|
|
|
// SetOwnerOp
|
|
|
- next = waitForNextEvent(eis);
|
|
|
- Assert.assertTrue(next.getEventType() == Event.EventType.METADATA);
|
|
|
- Event.MetadataUpdateEvent mue4 = (Event.MetadataUpdateEvent) next;
|
|
|
+ batch = waitForNextEvents(eis);
|
|
|
+ Assert.assertEquals(1, batch.getEvents().length);
|
|
|
+ txid = checkTxid(batch, txid);
|
|
|
+ Assert.assertTrue(batch.getEvents()[0].getEventType() == Event.EventType.METADATA);
|
|
|
+ Event.MetadataUpdateEvent mue4 = (Event.MetadataUpdateEvent) batch.getEvents()[0];
|
|
|
Assert.assertTrue(mue4.getPath().equals("/dir"));
|
|
|
Assert.assertTrue(mue4.getMetadataType() ==
|
|
|
Event.MetadataUpdateEvent.MetadataType.OWNER);
|
|
@@ -246,9 +277,11 @@ public class TestDFSInotifyEventInputStream {
|
|
|
Assert.assertTrue(mue4.getGroupName().equals("groupname"));
|
|
|
|
|
|
// SymlinkOp
|
|
|
- next = waitForNextEvent(eis);
|
|
|
- Assert.assertTrue(next.getEventType() == Event.EventType.CREATE);
|
|
|
- Event.CreateEvent ce5 = (Event.CreateEvent) next;
|
|
|
+ batch = waitForNextEvents(eis);
|
|
|
+ Assert.assertEquals(1, batch.getEvents().length);
|
|
|
+ txid = checkTxid(batch, txid);
|
|
|
+ Assert.assertTrue(batch.getEvents()[0].getEventType() == Event.EventType.CREATE);
|
|
|
+ Event.CreateEvent ce5 = (Event.CreateEvent) batch.getEvents()[0];
|
|
|
Assert.assertTrue(ce5.getiNodeType() ==
|
|
|
Event.CreateEvent.INodeType.SYMLINK);
|
|
|
Assert.assertTrue(ce5.getPath().equals("/dir2"));
|
|
@@ -257,9 +290,11 @@ public class TestDFSInotifyEventInputStream {
|
|
|
Assert.assertTrue(ce5.getSymlinkTarget().equals("/dir"));
|
|
|
|
|
|
// SetXAttrOp
|
|
|
- next = waitForNextEvent(eis);
|
|
|
- Assert.assertTrue(next.getEventType() == Event.EventType.METADATA);
|
|
|
- Event.MetadataUpdateEvent mue5 = (Event.MetadataUpdateEvent) next;
|
|
|
+ batch = waitForNextEvents(eis);
|
|
|
+ Assert.assertEquals(1, batch.getEvents().length);
|
|
|
+ txid = checkTxid(batch, txid);
|
|
|
+ Assert.assertTrue(batch.getEvents()[0].getEventType() == Event.EventType.METADATA);
|
|
|
+ Event.MetadataUpdateEvent mue5 = (Event.MetadataUpdateEvent) batch.getEvents()[0];
|
|
|
Assert.assertTrue(mue5.getPath().equals("/file5"));
|
|
|
Assert.assertTrue(mue5.getMetadataType() ==
|
|
|
Event.MetadataUpdateEvent.MetadataType.XATTRS);
|
|
@@ -268,9 +303,11 @@ public class TestDFSInotifyEventInputStream {
|
|
|
Assert.assertTrue(!mue5.isxAttrsRemoved());
|
|
|
|
|
|
// RemoveXAttrOp
|
|
|
- next = waitForNextEvent(eis);
|
|
|
- Assert.assertTrue(next.getEventType() == Event.EventType.METADATA);
|
|
|
- Event.MetadataUpdateEvent mue6 = (Event.MetadataUpdateEvent) next;
|
|
|
+ batch = waitForNextEvents(eis);
|
|
|
+ Assert.assertEquals(1, batch.getEvents().length);
|
|
|
+ txid = checkTxid(batch, txid);
|
|
|
+ Assert.assertTrue(batch.getEvents()[0].getEventType() == Event.EventType.METADATA);
|
|
|
+ Event.MetadataUpdateEvent mue6 = (Event.MetadataUpdateEvent) batch.getEvents()[0];
|
|
|
Assert.assertTrue(mue6.getPath().equals("/file5"));
|
|
|
Assert.assertTrue(mue6.getMetadataType() ==
|
|
|
Event.MetadataUpdateEvent.MetadataType.XATTRS);
|
|
@@ -279,9 +316,11 @@ public class TestDFSInotifyEventInputStream {
|
|
|
Assert.assertTrue(mue6.isxAttrsRemoved());
|
|
|
|
|
|
// SetAclOp (1)
|
|
|
- next = waitForNextEvent(eis);
|
|
|
- Assert.assertTrue(next.getEventType() == Event.EventType.METADATA);
|
|
|
- Event.MetadataUpdateEvent mue7 = (Event.MetadataUpdateEvent) next;
|
|
|
+ batch = waitForNextEvents(eis);
|
|
|
+ Assert.assertEquals(1, batch.getEvents().length);
|
|
|
+ txid = checkTxid(batch, txid);
|
|
|
+ Assert.assertTrue(batch.getEvents()[0].getEventType() == Event.EventType.METADATA);
|
|
|
+ Event.MetadataUpdateEvent mue7 = (Event.MetadataUpdateEvent) batch.getEvents()[0];
|
|
|
Assert.assertTrue(mue7.getPath().equals("/file5"));
|
|
|
Assert.assertTrue(mue7.getMetadataType() ==
|
|
|
Event.MetadataUpdateEvent.MetadataType.ACLS);
|
|
@@ -289,9 +328,11 @@ public class TestDFSInotifyEventInputStream {
|
|
|
AclEntry.parseAclEntry("user::rwx", true)));
|
|
|
|
|
|
// SetAclOp (2)
|
|
|
- next = waitForNextEvent(eis);
|
|
|
- Assert.assertTrue(next.getEventType() == Event.EventType.METADATA);
|
|
|
- Event.MetadataUpdateEvent mue8 = (Event.MetadataUpdateEvent) next;
|
|
|
+ batch = waitForNextEvents(eis);
|
|
|
+ Assert.assertEquals(1, batch.getEvents().length);
|
|
|
+ txid = checkTxid(batch, txid);
|
|
|
+ Assert.assertTrue(batch.getEvents()[0].getEventType() == Event.EventType.METADATA);
|
|
|
+ Event.MetadataUpdateEvent mue8 = (Event.MetadataUpdateEvent) batch.getEvents()[0];
|
|
|
Assert.assertTrue(mue8.getPath().equals("/file5"));
|
|
|
Assert.assertTrue(mue8.getMetadataType() ==
|
|
|
Event.MetadataUpdateEvent.MetadataType.ACLS);
|
|
@@ -305,7 +346,7 @@ public class TestDFSInotifyEventInputStream {
|
|
|
// and we should not have been behind at all when eventsBehind was set
|
|
|
// either, since there were few enough events that they should have all
|
|
|
// been read to the client during the first poll() call
|
|
|
- Assert.assertTrue(eis.getEventsBehindEstimate() == eventsBehind);
|
|
|
+ Assert.assertTrue(eis.getTxidsBehindEstimate() == eventsBehind);
|
|
|
|
|
|
} finally {
|
|
|
cluster.shutdown();
|
|
@@ -329,13 +370,14 @@ public class TestDFSInotifyEventInputStream {
|
|
|
}
|
|
|
cluster.getDfsCluster().shutdownNameNode(0);
|
|
|
cluster.getDfsCluster().transitionToActive(1);
|
|
|
- Event next = null;
|
|
|
+ EventBatch batch = null;
|
|
|
// we can read all of the edits logged by the old active from the new
|
|
|
// active
|
|
|
for (int i = 0; i < 10; i++) {
|
|
|
- next = waitForNextEvent(eis);
|
|
|
- Assert.assertTrue(next.getEventType() == Event.EventType.CREATE);
|
|
|
- Assert.assertTrue(((Event.CreateEvent) next).getPath().equals("/dir" +
|
|
|
+ batch = waitForNextEvents(eis);
|
|
|
+ Assert.assertEquals(1, batch.getEvents().length);
|
|
|
+ Assert.assertTrue(batch.getEvents()[0].getEventType() == Event.EventType.CREATE);
|
|
|
+ Assert.assertTrue(((Event.CreateEvent) batch.getEvents()[0]).getPath().equals("/dir" +
|
|
|
i));
|
|
|
}
|
|
|
Assert.assertTrue(eis.poll() == null);
|
|
@@ -369,11 +411,12 @@ public class TestDFSInotifyEventInputStream {
|
|
|
// make sure that the old active can't read any further than the edits
|
|
|
// it logged itself (it has no idea whether the in-progress edits from
|
|
|
// the other writer have actually been committed)
|
|
|
- Event next = null;
|
|
|
+ EventBatch batch = null;
|
|
|
for (int i = 0; i < 10; i++) {
|
|
|
- next = waitForNextEvent(eis);
|
|
|
- Assert.assertTrue(next.getEventType() == Event.EventType.CREATE);
|
|
|
- Assert.assertTrue(((Event.CreateEvent) next).getPath().equals("/dir" +
|
|
|
+ batch = waitForNextEvents(eis);
|
|
|
+ Assert.assertEquals(1, batch.getEvents().length);
|
|
|
+ Assert.assertTrue(batch.getEvents()[0].getEventType() == Event.EventType.CREATE);
|
|
|
+ Assert.assertTrue(((Event.CreateEvent) batch.getEvents()[0]).getPath().equals("/dir" +
|
|
|
i));
|
|
|
}
|
|
|
Assert.assertTrue(eis.poll() == null);
|
|
@@ -414,13 +457,13 @@ public class TestDFSInotifyEventInputStream {
|
|
|
}, 1, TimeUnit.SECONDS);
|
|
|
// a very generous wait period -- the edit will definitely have been
|
|
|
// processed by the time this is up
|
|
|
- Event next = eis.poll(5, TimeUnit.SECONDS);
|
|
|
- Assert.assertTrue(next != null);
|
|
|
- Assert.assertTrue(next.getEventType() == Event.EventType.CREATE);
|
|
|
- Assert.assertTrue(((Event.CreateEvent) next).getPath().equals("/dir"));
|
|
|
+ EventBatch batch = eis.poll(5, TimeUnit.SECONDS);
|
|
|
+ Assert.assertNotNull(batch);
|
|
|
+ Assert.assertEquals(1, batch.getEvents().length);
|
|
|
+ Assert.assertTrue(batch.getEvents()[0].getEventType() == Event.EventType.CREATE);
|
|
|
+ Assert.assertEquals("/dir", ((Event.CreateEvent) batch.getEvents()[0]).getPath());
|
|
|
} finally {
|
|
|
cluster.shutdown();
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
}
|