private JobLockManager(@NonNull final Configuration conf, @NotEmpty final String frequency, final boolean shouldLockFrequency) { this.lockManager = new LockManager(conf); this.jobFrequency = frequency; final String key = LockManager.getLockKey(MANAGER_LOCK_KEY, jobFrequency); this.managerTimerMetric = new TimerMetric(JobMetricNames.JOB_MANAGER_LOCK_TIME_MS, ImmutableMap.of(JOB_FREQUENCY_TAG, jobFrequency, JOB_NAME_TAG, appName)); if (shouldLockFrequency) { final boolean success = lockManager.lock(key, String.format("JobManager %s AppId %s", jobFrequency, appId)); this.managerTimerMetric.stop(); if (!success) { lockManager.close(); throw new IllegalStateException("Failed to obtain lock for JobManager " + jobFrequency); } } else { managerTimerMetric.stop(); log.info("Frequency lock disabled"); } this.dagTimerMetricMap = new HashMap<>(); }
@Override public Void call() throws Exception { try (final LockManager lockManager = new LockManager(conf)) { coordinator.waitUntilStep(2); assertTrue(lockManager.lock(key2,"")); } coordinator.nextStep(); return null; } };
final List<String> lockKeyList = Arrays.asList(key1, key2); try (final LockManager lockManager = new LockManager(conf)) { assertTrue(lockManager.batchLock(lockKeyList, ""));
result2.get(); final LockManager lockManager = new LockManager(conf); coordinator.waitUntilStep(4); assertTrue(lockManager.lock(key1, ""));
@Test public void testLockInfo() throws Exception { final String LOCK_INFO = "This is the information in the lock"; final String key1 = LockManager.getLockKey("test_lock", "key1"); try (final LockManager lockManager = new LockManager(conf)) { assertTrue(lockManager.lock(key1, LOCK_INFO)); final LockManagerConfiguration lockConf = new LockManagerConfiguration(conf); final ZookeeperConfiguration zkConf = new ZookeeperConfiguration(conf); final CuratorFramework client = CuratorFrameworkFactory.builder() .connectString(zkConf.getZkQuorum()) .retryPolicy(new BoundedExponentialBackoffRetry(1000, 5000, 3)) .namespace(lockConf.getZkBasePath()) .sessionTimeoutMs(lockConf.getZkSessionTimeoutMs()) .connectionTimeoutMs(lockConf.getZkConnectionTimeoutMs()) .build(); client.start(); final String node = client.getChildren().forPath(key1).get(0); final String data = new String(client.getData().forPath(key1 + "/" + node)); assertEquals(LOCK_INFO, data); client.close(); lockManager.unlock(key1); } }
@Override public Void call() throws Exception { final LockManager lockManager = new LockManager(conf); try { coordinator.waitUntilStep(0); assertTrue(lockManager.lock(key2, "")); coordinator.nextStep(); coordinator.waitUntilStep(2); throw new Exception(FAIL_MESSAGE); } finally { lockManager.close(); coordinator.nextStep(); } } };
@Override public Void call() throws Exception { try (final LockManager lockManager = new LockManager(conf)) { coordinator.waitUntilStep(0); assertTrue(lockManager.lock(key1, "")); coordinator.nextStep(); coordinator.waitUntilStep(3); } coordinator.nextStep(); return null; } };
@Override public Void call() throws Exception { try (final LockManager lockManager = new LockManager(conf)) { coordinator.waitUntilStep(1); assertFalse(lockManager.lock(key2, "")); coordinator.nextStep(); coordinator.waitUntilStep(3); assertTrue(lockManager.lock(key2, "")); coordinator.nextStep(); return null; } } };
@Override public Void call() throws Exception { try (final LockManager lockManager = new LockManager(conf)) { coordinator.waitUntilStep(1); assertFalse(lockManager.batchLock(lockKeyList, "")); coordinator.nextStep(); coordinator.waitUntilStep(4); assertTrue(lockManager.batchLock(lockKeyList, "")); coordinator.nextStep(); } return null; } };
@Override public Void call() throws Exception { try (final LockManager lockManager = new LockManager(conf)) { coordinator.waitUntilStep(0); assertTrue(lockManager.lock(key1, "")); coordinator.nextStep(); coordinator.waitUntilStep(2); assertTrue(lockManager.unlock(key1)); } finally { coordinator.nextStep(); return null; } } };
@Override public Void call() throws Exception { try (final LockManager lockManager = new LockManager(conf)) { coordinator.waitUntilStep(1); assertFalse(lockManager.lock(key1, "")); coordinator.nextStep(); coordinator.waitUntilStep(3); assertTrue(lockManager.lock(key1, "")); } finally { coordinator.nextStep(); return null; } } };