[ https://issues.apache.org/jira/browse/OOZIE-2501?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15400259#comment-15400259 ]
Hadoop QA commented on OOZIE-2501: ---------------------------------- Testing JIRA OOZIE-2501 Cleaning local git workspace ---------------------------- {color:green}+1 PATCH_APPLIES{color} {color:green}+1 CLEAN{color} {color:green}+1 RAW_PATCH_ANALYSIS{color} . {color:green}+1{color} the patch does not introduce any @author tags . {color:green}+1{color} the patch does not introduce any tabs . {color:green}+1{color} the patch does not introduce any trailing spaces . {color:green}+1{color} the patch does not introduce any line longer than 132 . {color:green}+1{color} the patch does adds/modifies 2 testcase(s) {color:green}+1 RAT{color} . {color:green}+1{color} the patch does not seem to introduce new RAT warnings {color:green}+1 JAVADOC{color} . {color:green}+1{color} the patch does not seem to introduce new Javadoc warnings {color:red}-1 COMPILE{color} . {color:red}-1{color} HEAD does not compile . {color:red}-1{color} patch does not compile . {color:green}+1{color} the patch does not seem to introduce new javac warnings {color:green}+1 BACKWARDS_COMPATIBILITY{color} . {color:green}+1{color} the patch does not change any JPA Entity/Colum/Basic/Lob/Transient annotations . {color:green}+1{color} the patch does not modify JPA files {color:red}-1 TESTS{color} . Tests run: 1795 . Tests failed: 130 . Tests errors: 323 . The patch failed the following testcases: . testCoordKillXCommandUniqueness(org.apache.oozie.command.coord.TestCoordKillXCommand) . testCoordKillRemovePushMissingDeps(org.apache.oozie.command.coord.TestCoordKillXCommand) . testTimeoutTimingOutWriteLockThreads(org.apache.oozie.service.TestZKLocksService) . testTimeoutTimingOutWriteLockOozies(org.apache.oozie.service.TestZKLocksService) . testReadLockThreads(org.apache.oozie.service.TestZKLocksService) . testReadLockOozies(org.apache.oozie.service.TestZKLocksService) . testReadWriteLockThreads(org.apache.oozie.service.TestZKLocksService) . testReadWriteLockOozies(org.apache.oozie.service.TestZKLocksService) . testWriteReadLockThreads(org.apache.oozie.service.TestZKLocksService) . testWriteReadLockOozies(org.apache.oozie.service.TestZKLocksService) . testReentrantMultipleCall(org.apache.oozie.service.TestZKLocksService) . testWaitWriteLockThreads(org.apache.oozie.service.TestZKLocksService) . testWaitWriteLockOozies(org.apache.oozie.service.TestZKLocksService) . testNoWaitWriteLockThreads(org.apache.oozie.service.TestZKLocksService) . testNoWaitWriteLockOozies(org.apache.oozie.service.TestZKLocksService) . testTimeoutWaitingWriteLockThreads(org.apache.oozie.service.TestZKLocksService) . testTimeoutWaitingWriteLockOozies(org.apache.oozie.service.TestZKLocksService) . testInterrupt(org.apache.oozie.service.TestCallableQueueService) . testInterruptsWithCompositeCallable(org.apache.oozie.service.TestCallableQueueService) . testInterruptsInCompositeCallable(org.apache.oozie.service.TestCallableQueueService) . testInterruptsWithDistinguishedLockKeys(org.apache.oozie.service.TestCallableQueueService) . testMaxInterruptMapSize(org.apache.oozie.service.TestCallableQueueService) . testFsFailover(org.apache.oozie.action.TestActionFailover) . testTimeOutWithException1(org.apache.oozie.command.coord.TestCoordPushDependencyCheckXCommand) . testRequeueOnException(org.apache.oozie.command.coord.TestCoordPushDependencyCheckXCommand) . testEngine(org.apache.oozie.command.coord.TestFutureActionsTimeOut) . testCoordStatusTransitServiceSuspendedBottomUp(org.apache.oozie.service.TestStatusTransitService) . testCoordStatusTransitServiceBackwardSupport(org.apache.oozie.service.TestStatusTransitService) . testCoordStatusTransitServiceRunning3(org.apache.oozie.service.TestStatusTransitService) . testBundleStatusTransitServiceForTerminalStates(org.apache.oozie.service.TestStatusTransitService) . testCoordStatusTransitServiceSuspendedByUser(org.apache.oozie.service.TestStatusTransitService) . testCoordStatusTransitServiceRunning1(org.apache.oozie.service.TestStatusTransitService) . testCoordStatusTransitServiceKilledByUser2(org.apache.oozie.service.TestStatusTransitService) . testBundleStatusTransitServicePausedWithError(org.apache.oozie.service.TestStatusTransitService) . testBundleStatusTransitServiceKilled2(org.apache.oozie.service.TestStatusTransitService) . testBundleStatusTransitServiceSucceeded1(org.apache.oozie.service.TestStatusTransitService) . testCoordStatusTransitServicePaused(org.apache.oozie.service.TestStatusTransitService) . testBundleStatusTransitServicePaused(org.apache.oozie.service.TestStatusTransitService) . testBundleStatusTransitServiceSuspendedWithError(org.apache.oozie.service.TestStatusTransitService) . testCoordStatusTransitServiceRunning2(org.apache.oozie.service.TestStatusTransitService) . testBundleStatusTransitServiceSucceeded2(org.apache.oozie.service.TestStatusTransitService) . testCoordStatusTransitServicePausedWithError(org.apache.oozie.service.TestStatusTransitService) . testCoordStatusTransitServiceSucceeded(org.apache.oozie.service.TestStatusTransitService) . testCoordStatusTransitServiceDoneWithError(org.apache.oozie.service.TestStatusTransitService) . testCoordStatusTransitServiceSuspendedWithError(org.apache.oozie.service.TestStatusTransitService) . testCoordStatusTransitServiceForTimeout(org.apache.oozie.service.TestStatusTransitService) . testCoordStatusTransitServiceStaleCoordActions(org.apache.oozie.service.TestStatusTransitService) . testBundleStatusTransitRunningFromKilled(org.apache.oozie.service.TestStatusTransitService) . testBundleStatusTransitRunningWithError(org.apache.oozie.service.TestStatusTransitService) . testBundleStatusCoordSubmitFails(org.apache.oozie.service.TestStatusTransitService) . testSLAUpdateWithHA(org.apache.oozie.service.TestHASLAService) . testOnJobEvent(org.apache.oozie.sla.TestSLAJobEventListener) . testXCommandLifecycleLockingFailingToLock(org.apache.oozie.command.TestXCommand) . testActionCheckerServiceCoord(org.apache.oozie.service.TestActionCheckerService) . testBundleChangeReport(org.apache.oozie.command.bundle.TestBundleChangeXCommand) . testCheckBundleActionStatus(org.apache.oozie.command.bundle.TestBundleChangeXCommand) . testLoadOnRestart(org.apache.oozie.sla.TestSLACalculatorMemory) . testWorkflowJobSLAStatusOnRestart(org.apache.oozie.sla.TestSLACalculatorMemory) . testEventMissOnRestart(org.apache.oozie.sla.TestSLACalculatorMemory) . testSLAEvents1(org.apache.oozie.sla.TestSLACalculatorMemory) . testSLAEvents2(org.apache.oozie.sla.TestSLACalculatorMemory) . testDuplicateStartMiss(org.apache.oozie.sla.TestSLACalculatorMemory) . testDuplicateEndMiss(org.apache.oozie.sla.TestSLACalculatorMemory) . testDisablingAlertsEvents(org.apache.oozie.sla.TestSLACalculatorMemory) . testEventOutOfOrder(org.apache.oozie.sla.TestSLACalculatorMemory) . testChangeTimeDeleteRunning(org.apache.oozie.command.coord.TestCoordChangeXCommand) . testCoordStatus_Failed(org.apache.oozie.command.coord.TestCoordChangeXCommand) . testCoordStatus_Killed(org.apache.oozie.command.coord.TestCoordChangeXCommand) . testCoordStatus_Changefailed(org.apache.oozie.command.coord.TestCoordChangeXCommand) . testCoord_throwException(org.apache.oozie.command.coord.TestCoordChangeXCommand) . testCoordChangeEndTime3(org.apache.oozie.command.coord.TestCoordChangeXCommand) . testWorkflowActionRecoveryUserRetry(org.apache.oozie.service.TestRecoveryService) . testBundleRecoveryCoordCreate(org.apache.oozie.service.TestRecoveryService) . testCoordCreateNotifyParentFailed(org.apache.oozie.service.TestRecoveryService) . testCoordActionRecoveryServiceForSubmitted(org.apache.oozie.service.TestRecoveryService) . testCoordActionRecoveryServiceForWaiting(org.apache.oozie.service.TestRecoveryService) . testCoordActionRecoveryServiceForSuspended(org.apache.oozie.service.TestRecoveryService) . testCoordActionRecoveryServiceForKilled(org.apache.oozie.service.TestRecoveryService) . testCoordActionRecoveryServiceForResume(org.apache.oozie.service.TestRecoveryService) . testBundleEngineResume(org.apache.oozie.servlet.TestV1JobServletBundleEngine) . testBundleEngineSuspend(org.apache.oozie.servlet.TestV1JobServletBundleEngine) . testBundleEngineStart(org.apache.oozie.servlet.TestV1JobServletBundleEngine) . testBundleEngineKill(org.apache.oozie.servlet.TestV1JobServletBundleEngine) . testBundleEngineChange(org.apache.oozie.servlet.TestV1JobServletBundleEngine) . testCoordActionInputCheckXCommandUniqueness(org.apache.oozie.command.coord.TestCoordActionInputCheckXCommandNonUTC) . testResolveCoordConfiguration(org.apache.oozie.command.coord.TestCoordActionInputCheckXCommandNonUTC) . testTimeoutWithException(org.apache.oozie.command.coord.TestCoordActionInputCheckXCommandNonUTC) . testKill(org.apache.oozie.command.coord.TestAbandonedCoordChecker) . testStartTime(org.apache.oozie.command.coord.TestAbandonedCoordChecker) . testCatchupJob(org.apache.oozie.command.coord.TestAbandonedCoordChecker) . testPauseUnpause1(org.apache.oozie.service.TestPauseTransitService) . testPauseUnpause2(org.apache.oozie.service.TestPauseTransitService) . testPauseBundleAndCoordinator(org.apache.oozie.service.TestPauseTransitService) . testUnpauseBundleAndCoordinator(org.apache.oozie.service.TestPauseTransitService) . testStart1(org.apache.oozie.service.TestPauseTransitService) . testStart2(org.apache.oozie.service.TestPauseTransitService) . testCoordDefinitionChangeError(org.apache.oozie.command.coord.TestCoordUpdateXCommand) . testCoordDefUnsupportedChange(org.apache.oozie.command.coord.TestCoordUpdateXCommand) . testActionMaterForHcatalogIncorrectURI(org.apache.oozie.command.coord.TestCoordMaterializeTransitionXCommand) . testResetSequence_withMultiThread(org.apache.oozie.service.TestZKUUIDService) . testResetSequence(org.apache.oozie.service.TestZKUUIDService) . testEngine(org.apache.oozie.command.coord.TestPastActionsTimeOut) . testCoordMaterializeTriggerService2(org.apache.oozie.service.TestCoordMaterializeTriggerService) . testCoordMaterializeTriggerService3(org.apache.oozie.service.TestCoordMaterializeTriggerService) . testCoordMaterializeTriggerService1(org.apache.oozie.service.TestCoordMaterializeTriggerService) . testWaitWriteLock(org.apache.oozie.lock.TestMemoryLocks) . testNoWaitWriteLock(org.apache.oozie.lock.TestMemoryLocks) . testTimeoutWaitingWriteLock(org.apache.oozie.lock.TestMemoryLocks) . testTimeoutTimingOutWriteLock(org.apache.oozie.lock.TestMemoryLocks) . testReadLock(org.apache.oozie.lock.TestMemoryLocks) . testReadWriteLock(org.apache.oozie.lock.TestMemoryLocks) . testWriteReadLock(org.apache.oozie.lock.TestMemoryLocks) . testWriteLockSameThreadNoWait(org.apache.oozie.lock.TestMemoryLocks) . testWriteLockSameThreadWait(org.apache.oozie.lock.TestMemoryLocks) . testLockReentrant(org.apache.oozie.lock.TestMemoryLocks) . testCoordRerunActionsNeg2(org.apache.oozie.command.coord.TestCoordRerunXCommand) . testCoordRerunDateNeg(org.apache.oozie.command.coord.TestCoordRerunXCommand) . testCoordRerunKilledCoord(org.apache.oozie.command.coord.TestCoordRerunXCommand) . testCoordRerunFailedCoordAction(org.apache.oozie.command.coord.TestCoordRerunXCommand) . testCustomDoneFlag(org.apache.oozie.TestCoordinatorEngine) . testEngine(org.apache.oozie.TestCoordinatorEngine) . testDoneFlag(org.apache.oozie.TestCoordinatorEngine) . testEmptyDoneFlag(org.apache.oozie.TestCoordinatorEngine) . testDoneFlagCreation(org.apache.oozie.TestCoordinatorEngine) . testUpdateSLA(org.apache.oozie.sla.TestSLAService) . testEndMissDBConfirm(org.apache.oozie.sla.TestSLAService) . testCoordActionInputCheckXCommandUniqueness(org.apache.oozie.command.coord.TestCoordActionInputCheckXCommand) . testResolveCoordConfiguration(org.apache.oozie.command.coord.TestCoordActionInputCheckXCommand) . testTimeoutWithException(org.apache.oozie.command.coord.TestCoordActionInputCheckXCommand) . testLocalOozieExampleEnd(org.apache.oozie.example.TestLocalOozieExample) {color:green}+1 DISTRO{color} . {color:green}+1{color} distro tarball builds with the patch ---------------------------- {color:red}*-1 Overall result, please check the reported -1(s)*{color} The full output of the test-patch run is available at . https://builds.apache.org/job/oozie-trunk-precommit-build/3167/ > ZK reentrant lock doesn't work for few cases > -------------------------------------------- > > Key: OOZIE-2501 > URL: https://issues.apache.org/jira/browse/OOZIE-2501 > Project: Oozie > Issue Type: Bug > Reporter: Purshotam Shah > Assignee: Purshotam Shah > Attachments: OOZIE-2501-V1.patch > > > We will have an issue when oozie trying to acquire a lock and at the same > time, some other thread is releasing the same lock . > acquireLock will wait for 5 sec to acquire the lock. It will bypass the > synchronized block and get lockEntry from the hashmap. > While it waiting for 5 sec to acquire the lock, other thread releases the > lock and may execute the release code which will remove lockEntry from the > map. > If some other command from same thread tries to acquire the lock, it will > create a new InterProcessReadWriteLock object and use that for acquiring the > lock. > Logic for lock acquiring. > {code} > public LockToken getWriteLock(String resource, long wait) throws > InterruptedException { > InterProcessReadWriteLock lockEntry; > synchronized (zkLocks) { > if (zkLocks.containsKey(resource)) { > lockEntry = zkLocks.get(resource); > } > else { > lockEntry = new InterProcessReadWriteLock(zk.getClient(), > LOCKS_NODE + "/" + resource); > zkLocks.put(resource, lockEntry); > } > } > InterProcessMutex writeLock = lockEntry.writeLock(); > return acquireLock(wait, writeLock, resource); > } > {code} > Logic for lock releasing > {code} > public void release() { > try { > lock.release(); > if (zkLocks.get(resource) == null) { > return; > } > if (!isLockHeld()) { > synchronized (zkLocks) { > if (zkLocks.get(resource) != null) { > if (!isLockHeld()) { > zkLocks.remove(resource); > } > } > } > } > } > catch (Exception ex) { > LOG.warn("Could not release lock: " + ex.getMessage(), ex); > } > } > {code} > Curator code to acquire lock. > {code} > private boolean internalLock(long time, TimeUnit unit) throws Exception > { > /* > Note on concurrency: a given lockData instance > can be only acted on by a single thread so locking isn't necessary > */ > Thread currentThread = Thread.currentThread(); > LockData lockData = threadData.get(currentThread); > if ( lockData != null ) > { > // re-entering > lockData.lockCount.incrementAndGet(); > return true; > } > String lockPath = internals.attemptLock(time, unit, > getLockNodeBytes()); > if ( lockPath != null ) > { > LockData newLockData = new LockData(currentThread, > lockPath); > threadData.put(currentThread, newLockData); > return true; > } > return false; > } > {code} > The approach we have followed is to use map with weakvalue. Once the lock is > unreachable. GC will remove it from the map. We don't have to explicitly > remove it. -- This message was sent by Atlassian JIRA (v6.3.4#6332)