Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Properly deal with loss of network #16

Closed
danimo opened this issue Oct 23, 2012 · 15 comments
Closed

Properly deal with loss of network #16

danimo opened this issue Oct 23, 2012 · 15 comments

Comments

@danimo
Copy link
Contributor

danimo commented Oct 23, 2012

  • Introduce "disconnected" state
    • not an error, use offline icon
    • verify that QNetworkConfigurationManager is sufficient.
    • consider implementing a fallback solution / manual intervention
  • when the state changes to disconnected, gracefully shut down the sync process
  • when the stat changes back to connected, resume
@danimo
Copy link
Contributor Author

danimo commented Oct 23, 2012

This also includes scenarios where the app starts, but the network is not available (yet). No network should never be a hard error.

@ghost ghost assigned danimo Oct 23, 2012
@MTRichards
Copy link

Also it happens when a machine goes to sleep, and then resumes. The client needs a restart to get the client working again in this situation as well. We need to up the priority on this one.

@andrewtch
Copy link

Any plans when to expect this?

@danimo
Copy link
Contributor Author

danimo commented Dec 13, 2012

I am currently working on this and it will hopefully be in 1.2, the next feature release.

@helllo
Copy link

helllo commented Jan 24, 2013

Well, I am using 1.20 beta 2 and if I've forgotten to switch on Wifi, OC client (win7) will not reconnect unless I close it completely and start it again.

A buttom "refresh....." could be a deal. There where elsewhere "connected to www.abc.com as blabla" is displayed.

UPDATE: and make OC Client try to reconnect every x minutes as well.

@krstfrs
Copy link

krstfrs commented Feb 10, 2013

I don't think this is display-only error as stated in e.g. #316, as only the default clientsync folder reappears. All other configured sync folders disappear forever and are not synchronized.

@laryllian
Copy link

For every disconnect, I have a ".filename.ext.~xxxxxx" (read: dotfile with xxxxxx being a random number, such as 9o3vu0) in my owncloud folder, I guess this is also part of not properly dealing with network loss. This looks like the tries / partially downloaded file. This is a bug, I think.

@danimo
Copy link
Contributor Author

danimo commented Feb 23, 2013

Fixed in 1.2.1RC1, http://owncloud.org/sync-clients/#testing if you want to give it a try.

@laryllian
Copy link

I don't think it is already closed: OC client 1.2. shows the "everything synced" symbol with the white checkmark on a green circle when I am disconnected. This is confusing; it could be that it wasn't synced for days. How about no special symbold at all (just the clouds) in the case of network loss. Maybe this is difficult to do, but this would be great and helpful, since an indicator should indicate something. ;-)

@Overand
Copy link

Overand commented Mar 8, 2013

I'm unsure if this is working "as expected" at least in OS X. Upon connection loss (due to sleeping), I left the thing for hours and it never restarted the sync. After restarting the client, the sync started - BUT there was no visual feedback.

@webstudiolund
Copy link

Have this problem too. My father's computer connects with a usb stick to 3G and the program for connecting is much, much slower. The owncloud client failes almost immeditely and has to be closed through the process manager for making a restart possible. First then it connects, and works as it should. This procedure is too complicated for my father so it would really be good if the client did not break down but could try to connect periodically until it succeeds when the network is estabilished. Or maybe another icon in the activity field for "not connected" and a choice in the menu to "try to connect now".

@andrewtch
Copy link

Yup, still not working as needed. At least, button 'try to reconnect now' or auto-reconnecting every minute would be a very nice feature.

@danimo danimo reopened this Mar 10, 2013
@danimo
Copy link
Contributor Author

danimo commented Mar 10, 2013

Ok will investigate

@bluecola
Copy link

Any idea when this issue will be resolved?

@danimo
Copy link
Contributor Author

danimo commented Nov 25, 2013

This should be fixed for 1.5, so I will close this now. I would like to encourage everyone subscribed to this bug to try the first beta (due to be released later this week) to verify that everything works as expected.

@danimo danimo closed this as completed Nov 25, 2013
ogoffart added a commit that referenced this issue Jan 7, 2016
The Qt HTTP thread calls authenticationRequired (indirectly) using a
BlockingQueuedConnection. So when we call invalidateToken from slot
connected to this signal and end up calling QNAM::clearAccessCache which
waits on the thread for 5 seconds

Backtraces:

Qt HTTP thread:
 #0  0x00007ffff20c707f in pthread_cond_wait@@GLIBC_2.3.2 ()
 #1  0x00007ffff43f0c0b in QWaitConditionPrivate::wait
 #2  QWaitCondition::wait
 #3  0x00007ffff43ea06b in QSemaphore::acquire
 #4  0x00007ffff45dcf6f in QMetaObject::activate
[...]
 #9  0x00007ffff45dd607 in QMetaObject::activate
 #10 0x00007ffff4edbaf7 in QHttpNetworkReply::authenticationRequired
 #11 0x00007ffff4e0b2b4 in QHttpNetworkConnectionPrivate::handleAuthenticateChallenge
 #12 0x00007ffff4e10753 in QHttpNetworkConnectionChannel::handleStatus
 #13 0x00007ffff4e11cc9 in QHttpNetworkConnectionChannel::allDone
 #14 0x00007ffff4e14605 in QHttpProtocolHandler::_q_receiveReply

Main Thread:
 #0  0x00007ffff20c7428 in pthread_cond_timedwait@@GLIBC_2.3.2 ()
 #1  0x00007ffff43f0b56 in QWaitConditionPrivate::wait_relative (time=5000, this=0x136c580)
 #2  QWaitConditionPrivate::wait (time=5000, this=0x136c580)
 #3  QWaitCondition::wait (this=this@entry=0x136c788, mutex=mutex@entry=0x136c760, time=time@entry=5000)
 #4  0x00007ffff43efa6e in QThread::wait (this=<optimized out>, time=time@entry=5000)
 #5  0x00007ffff4e1edd3 in QNetworkAccessManagerPrivate::clearCache
 #6  0x00007ffff7b6fb03 in OCC::HttpCredentials::invalidateToken()
 #7  0x000000000057adb4 in OCC::AccountState::slotInvalidCredentials()
 #8  0x000000000057ac76 in OCC::AccountState::slotConnectionValidatorResult(OCC::ConnectionValidator::Status, QStringList const&) ()
 #9  0x00000000005ab45c in OCC::AccountState::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)
 #10 0x00007ffff45dcd30 in QMetaObject::activate
 #11 0x00007ffff7b78671 in OCC::ConnectionValidator::connectionResult(OCC::ConnectionValidator::Status, QStringList) ()
 #12 0x00007ffff7ae2514 in OCC::ConnectionValidator::reportResult(OCC::ConnectionValidator::Status) ()
 #13 0x00007ffff7ae39b7 in OCC::ConnectionValidator::slotAuthFailed(QNetworkReply*) ()
 #14 0x00007ffff7b784a9 in OCC::ConnectionValidator::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) ()
 #15 0x00007ffff45dcd30 in QMetaObject::activate
 #16 0x00007ffff7b766dc in OCC::AbstractNetworkJob::networkError(QNetworkReply*)
 #17 0x00007ffff7af9f6e in OCC::AbstractNetworkJob::slotFinished()
 #18 0x00007ffff7b7654d in OCC::AbstractNetworkJob::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) ()
 #20 0x00007ffff45dd607 in QMetaObject::activate
 #21 0x00007ffff4edd143 in QNetworkReply::finished
 #22 0x00007ffff4e3fec7 in QNetworkReplyHttpImplPrivate::finished
 #23 0x00007ffff4e41818 in QNetworkReplyHttpImpl::close
 #24 0x00007ffff7b7047b in OCC::HttpCredentials::slotAuthentication(QNetworkReply*, QAuthenticator*) ()
 #25 0x00007ffff7b79092 in OCC::HttpCredentials::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) ()
 #27 0x00007ffff45dd607 in QMetaObject::activate
 #28 0x00007ffff4e1d6fb in QNetworkAccessManager::authenticationRequired
 #29 0x00007ffff4e1ea07 in QNetworkAccessManagerPrivate::authenticationRequired
 #30 0x00007ffff4e3c784 in QNetworkReplyHttpImplPrivate::httpAuthenticationRequired

Another case of Main Thread:
 #5  0x00007ffff4e1edd3 in QNetworkAccessManagerPrivate::clearCache
 #6  0x00007ffff7b6fb03 in OCC::HttpCredentials::invalidateToken()
 #7  0x000000000057b1e4 in OCC::AccountState::slotInvalidCredentials() ()
 #8  0x00000000005abb8a in OCC::AccountState::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) ()
 #9  0x00007ffff45dcd30 in QMetaObject::activate
 #10 0x00007ffff7b76ed5 in OCC::Account::invalidCredentials() ()
 #11 0x00007ffff7ad55f5 in OCC::Account::handleInvalidCredentials()
 #12 0x00007ffff7afa69a in OCC::AbstractNetworkJob::slotFinished()
 #13 0x00007ffff7b7654d in OCC::AbstractNetworkJob::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) ()
 #15 0x00007ffff45dd607 in QMetaObject::activate
 #16 0x00007ffff4edd143 in QNetworkReply::finished
 #17 0x00007ffff4e3fec7 in QNetworkReplyHttpImplPrivate::finished
 #18 0x00007ffff4e41818 in QNetworkReplyHttpImpl::close
 #19 0x00007ffff7b7047b in OCC::HttpCredentials::slotAuthentication(QNetworkReply*, QAuthenticator*) ()
 #20 0x00007ffff7b79092 in OCC::HttpCredentials::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) ()
 #22 0x00007ffff45dd607 in QMetaObject::activate
 #23 0x00007ffff4e1d6fb in QNetworkAccessManager::authenticationRequired
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

9 participants