[arquillian-issues] [JBoss JIRA] (ARQ-2180) Copy across undeploy's deleteIfExists+deleteOnExit to !isDeployTypeXml (Dropins deployment)

Gordon Hutchison (JIRA) issues at jboss.org
Fri Mar 23 11:50:01 EDT 2018


Gordon Hutchison created ARQ-2180:
-------------------------------------

             Summary: Copy across undeploy's deleteIfExists+deleteOnExit to !isDeployTypeXml (Dropins deployment)
                 Key: ARQ-2180
                 URL: https://issues.jboss.org/browse/ARQ-2180
             Project: Arquillian
          Issue Type: Bug
          Components: WebSphere Containers
    Affects Versions: 1.4.0.Final
         Environment: Websphere Liberty FAT test buckets such as https://github.com/OpenLiberty/open-liberty/tree/integration/dev/com.ibm.ws.microprofile.faulttolerance_fat_tck
            Reporter: Gordon Hutchison
            Assignee: Gerhard Poul
            Priority: Minor


We sometimes see a timing issue with undeploy which looks like it has already been addressed if isDeployTypeXml==true but most of our tests use the dropin deploy method. I mirrored the code over with: 

	public void undeploy(final Archive<?> archive) throws DeploymentException {
		if (log.isLoggable(Level.FINER)) {
			log.entering(className, "undeploy");
		}

		String archiveName = archive.getName();
		String deployName = createDeploymentName(archiveName);
		String deployDir = null;

		// IBM expedient patch for FAT test problems this was just done to prevent it
                // having to be added to each arquillian.xml it would not be part of the PR
		containerConfiguration.setFailSafeUndeployment(true);

		try {
			// If deploy type is xml, then remove the application from the xml file, which
			// causes undeploy
			if (containerConfiguration.isDeployTypeXML()) {
				// Read the server.xml file into Memory
				Document document = readServerXML();

				// Remove the archive from the server.xml file
				removeApplication(document, deployName);
				removeActivationSpecJmsQueueJmsTopic(document);

				// Update server.xml on file system
				writeServerXML(document);

				// Wait until the application is undeployed
				waitForApplicationTargetState(deployName, false, this.containerConfiguration.getAppUndeployTimeout());
			}

			// Now we can proceed and delete the archive for either deploy type
			if (containerConfiguration.isDeployTypeXML()) {
				deployDir = getAppDirectory();
			} else {
				deployDir = getDropInDirectory();
			}

			// Remove the deployed archive
			File exportedArchiveLocation = new File(deployDir, archiveName);
			if (!containerConfiguration.isFailSafeUndeployment()) {
				try {
					if (!Files.deleteIfExists(exportedArchiveLocation.toPath())) {
						throw new DeploymentException("Archive already deleted from deployment directory");
					}
				} catch (IOException e) {
					throw new DeploymentException("Unable to delete archive from deployment directory", e);
				}
			} else {
				try {
					Files.deleteIfExists(exportedArchiveLocation.toPath());
				} catch (IOException e) {
					log.log(Level.WARNING,
							"Unable to delete archive from deployment directory -> failsafe -> file marked for delete on exit",
							e);
					exportedArchiveLocation.deleteOnExit();
				}
			}

			// If it was the archive deletion that caused the undeploy we wait for the
			// correct state
			if (!containerConfiguration.isDeployTypeXML()) {
				// Wait until the application is undeployed
				waitForApplicationTargetState(deployName, false, this.containerConfiguration.getAppUndeployTimeout());
			}

		} catch (Exception e) {
			throw new DeploymentException("Exception while undeploying application.", e);
		}

		if (log.isLoggable(Level.FINER)) {
			log.exiting(className, "undeploy");
		}
	}

I will now do a PR with the above (minus the containerConfiguration.setFailSafeUndeployment(true);
line.)



--
This message was sent by Atlassian JIRA
(v7.5.0#75005)


More information about the arquillian-issues mailing list