private boolean lockDag(@NotEmpty final String jobName, @NotEmpty final String dagName) { final String key = LockManager.getLockKey(DAG_LOCK_KEY, dagName); final TimerMetric timerMetric = new TimerMetric(JobMetricNames.JOB_DAG_LOCK_TIME_MS, ImmutableMap.of( JOB_FREQUENCY_TAG, jobFrequency, JOB_NAME_TAG, jobName, DATA_FEED_TAG, dagName)); final boolean success = lockManager.lock(key, String.format("JobDag %s AppId %s", dagName, appId)); timerMetric.stop(); dagTimerMetricMap.put(dagName, timerMetric); return success; }
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<>(); }
@Test public void testLockKeyGen() throws Exception { final String lockKey = LockManager.getLockKey("part1", "part2", "part3"); assertEquals("/part1/part2/part3", lockKey); }
@Test public void testLockLostNode() throws Exception { final MultiThreadTestCoordinator coordinator = new MultiThreadTestCoordinator(); final String key2 = LockManager.getLockKey("test_lock", "key2"); final String FAIL_MESSAGE = "Failing on purpose";
@Test public void testBatchLock() throws Exception { final String key1 = LockManager.getLockKey("test_lock", "batchkey1"); final String key2 = LockManager.getLockKey("test_lock", "batchkey2"); final List<String> lockKeyList = Arrays.asList(key1, key2);
@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); } }
final String key1 = LockManager.getLockKey("test_lock", "key1");