Giter Club home page Giter Club logo

Comments (7)

dionisiydk avatar dionisiydk commented on May 28, 2024

Hm. I tried to reproduce it but I got different behavior.
When I connected again and switch to the browser I got BasysRemotePeerClosed error when I changed selection.

Can you give me more details how to get SeamlessReferencedObjectIsLost?

from pharothings.

dionisiydk avatar dionisiydk commented on May 28, 2024

But let me explain the current logic:
Currently #disconnect is implemented as very hardcore operation. It performs "remotePeer destroy" which is not safe way to continue work then. Destroy operation has no idea about how received remote objects (proxies) are used in the image. If they are stored somewhere in domain code they will become broken and therefore users will become broken which is what we see in these scenarios. So #destroy assumes that all users of remote objects will be manually closed/removed (like all "remote windows" will be closed).
If it is not ensured it then opened remote browser is became broken. Even worse it did not get a chance to release subscriptions on the remote image and it left broken proxies there. Basically it corrupts the image state.

To fix this situation we need to change #disconnect semantics. It should not destroy the network. It should just cleanup client tools on the remote side. It is what it does now but we should remove #destroy part.

Problem here is that we will never cleanup caches anymore because we do not have garbage collection for them. And It is a reason why it is done with destroy right now. It is the only way to manually clean the communication level (Seamless part).

from pharothings.

dionisiydk avatar dionisiydk commented on May 28, 2024

I thought more about it. Without solving complex garbage collection task we just need a fallback logic on the server side (where we connect the TelePharo).
It should react on unhandled Seamless exceptions and completely clean all registered remote tools. So TelePharo knows where on server it registers remote objects. So server part of this system can perform required cleanup to recover the original state.

from pharothings.

MarcusDenker avatar MarcusDenker commented on May 28, 2024

We analysed the problem more. What we think is happening is that there are Announcers around that have registered objects that are not valid anymore.

This would explain the behaviour: we can use the browser, we can use the inspector. Just when we save we get the error.

We put a halt in the server side #signal method and saw that we get the error when the announcer of some subclass of ClyQueryResult tries to execute the announcement.

We see that this announcer has an announcement subscription where the subscriber is a SeamlessMissingObject.

So it seems that there are announcers on the server side that are from the old browser that, if we accept a method, try get delivered, but as they are old, the underlying connection is closed.

The question is how to fix that... to test the theory, we could, in #signal, try to remove the faulty announcement subcriptions? This way the error would happen once and then would fix itself?
Or is there a better place?

from pharothings.

oliveiraallex avatar oliveiraallex commented on May 28, 2024

pharo-ide/TelePharo#30

from pharothings.

dionisiydk avatar dionisiydk commented on May 28, 2024

Sorry, I forgot to answer. Ping me next time if I am silent

from pharothings.

oliveiraallex avatar oliveiraallex commented on May 28, 2024

Fixed in TelePharo issue pharo-ide/TelePharo#30

from pharothings.

Related Issues (8)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.