[files] In case of a back-end error, UniversalFileTransferUtility should provide better diagnostics and allow retry
Bugzilla Link | 408548 |
Status | NEW |
Importance | P3 normal |
Reported | May 21, 2013 04:46 EDT |
Modified | May 21, 2013 04:55 EDT |
Version | 3.4.2 |
Reporter | Martin Oberhuber |
Description
Created attachment 231237
Screenshot of error dialog
Build ID: RSE 3.4.2 (Juno SR2)
On top of Platform Juno SR2 on Win7 32-bit
When stress-testing FTP transfer of a huge directory structure over a relatively slow ADSL connection, attached error dialog came up once. Transfer of the file structure resumed after accepting the dialog, but it was unclear whether everything was transferred correctly or not.
This shows several problems:
- As a user, when seeing the dialog I want to know what file is affected.
- As a user, I want to be offered an option to re-try the transfer.
Especially since the dialog shows up very rarely, "re-try" would be important. - As a developer, I want to see a backtrace of where exactly the problem
or exception originated, such that I can make the transfer more reliable
in the future.
There is also a potential enhancement request:
- RSE should offer a "batch mode transfer" for unattended use, where errors
are only logged (after retrying for instance 3 times).
Not getting good diagnostics, and not being able to re-try is a serious problem IMO for the use-case of transferring a large folder structure.
Steps to Reproduce:
-------------------
I think that the problem should be relatively easy to reproduce by pulling a network cable during a long ongoing transfer, or by killing the dstore server. What I had done was an FTP connection to a remote Solaris host, the "Copy" a folder with 2000 files / 800MB data and "paste" that into a the Local Files subsystem.
Backtraces:
-----------
I made a thread dump at the time the dialog was shown, here are the relevant parts of it:
"main" prio=6 tid=0x02459400 nid=0x1cc runnable [0x0018f000]
java.lang.Thread.State: RUNNABLE
at org.eclipse.swt.internal.win32.OS.WaitMessage(Native Method)
at org.eclipse.swt.widgets.Display.sleep(Display.java:4657)
at org.eclipse.jface.window.Window.runEventLoop(Window.java:827)
at org.eclipse.jface.window.Window.open(Window.java:802)
at org.eclipse.jface.dialogs.ErrorDialog.open(ErrorDialog.java:363)
at org.eclipse.rse.ui.messages.SystemMessageDialog.open(SystemMessageDialog.java:460)
at org.eclipse.rse.files.ui.resources.UniversalFileTransferUtility$2.run(UniversalFileTransferUtility.java:394)
at org.eclipse.ui.internal.UILockListener.doPendingWork(UILockListener.java:164)
at org.eclipse.ui.internal.UISynchronizer$3.run(UISynchronizer.java:158)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
- locked <0x0dd40590> (a org.eclipse.swt.widgets.RunnableLock)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4145)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3762)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1109)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:993)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:138)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:610)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:567)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:354)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:181)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:636)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591)
at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
"Worker-546" prio=6 tid=0x3ba50800 nid=0x20c8 in Object.wait() [0x3ecbf000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at org.eclipse.ui.internal.Semaphore.acquire(Semaphore.java:43)
- locked <0x0dd40308> (a org.eclipse.ui.internal.Semaphore)
at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:168)
at org.eclipse.swt.widgets.Display.syncExec(Display.java:4688)
at org.eclipse.rse.files.ui.resources.UniversalFileTransferUtility.runInDisplayThread(UniversalFileTransferUtility.java:3037)
at org.eclipse.rse.files.ui.resources.UniversalFileTransferUtility.downloadFileToWorkspace(UniversalFileTransferUtility.java:391)
at org.eclipse.rse.files.ui.resources.UniversalFileTransferUtility.downloadResourcesToWorkspace(UniversalFileTransferUtility.java:876)
at org.eclipse.rse.files.ui.resources.UniversalFileTransferUtility.downloadResourcesToWorkspace(UniversalFileTransferUtility.java:918)
at org.eclipse.rse.files.ui.resources.UniversalFileTransferUtility.downloadResourcesToWorkspace(UniversalFileTransferUtility.java:918)
at org.eclipse.rse.files.ui.resources.UniversalFileTransferUtility.downloadResourcesToWorkspace(UniversalFileTransferUtility.java:918)
at org.eclipse.rse.internal.files.ui.view.SystemViewRemoteFileAdapter.doDrag(SystemViewRemoteFileAdapter.java:1901)
at org.eclipse.rse.internal.ui.view.SystemDNDTransferRunnable.transferRSEResources(SystemDNDTransferRunnable.java:221)
at org.eclipse.rse.internal.ui.view.SystemDNDTransferRunnable.runInWorkspace(SystemDNDTransferRunnable.java:742)
at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:38)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)
"Worker-67" prio=6 tid=0x3ba51c00 nid=0x223c waiting on condition [0x3de8f000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at org.eclipse.rse.internal.services.files.ftp.FTPService.listFiles(FTPService.java:1509)
at org.eclipse.rse.internal.services.files.ftp.FTPService.internalFetch(FTPService.java:805)
at org.eclipse.rse.services.files.AbstractFileService.list(AbstractFileService.java:104)
at org.eclipse.rse.subsystems.files.core.servicesubsystem.FileServiceSubSystem.internalList(FileServiceSubSystem.java:380)
at org.eclipse.rse.subsystems.files.core.servicesubsystem.FileServiceSubSystem.list(FileServiceSubSystem.java:572)
at org.eclipse.rse.subsystems.files.core.subsystems.RemoteFileSubSystem.list(RemoteFileSubSystem.java:997)
at org.eclipse.rse.subsystems.files.core.subsystems.RemoteFileSubSystem.internalResolveFilterString(RemoteFileSubSystem.java:708)
at org.eclipse.rse.subsystems.files.core.subsystems.RemoteFileSubSystem.internalResolveFilterStrings(RemoteFileSubSystem.java:490)
at org.eclipse.rse.core.subsystems.SubSystem.resolveFilterStrings(SubSystem.java:2300)
at org.eclipse.rse.internal.ui.view.SystemViewFilterReferenceAdapter.internalGetChildren(SystemViewFilterReferenceAdapter.java:466)
at org.eclipse.rse.internal.ui.view.SystemViewFilterReferenceAdapter.getChildren(SystemViewFilterReferenceAdapter.java:284)
at org.eclipse.rse.internal.ui.view.SystemViewFilterReferenceAdapter.getChildren(SystemViewFilterReferenceAdapter.java:292)
at org.eclipse.rse.ui.operations.SystemFetchOperation.execute(SystemFetchOperation.java:441)
at org.eclipse.rse.ui.operations.SystemFetchOperation.run(SystemFetchOperation.java:182)
at org.eclipse.rse.ui.view.AbstractSystemViewAdapter.fetchDeferredChildren(AbstractSystemViewAdapter.java:2290)
at org.eclipse.ui.progress.DeferredTreeContentManager$1.run(DeferredTreeContentManager.java:235)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)

rse220_connclosed.gif