Czytam sobie fragment tutoriala:
Each job executes in its own slot directory (slots/0, etc.). The slot directory contains links to the job's input and output files. The name of each link is a logical name. (These links aren't symbolic or hard links, because Windows doesn't have them; rather, they're XML files containing the path of the file in the project directory). Applications call a BOINC API function boinc_resolve_filename() to map logical names to physical names prior to opening them.
Jeśli dobrze rozumiem ten angielski tekst, to rezygnację z łączy uzasadniają tym, że Windows ich nie ma. Jestem
pewny, że w jakimś tutorialu czytałem, iż na windowsa nie ma serwera boinc. Poza tym coś mi się kojarzy, że windows
ma jakiś odpowiednik linków. Jest junction point, shortcut, polecenie mklink...
Pozdrawiam
Cytat: mariotti w 20 Lipiec 2013, 01:10
Czytam sobie fragment tutoriala:
Each job executes in its own slot directory (slots/0, etc.). The slot directory contains links to the job's input and output files.
Piszesz o kliencie, nie o serwerze.
Cytat: krzyszp w 20 Lipiec 2013, 01:14
Cytat: mariotti w 20 Lipiec 2013, 01:10
Czytam sobie fragment tutoriala:
Each job executes in its own slot directory (slots/0, etc.). The slot directory contains links to the job's input and output files.
Piszesz o kliencie, nie o serwerze.
Czyli nic z tego nie rozumiem. W czym to jest pomocne? Aplikacja licząca ma tylko otworzyć pliki wejściowe, a
klient ma zadbać tylko o to, aby pliki były przygotowane do otwarcia. Dlaczego mam wiedzieć coś o jakiś
slotach po stronie aplikacji klienckiej? Po stronie serwera to bym rozumiał, tam masę plików trzeba rozmieścić
optymalnie w podkatalogach.
Pozdrawiam
Pewnie są jeszcze inne powody, ale mi przychodzą takie:
1. aplikacja licząca występuje fizycznie w postaci jednej binarki i nie jest za każdym razem kopiowana do slotów
2. dane wejściowe mogą być wspólne dla wielu instancji aplikacji liczącej
3. pliki wyjściowe mogą w ten sposób być lepiej skonfigurowane - zapisywane ostatecznie w folderze projektu (i stamtąd uploadowane), w slotach są tylko tymczasowo
To jest po prostu ostrzeżenie, żebyś nie używał bezwzględnych ani względnych ścieżek do swoich plików wejściowych/wyjściowych, bo możesz ich nie znaleźć tam gdzie zakładałeś. Po to masz te funkcje rozwiązujące nazwy.
Cytat: Karlik w 20 Lipiec 2013, 01:59
Pewnie są jeszcze inne powody, ale mi przychodzą takie:
1. aplikacja licząca występuje fizycznie w postaci jednej binarki i nie jest za każdym razem kopiowana do slotów
2. dane wejściowe mogą być wspólne dla wielu instancji aplikacji liczącej
3. pliki wyjściowe mogą w ten sposób być lepiej skonfigurowane - zapisywane ostatecznie w folderze projektu (i stamtąd uploadowane), w slotach są tylko tymczasowo
Przepraszam, ale w żadnym z tych punktów nie widzę związku z problemem. Dla mnie to jest
jedynie jakaś zbędna i koszmarna komplikacja. Celem jest bardzo prosta rzecz: Na serwerze
umieszczamy pliki. Pliki umieszczamy raz na starcie projektu (albo piszemy program który będzie
je generował - na jedno wychodzi). Pliki w zadaniach mogą się powtarzać, więc definiujemy zadanie
jako zestaw plików, a pliki które się powtarzają w różnych zadaniach, oznaczamy jako no_delete. Aplikacja
licząca spodziewa się że będą dostępne pliki pod określonymi nazwami. Więc w definicji zadania, obok każdej
nazwy pliku na serwerze, definiujemy jeszcze nazwę pliku pod jaką to nazwą aplikacja licząca znajdzie ten plik.
Żeby zapewnić jeszcze większą elastyczność, to aplikacja nie używa nazw bezpośrednio, ale używa funkcji API
do przetranslatowania nazw spodziewanych na ścieżki w systemie. Aplikacja wypluwa dane wyjściowe, więc w
definicji tasku powinna być jeszcze nazwa pliku wyjściowego.
Administrator/developer BOINC musi znać odpowiedzi na raptem trzy pytania:
1) Jak w tasku podać ścieżki do plików?
2) Jak ścieżki skojarzyć z nazwami po stronie klienta?
3) Jak w tasku zdefiniować ścieżkę do pliku wyjściowego?
Z taką wiedzą można postawić całkiem zaawansowaną aplikację. Pozostałe
opcje mogą służyć jedynie poprawieniu wydajności czy bezpieczeństwa.
Dlaczego nie mogę opanować tak prostej rzeczy, to nie wiem. Przecież na
co dzień robię na komputerze rzeczy 100 razy trudniejsze.
Cytat: Karlik w 20 Lipiec 2013, 01:59
To jest po prostu ostrzeżenie, żebyś nie używał bezwzględnych ani względnych ścieżek do swoich plików wejściowych/wyjściowych, bo możesz ich nie znaleźć tam gdzie zakładałeś. Po to masz te funkcje rozwiązujące nazwy.
Hmmm... czy na pewno chodzi o taki banał? Aplikacja licząca działa na innym komputerze niż
są zakładane pliki, więc na pewno nie znajdzie plików tam gdzie były zakładane.
Pozdrawiam
Nie wiem, jak w praktyce to wygląda, ale generalnie boinc_resolve_filename() podaje Ci rzeczywistą ścieżkę do plików - wszak faktycznie próbki są ściągane do katalogów "slot" (slot0, slot1, slot2, itd) i mogą być w różnych miejscach na komputerze użytkownika i zawsze w innym miejscu niż sama aplikacja (która jest w katalogu "projects"). Dlatego, jak rozumiem:
1. Aplikacja wykonuje boinc_resolve_filename() aby dostać ścieżkę do WU - więc nie powinieneś używać ścieżek względnych/bezwzględnych.
2. Nie powinieneś zakładać dodatkowych folderów (ale tego nie jestem już pewien).
Jeżeli chcesz zobaczyć jak ma to rozwiązane radioaktywny, to ściągnij sobie źródła, najlepiej jak najwcześniejszej wersji - pierwsze były naprawdę proste.
Cytat: krzyszp w 20 Lipiec 2013, 04:24
Nie wiem, jak w praktyce to wygląda, ale generalnie boinc_resolve_filename() podaje Ci rzeczywistą ścieżkę do plików
To samo wywnioskowałem czytając źródła przykładowego programu upper case.
Cytat: krzyszp w 20 Lipiec 2013, 04:24
- wszak faktycznie próbki są ściągane do katalogów "slot" (slot0, slot1, slot2, itd)
Ok, ale skoro jest funkcja boinc_resolve_filename, to ja rozumiem że boinc developera to
zupełnie nie interesuje i zamieszczanie tej informaji w tutorialu jest jest zbędne.
Cytat: krzyszp w 20 Lipiec 2013, 04:24
i mogą być w różnych miejscach na komputerze użytkownika i zawsze w innym miejscu niż sama aplikacja (która jest w katalogu "projects").
Mogą być w różnych miejscach, poza sytuacją gdy się ustawi atrybut copy. Atrybut copy jest
specjalnie dla tych aplikacji które są bez źródeł i nie można ich dostosować do BOINC - ale
to inne zagadnienie.
Cytat: krzyszp w 20 Lipiec 2013, 04:24
Dlatego, jak rozumiem:
1. Aplikacja wykonuje boinc_resolve_filename() aby dostać ścieżkę do WU - więc nie powinieneś używać ścieżek względnych/bezwzględnych.
Rozumiem tak samo i nie używam, ba... ja używam gotowego przykładowego programu w
którym nie zmieniłem ani jednego znaku.
Cytat: krzyszp w 20 Lipiec 2013, 04:24
2. Nie powinieneś zakładać dodatkowych folderów (ale tego nie jestem już pewien).
Też nie wiem czy można. Na razie próbuję uruchomić upper-case bez żadnych
modyfikacji.
Cytat: krzyszp w 20 Lipiec 2013, 04:24
Jeżeli chcesz zobaczyć jak ma to rozwiązane radioaktywny, to ściągnij sobie źródła, najlepiej jak najwcześniejszej wersji - pierwsze były naprawdę proste.
Nie wiem czy to dobry pomysł. Program upper-case chyba jest prostszy i dostarczony jako
wzorcowy przykład.
Pozdrawiam
P.S.
Zacząłem pisać swój frame-work do obliczeń rozproszonych. Idzie mi
szybciej niż konfigurowanie BOINCa. Coś czuję że projekt perft jednak
będzie musiał stanąć na moim frame-worku. Trochę mnie to smuci, bo nie tak
miało być. Z drugiej strony, jeśli mój frame-work ułatwi komuś stawianie
jakiejś aplikacji obliczeniowej, to tylko się cieszyć.
Nie wiem, czy upper case jest łatwiejszy - pierwsza wersja app dla radioaktywnego używała... 2 (słownie dwóch) funkcji BOINC...
Cytat: krzyszp w 20 Lipiec 2013, 08:07
Nie wiem, czy upper case jest łatwiejszy - pierwsza wersja app dla radioaktywnego używała... 2 (słownie dwóch) funkcji BOINC...
Więc może upper-case jest trudniejszy. Tak czy inaczej, rozumiem kod upper-case. Skoro bez
dokumentacji doszedłem do tego, że ten exit status w panelu administracyjnym ma taką samą
wartość co zwracana w upper-case, to chyba rozumiem go całkiem nieźle.
Problem leży w czym innym. Task się dodaje. Klient ten task pobiera. A aplikacja nie
rozwiązuje nazwy pliku wejściowego z tego tasku. Task chyba dodaję poprawnie,
bo po pierwsze jest w systemie, po drugie program create_work nie zwraca
żadnego błędu, po trzecie task jest pobierany przez klienta. Po prostu aplikacja
licząca nie może otworzyć pliku wejściowego. Prawdopodobnie wywala się
w tym miejscu:
boinc_resolve_filename(INPUT_FILENAME, input_path, sizeof(input_path));
infile = boinc_fopen(input_path, "r");
if (!infile) {
fprintf(stderr,
"%s Couldn't find input file, resolved name %s.\n",
boinc_msg_prefix(buf, sizeof(buf)), input_path
);
exit(-1);
}
Czyli kod jest banalnie prosty. O poprawność powinien dbać klient, powinien ściągnąć
pliki w takie miejsce żeby boinc_fopen mogła bez problemu go otwierać.
Pozdrawiam
[edit]
Takie mam logi w menadżerze:
sob, 20 lip 2013, 09:13:58 | perft | update requested by user
sob, 20 lip 2013, 09:14:01 | perft | Sending scheduler request: Requested by user.
sob, 20 lip 2013, 09:14:01 | perft | Requesting new tasks for CPU
sob, 20 lip 2013, 09:14:02 | perft | [error] Can't parse file info in scheduler reply: file name is empty or has '..'
sob, 20 lip 2013, 09:14:02 | perft | [error] Can't parse file info in scheduler reply: file name is empty or has '..'
sob, 20 lip 2013, 09:14:02 | perft | Scheduler request completed: got 2 new tasks
sob, 20 lip 2013, 09:14:02 | perft | [error] State file error: missing file
sob, 20 lip 2013, 09:14:02 | perft | [error] Can't handle task test4_0 in scheduler reply
sob, 20 lip 2013, 09:14:02 | perft | [error] State file error: missing file
sob, 20 lip 2013, 09:14:02 | perft | [error] Can't handle task test4_1 in scheduler reply
Nazwa pliku nie jest ani pusta ani nie zawiera kropek.
Nie wiem jak masz to skonfigurowane, ale ja bym po prostu zobaczył co dostaje klient i dlaczego zachowuje się tak a nie inaczej. Może jakoś wireshark pomoże? Z tego co piszesz to debugujesz nie w tym miejscu co trzeba. Klient sam Cię informuje, że nie ma jakiegoś pliku/nie może ściągnąć (może coś z konfiguracją?) a Ty próbujesz rozwiązywać problem w aplikacji liczącej. To tak jakby próbować rozwiązać problem suszy przez lepsze naostrzenie sierpu.
Cytat: mariotti w 20 Lipiec 2013, 02:38Aplikacja licząca działa na innym komputerze niż
są zakładane pliki, więc na pewno nie znajdzie plików tam gdzie były zakładane.
http://sjp.pwn.pl/szukaj/zak%C5%82ada%C4%87 <= 8. znaczenie
Cytat: Karlik w 20 Lipiec 2013, 12:04
Nie wiem jak masz to skonfigurowane, ale ja bym po prostu zobaczył co dostaje klient i dlaczego zachowuje się tak a nie inaczej. Może jakoś wireshark pomoże? Z tego co piszesz to debugujesz nie w tym miejscu co trzeba. Klient sam Cię informuje, że nie ma jakiegoś pliku/nie może ściągnąć (może coś z konfiguracją?) a Ty próbujesz rozwiązywać problem w aplikacji liczącej. To tak jakby próbować rozwiązać problem suszy przez lepsze naostrzenie sierpu.
Używam wzorcowej aplikacji z przykładów dostarczonych wraz z BOINC. Chyba ona
nie ma błędów? Problem jest z podaniem plików do tej aplikacji.
Cytat: mariotti w 20 Lipiec 2013, 02:38Aplikacja licząca działa na innym komputerze niż
są zakładane pliki, więc na pewno nie znajdzie plików tam gdzie były zakładane.
http://sjp.pwn.pl/szukaj/zak%C5%82ada%C4%87 <= 8. znaczenie
[/quote]
Ok, rozumiem. Ale odpowiedź jest taka sama jak wyżej: nie działa wzorcowa aplikacja,
nic nie mogłem w niej skopać, bo jej nie zmieniałem.
Pozdrawiam
Cytat: mariotti w 20 Lipiec 2013, 15:13Używam wzorcowej aplikacji z przykładów dostarczonych wraz z BOINC. Chyba ona nie ma błędów? Problem jest z podaniem plików do tej aplikacji.
No tak, tylko nie wiem czemu w takim razie piszesz o możliwych miejscach wystąpienia exit(-1) i podajesz fragmenty kodu aplikacji liczącej skoro błąd jest na poziomie klient-serwer a nie klient-aplikacja.
@mariotti
Mam takie może zaskakujące pytanie. Czy brałeś już udział jako aktywny uczestnik jakiegokolwiek projektu BOINC?
Może warto zacząć od tego. Wbrew pozorom, wiedza o tym, czym kierują się uczestnicy i jak to wszystko działa po stronie klienta jest wskazana, a nawet niezbędna.
Cytat: Karlik w 20 Lipiec 2013, 15:36
Cytat: mariotti w 20 Lipiec 2013, 15:13Używam wzorcowej aplikacji z przykładów dostarczonych wraz z BOINC. Chyba ona nie ma błędów? Problem jest z podaniem plików do tej aplikacji.
No tak, tylko nie wiem czemu w takim razie piszesz o możliwych miejscach wystąpienia exit(-1) i podajesz fragmenty kodu aplikacji liczącej skoro błąd jest na poziomie klient-serwer a nie klient-aplikacja.
Ponieważ do bazy danych trafił wpis exit(0xff). Może to przypadek, może coś innego zwróciło -1.
Po prostu ta sama wartość jest w tamtym miejscu w kodzie co w bazie. W sumie to nie wiem
na jakim poziomie jest błąd. Może błąd jest na poziomie klient-serwer, ale uaktywnia się dopier
na poziomie aplikacji liczącej. Nie wiem.
Pozdrawiam
Cytat: buninek w 20 Lipiec 2013, 18:12
@mariotti
Mam takie może zaskakujące pytanie. Czy brałeś już udział jako aktywny uczestnik jakiegokolwiek projektu BOINC?
Może warto zacząć od tego. Wbrew pozorom, wiedza o tym, czym kierują się uczestnicy i jak to wszystko działa po stronie klienta jest wskazana, a nawet niezbędna.
Ściągnąłem kiedyś rosetę, policzyłem, odesłałem i mądrzejszy nie jestem. Nie wiem
nada co robię źle.
Pozdrawiam
To jednak może zainstaluj lokalnie managera, podłącz się pod kilka projektów, nawet non-cpu (WuProp, radioaktywny), zobacz jak w praktyce pliki są rozłożone, podejrzyj logi. To może co nieco rozjaśnić.
I jeszcze sprawa boinc_resolve_filename(INPUT_FILENAME, input_path, sizeof(input_path)); - co podajesz jako argumenty? Może nic?
Cytat: krzyszp w 20 Lipiec 2013, 21:31
To jednak może zainstaluj lokalnie managera, podłącz się pod kilka projektów, nawet non-cpu (WuProp, radioaktywny), zobacz jak w praktyce pliki są rozłożone, podejrzyj logi. To może co nieco rozjaśnić.
Nie rozjaśni. Podaje się w resolve_filename plik z sekcji file_ref. Pliki na każdym komputerze
mogą być rozmieszczone inaczej, w każdej wersji mogą być rozmieszczone inaczej.
Nawet jeśli dzięki temu otworzę pliki wejściowe, to na nowym kliencie projekt może się
wysypać.
Cytat: krzyszp w 20 Lipiec 2013, 21:31
I jeszcze sprawa boinc_resolve_filename(INPUT_FILENAME, input_path, sizeof(input_path)); - co podajesz jako argumenty? Może nic?
Nie zmieniałem programu, czyli podaję:
#define CHECKPOINT_FILE "upper_case_state"
#define INPUT_FILENAME "in"
#define OUTPUT_FILENAME "out"
W szablonie mam właśnie "in" jako file_ref:
<input_template>
<file_info>
<number>0</number>
</file_info>
<workunit>
<file_ref>
<file_number>0</file_number>
<open_name>in</open_name>
</file_ref>
</workunit>
</input_template>
Pozdrawiam
A może to nie jest tak głupi pomysł, żeby utworzyć nowego, skrajnie prostego frame-worka
do obliczeń rozproszonych? Może by się udało go jakoś spopularyzować i tym samym
ułatwić życie naukowcom chcącym wykonywać obliczenia rozproszone? Ktoś jakiś czas
temu pisał (chyba Rysiu) że droga do działającego projektu jest długa - wnioskuję z
tego, że nie tylko ja mam masę problemów.
Na pewno jestem w stanie napisać nowoczesny zestaw narzędzi do budowania
projektów bardzo podobnych do BOINC. Mało tego, jestem w stanie napisać to
wszystko tak, żeby potem developer nie musiał się martwić o szereg drobiazgów.
Np. GUI by się programowało tak samo jak w QT, a QT jest dobrze udokumentowane.
Do tego byśmy zrobili kilka przykładowych programów, jakąś stronę www projektu i
może chętni do korzystania by się znaleźli? Problem widzę jedynie w spopularyzowaniu
tego. Musiałby powstać na tym jakiś jeden ważny projekt - pozostałe by się przyłączyły
lawinowo.
Pozdrawiam
Cytat: mariotti w 20 Lipiec 2013, 18:25W sumie to nie wiem na jakim poziomie jest błąd. Może błąd jest na poziomie klient-serwer, ale uaktywnia się dopier na poziomie aplikacji liczącej. Nie wiem.
Sam podałeś fragment logu klienta w którym się uaktywnił błąd. Późniejszy zwrot 255 jest zupełnie wtórny.
Sprawdzałeś w ogóle co się ściągnęło do folderu projektu w kliencie? Próbowałeś uruchomić zadanie bez przetwarzania (w sensie - klient przygotowuje slot i kopiuje/generuje odpowiednie pliki, ale nie uruchamia aplikacji)?
Jak chcesz pisać własny framework to nikt Ci chyba nie broni. Tylko musiałoby to mieć naprawdę dużą elastyczność/konfigurowalność, żeby mogło się przyjąć wg mnie, bo każdy ma inne potrzeby i zasoby (jako twórcy projektów).
Co do GUI to akurat najmniej istotny element całego oprogramowania do obliczeń. No może minimalny konfigurator dla użytkownika mógłby się przydać, bo ludzie lubią widzieć "pasek postępu" i móc przeklikać wszystko zamiast wpisywać długie komendy i/lub edytować pliki konfiguracyjne ;)
Chociaż mi tam wystarczyłaby aplikacja konsolowa jeśli projekt by mnie zainteresował :arrr:
Cytat: Karlik w 21 Lipiec 2013, 01:39
Sam podałeś fragment logu klienta w którym się uaktywnił błąd. Późniejszy zwrot 255 jest zupełnie wtórny.
Przekopiowałem to co widać w menadżerze, nie mam pojęcia co się dostaje do menadżera, czy
wszystkie logi się dostają, czy są to logi identyczne, czy może jest jeszcze jakaś warstwa pośrednia.
Po prostu jest to element którego nie chcę rozumieć. Ja chcę tylko wrzucić dane na serwer i
potem mieć je dostępna na kliencie. Nic więcej nie powinno mnie interesować.
Do serwera trafia exit code 0xff. Piszesz że jest wtórny, nie wiem co to znaczy że jest wtórny. Po
prostu jakoś tam się dostaje ta wartość -1. Mechanizm przekazywania exit code jest pewnie
bardzo skomplikowany. Na pewno najpierw aplikacja robi z funkcji main return 0xff. Potem tę
wartość dostaje aplikacja która monitoruje/nadzoruje aplikację liczącą. Potem pewnie leci
zapytanie do web serwera. Web serwer odbiera zapytanie, dekoduje SSL, dekoduje parametry
CGI. W końcu web serwer odpala aplikację CGI, chyba to jest ten binarny programik dostarczyny
z serwerem BOINC, ale może to też być najzwyklejszy plik PHP. W tle po stronie serwera
pracują demony BOINC, może program CGI jakoś się komunikuje z tymi demonami. Albo program
CGI, albo demony łączą się z bazą MYSQL. W końcu do bazy danych trafia jakiś wpis. Potencjalnie
na każdym z powyższych etapów może stać się coś, w skutek czego do bazy trafi exit code = 0xff.
Ja nie wiem gdzie i co się stało, i wiedzieć nie chcę. Rozbiór tego mechanizmu na części pierwsze
zajmie mi za dużo czasu. Za to są odpowiedzialni autorzy BOINC. Programista aplikacji liczącej chce z
zestawu plików zrobić zestaw work-units, a następnie oczekuje, że w sposób przezroczysty work-units
znajdą się po stronie aplikacji liczącej. I koniec. Jeśli nie działa, to albo BOINC ma problem, albo z
dokumentacji nie umiem wywnioskować jak to się poprawnie robi. Ale jeśli źle wywnioskowałem, to
dlaczego program dodaje work-unit do bazy i nie wywala błędów? I dlaczego na stronie serwera widać
że jest dodany work-unit? Raczej dodanie przebiega poprawnie. Problem jest w innym miejscu. Ale
w jakim, skoro używam wzorcowej aplikacji po stronie klienta?
Cytat: Karlik w 21 Lipiec 2013, 01:39
Sprawdzałeś w ogóle co się ściągnęło do folderu projektu w kliencie? Próbowałeś uruchomić zadanie bez przetwarzania (w sensie - klient przygotowuje slot i kopiuje/generuje odpowiednie pliki, ale nie uruchamia aplikacji)?
Nie sprawdzałem. Nie wiem jaki to folder, nie wiem jak długo dane są tam trzymane, nie
wiem czy są zaszyfrowane/skompresowane, nie wiem jakie meta-dane są doklejane
do danych, nie wiem czy w trakcie działania aplikacji liczącej dane ulegają zmianie..
Po to jest warstwa abstrakcji, żeby autorzy boinc mogli przechowywać dane w
zupełnie dowolny sposób.
Cytat: Karlik w 21 Lipiec 2013, 01:39
Jak chcesz pisać własny framework to nikt Ci chyba nie broni.
Potrzebuję jakiegoś wsparcia na etapie popularyzowania. Zastanawiam się na
głos, co by musiało się stać, alby:
1) ludzie korzystali z takich narzędzi,
2) wolontariusze ściągali aplikacje liczące i chętnie/licznie wspierali naukowców.
Mogę taki frame-work zrobić tylko na potrzeby tej jednej aplikacji szachowej, ale
nie wiem czy ktoś będzie chciał wspomagać obliczenia, a co dopiero napisać
swoją aplikację, choćby taką o charakterze edukacyjnym.
Cytat: Karlik w 21 Lipiec 2013, 01:39
Tylko musiałoby to mieć naprawdę dużą elastyczność/konfigurowalność, żeby mogło się przyjąć wg mnie,
bo każdy ma inne potrzeby i zasoby (jako twórcy projektów).
W tym aspekcie jestem raczej optymistą. Generalnie każde obliczenia mogą wyglądać tak:
1) wprowadzenie danych wejściowych
2) wykonanie obliczeń
3) odesłanie danych wyjściowych.
Można całkowicie wyeliminować web-serwer i protokół CGI. Cała transmisja bezpośrednio
na gniazdkach z ssl. Zapewni to dużą wydajność. Generalnie programista dostanie
funkcję zwrotną, np. taką:
void compute( inputs , output ) {
}
W tej funkcji będzie mógł robić co chce, a na końcu wyniki wpisze do output. Klient zapisze
outputs na dysku i będzie próbował co jakiś czas odesłać je do serwera.
Cytat: Karlik w 21 Lipiec 2013, 01:39
Co do GUI to akurat najmniej istotny element całego oprogramowania do obliczeń.
No może minimalny konfigurator dla użytkownika mógłby się przydać, bo ludzie lubią widzieć "pasek postępu" i
móc przeklikać wszystko zamiast wpisywać długie komendy i/lub edytować pliki konfiguracyjne ;)
Chociaż mi tam wystarczyłaby aplikacja konsolowa jeśli projekt by mnie zainteresował :arrr:
Aplikacje konsolowe mają swoje zalety, graficzne swoje. Aplikację konsolową łatwiej odpalić gdzieś na
jakimś starszym komputerze, nie trzeba instalować środowiska GUI, łatwiej zrobić na niej przetwarzanie
wsadowe. Natomiast w graficznej czasami można uzyskać taki efekt, że użytkownik choćby
chciał źle skonfigurować, to mu GUI na to nie pozwoli.
Podstawową konfigurację widzę w ten sposób, że ktoś wskazuje katalogi z plikami. Przy
każdym katalogu oznacza czy są to pliki trwałe czy ulotne. Pliki trwałe klient będzie
próbował zachować do późniejszych obliczeń. Po wczytaniu wszystkich plików do
bazy, będzie trzeba zbudować work-units. Każdy lubi inne narzędzia do tego celu.
Jedni wolą napisać jakiś insert w sqlu, drudzy jakiś plik xml/csv, jeszcze inni wolą
napisać procedurę w jakimś języku programowania - można dać kilka możliwości.
Od razu po zbudowaniu work-unit, na aplikacjach klienckich by się wywoływała
funkcja zwrotna z danymi. Itd itd... znaczną część projektu mam w głowie, a
przynajmniej tak mi się wydaje.
Pozdrawiam
P.S.
Dla pewności zalogowałem się jeszcze do Asteroids i działa u
mnie bez zarzutu. Więc instalację po stronie klienta mam poprawną.
Dlaczego po prostu nie sprawdzisz, co dzieje się z Twoją aplikacją po stronie klienta?
Czy powstaje plik out?
Czy WU jest ściągane w ogóle?
Dlaczego nie dopiszesz error loga do aplikacji? - "Nie mogę znaleźć pliku" więcej mówi niż exit code -1...
Własny framework? Ok, ale zdajesz sobie sprawę, jaki to ogrom pracy, aby było to uniwersalne i atrakcyjne dla "ludu"? Przecież to nie tylko implementacja serwera i klienta, to także strona projektu, może forum, punktacja/prezentacja wyników, może wygaszacz... czyli... BOINC :)
Dalej uważam, że zabierasz się trochę dziwnie do tego i nie są właściwe Twoje argumenty, że coś z BOINC jest nie tak - ponad 100 projektów świadczy o tym, że się da...
Ja nie wymagam, żebyś wiedział dokładnie co się dzieje w samym kliencie i/lub serwerze, ale ja czytając tylko ten jeden komunikat z loga Twojego klienta doszedłem do tego, że się niepoprawnie ściąga workunit, więc siłą rzeczy aplikacja licząca nie ma swojego pliku wejściowego (lub nie może się do niego poprawnie odwołać) - więc ostatecznie zwraca -1 (czy też inny kod błędu). Jak dla mnie błąd leży gdzieś w konfiguracji serwera (szeroko rozumianej), więc w sumie masz rację, developera aplikacji liczącej nie obchodzi jak to działa od środka (bo w chwili obecnej bardzo prawdopodobne, że masz działającą aplikację), po prostu nie dostał wejścia, za to administrator ma tu pole do popisu.
Nie wiem jak to wygląda od środka aż tak dokładnie, może faktycznie create_work powinien mieć jakąś walidację przed dodaniem work-unita, ale wg mnie napisanie czegoś takiego graniczy z cudem ze względu na liczbę kombinacji różnych ustawień plików (bo w końcu create_work może nie mieć dostępu do pewnych plików, bo jest uruchamiany lokalnie, ale już po podpięciu pod całość klient ma dostęp - bo przykładowo coś się wygeneruje "w locie" - nie wiem czy to możliwe, ale nie widzę powodów, żeby miało być niemożliwe, teraz trochę gdybam).
Dla ścisłości: nie mam żadnego własnego projektu.
Nie wiem jakie były powody wybrania cgi, ale na pewno bym odpuścił pisanie frame-worka, który korzysta bezpośrednio z gniazd. HTTP zazwyczaj jest przepuszczane bez większych problemów przez domyślne konfiguracje większości firewalli/routerów. Za to jak byś chciał mieć własny protokół to już może być większy problem, szczególnie jakby użytkownik musiał zezwolić na ruch na dziwnych portach, a jak puścisz na porcie 80 coś innego niż http to też część urządzeń może to odfiltrować. Rozwiązanie fajne dla kogoś kto wie o czym mowa, dla przeciętnego użytkownika, który nie ma władzy nad podsiecią w której jest może spowodować niemożność liczenia.
sob, 20 lip 2013, 09:14:02 | perft | [error] Can't parse file info in scheduler reply: file name is empty or has '..'
Nadal występuje?
Może '..' oznacza tyle, że nie są podane pełne ścieżki do plików tylko program widzi coś takiego "../nazwa_pliku" zamiast "/home/user/inputfiles/nazwa_pliku"?
Cytat: krzyszp w 21 Lipiec 2013, 11:05
Dlaczego po prostu nie sprawdzisz, co dzieje się z Twoją aplikacją po stronie klienta?
Ponieważ nie umiem. Jak mam sprawdzić?
Cytat: krzyszp w 21 Lipiec 2013, 11:05
Czy powstaje plik out?
Gdzie go szukać? Jaką ma nazwę? Kiedy powinien powstać, a kiedy jest automatycznie
usuwany? Nie mam logu "created out file".
Cytat: krzyszp w 21 Lipiec 2013, 11:05
Czy WU jest ściągane w ogóle?
Wiem na ten temat tyle samo co Ty :D Widziałeś te same logi co ja :D Intuicja
podpowiada, że jakby powstał błąd na etapie ściągania, to serwer uznałby to za
zwykłą sytuację, bo błędy sieci są częste, więc nie oznaczałby WU jako
Computation error [3] z exit code -1.
Cytat: krzyszp w 21 Lipiec 2013, 11:05
Dlaczego nie dopiszesz error loga do aplikacji? - "Nie mogę znaleźć pliku" więcej mówi niż exit code -1...
Bo to jest dopisane do aplikacji, nie wiem tylko gdzie to się powinno wyświetlać. W menadżerze
nie wyświetla się. Jakieś inne miejsce?
O tu jest dopisane:
boinc_resolve_filename(INPUT_FILENAME, input_path, sizeof(input_path));
infile = boinc_fopen(input_path, "r");
if (!infile) {
fprintf(stderr,
"%s Couldn't find input file, resolved name %s.\n",
boinc_msg_prefix(buf, sizeof(buf)), input_path
); // Tutaj dokładnie
exit(-1);
}
Cytat: krzyszp w 21 Lipiec 2013, 11:05
Własny framework? Ok, ale zdajesz sobie sprawę, jaki to ogrom pracy, aby było to uniwersalne i atrakcyjne dla "ludu"? Przecież to nie tylko implementacja serwera i klienta, to także strona projektu, może forum, punktacja/prezentacja wyników, może wygaszacz... czyli... BOINC :)
Nakład pracy mnie nie martwi. Można rozbić na etapy. Podstawowa wersja raczej by
się pojawiła szybko. Boję się czegoś innego - że niewielu ludzi będzie chciało tego używać i
że nie powstanie na tym żaden inny projekt poza moim.
Cytat: krzyszp w 21 Lipiec 2013, 11:05
Dalej uważam, że zabierasz się trochę dziwnie do tego i nie są właściwe Twoje argumenty, że coś z BOINC jest nie tak - ponad 100 projektów świadczy o tym, że się da...
Wiem że inne projekty działają. Ale mała to pociecha, bo u mnie nie działa
najprostsza aplikacja. I nie wiem co zrobić. Co mam myśleć? WU dodaje
się bez błędów. Używam wzorcowej aplikacji klienckiej. Inne aplikacje
liczące działają. Wzorcowa nie działa. W logach m.in. mam że nazwa pliku
jest pusta albo zawiera kropki - a nie jest prawdą ani jedno, ani drugie.
Ja nie wiem co dalej zrobić, jak ktoś ma jakiś pomysł, to chętnie zrobię.
Ale na części pierwsze na pewno nie będę rozbierał BOINCa, bo to
może zająć więcej czasu niż napisanie swojego prostego frame-worka.
Pozdrawiam
Cytat: Karlik w 21 Lipiec 2013, 15:11
Ja nie wymagam, żebyś wiedział dokładnie co się dzieje w samym kliencie i/lub serwerze, ale ja czytając tylko ten jeden komunikat z loga Twojego klienta doszedłem do tego, że się niepoprawnie ściąga workunit, więc siłą rzeczy aplikacja licząca nie ma swojego pliku wejściowego (lub nie może się do niego poprawnie odwołać) - więc ostatecznie zwraca -1 (czy też inny kod błędu). Jak dla mnie błąd leży gdzieś w konfiguracji serwera (szeroko rozumianej), więc w sumie masz rację, developera aplikacji liczącej nie obchodzi jak to działa od środka (bo w chwili obecnej bardzo prawdopodobne, że masz działającą aplikację), po prostu nie dostał wejścia, za to administrator ma tu pole do popisu.
Tak właśnie uważam. Problem w tym, że nie wiem co ze strony administratora jeszcze trzeba
zrobić, albo co zrobić lepiej. Podejrzewam że źle dodaję WU, ale to podejrzenie też jest
słabe, bo jednak WU jest na serwerze i program dodający nie zwraca żadnych błędów.
Cytat: Karlik w 21 Lipiec 2013, 15:11
Nie wiem jak to wygląda od środka aż tak dokładnie, może faktycznie create_work powinien mieć jakąś walidację przed dodaniem work-unita, ale wg mnie napisanie czegoś takiego graniczy z cudem ze względu na liczbę kombinacji różnych ustawień plików (bo w końcu create_work może nie mieć dostępu do pewnych plików, bo jest uruchamiany lokalnie, ale już po podpięciu pod całość klient ma dostęp - bo przykładowo coś się wygeneruje "w locie" - nie wiem czy to możliwe, ale nie widzę powodów, żeby miało być niemożliwe, teraz trochę gdybam).
Z tego co zauważyłem, to ma walidację bardzo dobrą. Zanim udało mi się
"poprawnie" dodać WU, to create_work informował mnie całkiem precyzyjnie
co zrobiłem źle.
Cytat: Karlik w 21 Lipiec 2013, 15:11
Nie wiem jakie były powody wybrania cgi,
CGI to po prostu dowolny program po stronie serwera, wraz z protokołami
uruchamiania, przekazywania parametrów, itd. To jest rozszerzenie
statycznych plików HTML. Każda strona w PHP to też jest CGI.
Cytat: Karlik w 21 Lipiec 2013, 15:11
ale na pewno bym odpuścił pisanie frame-worka, który korzysta bezpośrednio z gniazd. HTTP zazwyczaj jest przepuszczane bez większych problemów przez domyślne konfiguracje większości firewalli/routerów. Za to jak byś chciał mieć własny protokół to już może być większy problem, szczególnie jakby użytkownik musiał zezwolić na ruch na dziwnych portach, a jak puścisz na porcie 80 coś innego niż http to też część urządzeń może to odfiltrować. Rozwiązanie fajne dla kogoś kto wie o czym mowa, dla przeciętnego użytkownika, który nie ma władzy nad podsiecią w której jest może spowodować niemożność liczenia.
Hmmm. Czyli jak transfer leci po http czy https to więcej routerów przepuszcza... Dobry
argument.
Pozdrawiam
Cytat: Szopler w 21 Lipiec 2013, 15:37
sob, 20 lip 2013, 09:14:02 | perft | [error] Can't parse file info in scheduler reply: file name is empty or has '..'
Nadal występuje?
Właśnie nie występował, a ostatnio jak próbowałem dodać następne WU to znowu się
pojawił. Dodaję zawsze tak samo.
Cytat: Szopler w 21 Lipiec 2013, 15:37
Może '..' oznacza tyle, że nie są podane pełne ścieżki do plików tylko program widzi coś takiego "../nazwa_pliku" zamiast "/home/user/inputfiles/nazwa_pliku"?
Tak na początku zrozumiałem, bo by mi do głowy nawet nie przyszło, żeby w nazwie
plików wejściowych używać dwóch kropek. No ale pisze wyraźnie, że to nazwa
pliku ma dwie kropki.
Pozdrawiam
Pisałem chyba dwa razy, żebyś ściągnął źródła aplikacji radioaktywnego... tam właśnie jest tworzony error log (a właściwie log aplikacji, nie tylko błedy) od początku... Przypominam
Exit status pokazuje, że aplikacja zakończyła się porażką, dopisz error log'a w aplikacji i zajrzyj do odpowiedniego "slot" w momencie rozpoczęcia liczenia na kliencie...
Ignorujesz rady, to jak chcesz dojść do czegoś...
Tak, do obejrzenia fragment:
if(err != 0)
{
if (err != *error) {
fprintf(stderr, "Could not find any of the devices listed in sensors.xml: %s\n", usbErrorMessage(err));
*error = err; //rewriting the "local" error to the global var
}
return NULL;
}
Cytat: krzyszp w 21 Lipiec 2013, 19:07
Pisałem chyba dwa razy, żebyś ściągnął źródła aplikacji radioaktywnego... tam właśnie jest tworzony error log (a właściwie log aplikacji, nie tylko błedy) od początku... Przypominam
Exit status pokazuje, że aplikacja zakończyła się porażką, dopisz error log'a w aplikacji i zajrzyj do odpowiedniego "slot" w momencie rozpoczęcia liczenia na kliencie...
Ignorujesz rady, to jak chcesz dojść do czegoś...
Tak, do obejrzenia fragment:
if(err != 0)
{
if (err != *error) {
fprintf(stderr, "Could not find any of the devices listed in sensors.xml: %s\n", usbErrorMessage(err));
*error = err; //rewriting the "local" error to the global var
}
return NULL;
}
Mogę ściągnąć, ale taki sam sposób logowania ma upper-case. Też
wysyła przy pomocy fprintf na stderr:
fprintf(stderr, "%s Couldn't find input file, resolved name %s.\n", boinc_msg_prefix(buf, sizeof(buf)), input_path );
Nie wiem gdzie te logi są zapisywane i co
je przechwytuje. Co to jest odpowiedni slot? W menadżerze nie
mam logu: "%s Couldn't find input file, resolved name %s.\n".
Czyli albo problem nie polega na tym, że aplikacja nie może znaleźć input file, albo
nie wiem gdzie szukać tych logów. Nie mam katalogu /var/logs/client-boinc.
Pozdrawiam
Szukaj w /var/lib/boinc-client
Cytat: Szopler w 21 Lipiec 2013, 21:33
Szukaj w /var/lib/boinc-client
Tam nie mam błędu że nie udało się rozwiązać nazwy pliku, pasują tylko
jakieś pliki binarne z innych projektów.
root@biglaptop:/var/lib/boinc-client# find . -name "*" -print | xargs grep "resolved"
Plik binarny ./projects/boinc.bakerlab.org_rosetta/minirosetta_3.46_x86_64-pc-linux-gnu pasuje do wzorca
Plik binarny ./projects/asteroidsathome.net_boinc/period_search_10100_x86_64-pc-linux-gnu pasuje do wzorca
root@biglaptop:/var/lib/boinc-client#
Nie wiem czy to jest slot projektu perft, ale jeśli tak, to jest on pusty:
root@biglaptop:/var/lib/boinc-client/projects/perft.computers-chess.com# ls -l
razem 0
Plików które mają w ścieżce "perft" trochę jest
root@biglaptop:/var/lib/boinc-client# find . -name "*perft*"
./statistics_perft.computers-chess.com.xml
./notices/feeds_perft.computers-chess.com.xml
./notices/perft.computers-chess.com_notices.php.xml
./notices/archive_perft.computers-chess.com_notices.php.xml
./projects/perft.computers-chess.com
./sched_request_perft.computers-chess.com.xml
./master_perft.computers-chess.com.xml
./account_perft.computers-chess.com.xml
./sched_reply_perft.computers-chess.com.xml
Przejrzałem niektóre, nie widzę nic interesującego.
Pozdrawiam
Cytat: mariotti w 21 Lipiec 2013, 22:09
Nie wiem czy to jest slot projektu perft, ale jeśli tak, to jest on pusty:
root@biglaptop:/var/lib/boinc-client/projects/perft.computers-chess.com# ls -l
razem 0
No i widzisz - w ogóle nie ściąga aplikacji liczącej z serwera...
Edit:
To nie jest slot, to jest katalog aplikacji... Do niego jest odpowiedni katalog slot w innym miejscu, znajdź na dysku wszystkie foldery ze "slot" w nazwie, to zobaczysz, gdzie są WU...
Cytat: krzyszp w 21 Lipiec 2013, 22:13
No i widzisz - w ogóle nie ściąga aplikacji liczącej z serwera...
Może ściągnął i skasował? Widziałem kilka razy jakiś log, że ją pobiera.
Co trzeba zrobić żeby ściągał? Aplikację na serwerze dodałem. Potem
podpisałem wersję i dodałem wersję.
Pozdrawiam
Cytat: mariotti w 21 Lipiec 2013, 22:19
Cytat: krzyszp w 21 Lipiec 2013, 22:13
No i widzisz - w ogóle nie ściąga aplikacji liczącej z serwera...
Może ściągnął i skasował? Widziałem kilka razy jakiś log, że ją pobiera.
Pozdrawiam
Dopóki nie usuniesz projektu z managera, dopóty wszystko w katalogu "projects" zostaje, więc to nie to...
NIE pobiera Ci aplikacji z serwera...
Edit:
A Ty na pewno dodałeś projekt w managerze? Ile WU wygenerowałeś, może inni ściągnęli Twoje testowe WU zanim Ty zdążyłeś?
Cytat: krzyszp w 21 Lipiec 2013, 22:22
Dopóki nie usuniesz projektu z managera, dopóty wszystko w katalogu "projects" zostaje, więc to nie to...
NIE pobiera Ci aplikacji z serwera...
No dobra, dlaczego nie pobiera? Dlaczego nie mam logu że nie może pobrać?
Pozdrawiam
No dobra...
Wybierz z menu Advenced -> Event Log
W managerze, w zakładce Projects wybierz swój projekt i kliknij "Update". obserwuj co wyświetla w Event log. podaj tutaj. (Inne projekty w tym czasie spauzuj).
Cytat: krzyszp w 21 Lipiec 2013, 22:22
A Ty na pewno dodałeś projekt w managerze? Ile WU wygenerowałeś, może inni ściągnęli Twoje testowe WU zanim Ty zdążyłeś?
Na pewno dodałem projekt. Mam logi z menadżera z tytułem "perft". Najświeższe:
nie, 21 lip 2013, 22:20:07 | perft | update requested by user
nie, 21 lip 2013, 22:20:10 | perft | Sending scheduler request: Requested by user.
nie, 21 lip 2013, 22:20:10 | perft | Not reporting or requesting tasks
nie, 21 lip 2013, 22:20:12 | perft | Scheduler request completed
nie, 21 lip 2013, 22:20:26 | perft | update requested by user
nie, 21 lip 2013, 22:20:27 | perft | Sending scheduler request: Requested by user.
nie, 21 lip 2013, 22:20:27 | perft | Not reporting or requesting tasks
nie, 21 lip 2013, 22:20:28 | perft | Scheduler request completed
Za każdym razem gdy dodawałem jeden WU, to po logach w menadżerze
wnioskowałem że dwa razy próbował go pobrać i dwa razy zakończyło
się błędem. Potem już nie pobierał. Zaraz dodam kolejny WU, zobaczymy...
Pozdrawiam
Cytat: krzyszp w 21 Lipiec 2013, 22:27
No dobra...
Wybierz z menu Advenced -> Event Log
W managerze, w zakładce Projects wybierz swój projekt i kliknij "Update". obserwuj co wyświetla w Event log. podaj tutaj. (Inne projekty w tym czasie spauzuj).
Gdy podawałem logi z menadżera to zawsze robiłem tak jak piszesz. Podam zaraz po nowym WU.
Pozdrawiam
Po dodaniu nowego WU takie logi są w menadżerze
nie, 21 lip 2013, 22:31:04 | perft | update requested by user
nie, 21 lip 2013, 22:31:09 | perft | Sending scheduler request: Requested by user.
nie, 21 lip 2013, 22:31:09 | perft | Not reporting or requesting tasks
nie, 21 lip 2013, 22:31:10 | perft | Scheduler request completed
nie, 21 lip 2013, 22:31:19 | perft | update requested by user
nie, 21 lip 2013, 22:31:20 | perft | Sending scheduler request: Requested by user.
nie, 21 lip 2013, 22:31:20 | perft | Not reporting or requesting tasks
nie, 21 lip 2013, 22:31:22 | perft | Scheduler request completed
Po usunięciu projektu z menadżera i ponownym dodaniu, aplikacja licząca
została pobrana. Czyli jednak poprzednio prawdopodobnie sam skasował, jak
nie było work-units. Pobieranie działa dobrze.
Po usunięciu i ponowny dodaniu projektu, mam takie logi, niewiele z nich
rozumiem:
nie, 21 lip 2013, 22:34:30 | perft | Resetting project
nie, 21 lip 2013, 22:34:30 | perft | Detaching from project
nie, 21 lip 2013, 22:35:11 | perft | Master file download succeeded
nie, 21 lip 2013, 22:35:16 | perft | Sending scheduler request: Project initialization.
nie, 21 lip 2013, 22:35:16 | perft | Requesting new tasks for CPU
nie, 21 lip 2013, 22:35:17 | perft | [error] Can't parse file info in scheduler reply: file name is empty or has '..'
nie, 21 lip 2013, 22:35:17 | perft | Scheduler request completed: got 1 new tasks
nie, 21 lip 2013, 22:35:17 | perft | [error] State file error: missing file
nie, 21 lip 2013, 22:35:17 | perft | [error] Can't handle task test_0 in scheduler reply
nie, 21 lip 2013, 22:35:19 | perft | Started download of uc1
Pozdrawiam
Może na 24-48h odpuścić, bo poziom frustracji tylko wzrasta. Podejść ponownie z chłodną głową. Popełniasz gdzieś banalny, a być może kardynalny błąd.
Zajrzeć na strony BOINC i zapoznać się jeszcze 2-3 razy z dotępną dokumentacją.
http://boinc.berkeley.edu/trac/wiki/BoincFiles#Fileproperties
http://boinc.berkeley.edu/trac/wiki/JobSubmission
http://boinc.berkeley.edu/trac/wiki/JobTemplates
Zaorać tymczasowy projekt i spróbować ponownie wszystko na spokojnie.
Jest kilka projektów, które publikują swój kod źródłowy w całości nawet z generatorem zadań.
https://raw.github.com/travisdesell/Subset-Sum/master/server/sss_work_generator.cxx
https://github.com/travisdesell/Subset-Sum
5417 http://perft.computers-chess.com/ 2013-07-21 22:32:29 Master file download succeeded
5418 http://perft.computers-chess.com/ 2013-07-21 22:32:34 Sending scheduler request: Project initialization.
5419 http://perft.computers-chess.com/ 2013-07-21 22:32:34 Requesting new tasks for CPU and ATI
5420 perft 2013-07-21 22:32:35 Scheduler request completed: got 0 new tasks
5421 perft 2013-07-21 22:32:35 No tasks sent
Wygeneruj więcej zadań, żeby można było samemu zobaczyć.
Według mnie masz gdzieś problem w template, albo w create_work i przez to po stronie klienta powstaje 'nadrzędny' błąd "can't parse scheduler reply". Dopóki tego nie naprawisz, na 100% nic nie zadziała. Jest jeszcze opcja błędnej nazwy aplikacji. Jak w ogóle dodawałeś aplikację - zostawiłeś to, co serwer sam robi przy setupie ?
W logu nie widać żadnego ściągania aplikacji, tylko plik od niej, który jest kasowany w momencie jak zadanie nie może być przetworzone. Dlatego go potem nie ma.
P.S. Zadań testowych nigdy nie żałuj, łatwo później się ich pozbyć przez panel 'ops', a quotę po stronie testowych hostów łatwo wyzerować.
Cytat: buninek w 21 Lipiec 2013, 22:37
Może na 24-48h odpuścić, bo poziom frustracji tylko wzrasta. Podejść ponownie z chłodną głową. Popełniasz gdzieś banalny, a być może kardynalny błąd.
Tyle to wiem, ale ciekawe jaki to błąd i czy do końca roku się uporam :D
Cytat: mariotti w 21 Lipiec 2013, 22:40
Cytat: buninek w 21 Lipiec 2013, 22:37
Może na 24-48h odpuścić, bo poziom frustracji tylko wzrasta. Podejść ponownie z chłodną głową. Popełniasz gdzieś banalny, a być może kardynalny błąd.
Tyle to wiem, ale ciekawe jaki to błąd i czy do końca roku się uporam :D
Spokojnie, TJM Ci podpowiedział, gdzie szukać (a on się na tym zna) :)
Dodatkowe info:
Klient po każdym requeście zapisuje odpowiedź na dysku.
Masz tam w folderze 'data' pliki typu sched_request_nazwa_projektu... i sched_reply_nazwa_projektu...
Z pliku sched_reply zapewne da się wywnioskować co jest nie tak, więc możesz go wrzucić na forum. O ile pamiętam, plik zawiera dane o użytkowniku, chyba jest tam account key, więc ewentualnie tą część z niego wywal.
Cytat: TJM w 21 Lipiec 2013, 22:39
Wygeneruj więcej zadań, żeby można było samemu zobaczyć.
Wygenerowałem łączne 21, w tym przed chwilą 10.
Po tym u mnie pojawiły się takie logi:
nie, 21 lip 2013, 22:44:54 | perft | update requested by user
nie, 21 lip 2013, 22:44:55 | perft | Sending scheduler request: Requested by user.
nie, 21 lip 2013, 22:44:55 | perft | Requesting new tasks for CPU
nie, 21 lip 2013, 22:44:57 | perft | [error] Can't parse file info in scheduler reply: file name is empty or has '..'
nie, 21 lip 2013, 22:44:57 | perft | [error] Can't parse file info in scheduler reply: file name is empty or has '..'
nie, 21 lip 2013, 22:44:57 | perft | [error] Can't parse file info in scheduler reply: file name is empty or has '..'
nie, 21 lip 2013, 22:44:57 | perft | [error] Can't parse file info in scheduler reply: file name is empty or has '..'
nie, 21 lip 2013, 22:44:57 | perft | [error] Can't parse file info in scheduler reply: file name is empty or has '..'
nie, 21 lip 2013, 22:44:57 | perft | [error] Can't parse file info in scheduler reply: file name is empty or has '..'
nie, 21 lip 2013, 22:44:57 | perft | [error] Can't parse file info in scheduler reply: file name is empty or has '..'
nie, 21 lip 2013, 22:44:57 | perft | [error] Can't parse file info in scheduler reply: file name is empty or has '..'
nie, 21 lip 2013, 22:44:57 | perft | [error] Can't parse file info in scheduler reply: file name is empty or has '..'
nie, 21 lip 2013, 22:44:57 | perft | [error] Can't parse file info in scheduler reply: file name is empty or has '..'
nie, 21 lip 2013, 22:44:57 | perft | Scheduler request completed: got 10 new tasks
nie, 21 lip 2013, 22:44:57 | perft | [error] State file error: missing file
nie, 21 lip 2013, 22:44:57 | perft | [error] Can't handle task test3_4 in scheduler reply
nie, 21 lip 2013, 22:44:57 | perft | [error] State file error: missing file
nie, 21 lip 2013, 22:44:57 | perft | [error] Can't handle task test_1 in scheduler reply
nie, 21 lip 2013, 22:44:57 | perft | [error] State file error: missing file
nie, 21 lip 2013, 22:44:57 | perft | [error] Can't handle task test3_5 in scheduler reply
nie, 21 lip 2013, 22:44:57 | perft | [error] State file error: missing file
nie, 21 lip 2013, 22:44:57 | perft | [error] Can't handle task test4_4 in scheduler reply
nie, 21 lip 2013, 22:44:57 | perft | [error] State file error: missing file
nie, 21 lip 2013, 22:44:57 | perft | [error] Can't handle task test4_5 in scheduler reply
nie, 21 lip 2013, 22:44:57 | perft | [error] State file error: missing file
nie, 21 lip 2013, 22:44:57 | perft | [error] Can't handle task test5_2 in scheduler reply
nie, 21 lip 2013, 22:44:57 | perft | [error] State file error: missing file
nie, 21 lip 2013, 22:44:57 | perft | [error] Can't handle task test5_3 in scheduler reply
nie, 21 lip 2013, 22:44:57 | perft | [error] State file error: missing file
nie, 21 lip 2013, 22:44:57 | perft | [error] Can't handle task test6_2 in scheduler reply
nie, 21 lip 2013, 22:44:57 | perft | [error] State file error: missing file
nie, 21 lip 2013, 22:44:57 | perft | [error] Can't handle task test6_3 in scheduler reply
nie, 21 lip 2013, 22:44:57 | perft | [error] State file error: missing file
nie, 21 lip 2013, 22:44:57 | perft | [error] Can't handle task test10_0 in scheduler reply
Cytat: TJM w 21 Lipiec 2013, 22:39
Według mnie masz gdzieś problem w template, albo w create_work i przez to po stronie klienta powstaje 'nadrzędny' błąd "can't parse scheduler reply". Dopóki tego nie naprawisz, na 100% nic nie zadziała. Jest jeszcze opcja błędnej nazwy aplikacji. Jak w ogóle dodawałeś aplikację - zostawiłeś to, co serwer sam robi przy setupie ?
Dodawałem według tutoriala. Najpierw wpis do project.xml
<app>
<name>uc1</name>
<user_friendly_name>upper case 1</user_friendly_name>
</app>
Potem aplikacja bin/xadd
Potem to drzewko aplikacji:
cd apps/uc1/0.01/x86_64-pc-linux-gnu/
uc1 uc1.sig version.xml
at version.xml
<version>
<file>
<physical_name>uc1</physical_name>
<logical_name>upper case 1</logical_name>
</file>
</version>
Podpisałem aplikację kluczem keys/code_sign_private
Na koniec program bin/update_version. Nie wyrzuciło żadnego
błędu i aplikacja licząca jest po stronie klienta - więc tutaj nie
podejrzewam żadnych problemów.
Pozdrawiam
Cytat: TJM w 21 Lipiec 2013, 22:39
W logu nie widać żadnego ściągania aplikacji, tylko plik od niej, który jest kasowany w momencie jak zadanie nie może być przetworzone. Dlatego go potem nie ma.
Tak czy inaczej, teraz aplikacja leży pobrana po stronie klienta.
Cytat: TJM w 21 Lipiec 2013, 22:39
P.S. Zadań testowych nigdy nie żałuj, łatwo później się ich pozbyć przez panel 'ops', a quotę po stronie testowych hostów łatwo wyzerować.
Szybko się zużywają, bo jak błąd, to aplikacja woła o następne.
Pozdrawiam
Część od samej aplikacji w odpowiedzi schedulera wygląda ok.
Jedyne co tam rzuca się w oczy, to że nazwałeś plik po prostu 'uc1' podczas gdy BOINCowa tradycja narzucała formę nazwa_wersja_platforma - ale to chyba nie jest wymagane od czasu AppVersionNew http://boinc.berkeley.edu/trac/wiki/AppVersionNew
Z tego też względu myślałem, że jest to plik od zadania, a nie aplikacja.
Części reply od zadania nie udało mi się przejrzeć, bo nie dałem rady zassać żadnego zadania. Wygeneruj ich trochę więcej, może uda się jakieś łyknąć. Albo wklej swój sched_reply z momentu jak dostajesz zadania.
Cytat: TJM w 21 Lipiec 2013, 23:17
Część od samej aplikacji w odpowiedzi schedulera wygląda ok.
Jedyne co tam rzuca się w oczy, to że nazwałeś plik po prostu 'uc1' podczas gdy BOINCowa tradycja narzucała formę nazwa_wersja_platforma - ale to chyba nie jest wymagane od czasu AppVersionNew http://boinc.berkeley.edu/trac/wiki/AppVersionNew
Z tego też względu myślałem, że jest to plik od zadania, a nie aplikacja.
Części reply od zadania nie udało mi się przejrzeć, bo nie dałem rady zassać żadnego zadania. Wygeneruj ich trochę więcej, może uda się jakieś łyknąć. Albo wklej swój sched_reply z momentu jak dostajesz zadania.
Mam wrażenie że zachowanie jest losowe. Teraz wygląda na to, jakby wszystko było w
porządku aż do czasu odesłania wyników. Czyli aplikację pobrał poprawnie, zadanie
do serwera dodane poprawnie, pobrany plik wejściowy poprawnie, obliczenia poprawne(!),
ale odesłanie wyników się wykrzaczyło - przynajmniej ja te logi tak rozumiem:
nie, 21 lip 2013, 23:19:14 | perft | Started download of in
nie, 21 lip 2013, 23:19:15 | perft | Finished download of in
nie, 21 lip 2013, 23:19:15 | perft | Starting task test22_1 using uc1 version 1
nie, 21 lip 2013, 23:19:15 | perft | Starting task test22_0 using uc1 version 1
nie, 21 lip 2013, 23:19:23 | perft | Sending scheduler request: To fetch work.
nie, 21 lip 2013, 23:19:23 | perft | Requesting new tasks for CPU
nie, 21 lip 2013, 23:19:25 | perft | Scheduler request completed: got 0 new tasks
nie, 21 lip 2013, 23:19:25 | perft | Project has no tasks available
nie, 21 lip 2013, 23:19:39 | perft | Computation for task test22_1 finished
nie, 21 lip 2013, 23:19:40 | perft | Computation for task test22_0 finished
nie, 21 lip 2013, 23:19:41 | perft | Started upload of test22_1_0
nie, 21 lip 2013, 23:19:42 | perft | Temporarily failed upload of test22_1_0: transient upload error
nie, 21 lip 2013, 23:19:42 | perft | Backing off 11 min 31 sec on upload of test22_1_0
nie, 21 lip 2013, 23:19:42 | perft | Started upload of test22_0_0
nie, 21 lip 2013, 23:19:43 | perft | Temporarily failed upload of test22_0_0: transient upload error
nie, 21 lip 2013, 23:19:43 | perft | Backing off 12 min 56 sec on upload of test22_0_0
Zadania zaraz dodam i wyłączę mojego klienta, bo je szybko konsumuje.
Pozdrawiam
Dodałem 20zadań, od test_a_00 do test_a_19.
Pozdrawiam
Klient ma opcję podglądania, co dzieje się nie tak przy uploadzie.
Jest od tego wpis w cc_config.xml bodajże http_debug, xfer_debug albo to całe http_xfer_debug http://boinc.berkeley.edu/wiki/Client_configuration
Oprócz tego po stronie serwera masz file_upload_handler.log w którym też może co nieco się znaleźć.
W katalogu projekt/upload apacz musi mieć prawa do zapisu.
Cytat: TJM w 21 Lipiec 2013, 23:39
Klient ma opcję podglądania, co dzieje się nie tak przy uploadzie.
Jest od tego wpis w cc_config.xml bodajże http_debug albo to całe http_xfer_debug http://boinc.berkeley.edu/wiki/Client_configuration
Oprócz tego po stronie serwera masz file_upload_handler.log w którym też może co nieco się znaleźć.
W katalogu projekt/upload apacz musi mieć prawa do zapisu.
Do web serwera leci takie zapytanie POST:
IP.IP.IP.IP - - [22/Jul/2013:01:46:02 +0400] "POST /perft_cgi/file_upload_handler HTTP/1.1" 200 186 "604" "-" "BOINC client (x86_64-pc-linux-gnu 6.10.58)" <<>> 929
Program file_upload_handler jest na miejscu:
perft@x:~/www/cgi-bin$ ls -l
total 5244
-rwxr-xr-x 1 perft www-data 4338900 Jul 16 04:39 cgi
-rwxr-xr-x 1 perft www-data 1010233 Jul 16 04:39 file_upload_handler
Katalog upload ma dla prawa dla grupy rwx
perft@x:~/www$ ls -l
total 84
drwxrws--- 2 perft www-data 4096 Jul 16 04:39 upload
Pliku file_upload_handler.log nie znalazłem u siebie.
Pozdrawiam
A teraz tak jakby w logach nie było błędu, ale nigdzie nie mogę znaleźć odesłanych
plików z wynikami:
pon, 22 lip 2013, 00:00:12 | perft | Sending scheduler request: To fetch work.
pon, 22 lip 2013, 00:00:12 | perft | Requesting new tasks for CPU
pon, 22 lip 2013, 00:00:13 | perft | Scheduler request completed: got 2 new tasks
pon, 22 lip 2013, 00:00:15 | perft | Starting task test_b_00_1 using uc1 version 1
pon, 22 lip 2013, 00:00:15 | perft | Starting task test_b_00_0 using uc1 version 1
pon, 22 lip 2013, 00:00:23 | perft | Sending scheduler request: To fetch work.
pon, 22 lip 2013, 00:00:23 | perft | Requesting new tasks for CPU
pon, 22 lip 2013, 00:00:24 | perft | Scheduler request completed: got 0 new tasks
pon, 22 lip 2013, 00:00:24 | perft | Project has no tasks available
pon, 22 lip 2013, 00:00:37 | perft | Computation for task test_b_00_1 finished
pon, 22 lip 2013, 00:00:38 | perft | Computation for task test_b_00_0 finished
Pozdrawiam
Jeśli nie ma w katalogu upload, zostały pewnie przeniesione gdzieś przez assimilator, może do sample_results ?
Cytat: TJM w 22 Lipiec 2013, 06:58
Jeśli nie ma w katalogu upload, zostały pewnie przeniesione gdzieś przez assimilator, może do sample_results ?
W "zwykłej" postaci nie ma rezultatów nigdzie, może są gdzieś skompresowane, może w bazie
danych, nie wiem. W zwykłej nie ma nigdzie, ponieważ przeszukałem cały katalog grep'em:
perft@x:~/www$ find . -name "*" -print | xargs grep "AABB"
perft@x:~/www$ find . -name "*" -print | xargs grep "aAbB"
./download/2cc/in0:aAbBcCdddasdeDEasd
./download/1af/in2:aAbBcCdddasdeDEasd
./download/3e9/in:aAbBcCdddasdeDEasd
./templates/in:aAbBcCdddasdeDEasd
Program upper-case ma zamienić małe litery na duże. Jak widać
pliki wejściowe w kilku kopiach znalazł. Gdy użyłem dużych liter jako
wzorca, to żadnego pliku nie znalazł.
Teraz prawdopodobnie klient nie odsyła wyników. Trochę mnie to
dziwi, bo nic nie zmieniałem w szablonach, a wcześniej był inny
błąd, albo z autoryzacją, albo z tymi dwiema kropkami w nazwie pliku.
Pozdrawiam
W logu, który podałeś w ogóle nie ma informacji, że próbował odesłać, może na coś czeka? Tak samo próbki nie zostały zaraportowane
Swoją drogą zamiast finda w takiej postaci możesz użyć "grep -r wzorzec ." :)
Cytat: Karlik w 22 Lipiec 2013, 09:25
W logu, który podałeś w ogóle nie ma informacji, że próbował odesłać, może na coś czeka? Tak samo próbki nie zostały zaraportowane
Swoją drogą zamiast finda w takiej postaci możesz użyć "grep -r wzorzec ." :)
Raz te błędy z uploadem są, drugi raz ich nie ma. Wczoraj były błędy z dwiema kropkami w nazwie.
Ja nie wiem o co chodzi. Ostatni log wygląda tak:
pon, 22 lip 2013, 00:21:35 | perft | update requested by user
pon, 22 lip 2013, 00:21:36 | perft | Sending scheduler request: Requested by user.
pon, 22 lip 2013, 00:21:36 | perft | Not reporting or requesting tasks
pon, 22 lip 2013, 00:21:37 | perft | Scheduler request completed
pon, 22 lip 2013, 00:22:37 | perft | update requested by user
pon, 22 lip 2013, 00:22:42 | perft | Sending scheduler request: Requested by user.
pon, 22 lip 2013, 00:22:42 | perft | Not reporting or requesting tasks
pon, 22 lip 2013, 00:22:44 | perft | Scheduler request completed
pon, 22 lip 2013, 03:18:07 | perft | Started upload of test22_1_0
pon, 22 lip 2013, 03:18:07 | perft | Started upload of test22_0_0
pon, 22 lip 2013, 03:18:08 | perft | Temporarily failed upload of test22_1_0: transient upload error
pon, 22 lip 2013, 03:18:08 | perft | Backing off 1 hr 39 min 15 sec on upload of test22_1_0
pon, 22 lip 2013, 03:18:08 | perft | Temporarily failed upload of test22_0_0: transient upload error
pon, 22 lip 2013, 03:18:08 | perft | Backing off 1 hr 10 min 53 sec on upload of test22_0_0
Chyba pliki z wynikami zapisuje sobie na lokalnej maszynie, aby potem
co jakiś czas próbować odesłać.
Pozdrawiam
Cytat: mariotti w 22 Lipiec 2013, 10:10Chyba pliki z wynikami zapisuje sobie na lokalnej maszynie, aby potem co jakiś czas próbować odesłać.
Dokładnie tak jest (w końcu nie każdy komputer musi mieć stale dostęp do internetu). Z loga wynika, że nie potrafi poprawnie tego wysłać na serwer (bardzo prawdopodobne, że błąd leży po stronie serwera).
Cytat: Karlik w 22 Lipiec 2013, 12:04
Cytat: mariotti w 22 Lipiec 2013, 10:10Chyba pliki z wynikami zapisuje sobie na lokalnej maszynie, aby potem co jakiś czas próbować odesłać.
Dokładnie tak jest (w końcu nie każdy komputer musi mieć stale dostęp do internetu). Z loga wynika, że nie potrafi poprawnie tego wysłać na serwer (bardzo prawdopodobne, że błąd leży po stronie serwera).
Nom, szkoda tylko że nie wiem jaki to błąd. I pytanie: czy po rozwiązaniu tego błędu, znowu
będzie się pojawiał błąd z dwiema kropkami :)
Uploadnięte pliki gdzieś po prostu muszą być, bo zadania mają obecnie status 'waiting for validation' czyli są odesłane i zaraportowane.
Problemem jest częściowo to, że nie masz w ogóle validatora i assimilatora, więc przypuszczalnie pliki siedzą gdzieś w projekt/upload i czekają na lepsze czasy. Poszukaj ich tam ręcznie.
Cytat: TJM w 22 Lipiec 2013, 15:22
Uploadnięte pliki gdzieś po prostu muszą być, bo zadania mają obecnie status 'waiting for validation' czyli są odesłane i zaraportowane.
Problemem jest częściowo to, że nie masz w ogóle validatora i assimilatora, więc przypuszczalnie pliki siedzą gdzieś w projekt/upload i czekają na lepsze czasy. Poszukaj ich tam ręcznie.
Są po stronie klienta. Chyba nawet są poprawnie policzone:
root@biglaptop:/var/lib/boinc-client/projects/perft.computers-chess.com# ls -l
razem 1076
-rw-r--r-- 1 boinc boinc 19 2013-07-21 23:19 in
-rw-r--r-- 1 boinc boinc 19 2013-07-21 23:19 test22_0_0
-rw-r--r-- 1 boinc boinc 19 2013-07-21 23:19 test22_1_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:00 test_b_00_0_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:00 test_b_00_1_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:15 test_c_15_0_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:15 test_c_15_1_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:15 test_c_16_0_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:15 test_c_16_1_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:15 test_c_17_0_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:15 test_c_17_1_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:14 test_c_18_0_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:14 test_c_18_1_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:14 test_c_19_0_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:14 test_c_19_1_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:13 test_c_28_1_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:13 test_c_29_0_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:13 test_c_29_1_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:13 test_c_30_0_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:13 test_c_30_1_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:13 test_c_31_0_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:12 test_c_31_1_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:12 test_c_32_0_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:12 test_c_32_1_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:12 test_c_33_0_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:14 test_c_38_1_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:14 test_c_39_0_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:14 test_c_39_1_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:14 test_c_40_0_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:14 test_c_40_1_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:14 test_c_41_0_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:14 test_c_41_1_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:14 test_c_42_0_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:13 test_c_42_1_0
-rw-r--r-- 1 boinc boinc 19 2013-07-22 00:13 test_c_43_0_0
-rwxr-xr-x 1 boinc boinc 957028 2013-07-21 22:37 uc1
root@biglaptop:/var/lib/boinc-client/projects/perft.computers-chess.com# cat test_c_3
test_c_30_0_0 test_c_30_1_0 test_c_31_0_0 test_c_31_1_0 test_c_32_0_0 test_c_32_1_0 test_c_33_0_0 test_c_38_1_0 test_c_39_0_0 test_c_39_1_0
root@biglaptop:/var/lib/boinc-client/projects/perft.computers-chess.com# cat test_c_31_0_0
AABBCCDDDASDEDEASD
Pozdrawiam
One nie mają być po stronie klienta, tylko po stronie serwera.
WU które wczoraj 'przeliczyłem' zostały poprawnie wysłane i albo gdzieś są, albo musisz szukać dlaczego ich nie ma.
Odesłane na serwer pliki będą miały inne nazwy, zależnie od ustawień w template.
Cytat: TJM w 22 Lipiec 2013, 20:58
One nie mają być po stronie klienta, tylko po stronie serwera.
WU które wczoraj 'przeliczyłem' zostały poprawnie wysłane
W jaki sposób można rozpoznać że zostały wysłane?
Cytat: TJM w 22 Lipiec 2013, 20:58
i albo gdzieś są, albo musisz szukać dlaczego ich nie ma.
W zwykłej-tekstowej postaci nie ma żadnej odpowiedzi po stronie serwera. Nie
mam pewności czy jest gdzieś w postaci zaszyfrowanej/skompresowanej.
Cytat: TJM w 22 Lipiec 2013, 20:58
Odesłane na serwer pliki będą miały inne nazwy, zależnie od ustawień w template.
Ostatnio na takich szablonach dodawałem work-unity:
<input_template>
<file_info>
<number>0</number>
</file_info>
<workunit>
<file_ref>
<file_number>0</file_number>
<open_name>in</open_name>
</file_ref>
</workunit>
</input_template>
<output_template>
<file_info>
<name><OUTFILE_0/></name>
<generated_locally/>
<upload_when_present/>
<max_nbytes>32768</max_nbytes>
<url><UPLOAD_URL/></url>
</file_info>
<result>
<file_ref>
<file_name><OUTFILE_0/></file_name>
<open_name>out</open_name>
</file_ref>
</result>
</output_template>
Pozdrawiam
Po wysłaniu znikają z klienta, ponadto zmienia się status WU.
Szukaj w logu upload handlera, w konfiguracji projektu możesz włączyć fuh_debug_level 4 http://boinc.berkeley.edu/trac/wiki/ServerDebug
Cytat: TJM w 23 Lipiec 2013, 06:50
Po wysłaniu znikają z klienta, ponadto zmienia się status WU.
Szukaj w logu upload handlera, w konfiguracji projektu możesz włączyć fuh_debug_level 4 http://boinc.berkeley.edu/trac/wiki/ServerDebug
Nie mam na serwerze żadnych logów upload_handlera.
Włączyłem debugowanie na poziomie 4. Logów jest teraz masa. Nie umiem się
przez nie przekopać.
Czy z tego komunikatu można cokolwiek wywnioskować?
http://perft.computers-chess.com/perft_cgi/file_upload_handler (http://perft.computers-chess.com/perft_cgi/file_upload_handler)
W menadżerze mam takie logi (po usunięciu i dodaniu projektu perft).
Teraz ewidentnie problem leży w uploadzie. Powtarza się "transient upload error".
Nadal nie wiem jak namierzyć przyczynę tego błędu.
wto, 23 lip 2013, 11:03:46 | perft | Master file download succeeded
wto, 23 lip 2013, 11:03:51 | perft | Sending scheduler request: Project initialization.
wto, 23 lip 2013, 11:03:51 | perft | Requesting new tasks for CPU
wto, 23 lip 2013, 11:03:52 | perft | Scheduler request completed: got 1 new tasks
wto, 23 lip 2013, 11:03:54 | perft | Started download of uc1
wto, 23 lip 2013, 11:03:54 | perft | Started download of in
wto, 23 lip 2013, 11:03:55 | perft | Finished download of in
wto, 23 lip 2013, 11:04:02 | perft | Finished download of uc1
wto, 23 lip 2013, 11:04:02 | perft | Starting task test_c_141_0 using uc1 version 1
wto, 23 lip 2013, 11:04:02 | perft | Sending scheduler request: To fetch work.
wto, 23 lip 2013, 11:04:02 | perft | Requesting new tasks for CPU
wto, 23 lip 2013, 11:04:04 | perft | Scheduler request completed: got 10 new tasks
wto, 23 lip 2013, 11:04:06 | perft | Starting task test_c_187_0 using uc1 version 1
wto, 23 lip 2013, 11:04:06 | perft | Starting task test_c_186_1 using uc1 version 1
wto, 23 lip 2013, 11:04:06 | perft | Starting task test_c_186_0 using uc1 version 1
wto, 23 lip 2013, 11:04:14 | perft | Sending scheduler request: To fetch work.
wto, 23 lip 2013, 11:04:14 | perft | Requesting new tasks for CPU
wto, 23 lip 2013, 11:04:16 | perft | Scheduler request completed: got 10 new tasks
wto, 23 lip 2013, 11:04:25 | perft | Computation for task test_c_141_0 finished
wto, 23 lip 2013, 11:04:25 | perft | Starting task test_c_185_1 using uc1 version 1
wto, 23 lip 2013, 11:04:27 | perft | Started upload of test_c_141_0_0
wto, 23 lip 2013, 11:04:28 | perft | Temporarily failed upload of test_c_141_0_0: transient upload error
wto, 23 lip 2013, 11:04:28 | perft | Backing off 10 min 21 sec on upload of test_c_141_0_0
wto, 23 lip 2013, 11:04:28 | perft | Computation for task test_c_187_0 finished
wto, 23 lip 2013, 11:04:28 | perft | Starting task test_c_185_0 using uc1 version 1
wto, 23 lip 2013, 11:04:29 | perft | Computation for task test_c_186_1 finished
wto, 23 lip 2013, 11:04:29 | perft | Starting task test_c_184_1 using uc1 version 1
wto, 23 lip 2013, 11:04:30 | perft | Started upload of test_c_187_0_0
wto, 23 lip 2013, 11:04:30 | perft | Computation for task test_c_186_0 finished
wto, 23 lip 2013, 11:04:30 | perft | Starting task test_c_184_0 using uc1 version 1
wto, 23 lip 2013, 11:04:31 | perft | Temporarily failed upload of test_c_187_0_0: transient upload error
wto, 23 lip 2013, 11:04:31 | perft | Backing off 17 min 50 sec on upload of test_c_187_0_0
wto, 23 lip 2013, 11:04:31 | perft | Started upload of test_c_186_1_0
wto, 23 lip 2013, 11:04:32 | perft | Temporarily failed upload of test_c_186_1_0: transient upload error
wto, 23 lip 2013, 11:04:32 | perft | Backing off 12 min 10 sec on upload of test_c_186_1_0
wto, 23 lip 2013, 11:04:48 | perft | Computation for task test_c_185_1 finished
wto, 23 lip 2013, 11:04:48 | perft | Starting task test_c_183_1 using uc1 version 1
wto, 23 lip 2013, 11:04:51 | perft | Computation for task test_c_185_0 finished
wto, 23 lip 2013, 11:04:51 | perft | Starting task test_c_183_0 using uc1 version 1
wto, 23 lip 2013, 11:04:52 | perft | Computation for task test_c_184_1 finished
wto, 23 lip 2013, 11:04:52 | perft | Starting task test_c_182_1 using uc1 version 1
wto, 23 lip 2013, 11:04:53 | perft | Computation for task test_c_184_0 finished
wto, 23 lip 2013, 11:04:53 | perft | Starting task test_c_179_0 using uc1 version 1
wto, 23 lip 2013, 11:05:10 | perft | Computation for task test_c_183_1 finished
wto, 23 lip 2013, 11:05:10 | perft | Starting task test_c_178_1 using uc1 version 1
wto, 23 lip 2013, 11:05:14 | perft | Computation for task test_c_183_0 finished
wto, 23 lip 2013, 11:05:14 | perft | Starting task test_c_178_0 using uc1 version 1
wto, 23 lip 2013, 11:05:15 | perft | Computation for task test_c_182_1 finished
wto, 23 lip 2013, 11:05:15 | perft | Starting task test_c_173_1 using uc1 version 1
wto, 23 lip 2013, 11:05:16 | perft | Computation for task test_c_179_0 finished
wto, 23 lip 2013, 11:05:16 | perft | Starting task test_c_173_0 using uc1 version 1
wto, 23 lip 2013, 11:05:32 | perft | Computation for task test_c_178_1 finished
wto, 23 lip 2013, 11:05:32 | perft | Starting task test_c_172_1 using uc1 version 1
wto, 23 lip 2013, 11:05:37 | perft | Computation for task test_c_178_0 finished
wto, 23 lip 2013, 11:05:37 | perft | Starting task test_c_172_0 using uc1 version 1
wto, 23 lip 2013, 11:05:38 | perft | Computation for task test_c_173_1 finished
wto, 23 lip 2013, 11:05:38 | perft | Starting task test_c_171_1 using uc1 version 1
wto, 23 lip 2013, 11:05:39 | perft | Computation for task test_c_173_0 finished
wto, 23 lip 2013, 11:05:39 | perft | Starting task test_c_171_0 using uc1 version 1
wto, 23 lip 2013, 11:05:55 | perft | Computation for task test_c_172_1 finished
wto, 23 lip 2013, 11:05:55 | perft | Starting task test_c_170_0 using uc1 version 1
wto, 23 lip 2013, 11:06:00 | perft | Computation for task test_c_172_0 finished
wto, 23 lip 2013, 11:06:01 | perft | Computation for task test_c_171_1 finished
wto, 23 lip 2013, 11:06:02 | perft | Computation for task test_c_171_0 finished
wto, 23 lip 2013, 11:06:18 | perft | Computation for task test_c_170_0 finished
Pozdrawiam
Z w/w komunikatu nic nie da się wywnioskować, to po prostu FUH zgłasza pusty request (zapewne z przeglądarki).
Sprawdź prawa dostępu do folderu z logami, może FUH nie może tam nic zapisać. FUH i scheduler działają na takim samym użytkowniku, jak apacz, więc to apacz musi mieć prawa dostępu do tego folderu.
Cytat: TJM w 23 Lipiec 2013, 16:02
Z w/w komunikatu nic nie da się wywnioskować, to po prostu FUH zgłasza pusty request (zapewne z przeglądarki).
Sprawdź prawa dostępu do folderu z logami, może FUH nie może tam nic zapisać. FUH i scheduler działają na takim samym użytkowniku, jak apacz, więc to apacz musi mieć prawa dostępu do tego folderu.
Dałem dla pewności chmod 777 upload. Takie pliki mam w logach:
perft@x:~/www/log_x$ ls -l
total 39248
-rw-r--r-- 1 root www-data 836586 Jul 24 00:12 apache2
-rw-rw-rw- 1 perft www-data 16535946 Jul 24 00:18 feeder.log
-rw-rw-rw- 1 perft www-data 1107062 Jul 24 00:18 file_deleter.log
-rw-r--r-- 1 www-data www-data 2498920 Jul 24 00:06 scheduler.log
-rw-rw-rw- 1 perft www-data 19140110 Jul 24 00:18 transitioner.log
Przeszukalem po nazwie upload cały vps - wyniki jak poniżej.
Katalog projektu to ./home/perft/www/.
root@x:/# find . -name '*upload*'
./usr/lib/git-core/git-upload-pack
./usr/lib/git-core/git-upload-archive
./usr/lib/python2.6/distutils/command/upload.py
./usr/lib/python2.6/distutils/command/upload.pyc
./usr/bin/git-upload-pack
./usr/bin/git-upload-archive
./usr/share/phpmyadmin/libraries/import/upload
./usr/share/phpmyadmin/libraries/import/upload/uploadprogress.php
./usr/share/man/man1/git-upload-archive.1.gz
./usr/share/man/man1/git-upload-pack.1.gz
./usr/share/doc/libcurl4-openssl-dev/examples/ftpupload.c
./usr/share/doc/libcurl4-openssl-dev/examples/fileupload.c
./home/perft/www/upload
./home/perft/www/cgi-bin/file_upload_handler
./home/perft/www/keys/upload_private
./home/perft/www/keys/upload_public
./home/perft/boinc/sched/.deps/fcgi_file_upload_handler-file_upload_handler.Po
./home/perft/boinc/sched/.deps/file_upload_handler.Po
./home/perft/boinc/sched/.deps/fcgi_file_upload_handler-sched_msgs.Po
./home/perft/boinc/sched/.deps/fcgi_file_upload_handler-sched_config.Po
./home/perft/boinc/sched/file_upload_handler.cpp
./home/perft/boinc/sched/file_upload_handler.o
./home/perft/boinc/sched/file_upload_handler
./home/perft/boinc/test/uc_multiple_uploads_result
./home/perft/boinc/test/test_upload_backoff.php
./home/perft/boinc/test/test_upload_resume.php