private <S> TypedQuery<S> applyRepositoryMethodMetadata(TypedQuery<S> query) { if (metadata == null) { return query; } LockModeType type = metadata.getLockModeType(); TypedQuery<S> toReturn = type == null ? query : query.setLockMode(type); applyQueryHints(toReturn); return toReturn; }
.setLockMode( LockModeType.PESSIMISTIC_WRITE ) .getResultList();
@Transactional(propagation = Propagation.REQUIRES_NEW) private List<UpdateVO> takeUpdateVO(Class<?> triggeredVO) { String sql = "select i from UpdateVO i where i.voName = :voName"; TypedQuery<UpdateVO> query = dbf.getEntityManager().createQuery(sql, UpdateVO.class); query.setParameter("voName", triggeredVO.getSimpleName()); query.setLockMode(LockModeType.PESSIMISTIC_WRITE); List<UpdateVO> ret = query.getResultList(); if (!ret.isEmpty()) { List<Long> ids = CollectionUtils.transformToList(ret, new Function<Long, UpdateVO>() { @Override public Long call(UpdateVO arg) { return arg.getId(); } }); String usql = "delete from UpdateVO i where i.id in :id"; Query uquery = dbf.getEntityManager().createQuery(usql); uquery.setParameter("id", ids); uquery.executeUpdate(); } return ret; }
@Override @Transactional public void update(String fsid, long total, long avail) { String sql = "select c from FusionstorBackupStorageVO c where c.fsid = :fsid"; TypedQuery<FusionstorBackupStorageVO> q = dbf.getEntityManager().createQuery(sql, FusionstorBackupStorageVO.class); q.setParameter("fsid", fsid); q.setLockMode(LockModeType.PESSIMISTIC_WRITE); try { FusionstorBackupStorageVO vo = q.getSingleResult(); vo.setTotalCapacity(total); vo.setAvailableCapacity(avail); dbf.getEntityManager().merge(vo); } catch (EmptyResultDataAccessException e) { return; } }
@Transactional private List<SecurityGroupFailureHostVO> takeFailureHosts() { String sql = "select sgf from SecurityGroupFailureHostVO sgf, HostVO host where host.uuid = sgf.hostUuid and host.status = :hostConnectionState and sgf.managementNodeId is NULL group by sgf.hostUuid order by sgf.lastOpDate ASC"; TypedQuery<SecurityGroupFailureHostVO> q = dbf.getEntityManager().createQuery(sql, SecurityGroupFailureHostVO.class); q.setLockMode(LockModeType.PESSIMISTIC_READ); q.setParameter("hostConnectionState", HostStatus.Connected); q.setMaxResults(failureHostEachTimeTake); List<SecurityGroupFailureHostVO> lst = q.getResultList(); if (lst.isEmpty()) { return lst; } List<Long> ids = CollectionUtils.transformToList(lst, new Function<Long, SecurityGroupFailureHostVO>() { @Override public Long call(SecurityGroupFailureHostVO arg) { return arg.getId(); } }); sql = "update SecurityGroupFailureHostVO f set f.managementNodeId = :mgmtId where f.id in (:ids)"; Query uq = dbf.getEntityManager().createQuery(sql); uq.setParameter("mgmtId", Platform.getManagementServerId()); uq.setParameter("ids", ids); uq.executeUpdate(); return lst; }
@Transactional(propagation = Propagation.REQUIRES_NEW) private List<InsertVO> takeInsertVO(Class<?> triggeredVO) { List<String> voNames = insertVOTriggerClassNames.get(triggeredVO); TypedQuery<InsertVO> query = null; if (voNames.size() == 1) { String sql = "select i from InsertVO i where i.voName = :voName"; query = dbf.getEntityManager().createQuery(sql, InsertVO.class); query.setParameter("voName", triggeredVO.getSimpleName()); } else { String sql = "select i from InsertVO i where i.voName in (:voName)"; query = dbf.getEntityManager().createQuery(sql, InsertVO.class); query.setParameter("voName", voNames); } query.setLockMode(LockModeType.PESSIMISTIC_WRITE); List<InsertVO> ret = query.getResultList(); if (!ret.isEmpty()) { List<Long> ids = CollectionUtils.transformToList(ret, new Function<Long, InsertVO>() { @Override public Long call(InsertVO arg) { return arg.getId(); } }); String usql = "delete from InsertVO i where i.id in :id"; Query uquery = dbf.getEntityManager().createQuery(usql); uquery.setParameter("id", ids); uquery.executeUpdate(); } return ret; }
@Transactional(propagation = Propagation.REQUIRES_NEW) private List<DeleteVO> takeDeleteVO(Class<?> triggeredVO) { List<String> voNames = deleteVOTriggerClassNames.get(triggeredVO); TypedQuery<DeleteVO> query = null; if (voNames == null) { String sql = "select i from DeleteVO i where i.voName = :voName"; query = dbf.getEntityManager().createQuery(sql, DeleteVO.class); query.setParameter("voName", triggeredVO.getSimpleName()); } else { String sql = "select i from DeleteVO i where i.voName in (:voName)"; query = dbf.getEntityManager().createQuery(sql, DeleteVO.class); query.setParameter("voName", voNames); } query.setLockMode(LockModeType.PESSIMISTIC_WRITE); List<DeleteVO> ret = query.getResultList(); if (!ret.isEmpty()) { List<Long> ids = CollectionUtils.transformToList(ret, new Function<Long, DeleteVO>() { @Override public Long call(DeleteVO arg) { return arg.getId(); } }); String usql = "delete from DeleteVO i where i.id in :id"; Query uquery = dbf.getEntityManager().createQuery(usql); uquery.setParameter("id", ids); uquery.executeUpdate(); } return ret; }
String sql = "select i from ImageCacheVO i where i.imageUuid = NULL and i.state = :state"; TypedQuery<ImageCacheVO> q = dbf.getEntityManager().createQuery(sql, ImageCacheVO.class); q.setLockMode(LockModeType.PESSIMISTIC_WRITE); q.setParameter("state", ImageCacheState.ready); List<ImageCacheVO> ret = q.getResultList();
query.setParameter("primaryStorageUuid", psUuid); LocalStorageHostRefVO ref; List<LocalStorageHostRefVO> localStorageHostRefVOS = query.setLockMode(LockModeType.PESSIMISTIC_WRITE).getResultList(); if(localStorageHostRefVOS.size() > 0){ ref = localStorageHostRefVOS.get(0);
@Transactional protected void returnStorageCapacityToHost(String hostUuid, long size) { String sql = "select ref from LocalStorageHostRefVO ref where ref.hostUuid = :huuid and ref.primaryStorageUuid = :primaryStorageUuid"; TypedQuery<LocalStorageHostRefVO> q = dbf.getEntityManager().createQuery(sql, LocalStorageHostRefVO.class); q.setParameter("huuid", hostUuid); q.setParameter("primaryStorageUuid", self.getUuid()); q.setLockMode(LockModeType.PESSIMISTIC_WRITE); List<LocalStorageHostRefVO> refs = q.getResultList(); if (refs.isEmpty()) { throw new CloudRuntimeException(String.format("cannot find host[uuid: %s] of local primary storage[uuid: %s]", hostUuid, self.getUuid())); } LocalStorageHostRefVO ref = refs.get(0); LocalStorageHostCapacityStruct s = new LocalStorageHostCapacityStruct(); s.setSizeBeforeOverProvisioning(size); s.setHostUuid(hostUuid); s.setLocalStorage(getSelfInventory()); s.setSize(size); for (LocalStorageReturnHostCapacityExtensionPoint ext : pluginRgty.getExtensionList( LocalStorageReturnHostCapacityExtensionPoint.class)) { ext.beforeReturnLocalStorageCapacityOnHost(s); } ref.setAvailableCapacity(ref.getAvailableCapacity() + s.getSize()); dbf.getEntityManager().merge(ref); }
TypedQuery<CephBackupStorageVO> q = dbf.getEntityManager().createQuery(sql, CephBackupStorageVO.class); q.setParameter("fsid", fsid); q.setLockMode(LockModeType.PESSIMISTIC_WRITE); try { CephBackupStorageVO vo = q.getSingleResult();
private boolean lockCapacity() { if (hostUuid != null) { capacityVO = dbf.getEntityManager().find(HostCapacityVO.class, hostUuid, LockModeType.PESSIMISTIC_WRITE); } else if (query != null) { query.setLockMode(LockModeType.PESSIMISTIC_WRITE); List<HostCapacityVO> caps = query.getResultList(); capacityVO = caps.isEmpty() ? null : caps.get(0); } if (capacityVO != null) { originalCopy = new HostCapacityVO(); originalCopy.setTotalCpu(capacityVO.getTotalCpu()); originalCopy.setAvailableCpu(capacityVO.getAvailableCpu()); originalCopy.setTotalMemory(capacityVO.getTotalMemory()); originalCopy.setAvailableMemory(capacityVO.getAvailableMemory()); originalCopy.setTotalPhysicalMemory(capacityVO.getTotalPhysicalMemory()); originalCopy.setAvailablePhysicalMemory(capacityVO.getAvailablePhysicalMemory()); } return capacityVO != null; }
" and rref.primaryStorageUuid = :puuid"; TypedQuery<Tuple> q = dbf.getEntityManager().createQuery(sql, Tuple.class); q.setLockMode(LockModeType.PESSIMISTIC_WRITE); q.setParameter("resUuid", resUuid); q.setParameter("puuid", self.getUuid());
query.setLockMode(LockModeType.NONE);
private boolean lockCapacity() { if (primaryStorageUuid != null) { capacityVO = dbf.getEntityManager().find(PrimaryStorageCapacityVO.class, primaryStorageUuid, LockModeType.PESSIMISTIC_WRITE); } else if (query != null) { query.setLockMode(LockModeType.PESSIMISTIC_WRITE); List<PrimaryStorageCapacityVO> caps = query.getResultList(); capacityVO = caps.isEmpty() ? null : caps.get(0); } if (capacityVO != null) { totalForLog = capacityVO.getTotalCapacity(); availForLog = capacityVO.getAvailableCapacity(); totalPhysicalForLog = capacityVO.getTotalPhysicalCapacity(); availPhysicalForLog = capacityVO.getAvailablePhysicalCapacity(); originalCopy = new PrimaryStorageCapacityVO(); originalCopy.setAvailableCapacity(capacityVO.getAvailableCapacity()); originalCopy.setTotalCapacity(capacityVO.getTotalCapacity()); originalCopy.setAvailablePhysicalCapacity(capacityVO.getAvailablePhysicalCapacity()); originalCopy.setTotalPhysicalCapacity(capacityVO.getTotalPhysicalCapacity()); originalCopy.setSystemUsedCapacity(capacityVO.getSystemUsedCapacity()); } return capacityVO != null; }
@Override public TypedQuery<X> setLockMode(LockModeType lockMode) { typedQuery.setLockMode(lockMode); return this; }
@Override public TypedQuery<X> setLockMode(LockModeType lockMode) { underlyingQuery.setLockMode(lockMode); return this; }
q.setParameter("huuid", hostUuid); q.setParameter("psUuid", psUuid); q.setLockMode(LockModeType.PESSIMISTIC_WRITE); List<LocalStorageHostRefVO> refs = q.getResultList();
private <S> TypedQuery<S> applyRepositoryMethodMetadata(TypedQuery<S> query) { if (metadata == null) { return query; } LockModeType type = metadata.getLockModeType(); TypedQuery<S> toReturn = type == null ? query : query.setLockMode(type); applyQueryHints(toReturn); return toReturn; }
@Test public void testPessimisticWriteQuery() throws InterruptedException { doInJPA(entityManager -> { List<PostComment> comments = entityManager .createQuery( "select pc " + "from PostComment pc " + "join fetch pc.post p ", PostComment.class) .setLockMode(LockModeType.PESSIMISTIC_WRITE) .setHint("javax.persistence.lock.timeout", 0) .getResultList(); }); }