Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [leshan-dev] Persistence & Clustering of Client

Hi Kai

 

There seems to be a bug in Californium. When I implemented a ConnectionStore that stores the connections in db, my client started to fail on registration.

I conducted a test to see where the problem lies. It seems that the connection is being changed after it’s stored in the ConnectionStore.

 

These snippets below where used to test this suspicion.

 

Test 1:

I wanted to rule out as mutch logic as possible, and only test if my conversion of the connection is working (I need to convert as  Connection isn’t serializable).

 

//This would be replaced by DB logic, but currently holds the session (test is performed with 1 client).

private DTLSConnection storedConnection = null;

 

    @Override

    public boolean put(Connection connection) {

        //Convert to an object that may be saved to db

        storedConnection = ConvertConnectionToDTLSConnection(connection);

 

        //DB logic goes here

       

        return true;

    }

 

    @Override

    public Connection get(InetSocketAddress inetSocketAddress) {

        //DB logic goes here

 

        if(storedConnection != null)

        {

            //Convert to a Callifornium DTLS connection.

            return ConvertDTLSConnectionToConnection(storedConnection);

         }

        else

        {

            return null;

        }

    }

 

Result on the server side is:

 

INFO: Could not create X.509 certificate from byte array: Could not parse certificate: java.io.IOException: Empty input

jan 20, 2016 11:52:20 FM org.eclipse.californium.scandium.dtls.HandshakeMessage fromByteArray

SEVERE: Received unexpected ServerKeyExchange message in NULL key exchange mode.

 

 

--------------------------------------------------------------------

 

Test 2:

I wanted to rule out the possibility that there is a fault in my conversion, and verify my suspicion.

 

//This would be replaced by DB logic, but currently holds the session (test is performed with 1 client).

private Connection storedConnection = null;

 

    @Override

    public boolean put(Connection connection) {

        //Keep the reference intact. Changes made to connection will be reflected on storedConnection.

        storedConnection = connection;               

        

        return true;

    }

 

 

    @Override

    public Connection get(InetSocketAddress inetSocketAddress) {

        if(storedConnection != null)

        {

            //Convert to my connection type.

            DTLSConnection a = ConvertConnectionToDTLSConnection(storedConnection);

 

            //Convert back to Californiums connection type.

            return ConvertDTLSConnectionToConnection(a);

        }

        else

       {

            return null;

       }

    }

 

Result:

The client registers successfully!

 

 

Kind Regards/Vänliga hälsningar
Daniel Svensson


Beskrivning: Beskrivning: Elvaco


Elvaco AB, Teknikgatan 18, 434 37 Kungsbacka
Tel: +46 300 30250

E-mail: Daniel.Svensson@xxxxxxxxx

Internet: www.elvaco.se

C O N F I D E N T I A L I T Y
The contents of this e-mail are confidential to the ordinary user
of the e-mail address to which it was addressed, and may also
be privileged. If you have received this e-mail in error, please
e-mail the sender by replying to this message. Elvaco
reserve the right to monitor all e-mail communications from
external sources for the purposes of ensuring correct and
appropriate use of property and trademarks owned by Elvaco.
Elvaco AB, Gothenburg ©2010.

 

 

 

Från: leshan-dev-bounces@xxxxxxxxxxx [mailto:leshan-dev-bounces@xxxxxxxxxxx] För Daniel Svensson
Skickat: den 19 januari 2016 09:20
Till: leshan developer discussions <leshan-dev@xxxxxxxxxxx>
Ämne: Re: [leshan-dev] Persistence & Clustering of Client

 

Hi Kai

 

Thanks for confirming. I will look in to it, and hopefully make a pull request.

 

/Daniel

 

Från: leshan-dev-bounces@xxxxxxxxxxx [mailto:leshan-dev-bounces@xxxxxxxxxxx] För Hudalla Kai (INST/ESY)
Skickat: den 18 januari 2016 17:22
Till: leshan developer discussions <leshan-dev@xxxxxxxxxxx>
Ämne: Re: [leshan-dev] Persistence & Clustering of Client

 

Hi Daniel,

 

I am afraid that this is (currently) the way to go, i.e. if you want to pass in a DTLSConnector instance using your own ConnectionStore implementation then you will need to either implement LwM2mServer or subclass LeshanServer. However, what I would like even better was a pull request for making it possible to use a custom DTLSConnector instance in the LeshanServer(Builder) class(es) J


Regards,

Kai

 

 

From: leshan-dev-bounces@xxxxxxxxxxx [mailto:leshan-dev-bounces@xxxxxxxxxxx] On Behalf Of Daniel Svensson
Sent: Monday, January 18, 2016 3:51 PM
To: leshan developer discussions
Subject: Re: [leshan-dev] Persistence & Clustering of Client

 

Hi

 

I’m currently working on the same problem. What is the best practice for persisting session state at DTLS level?

 

I found out that DTLSConnector takes a ConnectionStore as an in parameter (link below).  Do I need to implement my own LwM2mServer, in order to pass an ConnectionStore to the coapserver or is there a better way?

https://github.com/eclipse/leshan/blob/master/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/impl/LeshanServer.java#L154

 

Kind regards

Daniel

 

 

Från: leshan-dev-bounces@xxxxxxxxxxx [mailto:leshan-dev-bounces@xxxxxxxxxxx] För Gajjala Vinay
Skickat: den 15 januari 2016 20:37
Till: leshan developer discussions <leshan-dev@xxxxxxxxxxx>
Ämne: Re: [leshan-dev] Persistence & Clustering of Client

 

Thanks for the tip Kai.

 

 

From: leshan-dev-bounces@xxxxxxxxxxx [mailto:leshan-dev-bounces@xxxxxxxxxxx] On Behalf Of Hudalla Kai (INST/ESY)
Sent: Friday, January 15, 2016 1:58 AM
To: leshan developer discussions
Subject: Re: [leshan-dev] Persistence & Clustering of Client

 

Vinay,

 

please also be aware of the state potentially managed at the Calfornium level, in particular if you use DTLS. Californium (or to be more precise its Scandium component) keep track of DTLS session state for each client in memory as well. Thus, if your server contains the full stack (leshan, Californium, Scandium) you will also need to take care of persisting session state at the DTLS level and probably also make your clients try to “resume” their DTLS session if they are not able to connect to the server after the server has restarted …

 

Regards,

Kai

 

From: leshan-dev-bounces@xxxxxxxxxxx [mailto:leshan-dev-bounces@xxxxxxxxxxx] On Behalf Of Simon Bernard
Sent: Thursday, January 14, 2016 6:44 PM
To: leshan developer discussions
Subject: Re: [leshan-dev] Persistence & Clustering of Client

 

You should implement your own org.eclipse.leshan.server.client.ClientRegistry, then pass it at creation :
LeshanServer server = new LeshanBuilder().setClientRegistry(new YourClientRegistry()). .... .... .build()

Le 14/01/2016 18:29, Gajjala Vinay a écrit :

Hi

 

Whenever my server is restarted it is losing the client state like registration etc., there by any update registrations after server restart from the clients are failing.

I like to know is there a way I can implement/extend the current Client cache which Leshan stores in memory to persist and share across cluster?

 

Thanks

Vinay

 


This message and any attachments are intended solely for the addressees and may contain confidential information. Any unauthorized use or disclosure, either whole or partial, is prohibited.
E-mails are susceptible to alteration. Our company shall not be liable for the message if altered, changed or falsified. If you are not the intended recipient of this message, please delete it and notify the sender.
Although all reasonable efforts have been made to keep this transmission free from viruses, the sender will not be liable for damages caused by a transmitted virus.




_______________________________________________
leshan-dev mailing list
leshan-dev@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/leshan-dev

 


This message and any attachments are intended solely for the addressees and may contain confidential information. Any unauthorized use or disclosure, either whole or partial, is prohibited.
E-mails are susceptible to alteration. Our company shall not be liable for the message if altered, changed or falsified. If you are not the intended recipient of this message, please delete it and notify the sender.
Although all reasonable efforts have been made to keep this transmission free from viruses, the sender will not be liable for damages caused by a transmitted virus.


Back to the top