RFR: 8009695: embedded/GP/RI: This intermittent error happens too often, makes the build unstable, and waste machine resources.

Erik Joelsson erik.joelsson at oracle.com
Tue Mar 12 08:39:51 UTC 2013


Profiles builds are being plagued by intermittent failures due to 
exceptions in the meta-index builder, looking like this:

Creating rt.jar profile_1 Compressed=false
Creating resources.jar
Updating rt.jar profile_1
Removed method addPropertyChangeListener(java.beans.PropertyChangeListener) from java/util/jar/Pack200$Packer
Removed method removePropertyChangeListener(java.beans.PropertyChangeListener) from java/util/jar/Pack200$Packer
Removed method addPropertyChangeListener(java.beans.PropertyChangeListener) from java/util/jar/Pack200$Unpacker
Removed method removePropertyChangeListener(java.beans.PropertyChangeListener) from java/util/jar/Pack200$Unpacker
Exception in thread "main" java.util.zip.ZipException: error in opening zip file
	at java.util.zip.ZipFile.open(Native Method)
	at java.util.zip.ZipFile.<init>(ZipFile.java:214)
	at java.util.zip.ZipFile.<init>(ZipFile.java:144)
	at java.util.jar.JarFile.<init>(JarFile.java:152)
	at java.util.jar.JarFile.<init>(JarFile.java:89)
	at build.tools.buildmetaindex.JarMetaIndex.<init>(BuildMetaIndex.java:186)
	at build.tools.buildmetaindex.BuildMetaIndex.main(BuildMetaIndex.java:96)


I believe I have found the cause for it. Near the bottom of Images.gmk:

ifneq ($(PROFILE),)
# Files in lib$(PROFILE) are excluded from the generic copying routines so
# we have to add them back in here
$(foreach f,$(CUSTOM_PROFILE_JARS),\
     $(eval $(call 
AddFileToCopy,$(IMAGES_OUTPUTDIR)/lib$(PROFILE),$(JRE_IMAGE_DIR)/lib,$f,JRE_LIB_TARGETS))) 


The above happens after the rules for building meta-indexes are declared:

$(JRE_IMAGE_DIR)/lib/meta-index: $(JRE_LIB_TARGETS)
         $(ECHO) $(LOG_INFO) Generating $(patsubst $(OUTPUT_ROOT)/%,%,$@)
         $(CD) $(@D) && $(TOOL_BUILDMETAINDEX) -o meta-index `$(LS) 
*.jar | $(SED) 's/JObjC\.jar//g'`

This means that the variable JRE_LIB_TARGETS does not contain the jars 
that are copied from lib$(PROFILE) and the meta-index files are not 
declared dependent on those jars, which creates the race causing 
intermittent failures. It also explains why this only happens when 
building profiles and not images.

Webrev moving the foreach loop to the lib section, above the meta-index 
rules declarations:

http://cr.openjdk.java.net/~erikj/8009695/webrev.jdk.01/

/Erik



More information about the build-dev mailing list