private void takeOverJobs(String mgmtId) { GLock lock = new GLock(ORPHAN_JOB_LOCK_NAME, LOCK_TIMEOUT); lock.lock(); try { logger.debug(String.format("management node[id:%s] starts taking over jobs of left management node[%s]", Platform.getManagementServerId(), mgmtId)); SimpleQuery<JobQueueVO> qq = dbf.createQuery(JobQueueVO.class); qq.add(JobQueueVO_.workerManagementNodeId, SimpleQuery.Op.NULL); List<JobQueueVO> queues = qq.list(); logger.debug(String.format("[Orphan Queue found]: management node is going to take over %s orphan queues", queues.size())); for (JobQueueVO queue : queues) { restartQueue(queue, mgmtId); } } finally { lock.unlock(); } }
@Override public void run(final SyncTaskChain chain) { final GLock lock = new GLock(syncName, TimeUnit.HOURS.toSeconds(1)); lock.setAlsoUseMemoryLock(false); lock.lock(); acquireVirtualRouterVmInternal(struct, new ReturnValueCompletion<VirtualRouterVmInventory>(chain, completion) { @Override public void success(VirtualRouterVmInventory returnValue) { lock.unlock(); completion.success(returnValue); chain.next(); } @Override public void fail(ErrorCode errorCode) { lock.unlock(); completion.fail(errorCode); chain.next(); } }); }
public void lock() { if (alsoUseMemoryLock) { checkInThread(); checkOutThread();
@Deferred public JsonLabelInventory createIfAbsent(String key, Object obj, String resourceUuid) { GLock lock = new GLock(LOCK, TimeUnit.MINUTES.toSeconds(2)); lock.lock(); Defer.defer(lock::unlock); SimpleQuery<JsonLabelVO> q = dbf.createQuery(JsonLabelVO.class); q.add(JsonLabelVO_.labelKey, Op.EQ, key); JsonLabelVO vo = q.find(); return vo == null ? create(key, obj, resourceUuid) : JsonLabelInventory.valueOf(vo); }