Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Inotify i problem przy usuwaniu wielu plików na raz
nosbyd
post 6.01.2020, 18:10:00
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 13.11.2019

Ostrzeżenie: (0%)
-----


Cześć,

Mam problem z inotify w PHP, otóż pewien kod wykonuje się w pętli while:

  1. $fd = inotify_init();
  2. $watch_descriptor = inotify_add_watch($fd, $dir, IN_ALL_EVENTS);
  3. $connection = mysqli_connect("localhost", "testuser", "admin", "bazaTestowa") or die("DB Connection error . . .");
  4.  
  5. while (true)
  6. {
  7. $events = inotify_read($fd);
  8. if ($events[0]['wd'] === $watch_descriptor){
  9. if ($events[0]['mask'] === IN_CREATE)
  10. {
  11. $action = "created";
  12. InsertValue($table_name, $file_name, $action, $date, $connection);
  13. }
  14.  
  15. if ($events[0]['mask'] === IN_DELETE)
  16. {
  17. $action = "deleted";
  18. InsertValue($table_name, $file_name, $action, $date, $connection);
  19. }
  20. }
  21. elseif ($events[0]['wd'] === $watch_descriptor)
  22. {
  23. }
  24. }


i ten oto inotify nie nadąża z dodawaniem rekordów do bazy podczas jednoczesnego usuwania wielu plików. Tzn. jeśli wrzucam do śledzonego katalogu 10 plików, wszystkie dodają się po kolei z kilku milisekundowym odstępem czasowym, to do bazy doda się 10 nowych rekordów. Ale jeśli te same pliki usuwam, dzieje się to jednocześnie, inotify tak jakby nie wyrabia i pomija wykonanie dodawania rekordów do bazy, w wyniku czego zamiast info o 10 usuniętych plikach, w bazie są tylko np 4, albo 5 rekordów...
Próbowałem z usleep po InsertValue, nie działa.

Nie mam zielonego pojęcia jak to ogarnąć... Może Wy mielibyście jakiś pomysł? worriedsmiley.gif
Go to the top of the page
+Quote Post
nospor
post 6.01.2020, 18:12:26
Post #2





Grupa: Moderatorzy
Postów: 36 441
Pomógł: 6290
Dołączył: 27.12.2004




Jestes na 100% pewien ze to wina bazy? Sprawdzales? Bo moze twoja petla while najzwyklej w swiecie gubi eventy


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
nosbyd
post 6.01.2020, 18:42:01
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 13.11.2019

Ostrzeżenie: (0%)
-----


Jestem prawie pewien, że baza jest ok.
Tak samo jestem prawie pewien, że właśnie pętla gubi eventy, a bardziej wyobrażam sobie to w ten sposób, że podczas usuwania tych 10 plików jednocześnie, pętla zdąży się wykonać tylko 4-5 razy. Podejrzewam, że to jest "najzwyklejszy w świecie" problem, dlatego też piszę w dziale Przedszkole, ale nie mogę sobie z tym poradzić... sad.gif

Ten post edytował nosbyd 6.01.2020, 18:42:36
Go to the top of the page
+Quote Post
Pyton_000
post 6.01.2020, 19:28:44
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Spróbuj zalogować sobie do pliku wartości z `$events[0]['mask']` np:

Kod
file_put_contents('data.log', $events[0]['mask'].PHP_EOL, FILE_APPEND);


po

if ($events[0]['wd'] === $watch_descriptor){


Aa. i no czy przypadkiem nie ma w `$events` większej ilości eventów o plikach? Bo może jest tak że jest tam pakowane np. event dla 3 plików bo one weszły w "transakcję"

Ten post edytował Pyton_000 6.01.2020, 19:31:15
Go to the top of the page
+Quote Post
nosbyd
post 6.01.2020, 21:02:24
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 13.11.2019

Ostrzeżenie: (0%)
-----


Cytat(Pyton_000 @ 6.01.2020, 19:28:44 ) *
może jest tak że jest tam pakowane np. event dla 3 plików bo one weszły w "transakcję"


Tak jest, sprawdziłem, w $events jest czasem po jednym, czasem po kilka eventów o plikach.

Dorzuciłem coś takiego:
  1. foreach($events as $key=>$val){
  2. echo implode(' - ', $val);
  3. echo "\n";
  4. }
  5. echo "\nNext\n";

i konsola wyświetliła kilka plików, Next, kilka plików, Next...

Spróbuję więc wrzucić wszystko w tego foreach'a, zastanawiam się tylko, czy nie będzie tu za dużo pętli w pętlach...

Dam jeszcze znać, czy działa, dzięki za dotychczasową pomoc smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.04.2024 - 22:36