Skip to content

[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

rse220_connclosed.gif