SENTRY-2477: When requesting for deltas check if nn seq num is 1 more than latest sequence num (Arjun Mishra reviewed by Na Li)
diff --git a/sentry-hdfs/sentry-hdfs-service/src/main/java/org/apache/sentry/hdfs/DBUpdateForwarder.java b/sentry-hdfs/sentry-hdfs-service/src/main/java/org/apache/sentry/hdfs/DBUpdateForwarder.java
index 08b16a4..67fece1 100644
--- a/sentry-hdfs/sentry-hdfs-service/src/main/java/org/apache/sentry/hdfs/DBUpdateForwarder.java
+++ b/sentry-hdfs/sentry-hdfs-service/src/main/java/org/apache/sentry/hdfs/DBUpdateForwarder.java
@@ -117,7 +117,7 @@
long curSeqNum = deltaRetriever.getLatestDeltaID();
LOGGER.debug("({}) Current sequence number is {}", retrieverType, curSeqNum);
- if (seqNum > curSeqNum) {
+ if (seqNum == curSeqNum + 1) {
// No new notifications were processed.
LOGGER.debug("{}, No new updates", retrieverType);
return Collections.emptyList();
diff --git a/sentry-hdfs/sentry-hdfs-service/src/test/java/org/apache/sentry/hdfs/TestDBUpdateForwarder.java b/sentry-hdfs/sentry-hdfs-service/src/test/java/org/apache/sentry/hdfs/TestDBUpdateForwarder.java
index f86ce6f..35cfb63 100644
--- a/sentry-hdfs/sentry-hdfs-service/src/test/java/org/apache/sentry/hdfs/TestDBUpdateForwarder.java
+++ b/sentry-hdfs/sentry-hdfs-service/src/test/java/org/apache/sentry/hdfs/TestDBUpdateForwarder.java
@@ -92,6 +92,15 @@
}
@Test
+ public void testEmptyListReturnedWhenImageSeqIsEqualToLatest() throws Exception {
+ Mockito.when(imageRetriever.getLatestImageID()).thenReturn(1L);
+ Mockito.when(deltaRetriever.getLatestDeltaID()).thenReturn(10L);
+
+ List<PathsUpdate> updates = updater.getAllUpdatesFrom(11, 1);
+ assertTrue(updates.isEmpty());
+ }
+
+ @Test
public void testFirstImageSyncIsReturnedWhenImageNumIsZero() throws Exception {
Mockito.when(imageRetriever.getLatestImageID()).thenReturn(1L);
Mockito.when(imageRetriever.retrieveFullImage())
@@ -143,6 +152,21 @@
}
@Test
+ public void testNewImageUpdateIsReturnedWhenImageSeqIsGreaterThanLatestSeqByOne() throws Exception {
+ Mockito.when(imageRetriever.getLatestImageID()).thenReturn(1L);
+ Mockito.when(deltaRetriever.getLatestDeltaID()).thenReturn(10L);
+ Mockito.when(deltaRetriever.isDeltaAvailable(15)).thenReturn(false);
+ Mockito.when(imageRetriever.retrieveFullImage())
+ .thenReturn(new PathsUpdate(10, 1, true));
+
+ List<PathsUpdate> updates = updater.getAllUpdatesFrom(15, 1);
+ assertEquals(1, updates.size());
+ assertEquals(10, updates.get(0).getSeqNum());
+ assertEquals(1, updates.get(0).getImgNum());
+ assertTrue(updates.get(0).hasFullImage());
+ }
+
+ @Test
public void testNewImageUpdateIsReturnedWhenRequestedDeltaIsNotAvailable() throws Exception {
Mockito.when(imageRetriever.getLatestImageID()).thenReturn(1L);
Mockito.when(deltaRetriever.getLatestDeltaID()).thenReturn(3L);