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
Resolution: | → fixed |
---|---|
Status: | new → closed |
comment:2 Changed 13 years ago by
comment:3 Changed 13 years ago by
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:6 Changed 13 years ago by
comment:7 Changed 13 years ago by
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
Resolution: | fixed |
---|---|
Status: | closed → reopened |
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
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.
(In [4880]) Avoiding temporal copy of big matrices
Fixes #1563 in 3.1