00001 /* 00002 * Copyright (C) 2009, Edmundo Albuquerque de Souza e Silva. 00003 * 00004 * This file may be distributed under the terms of the Q Public License 00005 * as defined by Trolltech AS of Norway and appearing in the file 00006 * LICENSE.QPL included in the packaging of this file. 00007 * 00008 * THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING 00009 * THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR 00010 * PURPOSE. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, 00011 * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING 00012 * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, 00013 * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION 00014 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 00015 * 00016 * Thanks: Jose Renato Santos 00017 * 00018 */ 00019 00020 /////////////////////////////////////////////////////////////////////////////// 00021 // ObjectManager.h: Declaration of the CObjectManager 00022 /////////////////////////////////////////////////////////////////////////////// 00023 00024 #ifndef __OBJECTMANAGER_H_ 00025 #define __OBJECTMANAGER_H_ 00026 00027 #include "RioUnix.h" 00028 00029 #include "RioInterfaceTypes.h" 00030 #include "ObjectManagerTypes.h" 00031 #include "ObjMapMgr.h" 00032 00033 //Start - GCC 3 00034 //#include <fstream.h> 00035 #include <fstream> 00036 #include <iostream> 00037 using namespace std; 00038 //End - GCC 3 00039 00040 /////////////////////////////////////////////////////////////////////////////// 00041 00042 class CObjectManager; 00043 00044 #ifdef USE_GRID 00045 // Estrutura usada pela implementacao da funcionalidade de cache no servidor 00046 // RIO. A estrutura armazena as informa��es de um dos arquivos armazenados no 00047 // servidor (isto e, na sua cache). 00048 struct FileList 00049 { 00050 time_t LastAccess; 00051 char *FileName; 00052 unsigned int NumReferences; 00053 struct FileList *PreviousFile; 00054 struct FileList *NextFile; 00055 }; 00056 #endif 00057 00058 class RioDirectory 00059 { // Only built by ObjectManager 00060 private: 00061 static const int MyReadDirLen = sizeof( struct dirent ) + NAME_MAX; 00062 00063 CObjectManager *o_mgr; 00064 DIR *o_dir; // opendir result 00065 struct dirent *o_direntry; // readir_r workarea ptr (or 0) 00066 struct dirent o_work; 00067 char o_extra[ MyReadDirLen ]; // better too int than short 00068 char o_DirectoryName[ 2*MaxPathSize+1 ]; 00069 00070 /*** 00071 * Construtor RioDirectory: cria um novo objeto RioDirectory, usado para ler e 00072 * percorrer as entradas de um diret�rio do sistema de arquivos do Servidor RIO. 00073 * Como a inicializa��o da classe (a cria��o do diret�rio) � feita pela fun��o 00074 * FirstObject da classe CObjectManager, um objeto desta classe deve sempre ser 00075 * obtido a partir desta fun��o. 00076 * @param mgr Ponteiro para o objeto CObjectManager que ser� usado para salvar 00077 * os logs gerados pelas fun��es da classe (se o log estiver habilitado). 00078 */ 00079 RioDirectory( CObjectManager *mgr ); 00080 00081 RioDirectory( const RioDirectory &x ); // not implemented 00082 RioDirectory &operator = ( const RioDirectory &x ); // not implemented 00083 00084 friend class CObjectManager; 00085 00086 public: 00087 /*** 00088 * Destrutor ~RioDirectory: destr�i um objeto RioDirectory anteriormente criado 00089 * (pela fun��o FirstObject da classe CObjectManager). 00090 */ 00091 ~RioDirectory(); 00092 00093 /*** 00094 * Fun��o NextObject: retorna a pr�xima entrada do diret�rio representado pelo 00095 * objeto criado anteriormente pela fun��o FirstObject da classe 00096 * CObjectManager. Esta fun��o sup�e que pelo menos uma entrada j� foi lida, 00097 * pois a fun��o FirstObject da classe CObjectManager tamb�m retorna a primeira 00098 * entrada do diret�rio. 00099 * @param IsDirectory Ponteiro para um valor booleano que indica se a pr�xima 00100 * entrada do diret�rio se refere a um arquivo ou a um subdiret�rio (true - � 00101 * um diret�rio e false - � um arquivo). 00102 * obs: este par�metro atualmente retorna sempre false. 00103 * @param BufferSize Tamanho Tamanho m�ximo que o nome da pr�xima entrada pode 00104 * ter (para evitar erros de execu��o). 00105 * @param ObjectName Ponteiro para uma string que armazenar� o nome do caminho, 00106 * no sistema de arquivos do Servidor RIO, da pr�xima entrada do diret�rio. 00107 * obs: a string deve ter espa�o suficiente para armazenar o nome da pr�xima 00108 * entrada. 00109 * @return Erro se o valor for diferente de S_OK. 00110 */ 00111 int NextObject( int* IsDirectory, 00112 int BufferSize, 00113 char* ObjectName); 00114 00115 /*** 00116 * Fun��o Close: fecha um diret�rio que foi aberto, pela fun��o FirstObject da 00117 * classe CObjectManager, para podermos varrer as suas entradas. 00118 */ 00119 void Close(); 00120 }; 00121 00122 00123 /////////////////////////////////////////////////////////////////////////////// 00124 // CObjectManager 00125 class CObjectManager 00126 { 00127 private: 00128 ofstream m_log; 00129 int m_MaxReplications; 00130 int m_UseReplications; 00131 bool m_initialized; 00132 bool m_started; 00133 char *m_FileRoot; 00134 unsigned int m_BlockSize; 00135 ObjMapMgr *m_ObjMapMgr; 00136 DiskMgr *m_DiskMgr; 00137 CUserManager *m_UserManager; 00138 00139 #ifdef USE_GRID 00140 // Ponteiro para o inicio da lista com todos os arquivos do servidor. 00141 FileList *m_StartListFiles; 00142 00143 // Ponteiro para a proxima posicao a ser verificada pela busca. 00144 FileList *m_NextSearchFile; 00145 00146 // Mutex para acessar a lista de modo exclusivo. 00147 pthread_mutex_t m_mutex_filelist; 00148 00149 // Mutex para garantir que somente uma copia de arquivos da GRID e 00150 // executada por vez. 00151 pthread_mutex_t m_mutex_gridcopy; 00152 #endif 00153 00154 /*** 00155 * Fun��o createdirectory: cria um novo diret�rio no sistema de arquivos do 00156 * Servidor RIO. 00157 * @param name Ponteiro para o nome do diret�rio (o caminho completo no sistema 00158 * de arquivos). 00159 * @return Erro se o valor for diferente de S_OK. 00160 */ 00161 int createdirectory( char* name ); 00162 00163 /*** 00164 * Fun��o RemoveDirectory: remove um diret�rio vazio do sistema de arquivos do 00165 * Servidor RIO. 00166 * @param ObjectPath Ponteiro para o nome do diret�rio, com o caminho completo 00167 * no sistema de arquivos. 00168 * @return Erro se o valor for diferente de S_OK. 00169 */ 00170 int RemoveDirectory( char* DirectoryName ); 00171 00172 /*** 00173 * Fun��o RemoveObject: deleta um arquivo do sistema de arquivos do Servidor 00174 * RIO. 00175 * @param ObjectName Ponteiro para o nome do arquivo, com o caminho completo no 00176 * sistema de arquivos. 00177 * @return Erro se o valor for diferente de S_OK. 00178 */ 00179 int RemoveObject( char* ObjectName ); 00180 00181 /*** 00182 * Fun��o SetDefaultPermissions: fun��o para definir as permiss�es de acesso 00183 * padr�es do arquivo/diret�rio. (?) 00184 * @param path Ponteiro para o caminho completo do arquivo ou diret�rio. (?) 00185 * @return S_OK. 00186 */ 00187 int SetDefaultPermissions( char* name ); 00188 00189 /*** 00190 * Fun��o PathToFile: converte um caminho do Servidor RIO para um caminho 00191 * relativo, no sistema operacional, ao diret�rio do servidor RIO. 00192 * @param Path Ponteiro para o nome do caminho (arquivo ou diret�rio) no sistema 00193 * de arquivos no Servidor RIO. 00194 * @param FileName Ponteiro para a string que ir� armazenar o nome de caminho 00195 * relativo equivalente no sistema operacional. 00196 * obs: a string deve ter espa�o suficiente para armazenar o caminho. 00197 * @param Tamanho m�ximo a ser armazenado (para garantir que o tamanho n�o ser� 00198 * maior do que o dispon�vel na string dada pelo ponteiro FileName, e assim 00199 * evitar que um erro de execu��o seja gerado). 00200 * @return Erro se o valor for diferente de S_OK. 00201 */ 00202 int PathToFile( const char *Path, char *FileName, const int MaxSize ); 00203 00204 #ifdef USE_GRID 00205 // Funcoes usadas pela implementacao da cache. As descricoes das 00206 // funcoes sao dadas em suas definicoes no arquivo ObjectManager.cpp. 00207 /*** 00208 * Fun��o SearchFile: procura um nome de caminho de um arquivo, no sistema de 00209 * arquivos do Servidor RIO, na lista com os arquivos que est�o na cache. 00210 * Obs: sobre a lista com os arquivos na cache. 00211 * 1) note que se o arquivo est� armazenado no servidor (na cache) ele dever� 00212 * estar na lista (e vice-versa). 00213 * 2) a fun��o sup�e que j� foi obtido um mutex para acessar exclusivamente a 00214 * lista com os arquivos da cache. 00215 * @param FileName Ponteiro para o nome do caminho, no sistema de arquivos do 00216 * Servidor RIO, do arquivo a ser buscado na lista. 00217 * @return Valor NULL se o nome de caminho do arquivo n�o estiver na lista, ou 00218 * um ponteiro para a entrada do arquivo na lista, em caso contr�rio. 00219 */ 00220 FileList *SearchFile( char *FileName ); 00221 00222 /*** 00223 * Fun��o IncrementOpenFileCounter: incrementa o contador de refer�ncias que 00224 * define, para cada arquivo, o n�mero de clientes que abriram o arquivo. Este 00225 * contador � usado para evitar que o arquivo seja escolhido e deletado da cache 00226 * se algum cliente o estiver utilizando, isto �, o arquivo n�o � escolhido se 00227 * este contador for maior do que zero. Devido a isso, quando o cliente fecha o 00228 * arquivo, este contador deve ser decrementado. Isso ocorre na fun��o 00229 * ChangeLastAccess descrita a seguir. 00230 * Obs: O mutex para a exclus�o m�tua ao acessar � lista deve ser obtido pela 00231 * fun��o que executa a chamada (neste caso, pela fun��o Open). 00232 * @param FileName Ponteiro para o nome do caminho, no sistema de arquivos do 00233 * Servidor RIO, do arquivo para o qual desejamos incrementar o contador de 00234 * refer�ncias. 00235 * @return Erro se o valor for diferente de S_OK. 00236 */ 00237 int IncrementOpenFileCounter( char *FileName ); 00238 00239 /*** 00240 * Fun��o InsertFile: insere um novo arquivo na lista com os arquivos da cache 00241 * (o arquivo provavelmente acabou de ser copiado para a cache, a n�o ser quando 00242 * o servidor inicia a sua execu��o pois, neste caso, todos os arquivos que 00243 * estavam na cache s�o copiados na lista). Devemos sempre inserir um arquivo 00244 * que foi criado, para permitir que este arquivo seja futuramente escolhido 00245 * para ser removido da cache. 00246 * @param FileName Ponteiro para o nome do caminho, no sistema de arquivos do 00247 * Servidor RIO, do arquivo que desejamos inserir na lista. 00248 * @param LastAccess Estrutura com o tempo em que este arquivo foi acessado pela 00249 * �ltima vez. 00250 * @return Erro se o valor for diferente de S_OK. 00251 */ 00252 int InsertFile( char *FileName, time_t LastAccess ); 00253 00254 /*** 00255 * Fun��o RemoveFile: remove um arquivo da lista com os arquivos da cache. Esta 00256 * fun��o deve ser chamada somente depois (e sempre depois) de um arquivo ser 00257 * removido da cache, para evitar que um arquivo que j� foi removido seja 00258 * novamente escolhido para ser removido. 00259 * @param FileName Ponteiro para o nome do caminho, no sistema de arquivos do 00260 * Servidor RIO, do arquivo que desejamos remover da lista. 00261 * @return Erro se o valor for diferente de S_OK. 00262 */ 00263 int RemoveFile(char *FileName); 00264 00265 /*** 00266 * Fun��o RenameFile: renomeia um dos arquivos da lista com os arquivos da 00267 * cache. Esta func�o deve ser chamada depois (e sempre depois) da fun��o que 00268 * renomeia um arquivo que est� na cache, para que a refer�ncia a este arquivo 00269 * n�o seja perdida. 00270 * @param OldFileName Ponteiro para o nome do caminho, no sistema de arquivos do 00271 * Servidor RIO, do arquivo a ser renomeado. 00272 * @param NewFileName Ponteiro para o nome do caminho, no sistema de arquivos do 00273 * Servidor RIO, do novo nome do arquivo (note que este deve ser o mesmo nome 00274 * dado ao arquivo quando este foi renomeado). 00275 * @return Erro se o valor for diferente de S_OK. 00276 *// 00277 int RenameFile( char *OldFileName, char *NewFileName ); 00278 00279 /*** 00280 * Fun��o ChooseFile: escolhe um arquivo da cache para ser removido. A lista � 00281 * varrida da posi��o m_NextSearchFile, at� ou acharmos um arquivo .mpg cujo 00282 * contador de reref�ncias � igual a 0, ou at� atingirmos o final da lista. 00283 * Neste �ltimo caso, todos os arquivos que ainda est�o na cache est�o 00284 * sendo usados, ou a cache est� vazia, pois todos os arquivos j� foram 00285 * removidos. 00286 * Obs: 00287 * 1) ser� que a medida de removermos somente os arquivos .mpg � a mais 00288 * correta? Pois podemos remover um v�deo da cache (que depois poderia ser 00289 * novamente acessado) para copiar um arquivo pequeno (como um dos arquivos 00290 * associados a uma aula que acabou de ser copiada). 00291 * 2) note que n�o temos um erro se n�o pudermos escolher um arquivo, pois neste 00292 * caso simplesmente n�o possu�mos espa�o na cache neste momento. 00293 * 3) Come�amos a busca em m_NextSearchFile (ao inv�s de m_StartListFiles) para 00294 * podermos escolher mais de um arquivo para ser deletado (isso � usado pela 00295 * fun��o FreeDiskSpace para evitarmos percorrer toda a lista ao escolhermos 00296 * um novo arquivo). 00297 * @param FileFound Ponteiro para uma vari�vel booleana que ser�, ao final da 00298 * fun��o, igual a true se um arquivo foi selecionado para ser deletado (cujo 00299 * ponteiro para o seu nome estar� em FileName), ou igual a false, se nenhum 00300 * arquivo pode ser removido. 00301 * @param Ponteiro para um ponteiro cujo endere�o armazenar� o nome do caminho 00302 * do arquivo que foi escolhido para ser deletado, no sistema de arquivos do 00303 * Servidor RIO, se algum arquivo puder ser escolhido. Se nenhum arquivo puder 00304 * ser escolhido, o valor deste ponteiro ser� NULL. 00305 * @return S_OK (a fun��o n�o gera erros). 00306 */ 00307 int ChooseFile( bool *FileFound, char **FileName ); 00308 00309 /*** 00310 * Fun��o DeleteFileList: remove a lista com os arquivos que est�o na cache da 00311 * mem�ria. 00312 * @return S_OK (esta fun��o n�o gera erros). 00313 */ 00314 int DeleteFileList(); 00315 00316 /*** 00317 * Fun��o InsertDirectoryFiles: insere na lista os arquivos na lista de arquivos 00318 * que est�o na cache a partir de um dado caminho para um diret�rio. 00319 * @param PathName Ponteiro para o nome do caminho do diret�rio, no sistema de 00320 * arquivos do Servidor RIO. 00321 * @return Erro se o valor for diferente de S_OK. 00322 */ 00323 int InsertDirectoryFiles( char *PathName ); 00324 00325 /*** 00326 * Fun��o CreateFileList: cria a lista com todos os arquivos que est�o 00327 * armazenados no Servidor RIO (isto �, na cache). Esta fun��o chama a fun��o 00328 * InsertDirectoryFiles com o diret�rio vazio (para come�ar a partir da raiz do 00329 * sistema de arquivos do Servidor RIO) e � chamada pela fun��o Initialize da 00330 * classe CObjectManager (ela somente deve ser chamada na inicializa��o do 00331 * servidor). 00332 */ 00333 int CreateFileList(); 00334 00335 /*** 00336 * Fun��o FreeDiskSpace: tenta liberar espa�o na cache suficiente para podermos 00337 * armazenar um arquivo de FileSize bytes. Note que devemos liberar o espa�o em 00338 * m_UseReplications Storage Servers, pois cada replica��o de um bloco do 00339 * arquivo deve ser armazenada em um Storage Server diferente. Se algum dos 00340 * m_UseReplications Storage Servers n�o tiver espa�o suficiente, a fun��o 00341 * ChooseFile ser� repetidamente chamada para escolhermos um arquivo .mpg da 00342 * cache, que depois ser� removido dela, at� que um espa�o maior ou igual ao 00343 * necess�rio seja liberado em todos os m_UseReplications Storage Servers, ou 00344 * at� deletarmos todos os arquivos .mpg que n�o est�o sendo usados (os seus 00345 * contadores de refer�ncias s�o todos iguais a 0). 00346 * Obs: a fun��o possui um grande problema que temos que corrigir: deletamos os 00347 * arquivos selecionados mesmo se n�o existir espa�o na cache. 00348 * @param FileSize Tamanho em bytes do arquivo (note que, devido � replica��o 00349 * dos blocos, ser�o liberados FileSize * m_UseReplications bytes da cache). 00350 * @return S_OK se conseguimos liberar o espa�o na cache e o erro 00351 * ERROR_OBJECTMANAGER + ERROR_UNEXPECTED em caso contr�rio. 00352 */ 00353 int FreeDiskSpace( unsigned int FileSize ); 00354 00355 /*** 00356 * Fun��o CopyGridFile: copia o arquivo da GRID para a cache do servidor. Este 00357 * arquivo n�o deve estar armazenado no servidor, pois isso n�o � verificado 00358 * pela fun��o. O arquivo primeiramente � copiado da GRID para o diret�rio em 00359 * que o Servidor RIO est� sendo executado, e depois disso � copiado para o 00360 * Servidor RIO. 00361 * @param ObjectName Ponteiro para o nome do caminho, no sistema de arquivos do 00362 * Servidor RIO, do arquivo a ser copiado da GRID. 00363 * @return Valor diferente de S_OK se algum erro ocorreu ao copiamos o arquivo 00364 * da GRID. 00365 */ 00366 int CopyGridFile( char *ObjectName ); 00367 #endif 00368 00369 friend class RioDirectory; 00370 00371 public: 00372 /*** 00373 * Construtor CObjectManager: cria um novo objeto do tipo CObjectManager, 00374 * inicializando os seus campos internos para valores default. O estado do 00375 * objeto sera n�o-inicializado e n�o-come�ado. 00376 */ 00377 CObjectManager(); 00378 00379 /*** 00380 * Destrutor ~CObjectManager: deleta um objeto do tipo CObjectManager que foi 00381 * anteriormente criado. 00382 */ 00383 ~CObjectManager(); 00384 00385 // IObjectManager 00386 public: 00387 /*** 00388 * Fun��o Reset: reseta o estado do objeto para permitir que as fun��es Start 00389 * e Initialize possam novamente ser usadas. O objeto passa ao estado n�o- 00390 * inicializado e n�o-come�ado. 00391 * @return S_OK. 00392 */ 00393 int Reset(); 00394 00395 /*** 00396 * Fun��o Stop: passa o objeto para o estado n�o-come�ado. O objeto deve estar 00397 * no estado come�ado (e portanto, no estado iniciado). 00398 * @return Erro se o valor for diferente de S_OK. 00399 */ 00400 int Stop(); 00401 00402 /*** 00403 * Fun��o Start: coloca o objeto no estado come�ado. A fun��o deve somente ser 00404 * executada ap�s objeto ser inicializado. O objeto agora passa aos estados 00405 * inicializado e come�ado. 00406 * @return Erro se o valor for diferente de S_OK. 00407 */ 00408 int Start(); 00409 00410 int Format(); 00411 int GetBlockMap( ObjectHandle Handle, RioBlock First, 00412 RioBlock nBlocks, RioDiskBlock *blocks ); 00413 int GetnBlocks( ObjectHandle Handle, RioBlock *nBlocks ); 00414 int GetType( ObjectHandle Handle, short *Type ); 00415 int GetSize( ObjectHandle Handle, RioObjectSize *Size ); 00416 int SetSize( ObjectHandle Handle, RioObjectSize Size ); 00417 int Close( ObjectHandle Handle ); 00418 00419 /*** 00420 * Fun��o Open: abre um arquivo do sistema de arquivos. Se a op��o para a GRID 00421 * (usar a cache) for usada, primeiramente verificaremos se o arquivo est� 00422 * no sistema de arquivos do Servidor RIO (na cache). Se n�o estiver, ent�o 00423 * verificaremos se o arquivo est� no sistema de arquivos da GRID. Se o 00424 * arquivo estiver nele, o arquivo ser� copiado da GRID para o diret�rio local 00425 * do servidor, e deste para a cache, se existir espa�o suficiente nela. Se 00426 * algum erro ocorrer ao abrir o arquivo ou ao copi�-lo da cache (como n�o 00427 * existir espa�o em disco ou o arquivo n�o existir no sistema de arquivos da 00428 * GRID) um valor diferente de S_OK ser� retornado (o valor depender� do erro 00429 * que ocorreu). 00430 * @param ObjectName Ponteiro para o nome do arquivo, com o caminho completo no 00431 * sistema de arquivos do Servidor RIO, a ser aberto (que deve igual ao da GRID, 00432 * se a o uso da cache estiver habilitado). 00433 * @param Access modo de acesso ao arquivo. 00434 * @param Object Ponteiro para um endere�o com um ponteiro para um objeto 00435 * RioObject. Se o arquivo for aberto com sucesso, o ponteiro conter� o endere�o 00436 * de um objeto com as informa��es do arquivo aberto, obtidas a partir do 00437 * arquivo de metadados do arquivo aberto. 00438 * @return Erro se o valor for diferente de S_OK. 00439 */ 00440 int Open( char *ObjectPath, RioAccess Access, RioObject **Object ); 00441 00442 /*** 00443 * Fun��o Delete: deleta um arquivo do sistema de arquivos. 00444 * @param ObjectPath Ponteiro para o nome do arquivo, com o caminho completo no 00445 * sistema de arquivos do Servidor RIO. 00446 * @return Erro se o valor for diferente de S_OK. 00447 */ 00448 int Delete( char *ObjectPath ); 00449 00450 /*** 00451 * Fun��o Rename: renomeia um arquivo ou diret�rio do sistema de arquivos. 00452 * @param OldPath Ponteiro para o nome antigo do arquivo ou diret�rio, com o 00453 * caminho completo no sistema de arquivos do Servidor RIO. 00454 * @param NewPath Ponteiro para o novo nome do arquivo ou diret�rio, com o 00455 * caminho completo no sistema de arquivos do Servidor RIO. 00456 * @return Erro se o valor for diferente de S_OK. 00457 */ 00458 int Rename( char *OldPath, char *NewPath ); 00459 00460 /*** 00461 * Fun��o Create: cria um novo objeto (arquivo ou diret�rio) no sistema de 00462 * arquivos do Servidor RIO. 00463 * @param Path Ponteiro para o caminho do arquivo ou diret�rio no sistema de 00464 * arquivos. 00465 * @param Type Tipo do arquivo a ser criado: ObjectInfo::FILE_TYPE_DIRECTORY - 00466 * um diret�rio; ObjectInfo::FILE_TYPE_DATA: um arquivo. 00467 * @return Erro se o valor for diferente de S_OK. 00468 */ 00469 int Create( char *Path, short Type ); 00470 00471 // Agora o metodo Initialize da classe CObjectrManager nao possuira 00472 // mais o parametro GenerateLogs, pois este sera passado pela estrutura 00473 // ObjectManagerConfig. 00474 /*** 00475 * Fun��o Initialize: inicializa o objeto para que este possa ser utilizado. 00476 * O objeto passara a estar no estado inicializado e n�o-come�ado. 00477 * Obs: o construtor, na minha opini�o, n�o inicializa o objeto por dois 00478 * motivos: 00479 * 1) pois n�o podemos obter c�digos de erro (a n�o ser que exce��es sejam 00480 * usadas). 00481 * 2) pois com esta fun��o (e a Reset acima) podemos inicializar v�rias vezes o 00482 * mesmo objeto. 00483 * 3) Agora o metodo Initialize da classe CObjectrManager nao possuira 00484 * mais o parametro GenerateLogs, pois este sera passado pela estrutura 00485 * ObjectManagerConfig. 00486 * @param Config Ponteiro para a estrutura com as configura��es do objeto. 00487 * @return Erro se o valor for diferente de S_OK. 00488 */ 00489 int Initialize( ObjectManagerConfig *Config ); 00490 00491 int GetBlockSize( unsigned int *BlockSize ); 00492 00493 /*** 00494 * Fun��o GetObjectInfo: obt�m informa��es sobre um arquivo ou diret�rio. 00495 * @param ObjectName Ponteiro para o nome do arquivo ou diret�rio, com o caminho 00496 * completo no sistema de arquivos do Servidor RIO, para o qual queremos obter 00497 * as informa��es. 00498 * @param ObjectInfo: Ponteiro para um objeto em que as informa��es ser�o 00499 * armazenadas. 00500 * @return Erro se o valor for diferente de S_OK. 00501 */ 00502 int GetObjectInfo( char *ObjectName, ObjectInfo* ObjectInfo ); 00503 00504 /*** 00505 * Fun��o ExistDirectory: verifica se um diret�rio existe no sistema de arquivos 00506 * do Servidor RIO. 00507 * @param ObjectName Ponteiro para o nome do diret�rio, com o caminho completo 00508 * no sistema de arquivos. 00509 * @return Erro se o valor for diferente de S_OK. 00510 */ 00511 int ExistDirectory( char *Path ); 00512 00513 /*** 00514 * Fun��o StrToPath: remove, de um dado caminho, todas os subcaminhos iguais a 00515 * "." ou a "..". 00516 * @param Str Ponteiro para o caminho original. 00517 * @param PathName Ponteiro para a string que armazenara o novo caminho, sem os 00518 * subcaminhos "." e "..". 00519 * @param Tamanho m�ximo a ser armazenado (para garantir que o tamanho n�o ser� 00520 * maior do que o dispon�vel na string dada pelo ponteiro PathName, e assim 00521 * evitar que um erro de execu��o seja gerado). 00522 * @return Erro se o valor for diferente de S_OK. 00523 */ 00524 static int StrToPath( const char *Str, char *PathName, 00525 const int MaxSize ); 00526 // directory read function(s) 00527 /*** 00528 * Fun��o FirstObject: abre um diret�rio do sistema de arquivos do Servidor RIO, 00529 * para podermos percorrer a hierarquia de diret�rios definida a partir deste 00530 * diret�rio (as entradas deste diret�rio e de seus subdiret�rios). A fun��o 00531 * tamb�m obt�m um ponteiro para a primeira entrada do diret�rio. 00532 * @param DirectoryPath Ponteiro para o nome do caminho do diret�rio a ser 00533 * aberto, no sistema de arquivos do Servidor RIO. 00534 * @param Directory Ponteiro para o objeto RioDirectory com o objeto usado para 00535 * percorrermos a hierarquia do diret�rio. 00536 * @param IsDirectory Ponteiro para um valor booleano que indica se a primeira 00537 * entrada do diret�rio se refere a um arquivo ou a um subdiret�rio (true - � 00538 * um diret�rio e false - � um arquivo). 00539 * obs: este par�metro atualmente retorna sempre false (ver a fun��o NextObject 00540 * da classe RioDirectory). 00541 * @param BufferSize Tamanho Tamanho m�ximo que o nome da primeira entrada pode 00542 * ter (para evitar erros de execu��o). 00543 * @param ObjectName Ponteiro para uma string que armazenar� o nome do caminho, 00544 * no sistema de arquivos do Servidor RIO, da primeira entrada do diret�rio. 00545 * obs: a string deve ter espa�o suficiente para armazenar o nome da primera 00546 * entrada. 00547 * @return Erro se o valor for diferente de S_OK. 00548 */ 00549 int FirstObject( char *DirectoryPath, RioDirectory **Directory, 00550 int *IsDirectory, int BufferSize, 00551 char* ObjectName ); 00552 00553 #ifdef USE_GRID 00554 // Funcoes usadas pela implementacao da cache. As descricoes das 00555 // funcoes sao dadas em suas definicoes no arquivo ObjectManager.cpp. 00556 // Funcao para alterar o tempo de acesso (depois de fecharmos o objeto) 00557 /*** 00558 * Fun��o ChangeLastAccess: muda o tempo de �ltimo acesso de um dos arquivos 00559 * que est� na lista. Esta fun��o � usada quando o arquivo, anteriormente aberto 00560 * por um cliente, � fechado por este cliente. O tempo de �ltimo acesso � mudado 00561 * para o tempo em que o arquivo foi fechado. Al�m disso, o contador de 00562 * refer�ncias � decrementado, pois um dos clientes que abriu o arquivo o 00563 * fechou. Quando o contador for igual a 0 (o que significa que nenhum cliente 00564 * est� com o arquivo aberto) este poder� novamente ser escolhido para ser 00565 * deletado da cache. 00566 * @param FileName Ponteiro para o nome do caminho, no sistema de arquivos do 00567 * Servidor RIO, do arquivo que acabou de ser fechado. 00568 * @param LastAccess Estrutura com o tempo em que este arquivo foi fechado. 00569 * @return Erro se o valor for diferente de S_OK. 00570 */ 00571 int ChangeLastAccess( char *FileName, time_t LastAccess ); 00572 00573 // Imprime a lista de arquivos (depuracao). 00574 /*** 00575 * Fun��o PrintFileList: usada para depurar a implementa��o da cache no Servidor 00576 * RIO (pode ser retirada no futuro). 00577 */ 00578 int PrintFileList(); 00579 #endif 00580 }; 00581 00582 #endif //__OBJECTMANAGER_H_