Skip to content

Lately, ABBA is slow on opening projects from samba server #230

@carlocastoldi

Description

@carlocastoldi

Hi Nico, it's still me: your worst enemy!

I am trying to understand why, from v0.10.*, ABBA on Windows seems a lot slower than usual to open a save state.
However I am not sure the problem arises from ABBA: it might be from the samba configuration of our SSH server.

Internally, we save all of our images onto a Linux server exporting a samba interface. This allows us to have fast access both from Windows and Linux.
When opening a (cached) project from ABBA, it takes nothing. However when opening a project from Windows, it fails to recover the bfmemo files and it takes ~10 minutes to regenerating them (creating the ABBA project on Linux or Windows seems to have no impact). It's quite frustrating.

Following is one of the errors displayd when opening one image from Windows:

ZeissCZIReader initializing \\TENIBRE\bs\users\Maddalena\Viral Injections\data\images\215\an215_20250227_298.czi
[ERROR] temp file rename returned false: \\TENIBRE\bs\users\Maddalena\Viral Injections\data\images\215\.an215_20250227_298.czi.bfmemo1704020308618151887
[WARN] deleting invalid memo file: \\TENIBRE\bs\users\Maddalena\Viral Injections\data\images\215\.an215_20250227_298.czi.bfmemo
com.esotericsoftware.kryo.KryoException: Encountered unregistered class ID: 115
Serialization trace:
lasers (loci.formats.in.OIRReader)
readers (loci.formats.ImageReader)
reader (loci.formats.DimensionSwapper)
reader (loci.formats.FileStitcher)
helper (loci.formats.in.FilePatternReader)
readers (loci.formats.ImageReader)
	at com.esotericsoftware.kryo.util.DefaultClassResolver.readClass(DefaultClassResolver.java:159)
	at com.esotericsoftware.kryo.Kryo.readClass(Kryo.java:758)
	at com.esotericsoftware.kryo.serializers.ReflectField.read(ReflectField.java:117)
	at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:130)
	at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:877)
	at com.esotericsoftware.kryo.serializers.DefaultArraySerializers$ObjectArraySerializer.read(DefaultArraySerializers.java:356)
	at com.esotericsoftware.kryo.serializers.DefaultArraySerializers$ObjectArraySerializer.read(DefaultArraySerializers.java:299)
	at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:796)
	at com.esotericsoftware.kryo.serializers.ReflectField.read(ReflectField.java:124)
	at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:130)
	at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:796)
	at com.esotericsoftware.kryo.serializers.ReflectField.read(ReflectField.java:124)
	at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:130)
	at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:796)
	at com.esotericsoftware.kryo.serializers.ReflectField.read(ReflectField.java:124)
	at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:130)
	at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:796)
	at com.esotericsoftware.kryo.serializers.ReflectField.read(ReflectField.java:124)
	at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:130)
	at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:877)
	at com.esotericsoftware.kryo.serializers.DefaultArraySerializers$ObjectArraySerializer.read(DefaultArraySerializers.java:356)
	at com.esotericsoftware.kryo.serializers.DefaultArraySerializers$ObjectArraySerializer.read(DefaultArraySerializers.java:299)
	at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:796)
	at com.esotericsoftware.kryo.serializers.ReflectField.read(ReflectField.java:124)
	at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:130)
	at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:774)
	at loci.formats.Memoizer$KryoDeser.loadReader(Memoizer.java:169)
	at loci.formats.Memoizer.loadMemo(Memoizer.java:924)
	at loci.formats.Memoizer.setId(Memoizer.java:702)
	at ch.epfl.biop.bdv.img.bioformats.BioFormatsOpener.getNewReader(BioFormatsOpener.java:516)
	at ch.epfl.biop.bdv.img.bioformats.BioFormatsOpener$ReaderPool.createObject(BioFormatsOpener.java:714)
	at ch.epfl.biop.bdv.img.bioformats.BioFormatsOpener$ReaderPool.createObject(BioFormatsOpener.java:690)
	at ch.epfl.biop.bdv.img.ResourcePool.acquire(ResourcePool.java:96)
	at ch.epfl.biop.bdv.img.bioformats.BioFormatsOpener.<init>(BioFormatsOpener.java:238)
	at ch.epfl.biop.bdv.img.qupath.QuPathOpener.<init>(QuPathOpener.java:198)
	at ch.epfl.biop.bdv.img.opener.OpenerSettings.create(OpenerSettings.java:395)
	at ch.epfl.biop.bdv.img.OpenersImageLoader.lambda$createOpeners$2(OpenersImageLoader.java:151)
	at java.util.Arrays$ArrayList.forEach(Arrays.java:3880)
	at ch.epfl.biop.bdv.img.OpenersImageLoader.createOpeners(OpenersImageLoader.java:149)
	at ch.epfl.biop.bdv.img.OpenersImageLoader.<init>(OpenersImageLoader.java:100)
	at ch.epfl.biop.bdv.img.XmlIoOpenersImageLoader.fromXml(XmlIoOpenersImageLoader.java:96)
	at ch.epfl.biop.bdv.img.XmlIoOpenersImageLoader.fromXml(XmlIoOpenersImageLoader.java:47)
	at mpicbg.spim.data.generic.sequence.XmlIoBasicImgLoader.fromXml(XmlIoBasicImgLoader.java:80)
	at mpicbg.spim.data.generic.sequence.XmlIoAbstractSequenceDescription.fromXml(XmlIoAbstractSequenceDescription.java:123)
	at mpicbg.spim.data.generic.XmlIoAbstractSpimData.fromXml(XmlIoAbstractSpimData.java:186)
	at mpicbg.spim.data.generic.XmlIoAbstractSpimData.load(XmlIoAbstractSpimData.java:118)
	at mpicbg.spim.data.generic.XmlIoAbstractSpimData.load(XmlIoAbstractSpimData.java:88)
	at sc.fiji.bdvpg.spimdata.importer.SpimDataFromXmlImporter.apply(SpimDataFromXmlImporter.java:75)
	at sc.fiji.bdvpg.spimdata.importer.SpimDataFromXmlImporter.get(SpimDataFromXmlImporter.java:68)
	at sc.fiji.bdvpg.scijava.adapter.AbstractSpimdataAdapter.deserialize(AbstractSpimdataAdapter.java:126)
	at sc.fiji.bdvpg.scijava.adapter.AbstractSpimdataAdapter.deserialize(AbstractSpimdataAdapter.java:57)
	at com.google.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:76)
	at com.google.gson.Gson.fromJson(Gson.java:1227)
	at com.google.gson.Gson.fromJson(Gson.java:1329)
	at com.google.gson.Gson.fromJson(Gson.java:1300)
	at com.google.gson.internal.bind.TreeTypeAdapter$GsonContextImpl.deserialize(TreeTypeAdapter.java:179)
	at sc.fiji.bdvpg.scijava.adapter.source.SpimSourceAdapter.deserialize(SpimSourceAdapter.java:93)
	at sc.fiji.bdvpg.scijava.adapter.SourceAndConverterAdapter.deserialize(SourceAndConverterAdapter.java:180)
	at sc.fiji.bdvpg.scijava.adapter.SourceAndConverterAdapter.deserialize(SourceAndConverterAdapter.java:58)
	at com.google.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:76)
	at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40)
	at com.google.gson.internal.bind.ArrayTypeAdapter.read(ArrayTypeAdapter.java:72)
	at com.google.gson.Gson.fromJson(Gson.java:1227)
	at com.google.gson.Gson.fromJson(Gson.java:1329)
	at com.google.gson.Gson.fromJson(Gson.java:1271)
	at sc.fiji.bdvpg.services.SourceAndConverterServiceLoader.run(SourceAndConverterServiceLoader.java:108)
	at ch.epfl.biop.atlas.aligner.MultiSlicePositioner.loadState(MultiSlicePositioner.java:1141)
	at ch.epfl.biop.atlas.aligner.command.ABBAStateLoadCommand.run(ABBAStateLoadCommand.java:27)
	at org.scijava.command.CommandModule.run(CommandModule.java:196)
	at org.scijava.module.ModuleRunner.run(ModuleRunner.java:165)
	at org.scijava.module.ModuleRunner.call(ModuleRunner.java:125)
	at org.scijava.module.ModuleRunner.call(ModuleRunner.java:64)
	at org.scijava.thread.DefaultThreadService.lambda$wrap$2(DefaultThreadService.java:247)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:750)
[WARN] file deletion failed \\TENIBRE\bs\users\Maddalena\Viral Injections\data\images\215\.an215_20250227_298.czi.bfmemo

Contrarily, on Linux it spits no error and opens it in 2 seconds:

Creating slice an215_20250214_261.czi - Scene #01...
Slice an215_20250214_261.czi - Scene #01 created!
Creating slice an215_20250214_261.czi - Scene #02...
Slice an215_20250214_261.czi - Scene #02 created!
Creating slice an215_20250214_261.czi - Scene #03...
Slice an215_20250214_261.czi - Scene #03 created!
Creating slice an215_20250214_261.czi - Scene #04...
Slice an215_20250214_261.czi - Scene #04 created!
Creating slice an215_20250214_261.czi - Scene #05...
Slice an215_20250214_261.czi - Scene #05 created!
Creating slice an215_20250214_261.czi - Scene #06...
Slice an215_20250214_261.czi - Scene #06 created!
Creating slice an215_20250214_261.czi - Scene #07...
Slice an215_20250214_261.czi - Scene #07 created!
Creating slice an215_20250214_261.czi - Scene #08...
Slice an215_20250214_261.czi - Scene #08 created!
Creating slice an215_20250214_262.czi - Scene #05...
Slice an215_20250214_262.czi - Scene #05 created!
Creating slice an215_20250214_262.czi - Scene #07...
Slice an215_20250214_262.czi - Scene #07 created!
Creating slice an215_20250214_262.czi - Scene #06...
Slice an215_20250214_262.czi - Scene #06 created!
Creating slice an215_20250214_262.czi - Scene #08...
Slice an215_20250214_262.czi - Scene #08 created!
Creating slice an215_20250214_263.czi - Scene #5...
Slice an215_20250214_263.czi - Scene #5 created!
Creating slice an215_20250214_263.czi - Scene #6...
Slice an215_20250214_263.czi - Scene #6 created!
Creating slice an215_20250214_263.czi - Scene #7...
Slice an215_20250214_263.czi - Scene #7 created!
Creating slice an215_20250214_264.czi - Scene #6...
Slice an215_20250214_264.czi - Scene #6 created!
Creating slice an215_20250214_266.czi - Scene #2...
Slice an215_20250214_266.czi - Scene #2 created!
Creating slice an215_20250214_266.czi - Scene #4...
Slice an215_20250214_266.czi - Scene #4 created!
Info:Current X Angle : .000 has been updated to -3.526
Current Y Angle : .000 has been updated to 6.973

Resolving output success in command ch.epfl.biop.atlas.aligner.command.ABBAStateLoadCommand

What do you think? Is this something that could be due to a problem with our IT configuration? I am of the impression that some operations (e.g. renaming?) are not permitted on the server

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions