/** * Method to get the Integer lock identifier used internally from the long lock identifier used by * the client. * @param lockId long row lock identifier from client * @return intId Integer row lock used internally in HRegion * @throws IOException Thrown if this is not a valid client lock id. */ Integer getLockFromId(long lockId) throws IOException { if (lockId == -1L) { return null; } String lockName = String.valueOf(lockId); Integer rl = rowlocks.get(lockName); if (rl == null) { throw new UnknownRowLockException("Invalid row lock"); } this.leases.renewLease(lockName); return rl; }
/** * @deprecated {@link RowLock} and associated operations are deprecated. */ @Override @QosPriority(priority = HConstants.HIGH_QOS) public void unlockRow(byte[] regionName, long lockId) throws IOException { checkOpen(); NullPointerException npe = null; if (regionName == null) { npe = new NullPointerException("regionName is null"); } else if (lockId == -1L) { npe = new NullPointerException("lockId is null"); } if (npe != null) { IOException io = new IOException("Invalid arguments to unlockRow"); io.initCause(npe); throw io; } requestCount.incrementAndGet(); try { HRegion region = getRegion(regionName); if (region.getCoprocessorHost() != null) { region.getCoprocessorHost().preUnLockRow(regionName, lockId); } String lockName = String.valueOf(lockId); Integer r = rowlocks.remove(lockName); if (r == null) { throw new UnknownRowLockException(lockName); } region.releaseRowLock(r); this.leases.cancelLease(lockName); LOG.debug("Row lock " + lockId + " has been explicitly released by client"); } catch (Throwable t) { throw convertThrowableToIOE(cleanup(t)); } }
public void verifyAllowed(User user, PrivilegedExceptionAction... actions) throws Exception { for (PrivilegedExceptionAction action : actions) { try { user.runAs(action); } catch (AccessDeniedException ade) { fail("Expected action to pass for user '" + user.getShortName() + "' but was denied"); } catch (UnknownRowLockException exp){ //expected } } }
/** * Method to get the Integer lock identifier used internally from the long * lock identifier used by the client. * * @param lockId * long row lock identifier from client * @return intId Integer row lock used internally in HRegion * @throws IOException * Thrown if this is not a valid client lock id. */ Integer getLockFromId(long lockId) throws IOException { if (lockId == -1L) { return null; } String lockName = String.valueOf(lockId); Integer rl = rowlocks.get(lockName); if (rl == null) { throw new UnknownRowLockException("Invalid row lock"); } this.leases.renewLease(lockName); return rl; }
/** * @deprecated {@link RowLock} and associated operations are deprecated. */ @Override @QosPriority(priority=HConstants.HIGH_QOS) public void unlockRow(byte[] regionName, long lockId) throws IOException { checkOpen(); NullPointerException npe = null; if (regionName == null) { npe = new NullPointerException("regionName is null"); } else if (lockId == -1L) { npe = new NullPointerException("lockId is null"); } if (npe != null) { IOException io = new IOException("Invalid arguments to unlockRow"); io.initCause(npe); throw io; } requestCount.incrementAndGet(); try { HRegion region = getRegion(regionName); if (region.getCoprocessorHost() != null) { region.getCoprocessorHost().preUnLockRow(regionName, lockId); } String lockName = String.valueOf(lockId); Integer r = rowlocks.remove(lockName); if (r == null) { throw new UnknownRowLockException(lockName); } region.releaseRowLock(r); this.leases.cancelLease(lockName); LOG.debug("Row lock " + lockId + " has been explicitly released by client"); } catch (Throwable t) { throw convertThrowableToIOE(cleanup(t)); } }
@Override @QosPriority(priority=HIGH_QOS) public void unlockRow(byte[] regionName, long lockId) throws IOException { checkOpen(); NullPointerException npe = null; if (regionName == null) { npe = new NullPointerException("regionName is null"); } else if (lockId == -1L) { npe = new NullPointerException("lockId is null"); } if (npe != null) { IOException io = new IOException("Invalid arguments to unlockRow"); io.initCause(npe); throw io; } requestCount.incrementAndGet(); try { HRegion region = getRegion(regionName); String lockName = String.valueOf(lockId); Integer r = rowlocks.remove(lockName); if (r == null) { throw new UnknownRowLockException(lockName); } region.releaseRowLock(r); this.leases.cancelLease(lockName); LOG.debug("Row lock " + lockId + " has been explicitly released by client"); } catch (Throwable t) { throw convertThrowableToIOE(cleanup(t)); } }
/** * Unlock a locked row in a table. * * @param controller the RPC controller * @param request the unlock row request * @throws ServiceException */ @Override @QosPriority(priority=HConstants.HIGH_QOS) public UnlockRowResponse unlockRow(final RpcController controller, final UnlockRowRequest request) throws ServiceException { try { requestCount.increment(); HRegion region = getRegion(request.getRegion()); if (!request.hasLockId()) { throw new DoNotRetryIOException( "Invalid unlock rowrequest, missing lock id"); } long lockId = request.getLockId(); String lockName = String.valueOf(lockId); try { Integer r = rowlocks.remove(lockName); if (r == null) { throw new UnknownRowLockException(lockName); } region.releaseRowLock(r); this.leases.cancelLease(lockName); LOG.debug("Row lock " + lockId + " has been explicitly released by client"); return UnlockRowResponse.newBuilder().build(); } catch (Throwable t) { throw convertThrowableToIOE(cleanup(t)); } } catch (IOException ie) { throw new ServiceException(ie); } }