Przejdź do treści

Repozytorium wielu plików

Wprowadzenie

Standardowo repozytorium definiujemy z poziomu klienta VCL. Aby rozpocząc przechodzimy do zakładki Administrator -> grupa Konfiguracja -> akcja konfiguracja -> przycisk Repozytoria plików.

Ścieżka oznacza ścieżkę na serwerze Neos, a ścieżka lokalna to ścieżka klienta (np. VCL lub WWW). Gdy repozytorium zawiera bardzo dużo plików lub folderów w jednym katalogu, to operacje mocno spowalniają. Ponadto na starszych systemach plików (np EXT3) możemy przekroczyć maksymalną liczbę elementów w katalogu. Aby uniknąć takich problemów został zaimplementowany mechanizm obsługi repozytorium wielu plików.

Działanie mechanizmu

Aby włączyć na repozytorium obsługę wielu plików zaznaczamy flagę ">10000 plików". Gdy flaga nie jest zaznaczona lub ma wartość nieokreśloną, to obsługa wielu plików jest wyłączone. Przyjęliśmy jako wartość graniczną 10000, ale jest to liczba umowna i nie ma obowiązku zaznaczania flagi nawet dla 1000000 plików. Zaznaczenie flagi będzie powodowało, iż funkcje API neosowego do downloadu, uploadu i pobierania ścieżki do pliku nie będą operowały wprost na ścieżce do pliku jako: ścieżka do repozytorium + względna ścieżka do pliku, lecz będzie to: ścieżka do repozytorium + 3 litery sumy MD5 względnej ścieżki do pliku + względna ścieżka do pliku. Np: rzeczywista ścieżka do pliku "katalog\test.txt" w repozytorium "test" będzie wyglądała następująco:

  • .\filesrepository\katalog\test.txt -- gdy flaga wyłączona
  • .\filesrepository\18F\katalog\test.txt -- gdy flaga włączona

Obsługa takiego repozytorium dla użytkownika korzystającego z API Neosowego jest przezroczysta.

Uwaga!

Repozytorium WWW nie obsługuje mechanizmu wielu plików.

Baza danych

W celu skorzystania z mechanizmu należy zmodyfikować bazę danych. Najlepiej skorzystać z SH i wyeksportować zmiany do tematu BS134636 oraz zaaplikować wygenerowany skrypt. Po stronie Neosa jest co prawda wykonana migracja, która doda flagę "manyfiles" do tabeli s_storage. Nie uzupełni jednak tabeli s_appini, co spowoduje, że nie będzie obsłużona modyfikacja tej flagi po stronie klienta VCL. W takiej sytuacji trzeba modyfikować flagę spod bazy lub dodać samemu taką możliwość w kliencie VCL.

Kompatybilność

Dla użytkowników korzystających z Neosa zgodnie ze sztuką rozwiązanie z repozytorium wielu plików jest w pełni kompatybilne wstecz, tzn. stary kod powinien poprawnie działać z nowym typem repozytorium. W celu zapewnienia zgodności zostały obsłużone mechanizmy:

  • transferu plików (upload, download). Operacja downloadu działa w taki sposób, że jeśli plik nie zostanie znaleziony w folderze ze ścieżką z prefixem MD5, to będzie szukany w folderze bez prefixu.
  • operacji na plikach poprzez funkcje api: GetRepositoryPath, GetRepositoryFilePath, DeleteFileFromRepository

Aby ułatwić zmianę typu repozytorium zostały przygotowane 2 skrypty w bashu do konwersji z jednego rodzaju repozytorium na drugi i vice versa.

Skrypty konwertujące

Skrypty są napisane w bashu, aby można było je uruchomić zarówno pod windowsem jak i pod linuxem. Są to:

  • ConvertRepoToManyFiles.sh - konwertuje ze standardu na repo wielu plików
  • ConvertRepoFromManyFilesBack.sh - konwertuje z repo wielu plików na standard

Skrypty znajdują się w podkatalogu files\sh\ Neosa. Aby je uruchomić należy użyć komendy sh. Pod windowsem można skorzystać np. ze środowiska mingw, cygwin itp. uruchamiając je nawet spod Sourcetree. Oba skrypty przyjmują 1 argument i jest to bezwzględna ścieżka do repozytorium. Nie może to być bieżąca ścieżka dla skryptu. Nie wykonują one backupu, więc konieczne jest zrobienie go na własną rękę. Wykorzystywany jest katalog tymczasowy, więc musi on zawierać wystarczająco dużo miejsca, aby zmieścić całe repozytorium. Informacje o przebiegu operacji są zapisywane w pliku log, a o błędach dodatkowo w pliku err. Pliki logów mają nazwę taką jak skrypt z dodatkowym rozszerzeniem i znajdują się w tym samym katalogu, a przy starcie są czyszczone. Konwertowane są tylko pliki o złym wzorcu ścieżki, więc skrypty można wykonywać wielokrotnie na tym samym repozytorium i kolejne uruchomienia tego samego skryptu nie powinny nic zmieniać.