[Tickets #14811] Re: Attachments get lost after drag&drop import

noreply at bugs.horde.org noreply at bugs.horde.org
Mon Apr 19 16:27:53 UTC 2021


BITTE NICHT AUF DIESE NACHRICHT ANTWORTEN. NACHRICHTEN AN DIESE  
E-MAIL-ADRESSE WERDEN NICHT GELESEN.

Ticket-URL: https://bugs.horde.org/ticket/14811
------------------------------------------------------------------------------
  Ticket           | 14811
  Aktualisiert Von | wahnes at uni-koeln.de
  Zusammenfassung  | Attachments get lost after drag&drop import
  Warteschlange    | IMP
  Version          | 6.2.21
  Typ              | Bug
  Status           | Unconfirmed
  Priorität        | 1. Low
  Milestone        |
  Patch            |
  Zuständige       |
------------------------------------------------------------------------------


wahnes at uni-koeln.de (2021-04-19 16:27) hat geschrieben:

I have spent some time looking at this issue from different perspectives.

Currently, I'm wondering if this bug may have been introduced by a  
change in common browser behavior, and not by a code change in Horde.

What I noticed is that the problem of missing attachments only shows  
up when the upload of several files via drag-and-drop actually occurs  
at once, i.e. it only happens when these file uploads take place in  
parallel. The problem really manifests itself when the second upload  
requests completes before the first one is finished (or the third one  
before the second, etc.). So it's a matter of timing. I searched for  
ways to prevent that from happening on the client side (using  
Javascript), but that didn't prove successful, at least with my level  
of Javascript knowledge and given the concurrent nature of Javascript  
processing. So I ended up tackling this problem on the server side.  
Recently, I built a special configuration on our load balancer that  
will queue parallel Imp file uploads of the same session and only  
allow one upload request to proceed at a time (the second upload  
commences only after the first has finished), thereby serializing one  
user's upload requests. After this modification to server-side upload  
request timing, no more problems with drag-and-drop attachment uploads  
have come up.

So my theory is: Could it be that common browsers formerly would only  
upload one file at a time in XML-Http-Request environments, but  
nowadays, they upload several files in parallel, and Imp/Horde is not  
prepared for this parallelized upload behavior?

By the way, in case that others who are experiencing this trouble  
haven't noticed yet: this problem does not occur when clicking the  
"Add Attachment" link and selecting several files for upload in the  
file selection window. When uploading several files at once this way,  
only one HTTP upload request is generated which uploads several files  
in a row, as opposed to the drag-and-drop method, which creates  
several HTTP requests, and these, in turn, upload one file each. (One  
can make a distinction between these types of file upload requests,  
initiated either through drag-and-drop, or by clicking the link, on  
the HTTP level by examining the query parameters. While the upload URL  
is the same otherwise, the "one request but potentially many files"  
type of request carries a "jsonhtml=1" parameter.)

 From the insights I have gathered so far, I reckon the easiest way to  
permanently resolve the timing issue would be a modification on the  
client (Javascript) side. If one could have some sort of  
token/semaphore system to limit the number of upload request which can  
happen at the same time, this would effectively serialize the upload  
requests and thus resolve the issue of corrupted drag-and-drop  
attachment uploads. So the idea would be: Initially, there is exactly  
one "upload permission" token held by the main process. Each  
Javascript file upload requests needs to acquire this "upload  
permission" before doing anything. Once the first request takes this  
token, it may start its upload process, exclusively. Meanwhile, a  
second upload request could be waiting in the browser, but not  
proceed, because there is no further upload permission token. So the  
second upload will wait for the first one to finish, as the first  
upload returns the upload permission token upon completion to the main  
process, and the second uploads now seizes control of the token. And  
so on, until all uploads are completed. But like I said,  
unfortunately, I'm unable to implement such a mechanism in Javascript  
myself.

Another way that I could think of to resolve this would be to combine  
the "several requests with one file each" into a single request that  
uploads several files, like is done when clicking the "Add Attachment"  
link. But I suppose that this kind of "request merging" is not  
possible, because that's probably what would have been implemented  
originally, would it be feasible. I think it's safe to assume that the  
current versatile way of the "imp/addAttachment" request is really  
there for a reason. i.e. because "request merging" is not possible in  
Javascript.





More information about the bugs mailing list