@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) @TransactionTimeout(45 * 60) public long outputPackageVersionBitsGivenResource(int resourceId, PackageDetailsKey packageDetailsKey, OutputStream outputStream) { return outputPackageVersionBitsRangeGivenResource(resourceId, packageDetailsKey, outputStream, 0, -1); }
@TransactionTimeout(value = 5, unit = TimeUnit.MINUTES) public void persist(Iterable<Message> messages) { int i = 0; for ( Message m : messages ) { em.persist( m ); if ( i % 50 == 0 ) { em.flush(); em.clear(); } i++; } }
@TransactionTimeout(value = 5, unit = TimeUnit.MINUTES) public void saveConcerts(Iterable<Concert> concerts) { int i = 0; for ( Concert concert : concerts ) { entityManager.persist( concert ); if ( i % 50 == 0 ) { entityManager.flush(); entityManager.clear(); } i++; } }
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) @TransactionTimeout(45 * 60) public long outputPackageVersionBitsRangeGivenResource(int resourceId, PackageDetailsKey packageDetailsKey, OutputStream outputStream, long startByte, long endByte) { if (startByte < 0L) { throw new IllegalArgumentException("startByte[" + startByte + "] < 0"); } if ((endByte > -1L) && (endByte < startByte)) { throw new IllegalArgumentException("endByte[" + endByte + "] < startByte[" + startByte + "]"); } // what package version? Query query = entityManager.createNamedQuery(PackageVersion.QUERY_FIND_ID_BY_PACKAGE_DETAILS_KEY_AND_RES_ID); query.setParameter("packageName", packageDetailsKey.getName()); query.setParameter("packageTypeName", packageDetailsKey.getPackageTypeName()); query.setParameter("architectureName", packageDetailsKey.getArchitectureName()); query.setParameter("version", packageDetailsKey.getVersion()); query.setParameter("resourceId", resourceId); int packageVersionId = ((Integer) query.getSingleResult()).intValue(); return outputPackageVersionBitsRangeHelper(resourceId, packageDetailsKey, outputStream, startByte, endByte, packageVersionId); }
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) @TransactionTimeout(45 * 60) public long outputPackageBitsForChildResource(int parentResourceId, String resourceTypeName, PackageDetailsKey packageDetailsKey, OutputStream outputStream) { Resource parentResource = entityManager.find(Resource.class, parentResourceId); ResourceType parentResourceType = parentResource.getResourceType(); Query query = entityManager.createNamedQuery(ResourceType.QUERY_FIND_BY_PARENT_AND_NAME); query.setParameter("parent", parentResourceType); query.setParameter("name", resourceTypeName); ResourceType childResourceType = (ResourceType) query.getSingleResult(); query = entityManager.createNamedQuery(PackageVersion.QUERY_FIND_BY_PACKAGE_DETAILS_KEY_WITH_NON_NULL_RESOURCE_TYPE); query.setParameter("packageName", packageDetailsKey.getName()); query.setParameter("packageTypeName", packageDetailsKey.getPackageTypeName()); query.setParameter("architectureName", packageDetailsKey.getArchitectureName()); query.setParameter("version", packageDetailsKey.getVersion()); query.setParameter("resourceTypeId", childResourceType.getId()); PackageVersion packageVersion = (PackageVersion) query.getSingleResult(); return outputPackageVersionBitsRangeHelper(parentResourceId, packageDetailsKey, outputStream, 0, -1, packageVersion.getId()); }
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) @TransactionTimeout(45 * 60) public long outputDistributionFileBits(DistributionFile distFile, OutputStream outputStream) { long numBytes = 0L; InputStream bitStream = null; try { Distribution dist = distFile.getDistribution(); log.info("Distribution has a basePath of " + dist.getBasePath()); String distFilePath = dist.getBasePath() + "/" + distFile.getRelativeFilename(); File f = getDistributionFileBitsLocalFilesystemFile(dist.getLabel(), distFilePath); log.info("Fetching: " + distFilePath + " on local file store from: " + f.getAbsolutePath()); bitStream = new FileInputStream(f); numBytes = StreamUtil.copy(bitStream, outputStream); } catch (Exception e) { log.info(e); } finally { // close our stream but leave the output stream open try { bitStream.close(); } catch (Exception closeError) { log.warn("Failed to close the bits stream", closeError); } } log.debug("Retrieved and sent [" + numBytes + "] bytes for [" + distFile.getRelativeFilename() + "]"); return numBytes; }
@TransactionAttribute(TransactionAttributeType.SUPPORTS) // TEMPORARY TIMEOUT DEFINED WHILE WE PROPERLY FIGURE OUT TIMEOUTS @TransactionTimeout(86400) public int internalSynchronizeRepos(Subject subject, Integer[] repoIds) throws InterruptedException { ContentServerPluginContainer pc; try { pc = ContentManagerHelper.getPluginContainer(); } catch (Exception e) { throw new RuntimeException(e); } ContentProviderManager providerManager = pc.getAdapterManager(); int syncCount = 0; for (Integer id : repoIds) { boolean syncExecuted = providerManager.synchronizeRepo(id); if (syncExecuted) { syncCount++; } } return syncCount; }
@TransactionTimeout(60 * 60) @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public int compressDataInterval(String fromTable, String toTable, long begin, long end) throws SQLException {
@TransactionTimeout(1800) @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public ResourceType updateTypeInNewTx(ResourceType resourceType) { // see if there is already an existing type that we need to update log.info("Updating resource type [" + toConciseString(resourceType) + "]..."); ResourceType existingType; try { existingType = resourceTypeManager.getResourceTypeByNameAndPlugin(resourceType.getName(), resourceType.getPlugin()); } catch (NonUniqueResultException nure) { log.info("Found more than one existing ResourceType for " + resourceType); // TODO: Delete the redundant ResourceTypes to get the DB into a valid state. throw new IllegalStateException(nure); } // Connect the parent types if they exist, which they should. // We'll do this no matter if the resourceType exists or not - but we use existing vs. resourceType appropriately // This is to support the case when an existing type gets a new parent resource type in <runs-inside> updateParentResourceTypes(resourceType, existingType); if (existingType == null) { persistNewType(resourceType); } else { mergeExistingType(resourceType, existingType); } return resourceType; }
/** * Purge data older than a given time. */ // 60 minute timeout @TransactionTimeout(60 * 60) @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public int purgeMeasurementInterval(String tableName, long purgeAfter, long purgeBefore) throws SQLException { Connection conn = null; PreparedStatement stmt = null; log.info("Begin purging data from table [" + tableName + "] between [" + TimeUtil.toString(purgeAfter) + "] and [" + TimeUtil.toString(purgeBefore) + "]"); StopWatch watch = new StopWatch(); int rows; try { conn = dataSource.getConnection(); String sql = "DELETE FROM " + tableName + " WHERE time_stamp >= ? AND time_stamp < ?"; stmt = conn.prepareStatement(sql); stmt.setLong(1, purgeAfter); stmt.setLong(2, purgeBefore); rows = stmt.executeUpdate(); } finally { JDBCUtil.safeClose(conn, stmt, null); } MeasurementMonitor.getMBean().incrementPurgeTime(watch.getElapsed()); log.info("Finished purging data from table [" + tableName + "] between [" + TimeUtil.toString(purgeAfter) + "] and [" + TimeUtil.toString(purgeBefore) + "], [" + rows + "] rows removed in [" + ((watch.getElapsed()) / SECOND) + "] seconds"); return rows; }
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) @TransactionTimeout(40 * 60) private PackageBits preparePackageBits(Subject subject, InputStream bitsStream, PackageVersionContentSource pvcs) { PackageVersionContentSourcePK pk = pvcs.getPackageVersionContentSourcePK();
@RequiredPermission(Permission.MANAGE_REPOSITORIES) @TransactionAttribute(TransactionAttributeType.REQUIRED) @TransactionTimeout(90 * 60) public PackageBits downloadPackageBits(Subject subject, PackageVersionContentSource pvcs) { PackageVersionContentSourcePK pk = pvcs.getPackageVersionContentSourcePK();
@RequiredPermission(Permission.MANAGE_REPOSITORIES) @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) @TransactionTimeout(45 * 60) public void downloadDistributionBits(Subject subject, ContentSource contentSource) { try {
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) @TransactionTimeout(45 * 60) public long outputPackageVersionBits(PackageVersion packageVersion, OutputStream outputStream) { // Used by export of content through http PackageDetailsKey packageDetailsKey = new PackageDetailsKey(packageVersion.getDisplayName(), packageVersion .getDisplayVersion(), packageVersion.getGeneralPackage().getPackageType().toString(), packageVersion .getArchitecture().toString()); int resourceId = 0; //set to dummy value log.debug("Calling outputPackageVersionBitsRangeHelper() with package details: " + packageDetailsKey); return outputPackageVersionBitsRangeHelper(resourceId, packageDetailsKey, outputStream, 0, -1, packageVersion .getId()); }
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) @TransactionTimeout(45 * 60) public long outputPackageVersionBits(PackageVersion packageVersion, OutputStream outputStream, long startByte, long endByte) { // Used by export of content through http PackageDetailsKey packageDetailsKey = new PackageDetailsKey(packageVersion.getDisplayName(), packageVersion .getDisplayVersion(), packageVersion.getGeneralPackage().getPackageType().toString(), packageVersion .getArchitecture().toString()); int resourceId = 0; //set to dummy value log.debug("Calling outputPackageVersionBitsRangeHelper() with package details: " + packageDetailsKey); return outputPackageVersionBitsRangeHelper(resourceId, packageDetailsKey, outputStream, startByte, endByte, packageVersion.getId()); }
@Override @TransactionTimeout(45 * 60) @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public void completeRetrievePackageBitsRequest(ContentServiceResponse response, InputStream bitStream) {