You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sentry.apache.org by ak...@apache.org on 2017/09/09 07:15:57 UTC
sentry git commit: SENTRY-1939 Resetting the CounterWait during full
snapshot has to be handled across all sentry servers (Vamsee Yarlagadda,
reviewed by Alex Kolbasov)
Repository: sentry
Updated Branches:
refs/heads/master a7a2d69c7 -> bab5063c6
SENTRY-1939 Resetting the CounterWait during full snapshot has to be handled across all sentry servers (Vamsee Yarlagadda, reviewed by Alex Kolbasov)
Project: http://git-wip-us.apache.org/repos/asf/sentry/repo
Commit: http://git-wip-us.apache.org/repos/asf/sentry/commit/bab5063c
Tree: http://git-wip-us.apache.org/repos/asf/sentry/tree/bab5063c
Diff: http://git-wip-us.apache.org/repos/asf/sentry/diff/bab5063c
Branch: refs/heads/master
Commit: bab5063c637ad0b258afc21ac217b5eb42bb11e7
Parents: a7a2d69
Author: Alexander Kolbasov <ak...@gmail.com>
Authored: Sat Sep 9 00:15:33 2017 -0700
Committer: Alexander Kolbasov <ak...@gmail.com>
Committed: Sat Sep 9 00:15:33 2017 -0700
----------------------------------------------------------------------
.../sentry/service/thrift/HMSFollower.java | 43 ++++++++++++--------
1 file changed, 27 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/sentry/blob/bab5063c/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/service/thrift/HMSFollower.java
----------------------------------------------------------------------
diff --git a/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/service/thrift/HMSFollower.java b/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/service/thrift/HMSFollower.java
index b600487..31fd459 100644
--- a/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/service/thrift/HMSFollower.java
+++ b/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/service/thrift/HMSFollower.java
@@ -55,6 +55,12 @@ public class HMSFollower implements Runnable, AutoCloseable {
private final LeaderStatusMonitor leaderMonitor;
/**
+ * Current generation of HMS snapshots. HMSFollower is single-threaded, so no need
+ * to protect against concurrent modification.
+ */
+ private long hmsImageId = SentryStore.EMPTY_PATHS_SNAPSHOT_ID;
+
+ /**
* Configuring Hms Follower thread.
*
* @param conf sentry configuration
@@ -312,8 +318,6 @@ public class HMSFollower implements Runnable, AutoCloseable {
// We need to persist latest notificationID for next poll
sentryStore.setLastProcessedNotificationID(snapshotInfo.getId());
}
- // Only reset the counter if the above operations succeeded
- resetCounterWait(snapshotInfo.getId());
} catch (Exception failure) {
LOGGER.error("Received exception while persisting HMS path full snapshot ");
throw failure;
@@ -386,7 +390,11 @@ public class HMSFollower implements Runnable, AutoCloseable {
}
/**
- * Wakes up HMS waiters waiting for a specific event notification.
+ * Wakes up HMS waiters waiting for a specific event notification.<p>
+ *
+ * Verify that HMS image id didn't change since the last time we looked.
+ * If id did, it is possible that notifications jumped backward, so reset
+ * the counter to the current value.
*
* @param eventId Id of a notification
*/
@@ -396,23 +404,26 @@ public class HMSFollower implements Runnable, AutoCloseable {
// Wake up any HMS waiters that are waiting for this ID.
// counterWait should never be null, but tests mock SentryStore and a mocked one
// doesn't have it.
- if (counterWait != null) {
- counterWait.update(eventId);
+ if (counterWait == null) {
+ return;
}
- }
- /**
- * Reset CounterWait counter to the new value
- * @param eventId new event id value, may be smaller then the old value.
- */
- private void resetCounterWait(long eventId) {
- CounterWait counterWait = sentryStore.getCounterWait();
+ long lastHMSSnapshotId = hmsImageId;
+ try {
+ // Read actual HMS image ID
+ lastHMSSnapshotId = sentryStore.getLastProcessedImageID();
+ } catch (Exception e) {
+ counterWait.update(eventId);
+ LOGGER.error("Failed to get the last processed HMS image id from sentry store");
+ return;
+ }
- // Wake up any HMS waiters that are waiting for this ID.
- // counterWait should never be null, but tests mock SentryStore and a mocked one
- // doesn't have it.
- if (counterWait != null) {
+ // Reset the counter if the persisted image ID is greater than current image ID
+ if (lastHMSSnapshotId > hmsImageId) {
counterWait.reset(eventId);
+ hmsImageId = lastHMSSnapshotId;
}
+
+ counterWait.update(eventId);
}
}