Changeset 88705 in spip-zone


Ignore:
Timestamp:
Apr 21, 2015, 8:28:11 AM (4 years ago)
Author:
marcimat@…
Message:

Changement de tactique pour la synchronisation des répertoires : on demande au serveur la liste complète des fichiers, plutôt que de lui envoyer la sienne dans un POST ; Car s'il y a 40000 fichiers dans le IMG du site destination, le POST envoyé est trop gros !

Location:
_plugins_/migrateur/dev-by-http
Files:
2 edited
1 copied

Legend:

Unmodified
Added
Removed
  • _plugins_/migrateur/dev-by-http/class/Client/Action/SyncDirectory.php

    r88474 r88705  
    5050                $data = array(
    5151                        'directory' => $this->directory,
    52                         'files' => $localFiles,
    5352                );
    5453
    5554                spip_timer('list');
    56                 $reponse = $this->client->ask('SyncDirectory', $data, 'json');
     55                $this->log("Demande de la liste des fichiers");
     56                $reponse = $this->client->ask('ListFiles', $data, 'json');
    5757                $t = spip_timer('list');
    5858
     
    6161                }
    6262
    63                 $files = $reponse['message']['data']['files'];
    64                 $this->log("Réception de la liste des fichiers ($t)");
    65                 $this->log("- " . count($files['new']) . " nouveaux fichiers");
    66                 $this->log("- " . count($files['updated']) . " à mettre à jour");
    67                 $this->log("- " . count($files['deleted']) . " à supprimer");
    68                 $this->log("Estimation des transferts : " . $reponse['message']['data']['downloadSize']);
     63                $distantFiles = $reponse['message']['data']['files'];
     64                $this->log("Réception de la liste de " . count($distantFiles) . " fichiers ($t)");
     65                $this->log("Calcul des différences");
     66
     67
     68                // calcul des différences !
     69                spip_timer('diff');
     70                $newFiles = $updatedFiles = $deletedFiles = array();
     71                $totalSize = 0;
     72
     73                //compare local and remote file list to get updated files
     74                foreach ($distantFiles as $filePath => $info) {
     75                        if (empty($localFiles[$filePath])) {
     76                                $newFiles[$filePath] = $info;
     77                                $totalSize += $info[0];
     78                        } elseif ($localFiles[$filePath] != $info) {
     79                                $updatedFiles[$filePath] = $info;
     80                                $totalSize += $info[0];
     81                        }
     82                        unset($localFiles[$filePath]);
     83                }
     84
     85                // logiquement, ce qui reste, c'est les fichiers supprimés
     86                $deletedFiles = $localFiles;
     87
     88                $t = spip_timer('diff');
     89                $this->log("- " . count($newFiles) . " nouveaux fichiers");
     90                $this->log("- " . count($updatedFiles) . " à mettre à jour");
     91                $this->log("- " . count($deletedFiles) . " à supprimer");
     92
     93                include_spip('inc/filtres');
     94                $this->log("Estimation des transferts : " . ($totalSize ? taille_en_octets($totalSize) : "Rien à faire ! "));
     95
    6996
    7097                // en mode test, on ne fait pas de modifications.
    7198                if (!$this->test) {
    72                         $this->delete($files['deleted']);
    73                         $this->download($files['new'] + $files['updated']);
     99                        $this->delete($deletedFiles);
     100                        $this->download($newFiles + $updatedFiles);
    74101                }
    75102
  • _plugins_/migrateur/dev-by-http/class/Serveur/Action/ListFiles.php

    r88704 r88705  
    44
    55
    6 class SyncDirectory extends ActionBase {
     6class ListFiles extends ActionBase {
    77
    88
     
    1414
    1515                $directory = $data['directory'];
    16                 $this->log_run("Sync Directory : <em>$directory</em>");
    17 
    18                 // liste des fichiers déjà présents sur le site de destination
    19                 $remoteFiles = array();
    20                 if (isset($data['files']) and is_array($data['files'])) {
    21                         $remoteFiles = $data['files'];
    22                 }
    23 
    24                 $n = count($remoteFiles);
    25                 $this->log("$n fichier(s) sur le site destination");
     16                $this->log_run("List Directory : <em>$directory</em>");
    2617
    2718                // calcul de la liste des fichiers locaux
     
    3627                }
    3728
    38                 // calcul des différences !
    39                 spip_timer('diff');
    40                 $newFiles = $updatedFiles = $deletedFiles = array();
    41                 $totalSize = 0;
    42 
    43                 //compare local and remote file list to get updated files
    44                 foreach ($localFiles as $filePath => $info) {
    45                         if (empty($remoteFiles[$filePath])) {
    46                                 $newFiles[$filePath] = $info;
    47                                 $totalSize += $info[0];
    48                         } elseif ($remoteFiles[$filePath] != $info) {
    49                                 $updatedFiles[$filePath] = $info;
    50                                 $totalSize += $info[0];
    51                         }
    52                         unset($remoteFiles[$filePath]);
    53                 }
    54                 // logiquement, ce qui reste, c'est les fichiers supprimés
    55                 $deletedFiles = $remoteFiles;
    56 
    57                 $t = spip_timer('diff');
    58                 $this->log("- " . count($newFiles) . " nouveaux fichiers");
    59                 $this->log("- " . count($updatedFiles) . " à mettre à jour");
    60                 $this->log("- " . count($deletedFiles) . " à supprimer");
    61 
    62                 include_spip('inc/filtres');
    63                 $this->log("Estimation des transferts : " . taille_en_octets($totalSize));
    64 
    6529                return array(
    6630                        'directory' => $directory,
    67                         'downloadSize' => taille_en_octets($totalSize),
    68                         'files' => array(
    69                                 'new' => $newFiles,
    70                                 'updated' => $updatedFiles,
    71                                 'deleted' => $deletedFiles,
    72                         ),
     31                        'files' => $localFiles,
    7332                );
    7433        }
  • _plugins_/migrateur/dev-by-http/paquet.xml

    r88450 r88705  
    22        prefix="migrateur"
    33        categorie="outil"
    4         version="3.0.0"
     4        version="3.0.1"
    55        etat="dev"
    66        compatibilite="[3.0.5;3.1.*]"
Note: See TracChangeset for help on using the changeset viewer.