Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 248667

Summary: [repositories] Reload remote repos when local cache is corrupt
Product: [Eclipse Project] Equinox Reporter: Jimmie <btphuc>
Component: p2Assignee: P2 Inbox <equinox.p2-inbox>
Status: RESOLVED DUPLICATE QA Contact:
Severity: normal    
Priority: P3 CC: john.arthorne, pascal
Version: unspecified   
Target Milestone: 3.5   
Hardware: PC   
OS: All   
Whiteboard:

Description Jimmie CLA 2008-09-25 18:03:59 EDT
-- Error Details --
Date: Fri Sep 26 04:45:03 ICT 2008
Message: Unexpected error encountered while preparing for the operation.
Severity: Error
Plugin: org.eclipse.equinox.p2.ui
Session Data:
eclipse.buildId=M20080911-1700
java.version=1.6.0_10-rc
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_US
Command-line arguments:  -os win32 -ws win32 -arch x86


Exception Stack Trace:
org.eclipse.core.runtime.AssertionFailedException: null argument:
	at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:86)
	at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:74)
	at org.eclipse.equinox.internal.provisional.p2.metadata.RequiredCapability.<init>(RequiredCapability.java:41)
	at org.eclipse.equinox.internal.provisional.p2.metadata.RequiredCapability.<init>(RequiredCapability.java:51)
	at org.eclipse.equinox.internal.provisional.p2.metadata.MetadataFactory.createRequiredCapability(MetadataFactory.java:210)
	at org.eclipse.equinox.internal.p2.metadata.repository.io.MetadataParser$RequiredCapabilityHandler.<init>(MetadataParser.java:551)
	at org.eclipse.equinox.internal.p2.metadata.repository.io.MetadataParser$RequiredCapabilitiesHandler.startElement(MetadataParser.java:528)
	at org.eclipse.equinox.internal.p2.persistence.XMLParser$AbstractHandler.startElement(XMLParser.java:171)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501)
	at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:179)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:377)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2747)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
	at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryIO$Parser.parse(MetadataRepositoryIO.java:193)
	at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryIO.read(MetadataRepositoryIO.java:56)
	at org.eclipse.equinox.internal.provisional.spi.p2.metadata.repository.SimpleMetadataRepositoryFactory.validateAndLoad(SimpleMetadataRepositoryFactory.java:116)
	at org.eclipse.equinox.internal.provisional.spi.p2.metadata.repository.SimpleMetadataRepositoryFactory.load(SimpleMetadataRepositoryFactory.java:85)
	at org.eclipse.equinox.internal.p2.updatesite.metadata.UpdateSiteMetadataRepository.initializeMetadataRepository(UpdateSiteMetadataRepository.java:187)
	at org.eclipse.equinox.internal.p2.updatesite.metadata.UpdateSiteMetadataRepository.<init>(UpdateSiteMetadataRepository.java:67)
	at org.eclipse.equinox.internal.p2.updatesite.metadata.UpdateSiteMetadataRepositoryFactory.load(UpdateSiteMetadataRepositoryFactory.java:48)
	at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:485)
	at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:452)
	at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:435)
	at org.eclipse.equinox.internal.p2.director.SimplePlanner.updatesFor(SimplePlanner.java:384)
	at org.eclipse.equinox.internal.provisional.p2.ui.query.QueryableUpdates.query(QueryableUpdates.java:48)
	at org.eclipse.equinox.internal.provisional.p2.ui.actions.UpdateAction.getProvisioningPlan(UpdateAction.java:71)
	at org.eclipse.equinox.internal.provisional.p2.ui.actions.ProfileModificationAction$1.run(ProfileModificationAction.java:62)
	at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
Comment 1 Jimmie CLA 2008-09-25 18:11:16 EDT
There are a dead link in the "available software tab". When the update engine touch it, the exception was throw.

After remove the dead link. it works well.
Comment 2 Pascal Rapicault CLA 2008-09-26 10:12:41 EDT
I find this error rather suspicious because we should not crash like that faced with invalid content. Could you please give the URL of the site, or if it is an internal site any of  the content.jar / content.xml / site.xml / digest.zip that was there. Thx. 
Lowering severity as a result of the last comment. 
Need to investigated in the light of the robustness theme.
Comment 3 John Arthorne CLA 2008-09-26 10:51:27 EDT
*** Bug 248666 has been marked as a duplicate of this bug. ***
Comment 4 Jimmie CLA 2008-09-28 12:49:12 EDT
It's PMD, a well know open source plugin.

http://pmd.sourceforge.net/eclipse
Comment 5 Pascal Rapicault CLA 2008-09-29 22:49:43 EDT
I have been able to install form the PMD site. However we should review under which circumstances we could create an empty requirement while parsing an legacy update site. 
Comment 6 Simon Kaegi CLA 2009-01-12 14:24:21 EST
Looking through the code we do checks both on writing and parsing to ensure that we have a valid RequiredCapability. I think it is very likely that that the repository was either partially written or corrupted on disk. The most common source of this problem we've seen is when the process is abruptly halted while in the middle of writing.

I'm going to alter the description of this bug as I think the most important thing we should do here is be able to recover when a repo is corrupt. e.g. if we detect the local cache of a remote repo is corrupt we should try to reload it.

Comment 7 John Arthorne CLA 2009-01-12 17:14:12 EST

*** This bug has been marked as a duplicate of bug 246803 ***