Comments (16)
Добрый день. Начну по порядку:
Пишет Reading remote files. Ждал 10 минут, плюнул - выключил.
OneDrive возвращает данные о файлах в облаке в формате JSON. Размер описания одного файла примерно 2 килобайта. Таким образом, если в облаке ~250Gb небольших файлов, то время на получение этих данных может быть весьма значительным.
Режим --force просто отключает сравнение файлов для поиска более новых и считает более новыми либо локальные, либо удаленные файлы, в зависимости от download/upload. В остальном работа программы не отличается от режима синхронизации, то есть данные об удаленных файлах будут также предварительно получены из облака.
На всякий случай занес все папки в .include
ls > .include
Если сделать так, то файл .include будет заполнен строками вида
file_1
file_2
file_3
В то время, как правильно должно быть
/file_1
/file_2
/file_3
и выполнил
ccross --provider onedrive --dry-run --path backup --use-include --force=upload
Здесь вы неверно использовали параметр --path - отсюда и проблемы с видимостью ключа. Этот параметр нужен в случае если программа запускается не для текущей папки. То есть если вы находитесь в папке /home/user, а хотите синхронизировать папку /home/user/backup, то в этом случае надо указать параметр --path /home/user/backup
Резюмируя - изначально вы все делали правильно, просто не дождались пока данные о файлах в облаке скачаются в клиент. Так же, вы правильно решили использовать параметр --force upload, это позволит избежать скачивания всего облака на диск.
Если вы дадите больше данных о структуре вашей локальной ФС и структуре файлов в облаке и укажете что вы хотите залить в облако и куда, я помогу вам правильно заполнить файл .include
Также, я был бы благодарен, если бы вы написали о результатах - мне интересно, как поведет себя программа в таких условиях, когда столь много файлов в облаке. Не будет ли сегфолтов, уходов в своп и прочее.
from cloudcross.
Добрый вечер, спасибо за ответ.
У меня в облаке есть папка backup и в ней подпапки /backup/Sub-1
- /backup/Sub-M
. И на локальной машине в ~
папка backup, а в ней подпапки ~/backup/Sub-M+1
- ~/backup/Sub-N
. В каждой папке куча файлов. По факту мне нужно просто залить содержимое локального backup в облачный (и освободить место на локальной машине), но onedrive не умеет подгружать уже существующую папку через web интерфейс, и не умеет multiupload папок. И, похоже, выходом является подгружать backup в backup-1, а потом перемещать его содержимое в backup и удалять backup-1... Или что-то типа того.
Было бы здорово, если бы ccross умел простые операции upload/download файлов и папок из облака: как с ftp - без предварительного осмотра всего его содержимого.
from cloudcross.
В вашем случае надо авторизоваться в папке ~ или скопировать файл .ondr в ~.
Далее, там же создать файл .include с содержимым
/backup
и затем находясь в ~ выполнить
ccross --provider onedrive --use-include --force upload
при этом локальное содержимое backup будет совмещено с удаленным (удаленные файлы, при совпадении путей, будут заменены локальными). Но, как я понял, у вас
~/backup/Sub-M+1
поэтому локальные папки из backup будут просто выгружены в облако. Но, в любом случае, --dry-run в первый раз будет не лишним.
По поводу upload/download без предварительного получения информации об облаке - надо подумать. Возможно что то подобное добавлю в следующих версиях.
from cloudcross.
Пробую...
Кажется проверка формата Include List поломана у всех провайдеров. Например:
https://github.com/MasterSoft24/CloudCross/blob/master/src/Dropbox/msdropbox.cpp#L526
Должно вроде быть QRegExp regex2(this->includeList);
from cloudcross.
Да, похоже на то. Последние коммиты от @futuarmo я еще не тестировал - занят прикручиванием Fuse, так, что ошибка имеет место быть. Сейчас исправлю
from cloudcross.
Как насчет опции, чтобы в readLocal() запретить хождение по символьным ссылкам? Т.к. я запускаюсь в ~/
он быстро находит там /home/truf/.config/teamviewer10/dosdevices/c:
прыгает на /home/truf/.config/teamviewer10/drive_c/
доходит до /home/truf/.config/teamviewer10/drive_c/users/truf/My Documents/.config/teamviewer10/dosdevices/c:
, переходит назад на /home/truf/.config/teamviewer10/drive_c/
и дальше летает кругами.
Я себе отключил.
from cloudcross.
Это обойти можно так. Создать папку ~/ccross-working
В ней сделать ссылку на ~/backup
И уже из ccross-working запускать синхронизацию.
А как бы вы предложили назвать эту опцию?
from cloudcross.
А как бы вы предложили назвать эту опцию?
У меня нет хороших идей
from cloudcross.
Есть еще проблема при создании папок. Получал ответ Bad request пока тут не заменил req->setRequestUrl("https://api.onedrive.com/v1.0/drive/root:/"+object->path+":/children");
на req->setRequestUrl("https://api.onedrive.com/v1.0/drive/root:"+object->path+":/children");
Я так понимаю, что object->path
всегда начинается со слеша и они удваиваются.
from cloudcross.
Еще проблема - объем данных большой, пока серверные файлы прочитает, пока хеши из 50 гб локальных данных наделает, пока загружает на сервер... идет время. И в какой-то момент я оказываюсь тут с replyErrorText == "Host requires authentication", errorCode == 204 и следующей строкой в заголовке:
"WWW-Authenticate"
"Bearer realm="OneDriveAPI", error="expired_token", error_description="Auth token expired. Try refreshing."
После чего все последующие файлы в списке синхронизации завершаются тем же.
Полагаю, любой реквест к API может получить такой ответ и его нужно правильно перехватить и обработать.
from cloudcross.
Кроме того, до экспирации токена несколько файлов не были переданы с ошибкой а-ля:
Error transferring https://api.onedrive.com/up/eyJSZXNvdXJjZUlEIjoiODZBRTc2Qzc1MTdEMTMxMyExMjgyNjgiLCJSZWxhdGlvbnNoaXBOYW1lIjoiSW1hZ2UtMDQ3OC5wbmcifQ/4myHHT04zhj-2y7xLziHoxgS41MnXi4o9So5uFfr-7T_BJGS5hKN7w2n6dENOWrmjR3wiHmXG6ZwRkoPNcvZ3jxYKTEOjJJjFaPuQxYvgEv9U/eyJOYW1lIjoiSW1hZ2UtMDQ3OC5wbmcifQ/4wnaXsOF5JOrFOIwZEwU7z1ZtinJG9OMijkFaxhvAMDB8s0HYN75t2FzQmquZ6aBwNg6Z-pV2BCYP-pF7SEfqpd3ULFJ2q8FeUkxyisYiLj6V5Ic5gKodNT3aMm6QHkYvpDQVRiKbUg593pSUsSxXi-5jfx8ad1KI-xWjCXTZZKxsO3__SbNpGWkpS-1cPCyCuhMgxMk/7uyzcOzcOAUwISO34YrYa9vG4nqG66s0cQ0r_cqQCpOslIIXUD4xmwip-EjAd0cioby9ig0ge9PBQVHH6ue33ERFUZyMPD-_W6m47jEvVvY_vsDD2dSDNDlguEj-byFB02QBos7vnRJhPkSd71GpqfKIY7t_1ip0wyfVYNfLuSxe3QJ9v8okRvzi3eX-jzCDQWU1yRh5/N_3Lzd92B3twb6UXgKn8BxW65dNvduOdKEnOf53JVrVLwlZ5mLY7pAjB64OrXT8V8z2A8j3Tkeu9vnAtBLbPWlaY5Tr38 - server replied: Internal Server Error /backup/nic_modified/0157.png Forced uploading.
Нужен механизм, делающий N попыток выполнить неудавшийся запрос, прежде чем перейти к следующему.
Например как у bash-onedrive-upload для некритических ошибок
https://github.com/fkalis/bash-onedrive-upload/blob/master/onedrive.cfg#L24
from cloudcross.
И наконец - скорость передачи была ~0.5 Mb/s. Хотя OneDrive 3-мя потоками через web интерфейс качал на ~2.5 Мб/с. Во-первых, потому что тут стоит явно дебажное ограничение на размер передаваемого на сервер куска в <10Кб. Тогда как комментировано 59MB. Кстати, у bash-online-upload он больше 100Мб и настраиваемый
https://github.com/fkalis/bash-onedrive-upload/blob/master/onedrive.cfg#L20
Во-вторых - файлы отправляются последовательно, тогда как web интерфес заливает сразу 3, а bash-online-upload двумя потоками.
https://github.com/fkalis/bash-onedrive-upload/blob/master/onedrive.cfg#L14
Уверен, всем облакам это бы пригодилось.
Итого, нужно 3 вещи:
- token refresh
- retry in case of minor errors.
- several requests in parallel.
from cloudcross.
API говорит
To upload the file, or a portion of the file, make a PUT request to the uploadUrl received when the session was created. You can either upload the entire file in one fragment up to 60 MiB (60 * 1024 * 1024 bytes), or you can break the file into multiple fragments and upload each one separately.
Ограничение <10Кб. , действительно, осталось дебажное - тут надо поправить.
Internal Server Error /backup/nic_modified/0157.png Forced uploading.
Это, как я понял, протух токен. Решить можно вкупе с реализацией нескольких попыток. Займусь.
А вот с многопоточностью сложнее. Тут уже, как мне кажется, архитектурное ограничение. Хотя, теоретически, и тут можно что то придумать. Типа, разбить syncFileList на несколько частей и запускать doSync в потоке.
from cloudcross.
Типа, разбить syncFileList на несколько частей и запускать doSync в потоке.
Да, мне кажется проще всего иметь общий пул объектов MSFSObject из которого потоки будут на перегонки брать по одному и обрабатывать пока пул не опустеет.
И создание папок нужно не забыть поправить.
from cloudcross.
С общим пулом могут race conditions получиться. Про папки не забуду, естественно
from cloudcross.
Released all requests except few retries after minor errors.
Today (Sep 9, 2017) all this features placed in dev branch.
from cloudcross.
Related Issues (20)
- MasterSoft24/xUbuntu_18.04 not signed? HOT 5
- Двухуровневая ауттетификация google 2019 HOT 5
- Segmentation fault (core dumped) HOT 4
- ccross in console mode HOT 3
- Corrupted directory structure when Dropbox sync HOT 1
- [feature request] Samsung Cloud HOT 1
- ccross v1.4.5 segfaults during Dropbox synchronization HOT 2
- Google Oauth fails verification for app HOT 10
- make error HOT 2
- Bad request for Google Drive login HOT 2
- Dropbox sync not working HOT 2
- Initial setup with Google stalls and does nothing HOT 12
- Add warning or confirmation on an empty folder initial sync HOT 2
- [feature request] Docker installation?
- Mailru doesn't sync HOT 1
- You have version 1.4.7 in release 1.4.8 HOT 1
- MasterSoft24/xUbuntu_16.10 not signed?
- How about snapcraft.io release?
- Error when uploading to Google HOT 1
- Problem after upgrading from ubuntu 20.04 WSL2 to 22.04 HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cloudcross.