Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 157998 Details for
Bug 274025
[publisher] p2 metadata generator does not scale
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
updated patch
clipboard.txt (text/plain), 18.92 KB, created by
Ian Bull
on 2010-02-02 23:02:12 EST
(
hide
)
Description:
updated patch
Filename:
MIME Type:
Creator:
Ian Bull
Created:
2010-02-02 23:02:12 EST
Size:
18.92 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.equinox.p2.artifact.repository >Index: src/org/eclipse/equinox/internal/p2/artifact/repository/CompositeArtifactRepository.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/CompositeArtifactRepository.java,v >retrieving revision 1.20 >diff -u -r1.20 CompositeArtifactRepository.java >--- src/org/eclipse/equinox/internal/p2/artifact/repository/CompositeArtifactRepository.java 13 Jan 2010 20:03:12 -0000 1.20 >+++ src/org/eclipse/equinox/internal/p2/artifact/repository/CompositeArtifactRepository.java 3 Feb 2010 04:01:19 -0000 >@@ -45,6 +45,7 @@ > // keep a list of the repositories that we have successfully loaded > private List<ChildInfo> loadedRepos = new ArrayList<ChildInfo>(); > private IArtifactRepositoryManager manager; >+ private boolean disableSave; > > /** > * Create a Composite repository in memory. >@@ -394,6 +395,8 @@ > } > > private void save() { >+ if (disableSave) >+ return; > if (!isModifiable()) > return; > boolean compress = "true".equalsIgnoreCase(properties.get(PROP_COMPRESSED)); //$NON-NLS-1$ >@@ -551,4 +554,29 @@ > CompoundQueryable<IArtifactDescriptor> queryable = new CompoundQueryable<IArtifactDescriptor>(repos); > return queryable; > } >+ >+ public IStatus executeBatch(Runnable runnable) { >+ IStatus result = null; >+ synchronized (this) { >+ try { >+ disableSave = true; >+ runnable.run(); >+ } catch (Exception e) { >+ result = new Status(IStatus.ERROR, Activator.ID, e.getMessage(), e); >+ } finally { >+ disableSave = false; >+ try { >+ save(); >+ } catch (Exception e) { >+ if (result != null) >+ result = new MultiStatus(Activator.ID, IStatus.ERROR, new IStatus[] {result}, e.getMessage(), e); >+ else >+ result = new Status(IStatus.ERROR, Activator.ID, e.getMessage(), e); >+ } >+ } >+ } >+ if (result == null) >+ result = Status.OK_STATUS; >+ return result; >+ } > } >Index: src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java,v >retrieving revision 1.83 >diff -u -r1.83 SimpleArtifactRepository.java >--- src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java 13 Jan 2010 17:20:42 -0000 1.83 >+++ src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java 3 Feb 2010 04:01:19 -0000 >@@ -216,6 +216,8 @@ > > private MirrorSelector mirrors; > >+ private boolean disableSave = false; >+ > static void delete(File toDelete) { > if (toDelete.isDirectory()) { > File[] children = toDelete.listFiles(); >@@ -900,11 +902,12 @@ > } > > public void save() { >- boolean compress = "true".equalsIgnoreCase(properties.get(PROP_COMPRESSED)); //$NON-NLS-1$ >- save(compress); >+ boolean compress = "true".equalsIgnoreCase((String) properties.get(PROP_COMPRESSED)); //$NON-NLS-1$ >+ if (!disableSave) >+ save(compress); > } > >- public void save(boolean compress) { >+ private void save(boolean compress) { > assertModifiable(); > OutputStream os = null; > try { >@@ -990,4 +993,29 @@ > public IQueryResult<IArtifactKey> query(IQuery<IArtifactKey> query, IProgressMonitor monitor) { > return query.perform(artifactMap.keySet().iterator()); > } >+ >+ public IStatus executeBatch(Runnable runnable) { >+ IStatus result = null; >+ synchronized (this) { >+ try { >+ disableSave = true; >+ runnable.run(); >+ } catch (Exception e) { >+ result = new Status(IStatus.ERROR, Activator.ID, e.getMessage(), e); >+ } finally { >+ disableSave = false; >+ try { >+ save(); >+ } catch (Exception e) { >+ if (result != null) >+ result = new MultiStatus(Activator.ID, IStatus.ERROR, new IStatus[] {result}, e.getMessage(), e); >+ else >+ result = new Status(IStatus.ERROR, Activator.ID, e.getMessage(), e); >+ } >+ } >+ } >+ if (result == null) >+ result = Status.OK_STATUS; >+ return result; >+ } > } >#P org.eclipse.equinox.p2.directorywatcher >Index: src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/CachingArtifactRepository.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/CachingArtifactRepository.java,v >retrieving revision 1.5 >diff -u -r1.5 CachingArtifactRepository.java >--- src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/CachingArtifactRepository.java 13 Jan 2010 17:20:54 -0000 1.5 >+++ src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/CachingArtifactRepository.java 3 Feb 2010 04:01:20 -0000 >@@ -257,4 +257,14 @@ > CompoundQueryable<IArtifactKey> compound = new CompoundQueryable<IArtifactKey>(cached, innerRepo); > return compound.query(query, monitor); > } >+ >+ public IStatus executeBatch(Runnable runnable) { >+ try { >+ runnable.run(); >+ } catch (Exception e) { >+ return new Status(IStatus.ERROR, Activator.ID, e.getMessage(), e); >+ } >+ return Status.OK_STATUS; >+ } >+ > } >#P org.eclipse.equinox.p2.extensionlocation >Index: src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationArtifactRepository.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationArtifactRepository.java,v >retrieving revision 1.26 >diff -u -r1.26 ExtensionLocationArtifactRepository.java >--- src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationArtifactRepository.java 13 Jan 2010 17:21:38 -0000 1.26 >+++ src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationArtifactRepository.java 3 Feb 2010 04:01:21 -0000 >@@ -239,4 +239,13 @@ > ensureInitialized(); > return artifactRepository.query(query, monitor); > } >+ >+ public IStatus executeBatch(Runnable runnable) { >+ try { >+ runnable.run(); >+ } catch (Exception e) { >+ return new Status(IStatus.ERROR, Activator.ID, e.getMessage(), e); >+ } >+ return Status.OK_STATUS; >+ } > } >#P org.eclipse.equinox.p2.publisher >Index: src/org/eclipse/equinox/p2/publisher/Publisher.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/Publisher.java,v >retrieving revision 1.13 >diff -u -r1.13 Publisher.java >--- src/org/eclipse/equinox/p2/publisher/Publisher.java 13 Jan 2010 16:56:07 -0000 1.13 >+++ src/org/eclipse/equinox/p2/publisher/Publisher.java 3 Feb 2010 04:01:21 -0000 >@@ -157,6 +157,39 @@ > this.results = results; > } > >+ class ArtifactProcess implements Runnable { >+ >+ private final IPublisherAction[] actions; >+ private final IPublisherInfo info; >+ private final IProgressMonitor monitor; >+ private IStatus result = null; >+ >+ public ArtifactProcess(IPublisherAction[] actions, IPublisherInfo info, IProgressMonitor monitor) { >+ this.monitor = monitor; >+ this.info = info; >+ this.actions = actions; >+ } >+ >+ public void run() { >+ MultiStatus finalStatus = new MultiStatus("this", 0, "publishing result", null); //$NON-NLS-1$//$NON-NLS-2$ >+ for (int i = 0; i < actions.length; i++) { >+ if (monitor.isCanceled()) { >+ result = Status.CANCEL_STATUS; >+ return; >+ } >+ IStatus status = actions[i].perform(info, results, monitor); >+ finalStatus.merge(status); >+ monitor.worked(1); >+ } >+ result = finalStatus; >+ } >+ >+ public IStatus getStatus() { >+ return result; >+ } >+ >+ } >+ > public IStatus publish(IPublisherAction[] actions, IProgressMonitor monitor) { > if (monitor == null) > monitor = new NullProgressMonitor(); >@@ -164,15 +197,15 @@ > if (Tracing.DEBUG_PUBLISHING) > Tracing.debug("Invoking publisher"); //$NON-NLS-1$ > try { >- // run all the actions >- MultiStatus finalStatus = new MultiStatus("this", 0, "publishing result", null); //$NON-NLS-1$//$NON-NLS-2$ >- for (int i = 0; i < actions.length; i++) { >- if (sub.isCanceled()) >- return Status.CANCEL_STATUS; >- IStatus status = actions[i].perform(info, results, monitor); >- finalStatus.merge(status); >- sub.worked(1); >+ ArtifactProcess artifactProcess = new ArtifactProcess(actions, info, sub); >+ >+ if (info.getArtifactRepository() != null) { >+ info.getArtifactRepository().executeBatch(artifactProcess); >+ } else { >+ artifactProcess.run(); > } >+ IStatus finalStatus = artifactProcess.getStatus(); >+ > if (Tracing.DEBUG_PUBLISHING) > Tracing.debug("Publishing complete. Result=" + finalStatus); //$NON-NLS-1$ > if (!finalStatus.isOK()) >#P org.eclipse.equinox.p2.repository >Index: src/org/eclipse/equinox/p2/repository/artifact/IArtifactRepository.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/IArtifactRepository.java,v >retrieving revision 1.2 >diff -u -r1.2 IArtifactRepository.java >--- src/org/eclipse/equinox/p2/repository/artifact/IArtifactRepository.java 13 Jan 2010 17:27:35 -0000 1.2 >+++ src/org/eclipse/equinox/p2/repository/artifact/IArtifactRepository.java 3 Feb 2010 04:01:22 -0000 >@@ -139,4 +139,10 @@ > */ > public void removeDescriptor(IArtifactKey key); > >+ /** >+ * >+ * @param process >+ */ >+ public IStatus executeBatch(Runnable runnable); >+ > } >Index: src/org/eclipse/equinox/p2/repository/artifact/spi/AbstractArtifactRepository.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/p2/repository/artifact/spi/AbstractArtifactRepository.java,v >retrieving revision 1.2 >diff -u -r1.2 AbstractArtifactRepository.java >--- src/org/eclipse/equinox/p2/repository/artifact/spi/AbstractArtifactRepository.java 13 Jan 2010 17:27:35 -0000 1.2 >+++ src/org/eclipse/equinox/p2/repository/artifact/spi/AbstractArtifactRepository.java 3 Feb 2010 04:01:22 -0000 >@@ -10,15 +10,15 @@ > *******************************************************************************/ > package org.eclipse.equinox.p2.repository.artifact.spi; > >-import org.eclipse.equinox.p2.repository.spi.AbstractRepository; >- > import java.io.OutputStream; > import java.net.URI; > import java.util.Map; > import org.eclipse.core.runtime.*; >+import org.eclipse.equinox.internal.p2.repository.Activator; > import org.eclipse.equinox.p2.core.ProvisionException; > import org.eclipse.equinox.p2.metadata.IArtifactKey; > import org.eclipse.equinox.p2.repository.artifact.*; >+import org.eclipse.equinox.p2.repository.spi.AbstractRepository; > > /** > * The common base class for all artifact repository implementations. Clients must >@@ -86,4 +86,13 @@ > public IArtifactDescriptor createArtifactDescriptor(IArtifactKey key) { > return new ArtifactDescriptor(key); > } >+ >+ public IStatus executeBatch(Runnable runnable) { >+ try { >+ runnable.run(); >+ } catch (Exception e) { >+ return new Status(IStatus.ERROR, Activator.ID, e.getMessage(), e); >+ } >+ return Status.OK_STATUS; >+ } > } >#P org.eclipse.equinox.p2.tests >Index: src/org/eclipse/equinox/p2/tests/AbstractWrappedArtifactRepository.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/AbstractWrappedArtifactRepository.java,v >retrieving revision 1.3 >diff -u -r1.3 AbstractWrappedArtifactRepository.java >--- src/org/eclipse/equinox/p2/tests/AbstractWrappedArtifactRepository.java 13 Jan 2010 17:28:24 -0000 1.3 >+++ src/org/eclipse/equinox/p2/tests/AbstractWrappedArtifactRepository.java 3 Feb 2010 04:01:23 -0000 >@@ -139,4 +139,8 @@ > public IQueryResult<IArtifactKey> query(IQuery<IArtifactKey> query, IProgressMonitor monitor) { > return delegate.query(query, monitor); > } >+ >+ public IStatus executeBatch(Runnable runnable) { >+ return delegate.executeBatch(runnable); >+ } > } >Index: src/org/eclipse/equinox/p2/tests/artifact/repository/SimpleArtifactRepositoryTest.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/SimpleArtifactRepositoryTest.java,v >retrieving revision 1.26 >diff -u -r1.26 SimpleArtifactRepositoryTest.java >--- src/org/eclipse/equinox/p2/tests/artifact/repository/SimpleArtifactRepositoryTest.java 13 Jan 2010 17:28:24 -0000 1.26 >+++ src/org/eclipse/equinox/p2/tests/artifact/repository/SimpleArtifactRepositoryTest.java 3 Feb 2010 04:01:23 -0000 >@@ -243,6 +243,149 @@ > > } > >+ public void testBatchProcessingOK() { >+ try { >+ repositoryFile = getTempFolder(); >+ repositoryURI = repositoryFile.toURI(); >+ Map properties = new HashMap(); >+ SimpleArtifactRepository repo = (SimpleArtifactRepository) getArtifactRepositoryManager().createRepository(repositoryURI, "My Repo", IArtifactRepositoryManager.TYPE_SIMPLE_REPOSITORY, properties); >+ IStatus status = repo.executeBatch(new Runnable() { >+ public void run() { >+ // empty >+ } >+ }); >+ assertTrue(status.isOK()); >+ } catch (Exception e) { >+ fail("Test failed", e); >+ } >+ } >+ >+ class FailingSimpleArtifactRepository extends SimpleArtifactRepository { >+ boolean executeBatch = false; >+ >+ /** >+ * @param repositoryName >+ * @param location >+ * @param properties >+ */ >+ public FailingSimpleArtifactRepository(String repositoryName, URI location, Map properties) { >+ super(repositoryName, location, properties); >+ } >+ >+ public IStatus executeBatch(Runnable runnable) { >+ executeBatch = true; >+ return super.executeBatch(runnable); >+ } >+ >+ public void save() { >+ if (executeBatch) >+ throw new RuntimeException("foo"); >+ } >+ } >+ >+ public void testBatchProcessingExceptions() { >+ try { >+ SimpleArtifactRepository simpleArtifactRepository = new FailingSimpleArtifactRepository("foo", new URI("http://foo.bar"), null); >+ >+ IStatus status = simpleArtifactRepository.executeBatch(new Runnable() { >+ public void run() { >+ throw new RuntimeException("bar"); >+ } >+ }); >+ assertFalse(status.isOK()); >+ assertEquals("foo", status.getException().getMessage()); >+ assertEquals(1, status.getChildren().length); >+ assertEquals("bar", status.getChildren()[0].getMessage()); >+ } catch (Exception e) { >+ fail("Test failed", e); >+ } >+ } >+ >+ public void testBatchProcessingSaveException() { >+ try { >+ SimpleArtifactRepository simpleArtifactRepository = new FailingSimpleArtifactRepository("foo", new URI("http://foo.bar"), null); >+ >+ IStatus status = simpleArtifactRepository.executeBatch(new Runnable() { >+ public void run() { >+ // empty >+ } >+ }); >+ assertFalse(status.isOK()); >+ assertEquals("foo", status.getException().getMessage()); >+ } catch (Exception e) { >+ fail("Test failed", e); >+ } >+ } >+ >+ public void testBatchProcessingException() { >+ try { >+ repositoryFile = getTempFolder(); >+ repositoryURI = repositoryFile.toURI(); >+ Map properties = new HashMap(); >+ SimpleArtifactRepository repo = (SimpleArtifactRepository) getArtifactRepositoryManager().createRepository(repositoryURI, "My Repo", IArtifactRepositoryManager.TYPE_SIMPLE_REPOSITORY, properties); >+ IStatus status = repo.executeBatch(new Runnable() { >+ public void run() { >+ throw new RuntimeException(); >+ } >+ }); >+ assertFalse(status.isOK()); >+ } catch (Exception e) { >+ fail("Test failed", e); >+ } >+ } >+ >+ class TrackSavignSimpleArtifactRepository extends SimpleArtifactRepository { >+ boolean executeBatch = false; >+ public boolean didSave = false; >+ >+ /** >+ * @param repositoryName >+ * @param location >+ * @param properties >+ */ >+ public TrackSavignSimpleArtifactRepository(String repositoryName, URI location, Map properties) { >+ super(repositoryName, location, properties); >+ } >+ >+ public IStatus executeBatch(Runnable runnable) { >+ executeBatch = true; >+ return super.executeBatch(runnable); >+ } >+ >+ public void save() { >+ if (executeBatch) >+ didSave = true; >+ } >+ } >+ >+ public void testBatchProcessingTrackSaving() { >+ try { >+ TrackSavignSimpleArtifactRepository simpleArtifactRepository = new TrackSavignSimpleArtifactRepository("foo", new URI("http://foo.bar"), null); >+ simpleArtifactRepository.executeBatch(new Runnable() { >+ public void run() { >+ //do nothing; >+ } >+ }); >+ assertTrue(simpleArtifactRepository.didSave); >+ } catch (Exception e) { >+ fail("Test failed", e); >+ } >+ } >+ >+ public void testBatchProcessingTrackSavingException() { >+ try { >+ TrackSavignSimpleArtifactRepository simpleArtifactRepository = new TrackSavignSimpleArtifactRepository("foo", new URI("http://foo.bar"), null); >+ simpleArtifactRepository.executeBatch(new Runnable() { >+ public void run() { >+ throw new RuntimeException(); >+ } >+ }); >+ assertTrue(simpleArtifactRepository.didSave); >+ } catch (Exception e) { >+ fail("Test failed", e); >+ } >+ } >+ > /* > * Test that the appropriate location for a packed feature is returned. > */ >Index: src/org/eclipse/equinox/p2/tests/publisher/TestArtifactRepository.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/TestArtifactRepository.java,v >retrieving revision 1.6 >diff -u -r1.6 TestArtifactRepository.java >--- src/org/eclipse/equinox/p2/tests/publisher/TestArtifactRepository.java 13 Jan 2010 17:28:25 -0000 1.6 >+++ src/org/eclipse/equinox/p2/tests/publisher/TestArtifactRepository.java 3 Feb 2010 04:01:23 -0000 >@@ -307,4 +307,13 @@ > } > }; > } >+ >+ public IStatus executeBatch(Runnable runnable) { >+ try { >+ runnable.run(); >+ } catch (Exception e) { >+ return new Status(IStatus.ERROR, "org.eclipse.equinox.p2.tests.publisher", e.getMessage(), e); >+ } >+ return Status.OK_STATUS; >+ } > } >\ No newline at end of file >#P org.eclipse.equinox.p2.updatesite >Index: src/org/eclipse/equinox/internal/p2/updatesite/artifact/UpdateSiteArtifactRepository.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.updatesite/src/org/eclipse/equinox/internal/p2/updatesite/artifact/UpdateSiteArtifactRepository.java,v >retrieving revision 1.37 >diff -u -r1.37 UpdateSiteArtifactRepository.java >--- src/org/eclipse/equinox/internal/p2/updatesite/artifact/UpdateSiteArtifactRepository.java 13 Jan 2010 17:29:41 -0000 1.37 >+++ src/org/eclipse/equinox/internal/p2/updatesite/artifact/UpdateSiteArtifactRepository.java 3 Feb 2010 04:01:24 -0000 >@@ -146,4 +146,8 @@ > public IQueryResult<IArtifactKey> query(IQuery<IArtifactKey> query, IProgressMonitor monitor) { > return delegate.query(query, monitor); > } >+ >+ public IStatus executeBatch(Runnable runnable) { >+ return delegate.executeBatch(runnable); >+ } > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 274025
:
135911
|
135912
|
137885
|
137943
|
137945
|
150051
|
150052
|
150882
|
150883
| 157998 |
158248