close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 13 years ago

Last modified 13 years ago

#1563 reopened defect

Errores críticos guardando archivos OZA

Reported by: Pedro Gea Owned by: Víctor de Buen Remiro
Priority: highest Milestone: Mantainance
Component: Kernel Version: 3.1
Severity: critical Keywords:
Cc:

Description

Se encuentran errores críticos al intentar crear archivos OZA grandes.

El problema es doble:

  • El OZA no se crea.
  • El objeto a guardar se corrompe de algún modo.

Para intentar reproducirlo puede hacerse:

Set test = [[
  Matrix Rand(11000, 10000, 0, 1)
]];
// El tamaño del conjunto quizá puede depender de la RAM del equipo
Real Ois.Store(test, "C:/Temp/test.oza");

el error es:

ERROR: [1] [ZipArchive]Error while processing archive C:/Temp/matrixB.oza/.matrix: Not enough memory.

[Call stack]
  [1] Real TolCore::Ois.Store (Set data, Text path_)

ERROR: [2] OIS: 
No se pudo escribir en el fichero .matrix 131073 elementos de 8bytes

[Call stack]
  [1] Real TolCore::Ois.Store (Set data, Text path_)

Como el OZA no se puede crear por un problema en el compresor, probamos a guardarlo sin compirmir:

Real Ois.Store(test, "C:/Temp/test2.ois");

El proceso guarda sin dar errores. Pero el ois está corrupto, al intentar abrirlo:

Set Ois.Load("C:/Temp/test2.ois");

produce los siguientes errores:

ERROR: [1] Ois.Load no es un operador de tipo Real

ERROR: [2] OIS: 
FATAL BOisLoader::ReadNextObject misplaced offset

ERROR: [3] OIS: 
BOisLoader::ReadNextObject: NULL element of set 

Change History (9)

comment:1 Changed 13 years ago by Víctor de Buen Remiro

Resolution: fixed
Status: newclosed

(In [4880]) Avoiding temporal copy of big matrices
Fixes #1563 in 3.1

comment:2 Changed 13 years ago by Víctor de Buen Remiro

(In [4881]) Avoiding temporal copy of big matrices
Fixes #1563 in 3.2

comment:3 Changed 13 years ago by Víctor de Buen Remiro

Yo no consigo reproducir exactamente eso. A mí el error que me da es de falta de memoria

ERROR: [1] FATAL: No se pudo alojar un arreglo de 110000000 items x 8 bytes</E>
<E>
ERROR: [2] FATAL: No se pudo alojar memoria para una matriz (11000x10000)</E>

Efectivamente he visto que se hace una copia temporal de la matriz que es perfectamente evitable.

comment:4 Changed 13 years ago by Víctor de Buen Remiro

(In [4908]) Refs #1563

comment:5 Changed 13 years ago by Víctor de Buen Remiro

(In [4915]) Refs #1563

comment:6 Changed 13 years ago by Víctor de Buen Remiro

(In [4917]) Fixes #1558 in 3.1
Fixes #1559 in 3.1
Fixes #1560 in 3.1
Fixes #1563 in 3.1
Fixes #1580 in 3.1

comment:7 Changed 13 years ago by Jorge

Parece que en windows sigue fallando. Hemos probado en linux y no falla, dejo una traza del tamaño del archivo creado:

jsperez@pmiquel:~$ du -sm /tmp/test.oza 
398	/tmp/test.oza
jsperez@pmiquel:~$ du -sm /tmp/test.oza 
407	/tmp/test.oza
jsperez@pmiquel:~$ du -sm /tmp/test.oza 
426	/tmp/test.oza
jsperez@pmiquel:~$ du -sm /tmp/test.oza 
435	/tmp/test.oza
jsperez@pmiquel:~$ du -sm /tmp/test.oza 
459	/tmp/test.oza
jsperez@pmiquel:~$ du -sm /tmp/test.oza 
468	/tmp/test.oza
jsperez@pmiquel:~$ du -sm /tmp/test.oza 
486	/tmp/test.oza
jsperez@pmiquel:~$ du -sm /tmp/test.oza 
494	/tmp/test.oza
jsperez@pmiquel:~$ du -sm /tmp/test.oza 
500	/tmp/test.oza
jsperez@pmiquel:~$ du -sm /tmp/test.oza 
500	/tmp/test.oza
jsperez@pmiquel:~$ du -sm /tmp/test.oza 
500	/tmp/test.oza
jsperez@pmiquel:~$ du -sm /tmp/test.oza 
500	/tmp/test.oza
jsperez@pmiquel:~$ du -sm /tmp/test.oza 
500	/tmp/test.oza

comment:8 Changed 13 years ago by Pedro Gea

Resolution: fixed
Status: closedreopened

El error no es de RAM, o al menos no parece evidente. Otra cosa es que se necesite bastante RAM para reproducirlo.

Si sustituyo la línea que crea el OZA (OIS comprimido):

Real Ois.Store(test, "C:/Temp/test.oza");

por la que lo crea descomprimido y la que lo comprime:

Real Ois.Store(test, "C:/Temp/test.ois");
Anything PackArchive::PackFull("ZipArchive", "C:/Temp/test.ois", 0);

no aparecen errores y el archivo ZIP resultante adecuadamente renombrado como OZA se puede abrir con Ois.Load sin errores.

comment:9 Changed 13 years ago by Pedro Gea

Resumo las situaciones:

En Windows (al menos) y con una matriz de dimensiones enormes:

  • Intento guardar un OZA
    => Error de ZipArchive.
  • Habiendo intentado guardar el OZA, intento guardar un OIS
    => El OIS está corrupto.
  • De primeras intento guardar un OIS
    => El OIS se genera correctamente.
  • Habiendo creado el OIS correctamente lo comprimo con PackArchive
    => El ZIP/OZA se genera correctamente.
Note: See TracTickets for help on using tickets.