Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 87209

Summary: The timeout concept does not scale
Product: [Eclipse Project] Platform Reporter: Oyvind Harboe <oyvind.harboe>
Component: CVSAssignee: platform-cvs-inbox <platform-cvs-inbox>
Status: RESOLVED DUPLICATE QA Contact:
Severity: enhancement    
Priority: P3    
Version: 3.1   
Target Milestone: ---   
Hardware: PC   
OS: Windows XP   
Whiteboard:

Description Oyvind Harboe CLA 2005-03-05 09:26:35 EST
I can't quite see that the timeout is necessary. How is the abort button
insufficient?

Instead of having a timeout option, perhaps put up a requester that says that
CVS has been waiting a really long time and is still waiting. This requster has
a "abort" button. 

Alternatively no reequester. The progress message could be escalated to reflect
that Eclipse is getting "worried", but that things could still work out fine.

I tagged ca. 10-20000 files and got an error message, but simply increasing the
timeout fixed the problem.
Comment 1 Michael Valenta CLA 2005-03-07 11:16:26 EST
The timeout is needed for many situations. As an example, consider the case 
where a user has several projects in their workspace mapped to different 
repositories. If one of the repositories is not responding, the operation 
(e.g. synchronize) would time out on that repository and continue with the 
others. If there was no timeout, the user would be forced to cancel the entire 
operation and then figure out the subset of projects for which the operation 
would succeed.
Comment 2 Oyvind Harboe CLA 2005-03-07 12:33:07 EST
Can I appeal the decision to close this issue?



The current situation is not good.

Eclipse fails when everything is in fact working correctly.

There is also no correct timeout value.

This problem does not exist with the command line versions of CVS and I don't
accept the example case give in #1 as an example where the timeout option is
indispensible.


Øyvind
Comment 3 Michael Valenta CLA 2005-03-07 12:45:44 EST
What would it accomplish if we left this open. The solution you proposed is 
unacceptable since it depends on the user aborting the operation. If the user 
didn't know that there was a blocked background operation (e.g. QuickDiff), it 
would be blocked indefinitely. Also, the case that I mentioned happens all the 
time to me so I don't know what you mean when you say it is invalid.

I suppose that it would be possible to prompt the user when a timeout occurs 
to ask if they want to continue waiting (or if they want to increase the 
timeout value). However, this is not an easy fix and I do not have time to 
address it. Are you willing to implement, test and support this? If not, there 
is no point in leaving this bug open.
Comment 4 Oyvind Harboe CLA 2005-03-07 13:21:58 EST
>What would it accomplish if we left this open. The solution you proposed is 
>unacceptable since it depends on the user aborting the operation. If the user 
>didn't know that there was a blocked background operation (e.g. QuickDiff), it 
>would be blocked indefinitely. Also, the case that I mentioned happens all the 
>time to me so I don't know what you mean when you say it is invalid.
>
>I suppose that it would be possible to prompt the user when a timeout occurs 
>to ask if they want to continue waiting (or if they want to increase the 
>timeout value). However, this is not an easy fix and I do not have time to 
>address it. Are you willing to implement, test and support this? If not, there 
>is no point in leaving this bug open.

If we can agree that the timeout concept does not scale well, then I think we've
accomplished what we can hope to accomplish with this PR.

AFAIK, it is a stated goal of the CVS support and Eclipse generally to scale
more smoothly.

Both todays implementation and the one that I tossed up in the air have
unacceptable issues.

I believe a permanent fix to this problem would minimally entail:

- no modal dialog boxes
- no options
- the user eventually aborting the operation
- the user being able to easily tell precisely which operation that he aborted
- a long running operation should not unecessarily hold up other shorter 
  operations

Øyvind
Comment 5 Michael Valenta CLA 2005-03-07 13:42:31 EST
Actually, I don't see the link between having a timeout and scalability. It is 
more an issue of robustness. More specifically, how robust the CVS plugin is 
in the face of poor network communications. My feeling is that under normal 
working conditions, a 1 minute timeout is sufficient. For those cases where it 
is not, the timeout can be increased. One could argue that the link between 
the timeout occuring and the solution (increasing the timeout) is too weak and 
that a better link is needed (hence the solution I proposed). One could also 
claim that a 1 minute default is not long enough and that the default timeout 
should be increased. However, to require the user to manually cancel any 
operation that is not reponding is unacceptable.
Comment 6 Oyvind Harboe CLA 2005-03-07 13:58:54 EST
>Actually, I don't see the link between having a timeout and scalability.

Try committing 20-30k files against a server on the LAN. There is plenty of
activity all the time, yet it times out.

Is this the intended and expected behaviour?

Shouldn't there be some mechanism that resets the timeout whenever there is
evidence of activity on the line?

>However, to require the user to manually cancel any operation that is not 
>reponding is unacceptable.

I remain unconvinced.

How come the CVS command line handle these cases without trouble?



Øyvind
Comment 7 Michael Valenta CLA 2005-03-07 14:13:07 EST
The CVS command line only has to deal with one operation to a single 
repository at a time. In that case, it is acceptable for the user the perform 
a CTRL-C if the connection hangs. 

Do you still have problems after increasing your timeout value?
Comment 8 Oyvind Harboe CLA 2005-03-07 15:05:32 EST
>The CVS command line only has to deal with one operation to a single 
>repository at a time. In that case, it is acceptable for the user the perform 
>a CTRL-C if the connection hangs. 

I thought the progress view was intended to support the concept of multiple
parallel activities?

>Do you still have problems after increasing your timeout value?

In one particular case, yes.

I've got another case where we plain gave up on committing to CVS using Eclipse.
Roughly 50,000 files at 200k-1mbyte each.

Øyvind
Comment 9 Michael Valenta CLA 2005-03-07 15:59:41 EST
So in one case, you no longer have a problem and in another you don't know if 
removing the timeout will even help you. Is that correct? I'm not saying there 
aren't issues here that need to be addressed. I just think that removing the 
timeout does not address the issues and, even if it did, would cause a whole 
bunch more issues. 

And, yes the progress view is designed to give the user some feedback on what 
is going on. However, it is not ubiquitous (i.e. it is only used for 
background jobs and not all CVS operations are performed in the background). 
Regardless of that, I just don't think the user wants to be bothered with 
knowing when they have to kill a background job that is blocked. You may 
understand when to do this but I assure you that the average user does not.
Comment 10 Oyvind Harboe CLA 2005-03-07 16:37:32 EST
>So in one case, you no longer have a problem 

Kinda. It is very tedious to repeat tests with CVS. I don't need to commit the
exact same changes to the exact same files again.

I don't know if things are still broken with a slightly increased number of
files or slightly larger files.

> and in another you don't know if removing the timeout will even help you. 

There is no such thing as a repeatable experiment. I have a working theory that
the timeout problems are related to the large number of files.

Are we satisified that the timeout issue is related to a large number of files,
or is that an assumption that we should back up with more evidence?

>I'm not saying there  aren't issues here that need to be addressed. I just 
>think that removing the timeout does not address the issues and, even if it 
>did, would cause a whole bunch more issues. 

I agree that removing the timeout can cause other problems, but I don't see how
removing the timeout option wouldn't fix the particular issues I'm seing with
large commits/CVS operations.

>And, yes the progress view is designed to give the user some feedback on what 
>is going on. However, it is not ubiquitous (i.e. it is only used for 
>background jobs and not all CVS operations are performed in the background). 

Is this by design, or just because the work isn't done yet?

>Regardless of that, I just don't think the user wants to be bothered with 
>knowing when they have to kill a background job that is blocked. 

From a usability point of view, I remain unconvinced that timeout options are
preferable to progress messages and aborting operations.

>You may understand when to do this but I assure you that the average user does 
>not.

Although aborting operations might be difficult to understand for these users,
changing options is completely unfathomable to them.

The Eclipse CVS GUI is the best in the industry AFAIK. I'm seing Eclipse CVS GUI
& CVS deployed as a document control system amongst non-developers, all they use
is the CVS GUI. This is where I've seen most of the >10,000 files projects. Not
unfrequently the files are in the tens of megabytes. Eclipse does not seem to
have an issue with file-sizes & CVS.


Øyvind
Comment 11 Michael Valenta CLA 2005-03-07 16:54:06 EST
It sounds like we have agreed that:

1) removing the timeout will cause problems
2) there needs to be a stronger link between a timeout and the preference to 
change it. 

Basically, this is what I have been saying all along (Please read the second 
paragraph in comment 3). If you have some ideas on how to provide a stronger 
link between the timeout error and the timeout preference, I would be happy to 
listen. However, I will not consider removing the CVS timeout so there is no 
point in discussing it further.
Comment 12 Oyvind Harboe CLA 2005-03-08 02:08:30 EST
Regarding doing the actual work: I have made various changes to Eclipse CDT.
Some patches have been accepted, others have not.

What I have found is that there is little point in doing the work until there is
a consensus w.r.t. what the solution should be. 

>I suppose that it would be possible to prompt the user when a timeout occurs 
>to ask if they want to continue waiting (or if they want to increase the 
>timeout value). 

All told, I think this would be a good solution.

NB! I think it is necessary not to pause the CVS operation while the requester
is displayed.

Example of use as I imagine it:

- start a commit(or other long-running CVS operations)
- go home for the day
- during the night Eclipse would put up a requester asking this question
  *without pausing the commit*.
- once the Eclipse sees evidence of further activity on the line, what would
  happen to the requester? Presumably such false positives for timeouts could
  happen multiple times during a CVS operation.
- the next morning with everything committed

>It sounds like we have agreed that:
>
>1) removing the timeout will cause problems

I remain somewhat unconvinced that it isn't possible to solve these problems,
but I don't know enough about Eclipse CVS source code. Besides, it won't happen
as you say.
Comment 13 Michael Valenta CLA 2005-03-11 10:23:53 EST
Reopening
Comment 14 Michael Valenta CLA 2005-03-11 10:24:15 EST

*** This bug has been marked as a duplicate of 85317 ***