The Eclipse User Storage Service (USS) is now deprecated and will be taken offline on July 2, 2025.
I suggest we document the potential impact on users who choose not to upgrade on this issue. This will help us identify any critical issues that may arise and brainstorm possible solutions to mitigate them.
I propose setting up an Eclipse IDE instance configured to connect to an offline server to simulate and assess the impact.
Requirements
Assess the impact on older versions of the Eclipse IDE.
Conduct testing to identify any potential issues for users who do not upgrade.
Explore server-side solutions to minimize the impact on end-users who continue using older versions.
Use Preference Synchronization with eclipse.org target under Window > Preferences > Oomph > Setup Tasks > Preference Synchronization
Use Preference Synchronization with marketplace.eclipse.org target under Window > Preferences > Oomph > Setup Tasks > Preference Synchronization
View remote storage of USS data under Window > Preferences > Oomph > Setup Tasks > Preference Synchronization
Use local Oomph recorder, which shouldn't use remote storage initially
Results
When testing the 2024-03 and 2021-03 IDEs to give a decent snapshot of somewhat recent versions, the same results were seen across both IDEs. When attempting to sync preferences, there would be a half second delay and the Preferences window would close. When attempting to "View remote storage", a loading window would pop up for a fraction of a second and shut it self, leaving the preferences window open. These operations would not be successful, but would also not prompt an error dialogue/message and would instead fail silently.
Within the workspace log, initial tests triggered the log message seen in Appendix 1. If the service had a reason to dispose of the blobs and rebuild, such as switching the Storage provider to marketplace.e.o, the error would then switch to the error message in Appendix 2. None of the errors in tests 1-3 led to an unusable or crashed workspace.
Using oomph for local files in test 4 seemed unaffected in my testing, with both the sync and storage to local files working as intended with the broken USS API URL.
Additionally, I attempted testing with 2019-03, but the property we currently use didn't seem to trigger, or it failed even more quietly than the newer IDEs. We may have to reach out to someone more familiar with the USS/oomph plugin to be able to find out if that changed or not if we want to verify testing in that release.
Appendix
1
!MESSAGE Window -> Preferences -> Oomph -> Setup Tasks -> Preference Synchronizer -> 'Synchronize with Eclipse.org' is enabled and the synchronization has failed for the following reason:!STACK 0java.net.UnknownHostException: api-staging-bricked.eclipse.org: Name or service not known at java.base/java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) at java.base/java.net.InetAddress$PlatformNameService.lookupAllHostAddr(InetAddress.java:934) at java.base/java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1543) at java.base/java.net.InetAddress$NameServiceAddresses.get(InetAddress.java:852) at java.base/java.net.InetAddress.getAllByName0(InetAddress.java:1533) at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1385) at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1306) at org.apache.http.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:45) at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:112) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:376) at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393) at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236) at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186) at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89) at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) at org.apache.http.client.fluent.Request.internalExecute(Request.java:173) at org.apache.http.client.fluent.Executor.execute(Executor.java:262) at org.eclipse.userstorage.internal.Session.sendRequest(Session.java:601) at org.eclipse.userstorage.internal.Session$RequestTemplate.send(Session.java:489) at org.eclipse.userstorage.internal.Session.retrieveBlob(Session.java:229) at org.eclipse.userstorage.internal.Storage.retrieveBlob(Storage.java:373) at org.eclipse.userstorage.internal.Blob.getContents(Blob.java:109) at org.eclipse.oomph.setup.internal.sync.RemoteDataProvider.retrieve(RemoteDataProvider.java:92) at org.eclipse.oomph.setup.internal.sync.Snapshot.createWorkingCopy(Snapshot.java:112) at org.eclipse.oomph.setup.internal.sync.Synchronization.createWorkingCopy(Synchronization.java:154) at org.eclipse.oomph.setup.internal.sync.Synchronization.<init>(Synchronization.java:94) at org.eclipse.oomph.setup.internal.sync.Synchronizer.createSynchronization(Synchronizer.java:128) at org.eclipse.oomph.setup.internal.sync.Synchronizer.synchronize(Synchronizer.java:105) at org.eclipse.oomph.setup.internal.sync.SynchronizerJob.run(SynchronizerJob.java:147) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
2
!ENTRY org.eclipse.oomph.setup.ui 2 0 2024-11-01 14:17:20.694!MESSAGE Window -> Preferences -> Oomph -> Setup Tasks -> Preference Synchronizer -> 'Synchronize with Marketplace User Storage' is enabled and the synchronization has failed for the following reason:!STACK 0java.lang.IllegalStateException: Blob disposed: Marketplace User Storage (c******************I/user_setup) at org.eclipse.userstorage.internal.Blob.checkNotDisposed(Blob.java:202) at org.eclipse.userstorage.internal.Blob.getContents(Blob.java:108) at org.eclipse.oomph.setup.internal.sync.RemoteDataProvider.retrieve(RemoteDataProvider.java:92) at org.eclipse.oomph.setup.internal.sync.Snapshot.createWorkingCopy(Snapshot.java:112) at org.eclipse.oomph.setup.internal.sync.Synchronization.createWorkingCopy(Synchronization.java:154) at org.eclipse.oomph.setup.internal.sync.Synchronization.<init>(Synchronization.java:94) at org.eclipse.oomph.setup.internal.sync.Synchronizer.createSynchronization(Synchronizer.java:128) at org.eclipse.oomph.setup.internal.sync.Synchronizer.synchronize(Synchronizer.java:105) at org.eclipse.oomph.setup.internal.sync.SynchronizerJob.run(SynchronizerJob.java:147) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
@cguindon do we want to reach out to the Oomph team to see if there is anything else we should test? I had looked through everything else and it seems like those are the only things that reach out to the USS API. If we are good with this testing, I'm gonna say we should close this as testing being complete.
As a follow up to our call, I checked what happens when the error is a 500 instead as an example. The same silent failure happened with the below error. It's a little different than I expected in terms of the log, but the same results.
!ENTRY org.eclipse.oomph.setup.ui 2 0 2024-11-14 14:21:33.765!MESSAGE Window -> Preferences -> Oomph -> Setup Tasks -> Preference Synchronizer -> 'Synchronize with Eclipse.org' is enabled and the synchronization has failed for the following reason:!STACK 0org.eclipse.userstorage.util.ProtocolException: GET http://localhost:3000/uss/blob/c******************I/user_setup HTTP/1.1 500 Internal Server Error at org.eclipse.userstorage.internal.Session.getStatusCode(Session.java:632) at org.eclipse.userstorage.internal.Session$2.handleResponse(Session.java:191) at org.eclipse.userstorage.internal.Session$2.handleResponse(Session.java:1) at org.eclipse.userstorage.internal.Session$RequestTemplate.send(Session.java:495) at org.eclipse.userstorage.internal.Session.retrieveBlob(Session.java:229) at org.eclipse.userstorage.internal.Storage.retrieveBlob(Storage.java:373) at org.eclipse.userstorage.internal.Blob.getContents(Blob.java:109) at org.eclipse.oomph.setup.internal.sync.RemoteDataProvider.retrieve(RemoteDataProvider.java:92) at org.eclipse.oomph.setup.internal.sync.Snapshot.createWorkingCopy(Snapshot.java:112) at org.eclipse.oomph.setup.internal.sync.Synchronization.createWorkingCopy(Synchronization.java:154) at org.eclipse.oomph.setup.internal.sync.Synchronization.<init>(Synchronization.java:94) at org.eclipse.oomph.setup.internal.sync.Synchronizer.createSynchronization(Synchronizer.java:128) at org.eclipse.oomph.setup.internal.sync.Synchronizer.synchronize(Synchronizer.java:105) at org.eclipse.oomph.setup.internal.sync.SynchronizerJob.run(SynchronizerJob.java:147) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)