SlideShare una empresa de Scribd logo
1 de 101
Descargar para leer sin conexión
Advanced OpenSplice DDS
                 Programming
                 - Part I -
OpenSplice DDS




                               Angelo CORSARO, Ph.D.
                                       Chief Technology Officer
                                       OMG DDS Sig Co-Chair
                                                  PrismTech
                               angelo.corsaro@prismtech.com
Before we get into technical details let’s try to answer two questions:




                                                                                           Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                 1. What does OpenSplice DDS do?

                 2. What kind of applications are using it?
OpenSplice DDS
OpenSplice DDS enables seamless, loosely-




                                                                 Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                 coupled, timely, scalable and dependable
                 data sharing between distributed applications
OpenSplice DDS




                 and network connected devices.
Some Use Cases




                                                                                                            Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
OpenSplice DDS




                  Integrated Modular Vetronics     Training & Simulation Systems   Naval Combat Systems




                 Air Traffic Control & Management       Unmanned Air Vehicles       Aerospace Applications
Some Use Cases




                                                                                                             Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
OpenSplice DDS




                 Agricultural Vehicle Systems   Large Scale SCADA Systems            Smart Cities




                    Train Control Systems        Complex Medical Devices    Big Data (In-Memory) Analytics
A Fresh Look at OpenSplice
OpenSplice DDS
From Local
OpenSplice DDS




                 to Distributed Data
Data in Programming Languages




                                                                                                       Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  ☐   Statically Typed Programming Languages provide mechanisms to
                      declare a variable for given type as well as defining new types
OpenSplice DDS




                              	
  	
  int	
  x;	
     	
  	
  class	
  Rational	
  {	
  ...	
  }	
  



                  ☐   Scoping rules are then used to define what values and types are
                      accessible at any given point in a program text
“Local” Data
                  ☐   Consider the Following code fragment below in an imperative
                      programming language:




                                                                                                                                                               Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                                                                                                                      State
                       1   {                                                   1 	
  {	
  }
                       2   	
  	
  int	
  x;                                   2 	
  {	
  int	
  x	
  }
                       3   	
  	
  x	
  =	
  7;                                3 	
  {	
  x	
  =	
  7	
  }
OpenSplice DDS




                       4   	
  	
  {                                           4 	
  {	
  x	
  =	
  7,	
  {	
  }	
  }
                       5   	
  	
  	
  	
  int	
  y;                           5 	
  {	
  x	
  =	
  7,	
  {	
  int	
  y	
  }	
  }
                       6   	
  	
  	
  	
  y	
  =	
  18;                       6 	
  {	
  x	
  =	
  7,	
  {	
  y	
  =	
  18	
  }	
  }
                       7   	
  	
  	
  	
  double	
  z;                        7 	
  {	
  x	
  =	
  7,	
  {	
  y	
  =	
  18,	
  double	
  z	
  }	
  }
                       8   	
  	
  	
  	
  z	
  =	
  3.141593                  8 	
  {	
  x	
  =	
  7,	
  {	
  y	
  =	
  18,	
  z	
  =	
  3.1416	
  }	
  }
                       9   	
  	
  	
  	
  x	
  =	
  x	
  -­‐	
  4;            9 	
  {	
  x	
  =	
  3,	
  {	
  y	
  =	
  2	
  }	
  }
                      10   	
  	
  	
  	
  y	
  =	
  x	
  +	
  y;             10 	
  {	
  x	
  =	
  3,	
  {	
  y	
  =	
  21	
  }	
  }
                      11   	
  	
  	
  	
  z	
  =	
  2	
  *	
  z	
  *	
  y;   11 	
  {	
  x	
  =	
  3,	
  {	
  y	
  =	
  21,	
  z	
  =	
  131.9472	
  }	
  }
                      12   	
  	
  }                                          12 	
  {	
  x	
  =	
  3,	
  {	
  	
  }}
                      13   }                                                  13 	
  {	
  }
“Local” Data
                  ☐   One final consideration to do is that variables in a programming
                      language are in essence alias to a memory location




                                                                                         Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                        int	
  x;
                        int	
  y;
OpenSplice DDS




                                                 ...
Distributed Data
                      Extending the elegant model provided by programming




                                                                                         Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  ☐
                      languages to distributed systems has been and still is a quite
                      popular research topic
OpenSplice DDS




                  ☐   Historically the solutions to the distributed data problem where
                      divided into those based on Distributed Shared Memory and those
                      based on Message Passing

                  ☐   OpenSplice DDS provide a new interesting way of addressing this
                      problem. Let’s see...
OpenSplice Foundations
OpenSplice DDS
Distributed Data in OpenSplice
                  ☐   OpenSplice DDS provides the abstraction




                                                                                                       Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                      of an “Active” Global Data Space

                  ☐   The Global Data Space is fully distributed           TopicA
                      and does not suffer Single Point of Failure                         TopicE
OpenSplice DDS




                      issues                                            TopicB
                                                                                    ...
                                                                                             TopicD
                  ☐   Applications can autonomously join and                     TopicC
                      leave this data space as well as declare
                      new “Data Types”
                                                                    OpenSplice DDS Global Data Space
                  ☐   In OpenSplice, “data types” are called
                      Topics
Global Data Space
                  ☐   The Global Data Space is actually called “Domain” in
                      OpenSplice DDS




                                                                                                                Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  ☐   Domains are identified by integer. An application
                      can join a domain by creating a domain participant
                      as follows:                                                   TopicA
                                                                                                   TopicE
OpenSplice DDS




                          //	
  Create	
  a	
  Topic                                         ...
                          int	
  domain_id	
  =	
  18;                           TopicB
                                                                                                      TopicD
                          auto	
  dp	
  =	
  DomainParticipant(domain_id);
                                                                                          TopicC
                  ☐   A Domain defines a top-level scope thus the
                      content of a domain is not accessible from
                                                                             OpenSplice DDS Global Data Space
                      another domain
                  ☐   Finally an application can join multiple domains
                      by creating one domain participant per-domain
Topics
                  ☐   A Topic is defined by means of a                     “Circle”, Square”, “Triangle”
                      (name, type, qos) tuple, where




                                                                                                                   Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                      ☐   name: identifies the topic within
                                                                                       Name
                          OpenSplice’s Global Data Space
                                                                                       Topic
                      ☐   type: is the programming language




                                                                                 Typ



                                                                                               S
OpenSplice DDS




                                                                                                     DURABILITY,




                                                                                           Qo
                          type associated with the topic. This




                                                                                  e
                                                                                                      DEADLINE,
                          type can be defined in IDL, XML, and       ShapeType
                                                                                                      PRIORITY,
                          Java. Types are extensible and                                                 …
                          evolvable
                      ☐   qos: is a collection of policies that   struct ShapeType {
                                                                     string color;
                          control non-functional properties of       long   x;
                          this topic, such as its durability,        long
                                                                     long
                                                                            y;
                                                                            size;
                          reliability, etc.                       };
Defining a Topic




                                                                                                Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  ☐   In code, if we wanted to define the Square topic we would do
                      (with the new DDS-PSM-Cxx v1.0 API):

                         // Create a Topic
OpenSplice DDS




                         auto dp = DomainParticipant(18);
                         auto topic = Topic<ShapeType>(dp, “Square”, dp.default_topic_qos());

                         // Or equivalently and more concisely:
                         auto topic = Topic<ShapeType>(dp, “Square”);



                  ☐   The effect of this code is to define a topic called “Square” with
                      type ShapeType and default QoS within the OpenSplice Global
                      Data Space
Looking with the Spyglass
                         domain 18




                                                                        Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                                            Topic
                                            Square
                                        struct&ShapeType&{
                                        &&string&&&color;&&&&&&
                                        &&long&&&x;&&&
                                        &&long&&&y;
OpenSplice DDS




                                        &&long&&&size;
                                        };

                                            Policies




                         auto topic = Topic<ShapeType>(dp, “Square”);
Topics Scope
                  ☐   Topic definitions are (somewhat) equivalent to type definitions in a programming




                                                                                                          Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                      language. In the sense that they define a new, generalized, type to be used
                      within the global data space

                  ☐   The scope of a Topic definition is the entire Domain, thus one could say that
                      there is only one level of scoping. To make the parallel with Java, one could say
OpenSplice DDS




                      that it is as if Topics where defined in a namespace named after the domain-id


                               domain0	
  {TopicA,	
  TopicB,	
  ...}

                               domain1	
  {Topic1,	
  Topic2,	
  ...}

                  ☐   As a consequence topic definitions in one domain are not visible from a
                      different domain
If Topic are Types what are Variables?

                  ☐   As described earlier a Topic definition can be thought as a Type




                                                                                          Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                      definition in a programming language

                  ☐   In a statically typed programming language (e.g. Java), given a
                      type Foo I can define a variable of type Foo as:
OpenSplice DDS




                                                     	
  	
  Foo	
  x;	
  
                  ☐   Then I can initialize it as:       x	
  =	
  new	
  Foo(...);	
  

                  ☐   Then I can mutate it, by:          x.setBar(...);


                  ☐   How are instance of a Topic defined?
DataWriter




                                                                                     Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  ☐   OpenSplice DDS uses DataWriters to declare and write
                      instances of a Topic

                  ☐   A DataWriter for our Square topic can be defined as follows:
OpenSplice DDS




                            // Create a Publisher
                            auto pub = Publisher(dp);

                            // Create a DataWriter
                            auto dw = DataWriter<ShapeType>(pub, topic);

                            // Write data
                            dw.write(ShapeType(“RED”,11,77,99));
Looking with the Spyglass




                                                                          Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                                                  Topic
                                                  Square
                                            struct&ShapeType&{
                                            &&string&&&color;&&&&&&
                                            &&long&&&x;&&&
                                            &&long&&&y;
OpenSplice DDS




                      dw                    &&long&&&size;
                                            };

                                                  Policies

                                          color    x    y    size




                           auto dw = DataWriter<ShapeType>(pub, topic);
Looking with the Spyglass




                                                                  Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                                            Topic
                                            Square
                                      struct&ShapeType&{
                                      &&string&&&color;&&&&&&
                                      &&long&&&x;&&&
                                      &&long&&&y;
OpenSplice DDS




                      dw              &&long&&&size;
                                      };

                                            Policies

                                    color    x    y    size
                                    "RED"   11   77    99




                           dw.write(ShapeType(“RED”,11,77,99));
An Experiment...
                  ☐   What does the following code do?




                                                                         Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                         // Create a Publisher
                         auto pub = Publisher(dp);

                         // Create DataWriters
                         auto dw1 = DataWriter<ShapeType>(pub, topic);
OpenSplice DDS




                         auto dw2 = DataWriter<ShapeType>(pub, topic);

                         // Write Data
                         dw1.write(ShapeType(“RED”,10,20,30));
                         dw2.write(ShapeType(“BLUE”,30,20, 10));
Looking with the Spyglass




                                                                                                            Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                                                   Topic
                                                   Square
                                             struct&ShapeType&{
                                             &&string&&&color;&&&&&&
                                             &&long&&&x;&&&
                                             &&long&&&y;
OpenSplice DDS




                                             &&long&&&size;
                                             };

                     dw1                           Policies
                                                                        Data Writers for the same topic
                                           color    x    y    size      are aliased to the same variable!


                       dw2

                             auto dw1 = DataWriter<ShapeType>(pub, topic);
                             auto dw2 = DataWriter<ShapeType>(pub, topic);
Looking with the Spyglass




                                                                      Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                                                  Topic
                                                  Square
                                            struct&ShapeType&{
                                            &&string&&&color;&&&&&&
                                            &&long&&&x;&&&
                                            &&long&&&y;
OpenSplice DDS




                                            &&long&&&size;
                                            };

                     dw1                          Policies

                                          color    x    y    size
                                          RED     10   20    30




                       dw2


                             dw1.write(ShapeType(“RED”,10,20,30));
Looking with the Spyglass




                                                                       Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                                                  Topic
                                                  Square
                                            struct&ShapeType&{
                                            &&string&&&color;&&&&&&
                                            &&long&&&x;&&&
                                            &&long&&&y;
OpenSplice DDS




                                            &&long&&&size;
                                            };

                     dw1                          Policies

                                          color    x    y    size
                                          BLUE    30   20    10




                       dw2


                             dw2.write(ShapeType(“BLUE”,30,20, 10));
Topic Instances
                  ☐   Topic type can identify an arbitrary number of attributes as defining the




                                                                                                  Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                      topic key
                  ☐   In this case, each unique key value defines a topic instance
                  ☐   Example:
OpenSplice DDS




                                 struct ShapeType {
                                    @Key
                                    long   color;
                                    long   x;
                                    long   y;
                                    long   size;
                                 };
Let’s Experiment...
                  ☐   What does the following code do?




                                                                        Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                         // Create a Publisher
                         auto pub = Publisher(dp);

                         // Create DataWriters
OpenSplice DDS




                         auto dw = DataWriter<ShapeType>(pub, topic);

                         // Write Data
                         dw.write(ShapeType(“RED”,10,20,30));
                         dw.write(ShapeType(“BLUE”,30,20,10));
Looking with the Spyglass




                                                                  Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                                              Topic
                                              Square
                                        struct&ShapeType&{
                                        &&string&&&color;&&&&&&
                                        &&long&&&x;&&&
                                        &&long&&&y;
OpenSplice DDS




                      dw                &&long&&&size;
                                        };

                                              Policies

                                      color   x    y     size

                                      RED     10   20    30




                           dw.write(ShapeType(“RED”,10,20,30));
Looking with the Spyglass




                                                                   Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                                               Topic
                                               Square
                                         struct&ShapeType&{
                                         &&string&&&color;&&&&&&
                                         &&long&&&x;&&&
                                         &&long&&&y;
OpenSplice DDS




                      dw                 &&long&&&size;
                                         };

                                               Policies

                                       color   x    y     size

                                       RED     10   20    30
                                       BLUE    30   20    10




                           dw.write(ShapeType(“BLUE”,30,20,10));
LongVariable Example
                 ☐   The “distributed” version of the following code:




                                                                                                        Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                                     int	
  x;
                                     int	
  y;
                                     x	
  =	
  10;
                                     y	
  =	
  20;
OpenSplice DDS




                                                                                   Topic Type
                     ☐    Becomes:
                         // Create a Publisher                                  struct LongVariable {
                         auto lvt = Topic<LongVariable>(dp, “TLongVariable”);      @Key
                                                                                   string name;
                         // Create DataWriters                                     long   value;
                         auto dw = DataWriter<LongVariable>(pub, topic);        };

                         // Write Data
                         dw.write(LongVariable(“x”,10));
                         dw.write(LongVariable(“y”,20));
Looking with the Spyglass




                                                     Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                                   Topic
                                TLongValue
                             struct LongVariable {
                                @Key
                                string name;
                                long   value;
OpenSplice DDS




                      dw     };

                                   Policies
                                 name value

                                   x    10

                                   y    20
DataReader




                                                                                                      Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  ☐   OpenSplice DDS uses DataReaders to read instances of a Topic

                  ☐   A DataReader for our Square topic can be defined as follows:
OpenSplice DDS




                              // Create a Subscriber
                              auto sub = Subscriber(dp);

                              // Create a DataWriter
                              auto dr = DataReader<ShapeType>(sub, topic);

                              // Read data
                              auto data = dr.read();



                  ☐   The read operation will read by default all instance values. Special selector
                      operation are available to pick a specific instance. More later
DataReader/DataWriter Matching
                 ☐   DataWriters and DataReaders




                                                                                                                  Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                     are automatically and
                     dynamically matched by the                                                  Data
                                                                                                Reader
                     DDS Dynamic Discovery
                                                               Data
                                                               Writer
OpenSplice DDS




                                                                                                          Data
                                                                                                         Reader
                 ☐   A rich set of QoS Policies       Data
                                                      Writer
                                                                        TopicA
                                                                                   TopicD

                     allows to control existential,                               TopicB
                                                                                                          Data
                                                                                                         Reader
                     temporal, and spatial
                                                      Data
                                                      Writer
                                                                        TopicC
                                                                                      ...
                     properties of data and             Data                                         Data
                     impacts DataReader/                Writer                                      Reader


                     DataWriter matching                                DDS Global Data Space
Publishers and Subscribers
OpenSplice DDS
Publishers / Subscribers
                          Domain (e.g. Domain 123)

                                                                                          Domain
                                                                                         Participant




                                                                                                                     Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                                                                                                         Topic
                                  Partition (e.g. “Telemetry”, “Shapes”, )

                                                     T1                      Publisher
                                                   T1 T3                                               Subscriber
                                                               Tx
OpenSplice DDS




                                  Topic Instances/Samples
                                                               Ty
                                                       Tb
                                                  Ta                            DataWrter               DataReader
                                                       Tc


                  Publishers and Subscribers in DDS play two roles:
                  ☐   Coordinate actions across DataReaders/DataWriters
                      ☐   e.g. Atomic writes across data-writers
                  ☐   Control access to DDS partitions, a mechanism provided by DDS to further
DDS Partitions
                  Domain

                           Partitions               DDS Publishers and




                                                                                  Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                                                ☐
                                                    Subscribers can specify a
                     M:0:0     M:0:1    M:0:2       list of regular expressions
                                                    representing the partitions
OpenSplice DDS




                                                    to join
                     M:1:0     M:1:1    M:1:2
                                                ☐   Actual partition can be
                                                    any string, but some
                     M:2:0     M:2:1    M:2:2       structure can be given in
                                                    order mimic hierarchy
DDS Partitions Matching
                  Domain

                           Partitions




                                                        Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                     M:0:0     M:0:1    M:0:2   M:0:*
OpenSplice DDS




                     M:1:0     M:1:1    M:1:2


                     M:2:0     M:2:1    M:2:2
DDS Partitions Matching
                  Domain

                           Partitions




                                                        Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                     M:0:0     M:0:1    M:0:2
OpenSplice DDS




                     M:1:0     M:1:1    M:1:2


                     M:2:0     M:2:1    M:2:2
                                                M:*:2
DDS Partitions Matching
                  Domain

                           Partitions




                                                                      Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                     M:0:0     M:0:1    M:0:2
OpenSplice DDS




                     M:1:0     M:1:1    M:1:2


                     M:2:0     M:2:1    M:2:2   M:0:0, M:1:1, M:2:2
Anatomy of a DDS Application
OpenSplice DDS
Anatomy of a DDS Application
                 [DDS C++ API 2010]

                 Domain
                                                                                        Domain




                                                                                                                   Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                   auto dp = DomainParticipant(domainId);
                                                                                       Participant

                 Session
                   // Create a Topic
                                                                      Publisher
          Topic
         Subscriber
OpenSplice DDS




                   auto topic = Topic<ShapeType>(dp, “Circle”);
                   // Create a Publisher / Subscriber
                   auto pub = Publisher(dp);
                   auto sub = Subscriber(dp);


                 Reader/Writers for User Defined for Types             DataWriter
                        DataReader
                   // Create a DataWriter/DataWriter
                   auto writer = DataWriter<ShapeType>(pub, topic);                 Reader/Writer for
                   auto reader = DataReader<ShapeType>(sub, topic);
                                                                                    application defined
                                                                                       Topic Types
Anatomy of a DDS Application
                 [DDS C++ API 2010]

                 Domain
                                                                                     Domain




                                                                                                                Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                   auto dp = DomainParticipant(domainId);
                                                                                    Participant

                 Session
                   // Create a Topic
                                                                   Publisher
          Topic
         Subscriber
OpenSplice DDS




                   auto topic = Topic<ShapeType>(dp, “Circle”);
                   // Create a Publisher / Subscriber
                   auto pub = Publisher(dp);
                   auto sub = Subscriber(dp);


                 Reader/Writers for User Defined for Types          DataWriter
                        DataReader
                   // Write data
                   writer.write(ShapeType(“RED”, 131, 107, 89));                 Reader/Writer for
                   // But you can also write like this...
                   writer << ShapeType(“RED”, 131, 107, 89);
                                                                                 application defined
                                                                                    Topic Types
                   // Read new data (loaned)
                   auto data = reader.read();
Data Reader/Writer Caches
OpenSplice DDS
Reader/Writer Caches
                     Application         Application              Application




                                                                                  Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                     DataWriter         DataReader               DataReader


                                                         ...
OpenSplice DDS




                   DataWriter Cache   DataReader Cache         DataReader Cache



                                          Network
Reader/Writer Caches
                     write(   )          Application              Application




                                                                                  Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                     DataWriter         DataReader               DataReader


                                                         ...
OpenSplice DDS




                   DataWriter Cache   DataReader Cache         DataReader Cache



                                          Network
Reader/Writer Caches
                                  Application       Application              Application




                                                                                             Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                                  DataWriter       DataReader               DataReader


                                                                    ...
OpenSplice DDS




                              DataWriter Cache   DataReader Cache         DataReader Cache


                 Topic Instance
                                                     Network
Reader/Writer Caches
                     Application         Application              Application




                                                                                  Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                     DataWriter         DataReader               DataReader


                                                         ...
OpenSplice DDS




                   DataWriter Cache   DataReader Cache         DataReader Cache



                                          Network
Reader/Writer Caches
                     Application                       Application                    Application




                                                                                                    Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                     DataWriter                        DataReader                     DataReader


                                                                        ...
OpenSplice DDS




                   DataWriter Cache               DataReader Cache               DataReader Cache

                                      Topic Instance                 Topic Instance

                                                        Network
Reader/Writer Caches
                     write(   )          Application              Application




                                                                                  Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                     DataWriter         DataReader               DataReader


                                                         ...
OpenSplice DDS




                   DataWriter Cache   DataReader Cache         DataReader Cache



                                          Network
Reader/Writer Caches
                                  Application      Application              Application




                                                                                            Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                                  DataWriter      DataReader               DataReader


                                                                   ...
OpenSplice DDS




                             DataWriter Cache   DataReader Cache         DataReader Cache

                 Writer History

                                                    Network
Reader/Writer Caches
                     Application         Application              Application




                                                                                  Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                     DataWriter         DataReader               DataReader


                                                         ...
OpenSplice DDS




                   DataWriter Cache   DataReader Cache         DataReader Cache



                                          Network
Reader/Writer Caches
                     Application                       Application                    Application




                                                                                                    Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                     DataWriter                        DataReader                     DataReader


                                                                        ...
OpenSplice DDS




                   DataWriter Cache              DataReader Cache                DataReader Cache

                                      Reader History                 Reader History

                                                        Network
Reader/Writer Caches
                     write(   )          Application              Application




                                                                                  Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                     DataWriter         DataReader               DataReader


                                                         ...
OpenSplice DDS




                   DataWriter Cache   DataReader Cache         DataReader Cache



                                          Network
Reader/Writer Caches
                     Application         Application              Application




                                                                                  Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                     DataWriter         DataReader               DataReader


                                                         ...
OpenSplice DDS




                   DataWriter Cache   DataReader Cache         DataReader Cache



                                          Network
Reader/Writer Caches
                     Application         Application              Application




                                                                                  Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                     DataWriter         DataReader               DataReader


                                                         ...
OpenSplice DDS




                   DataWriter Cache   DataReader Cache         DataReader Cache



                                          Network
Reader/Writer Caches
                     Application         Application              Application




                                                                                  Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                     DataWriter         DataReader               DataReader


                                                         ...
OpenSplice DDS




                   DataWriter Cache   DataReader Cache         DataReader Cache



                                          Network
Reader/Writer Caches
                                       Application                  Application                         Application




                                                                                                                        Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                                       DataWriter                  DataReader                          DataReader


                                                                                               ...
OpenSplice DDS




                                  DataWriter Cache             DataReader Cache                      DataReader Cache

                    QoS Policies
                 ‣ History
                 ‣ Destination Order                                  Network
                 ‣ Presentation
                 ‣ Partition                                       QoS Policies
                 ‣ Time Based Filter                 ‣ Reliability      ‣ Durability
                 ‣ Ownership                         ‣ History          ‣ Transport Priority
                                                     ‣ Latency Budget ‣ Time Based Filter
Writer Cache Properties
                  ☐   An entry for each topic instance




                                                                                  Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  ☐   Each cache entry might contain one
                      or more samples, the number of
                                                                 DataWriter
                      samples is controlled by the History
                      QoS Policy
OpenSplice DDS




                                                                        ...
                  ☐   Depending on the setting of the
                      Durability QoS Policy, the content of
                      the cache may be made available          DataWriter Cache
                      to late joiners. The depth of the
                      cache controls how many samples
                      per instance will be delivered to late
                      joiners
Reader Cache Properties
                  ☐   An entry for each topic instance




                                                                                            Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  ☐   Each cache entry might contain one or
                      more samples, the number of samples is
                      controlled by the History QoS Policy                 DataReader
                      ☐   History.KeepLast(n) keeps the last n samples
OpenSplice DDS




                          per instance
                      ☐   History.KeepAll maintains all the samples,
                                                                                  ...
                          modulo resource constraints

                  ☐   For a given instance:                              DataReader Cache
                      ☐   Samples from the same writer are inserted in
                          write-order
                      ☐   Samples from multiple-writers are ordered
                          using time-stamps (source or reception
                          depending on configurable a QoS Policy)
Eventual Consistency
                      DDS caches provide eventual consistency semantics




                                                                                           Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  ☐

                  ☐   This means that a read will see the effect of a preceding write
                      eventually
OpenSplice DDS




                  ☐   Furthermore, given a data-writer that is currently matching N
                      readers, we can think of DDS as providing eventual consistency
                      with W=0 and R=1
                      ☐   W: the number of Acks expected in order to return from a write
                      ☐   R: the number of sources from which a read access data
Understanding History
OpenSplice DDS
Reader/Writer Caches
                       Application              Application              Application




                                                                                         Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                       DataWriter              DataReader               DataReader


                                                                ...
OpenSplice DDS




                     DataWriter Cache        DataReader Cache         DataReader Cache



                                                 Network

                  Assumptions: DataReader configured with history depth of 2 and
                  DataWriter with default history depth of 1
Reader/Writer Caches
                        write(   1   )          Application              Application




                                                                                         Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                       DataWriter              DataReader               DataReader


                                                                ...
OpenSplice DDS




                     DataWriter Cache        DataReader Cache         DataReader Cache



                                                 Network

                  Assumptions: DataReader configured with history depth of 2 and
                  DataWriter with default history depth of 1
Reader/Writer Caches
                         Application            Application              Application




                                                                                         Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                         DataWriter            DataReader               DataReader

                     1
                                                                ...
OpenSplice DDS




                     DataWriter Cache        DataReader Cache         DataReader Cache



                                                 Network

                  Assumptions: DataReader configured with history depth of 2 and
                  DataWriter with default history depth of 1
Reader/Writer Caches
                         Application            Application              Application




                                                                                         Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                         DataWriter            DataReader               DataReader

                     1
                                                                ...
OpenSplice DDS




                     DataWriter Cache        DataReader Cache         DataReader Cache



                                      1          Network

                  Assumptions: DataReader configured with history depth of 2 and
                  DataWriter with default history depth of 1
Reader/Writer Caches
                         Application             Application              Application




                                                                                         Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                         DataWriter              DataReader               DataReader

                     1                       1                        1
                                                                ...
OpenSplice DDS




                     DataWriter Cache        DataReader Cache         DataReader Cache



                                                  Network

                  Assumptions: DataReader configured with history depth of 2 and
                  DataWriter with default history depth of 1
Reader/Writer Caches
                         write(   2   )          Application              Application




                                                                                         Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                         DataWriter              DataReader               DataReader

                     1                       1                        1
                                                                ...
OpenSplice DDS




                     DataWriter Cache        DataReader Cache         DataReader Cache



                                                  Network

                  Assumptions: DataReader configured with history depth of 2 and
                  DataWriter with default history depth of 1
Reader/Writer Caches
                         Application             Application              Application




                                                                                         Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                         DataWriter              DataReader               DataReader

                     2                       1                        1
                                                                ...
OpenSplice DDS




                     DataWriter Cache        DataReader Cache         DataReader Cache



                                                  Network

                  Assumptions: DataReader configured with history depth of 2 and
                  DataWriter with default history depth of 1
Reader/Writer Caches
                         Application             Application              Application




                                                                                         Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                         DataWriter              DataReader               DataReader

                     2                       1                        1
                                                                ...
OpenSplice DDS




                     DataWriter Cache        DataReader Cache         DataReader Cache



                                       2          Network

                  Assumptions: DataReader configured with history depth of 2 and
                  DataWriter with default history depth of 1
Reader/Writer Caches
                         Application             Application              Application




                                                                                         Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                         DataWriter              DataReader               DataReader

                     2                       1                        1
                                                                ...
OpenSplice DDS




                                             2                        2


                     DataWriter Cache        DataReader Cache         DataReader Cache



                                                  Network

                  Assumptions: DataReader configured with history depth of 2 and
                  DataWriter with default history depth of 1
Reader/Writer Caches
                         write(   3   )          Application              Application




                                                                                         Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                         DataWriter              DataReader               DataReader

                     2                       1                        1
                                                                ...
OpenSplice DDS




                                             2                        2


                     DataWriter Cache        DataReader Cache         DataReader Cache



                                                  Network

                  Assumptions: DataReader configured with history depth of 2 and
                  DataWriter with default history depth of 1
Reader/Writer Caches
                         Application             Application              Application




                                                                                         Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                         DataWriter              DataReader               DataReader

                     3                       1                        1
                                                                ...
OpenSplice DDS




                                             2                        2


                     DataWriter Cache        DataReader Cache         DataReader Cache



                                                  Network

                  Assumptions: DataReader configured with history depth of 2 and
                  DataWriter with default history depth of 1
Reader/Writer Caches
                         Application             Application              Application




                                                                                         Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                         DataWriter              DataReader               DataReader

                     3                       1                        1
                                                                ...
OpenSplice DDS




                                             2                        2


                     DataWriter Cache        DataReader Cache         DataReader Cache



                                       3          Network

                  Assumptions: DataReader configured with history depth of 2 and
                  DataWriter with default history depth of 1
Reader/Writer Caches
                         Application             Application              Application




                                                                                         Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                         DataWriter              DataReader               DataReader

                     3                       2                        2
                                                                ...
OpenSplice DDS




                                             3                        3


                     DataWriter Cache        DataReader Cache         DataReader Cache



                                                  Network

                  Assumptions: DataReader configured with history depth of 2 and
                  DataWriter with default history depth of 1
Caches or Streams?
OpenSplice DDS
Dynamic View of a Stream




                                                                     Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
OpenSplice DDS




                      ...


                               Stream: Set of samples written over
                               time for a given topic instance.
Eventual View of a Stream
                 Assumptions (Default Settings):
                  Reader History = KeepLast (1)
                  WriterHistory = KeepLast (1)




                                                                                                             Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                               Writer History
                                                  Reader History                            ‘Past’ Samples
OpenSplice DDS




                                                                   Stream: Set of samples written over
                                                                      time for a given topic instance.
Eventual View of a Stream
                 Assumptions:
                  Reader History = KeepLast (n) with n > 1
                  WriterHistory = KeepLast (1)




                                                                                                       Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                               Writer History                Reader History
                                                                                      ‘Past’ Samples
OpenSplice DDS




                                                             Stream: Set of samples written over
                                                                time for a given topic instance.
Eventual View of a Stream
                 Assumptions:
                  Reader History = KeepLast (n) with n > 1
                  WriterHistory = KeepLast (m) with n > m > 1




                                                                                                          Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                               Writer History                   Reader History
                                                                                         ‘Past’ Samples
OpenSplice DDS




                                                                Stream: Set of samples written over
                                                                   time for a given topic instance.
Eventual View of a Stream
                 Assumptions:
                  Reader History = KeepAll
                  WriterHistory = KeepLast (m) with n > m > 1




                                                                                 Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                               Writer History                   Reader History
OpenSplice DDS




                                ...
Interacting with the
                  DataReader Cache
OpenSplice DDS
Reading Data Samples
                  ☐   Samples can be read from the Data Reader History Cache




                                                                                       Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  ☐   The action of reading a sample is non-destructive. Samples are
                      not removed from the cache
OpenSplice DDS




                           DataReader                          DataReader


                                  ...         read                    ...

                         DataReader Cache                    DataReader Cache
Taking Data Samples
                  ☐   Samples can be taken from the Data Reader History Cache




                                                                                  Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  ☐   The action of taking a sample is destructive. Samples are
                      removed from the cache
OpenSplice DDS




                           DataReader                           DataReader


                                  ...         take                     ...

                         DataReader Cache                     DataReader Cache
Read vs. Take




                                                                                              Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  ☐   The read operation should always be access the latest know value
                      for topics that represent distributed state
OpenSplice DDS




                  ☐   The take operation should be used to get the last notification from a
                      topic that represent an event
Data Selectors
OpenSplice DDS
Cherry Picking in DDS




                                                                                          Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  ☐   DDS provides some very flexible mechanisms for selecting the data
                      to be read:
OpenSplice DDS




                      ☐   Data Content
                      ☐   Data Status

                  ☐   These mechanisms are composable
Content-Based Data Selection
OpenSplice DDS
Filters and Queries                                Application


                  ☐   DDS Filters allow to control what gets
                      into a DataReader cache




                                                                                        Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                                                                      Query
                  ☐   DDS Queries allow to control what gets
                      out of a DataReader cache                    DataReader
OpenSplice DDS




                  ☐   Filters are defined by means of
                                                                           ...
                      ContentFilteredTopics




                                                                 ...
                                                                 ...



                                                                                  ...
                  ☐   Queries operate in conjunction with        DataReader Cache
                      read operations
                                                                       Filter
                  ☐   Filters and Queries are expressed as SQL
                      where clauses
struct ShapeType {



                 Filters
                                                                                       @Key
                                                                                       string   color;
                                                                                       long   x;
                                                                                       long   y;
                 [C++ API]                                                          };
                                                                                       long   shapesize;




                                                                                                           Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                         /**
                          * NOTE: The Scala API if not provided with DP/Sub/Pub assumes
                          * default domains and default partition.
                          **/
                         // Create a Topic
                         auto topic = Topic<ShapeType>(dp, “Circle”);
OpenSplice DDS




                         // Define filter expression and parameters
                         auto filter = Filter(“x < 100 AND y < 200”);

                         // Define content filtered topic
                         auto cftopic =
                           ContentFilteredTopic<ShapeType>(“CFCircle”, topic, filter)

                         // Create a DataReader for the content-filtered Topic
                         auto dr = DataReader<ShapeType>(sub,cftopic)
struct ShapeType {



                 Query
                                                                            @Key
                                                                            string   color;
                                                                            long   x;
                                                                            long   y;
                 [C++ API]                                               };
                                                                            long   shapesize;




                                                                                                Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                         // Define filter expression and parameters
                         auto dr = DataReader<ShapeType>(sub, topic)
OpenSplice DDS




                         val query = Query(dr, “x < 100 AND y < 200”);

                         dr.select()
                             .content(query)
                             .read();
Instances
                  ☐   DDS provides a very efficient way of reading data belonging to a




                                                                                            Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                      specific Topic Instance

                  ☐   Obviously, one could use queries to match the key’s value, but this
                      is not as efficient as the special purpose instance selector
OpenSplice DDS




                                    auto handle =
                                       dr.lookup_instance(ShapeType(“RED”, 0, 0, 0));

                                    auto data =
                                         dr.select()
                                          .instance(handle)
                                          .read();
State-Based Selection
OpenSplice DDS
Sample, Instance, and View State
                  ☐   The samples included in the DataReader cache have associated




                                                                                            Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                      some meta-information which, among other things, describes the
                      status of the sample and its associated stream/instance
                  ☐   The Sample State (READ, NOT_READ) allows to distinguish between
OpenSplice DDS




                      new samples and samples that have already been read
                  ☐   The View State (NEW, NOT_NEW) allows to distinguish a new
                      instance from an existing one
                  ☐   The Intance State (ALIVE, NOT_ALIVE_DISPOSED,
                      NOT_ALIVE_NO_WRITERS) allows to track the life-cycle transitions of
                      the instance to which a sample belongs
State Selector in Action
                 [C++ API]




                                                                   Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                         // Read only new samples
                         auto data = dr.read()

                         // Read any samples from live instances
                         auto data =
                                dr.select()
OpenSplice DDS




                                  .state(DataState::any_data())
                                  .read();
Putting all Together
                 [C++ API]




                                                                                      Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  ☐   Selectors can be composed in a flexible and expressive manner
OpenSplice DDS




                              auto data =
                                 dr.select()
                                      .content(query)
                                      .state(data_state)
                                      .instance(handle)
                                   .read();
OpenSplice DDS




                 Summing Up
Concluding Remarks
                      OpenSplice DDS provides a very powerful abstraction for building




                                                                                          Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  ☐
                      distributed applications grounded on the concept of a fully
                      distributed global data space
OpenSplice DDS




                  ☐   Topics are used to define the types that populate the global data
                      space while DataWriters and DataReaders are used to produce
                      and consume values

                  ☐   DataReaders allow very flexible data access through cache
                      access operations
OpenSplice DDS
References




                                                                                                                          Copyright	
  2011,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.
                  OpenSplice | DDS                                                    Escalier
                  ¥ #1 OMG DDS Implementation   ¥ Fastest growing JVM Language      ¥ Scala API for OpenSplice DDS
                  ¥ Open Source                 ¥ Open Source                       ¥ Open Source
                  ¥ www.opensplice.org          ¥ www.scala-lang.org                ¥ github.com/kydos/escalier
OpenSplice DDS




                 ¥ Simple C++ API for DDS       ¥ DDS-PSM-Java for OpenSplice DDS   ¥ DDS-based Advanced Distributed
                 ¥ Open Source                  ¥ Open Source                          Algorithms Toolkit
                 ¥ github.com/kydos/simd-cxx    ¥ github.com/kydos/simd-java        ¥ Open Source
                                                                                      ¥ github.com/kydos/dada
:: Connect with Us ::



                   ¥opensplice.com             ¥forums.opensplice.org
                                                                                         ¥@acorsaro
                   ¥opensplice.org             ¥opensplicedds@prismtech.com                 ¥@prismtech
OpenSplice DDS




                                                                                         ¥ crc@prismtech.com
                                                                                         ¥sales@prismtech.com
                 ¥youtube.com/opensplicetube          ¥slideshare.net/angelo.corsaro

Más contenido relacionado

La actualidad más candente

The Data Distribution Service Tutorial
The Data Distribution Service TutorialThe Data Distribution Service Tutorial
The Data Distribution Service TutorialAngelo Corsaro
 
Getting Started in DDS with C++ and Java
Getting Started in DDS with C++ and JavaGetting Started in DDS with C++ and Java
Getting Started in DDS with C++ and JavaAngelo Corsaro
 
The DDS Tutorial - Part I
The DDS Tutorial - Part IThe DDS Tutorial - Part I
The DDS Tutorial - Part IAngelo Corsaro
 
Introducing the New MagicDraw Plug-In for RTI Connext DDS: Industrial IoT Mee...
Introducing the New MagicDraw Plug-In for RTI Connext DDS: Industrial IoT Mee...Introducing the New MagicDraw Plug-In for RTI Connext DDS: Industrial IoT Mee...
Introducing the New MagicDraw Plug-In for RTI Connext DDS: Industrial IoT Mee...IncQuery Labs
 
10 Reasons for Choosing OpenSplice DDS
10 Reasons for Choosing OpenSplice DDS10 Reasons for Choosing OpenSplice DDS
10 Reasons for Choosing OpenSplice DDSAngelo Corsaro
 
RTI Data-Distribution Service (DDS) Master Class 2011
RTI Data-Distribution Service (DDS) Master Class 2011RTI Data-Distribution Service (DDS) Master Class 2011
RTI Data-Distribution Service (DDS) Master Class 2011Gerardo Pardo-Castellote
 
The Data Distribution Service
The Data Distribution ServiceThe Data Distribution Service
The Data Distribution ServiceAngelo Corsaro
 
Introduction to DDS
Introduction to DDSIntroduction to DDS
Introduction to DDSRick Warren
 
Getting Started with DDS in C++, Java and Scala
Getting Started with DDS in C++, Java and ScalaGetting Started with DDS in C++, Java and Scala
Getting Started with DDS in C++, Java and ScalaAngelo Corsaro
 
Poster Weather Station using IOT
Poster Weather Station using IOTPoster Weather Station using IOT
Poster Weather Station using IOTfatinfaqihah5124
 
Nabil Nawaz Oracle Oracle 12c Data Guard Deep Dive Presentation
Nabil Nawaz Oracle Oracle 12c Data Guard Deep Dive PresentationNabil Nawaz Oracle Oracle 12c Data Guard Deep Dive Presentation
Nabil Nawaz Oracle Oracle 12c Data Guard Deep Dive PresentationNabil Nawaz
 
Oracle zdm Migrate Amazon RDS Oracle to Oracle Autonomous 2021 Kamalesh Ramas...
Oracle zdm Migrate Amazon RDS Oracle to Oracle Autonomous 2021 Kamalesh Ramas...Oracle zdm Migrate Amazon RDS Oracle to Oracle Autonomous 2021 Kamalesh Ramas...
Oracle zdm Migrate Amazon RDS Oracle to Oracle Autonomous 2021 Kamalesh Ramas...Kamalesh Ramasamy
 
The Art and Science of DDS Data Modelling
The Art and Science of DDS Data ModellingThe Art and Science of DDS Data Modelling
The Art and Science of DDS Data ModellingAngelo Corsaro
 
IBM Cloud Services Portfolio
IBM Cloud Services Portfolio IBM Cloud Services Portfolio
IBM Cloud Services Portfolio Bernd Thomsen
 

La actualidad más candente (20)

The Data Distribution Service Tutorial
The Data Distribution Service TutorialThe Data Distribution Service Tutorial
The Data Distribution Service Tutorial
 
Getting Started in DDS with C++ and Java
Getting Started in DDS with C++ and JavaGetting Started in DDS with C++ and Java
Getting Started in DDS with C++ and Java
 
The DDS Tutorial - Part I
The DDS Tutorial - Part IThe DDS Tutorial - Part I
The DDS Tutorial - Part I
 
Introducing the New MagicDraw Plug-In for RTI Connext DDS: Industrial IoT Mee...
Introducing the New MagicDraw Plug-In for RTI Connext DDS: Industrial IoT Mee...Introducing the New MagicDraw Plug-In for RTI Connext DDS: Industrial IoT Mee...
Introducing the New MagicDraw Plug-In for RTI Connext DDS: Industrial IoT Mee...
 
10 Reasons for Choosing OpenSplice DDS
10 Reasons for Choosing OpenSplice DDS10 Reasons for Choosing OpenSplice DDS
10 Reasons for Choosing OpenSplice DDS
 
RTI Data-Distribution Service (DDS) Master Class 2011
RTI Data-Distribution Service (DDS) Master Class 2011RTI Data-Distribution Service (DDS) Master Class 2011
RTI Data-Distribution Service (DDS) Master Class 2011
 
DDS QoS Unleashed
DDS QoS UnleashedDDS QoS Unleashed
DDS QoS Unleashed
 
The Data Distribution Service
The Data Distribution ServiceThe Data Distribution Service
The Data Distribution Service
 
Introduction to DDS
Introduction to DDSIntroduction to DDS
Introduction to DDS
 
Cloud Transformation
Cloud TransformationCloud Transformation
Cloud Transformation
 
Getting Started with DDS in C++, Java and Scala
Getting Started with DDS in C++, Java and ScalaGetting Started with DDS in C++, Java and Scala
Getting Started with DDS in C++, Java and Scala
 
Poster Weather Station using IOT
Poster Weather Station using IOTPoster Weather Station using IOT
Poster Weather Station using IOT
 
Best Practices Using RTI Connext DDS
Best Practices Using RTI Connext DDSBest Practices Using RTI Connext DDS
Best Practices Using RTI Connext DDS
 
Nabil Nawaz Oracle Oracle 12c Data Guard Deep Dive Presentation
Nabil Nawaz Oracle Oracle 12c Data Guard Deep Dive PresentationNabil Nawaz Oracle Oracle 12c Data Guard Deep Dive Presentation
Nabil Nawaz Oracle Oracle 12c Data Guard Deep Dive Presentation
 
Oracle zdm Migrate Amazon RDS Oracle to Oracle Autonomous 2021 Kamalesh Ramas...
Oracle zdm Migrate Amazon RDS Oracle to Oracle Autonomous 2021 Kamalesh Ramas...Oracle zdm Migrate Amazon RDS Oracle to Oracle Autonomous 2021 Kamalesh Ramas...
Oracle zdm Migrate Amazon RDS Oracle to Oracle Autonomous 2021 Kamalesh Ramas...
 
Cloud slide
Cloud slideCloud slide
Cloud slide
 
Introduction to RTI DDS
Introduction to RTI DDSIntroduction to RTI DDS
Introduction to RTI DDS
 
The Art and Science of DDS Data Modelling
The Art and Science of DDS Data ModellingThe Art and Science of DDS Data Modelling
The Art and Science of DDS Data Modelling
 
IBM Cloud Services Portfolio
IBM Cloud Services Portfolio IBM Cloud Services Portfolio
IBM Cloud Services Portfolio
 
Temporal database
Temporal databaseTemporal database
Temporal database
 

Destacado

20 Tips for OpenSplice Newbies
20 Tips for OpenSplice Newbies20 Tips for OpenSplice Newbies
20 Tips for OpenSplice NewbiesAngelo Corsaro
 
Tuning and Troubleshooting OpenSplice DDS Applications
Tuning and Troubleshooting OpenSplice DDS ApplicationsTuning and Troubleshooting OpenSplice DDS Applications
Tuning and Troubleshooting OpenSplice DDS ApplicationsAngelo Corsaro
 
Classical Distributed Algorithms with DDS
Classical Distributed Algorithms with DDSClassical Distributed Algorithms with DDS
Classical Distributed Algorithms with DDSAngelo Corsaro
 
Stream Processing with DDS and CEP
Stream Processing with  DDS and CEPStream Processing with  DDS and CEP
Stream Processing with DDS and CEPAngelo Corsaro
 
Vortex Tutorial -- Part I
Vortex Tutorial -- Part IVortex Tutorial -- Part I
Vortex Tutorial -- Part IAngelo Corsaro
 
Desktop, Embedded and Mobile Apps with Vortex Café
Desktop, Embedded and Mobile Apps with Vortex CaféDesktop, Embedded and Mobile Apps with Vortex Café
Desktop, Embedded and Mobile Apps with Vortex CaféAngelo Corsaro
 
Vortex Tutorial Part II
Vortex Tutorial Part IIVortex Tutorial Part II
Vortex Tutorial Part IIAngelo Corsaro
 
Getting Started with OpenSplice DDS Community Ed.
Getting Started with OpenSplice DDS Community Ed.Getting Started with OpenSplice DDS Community Ed.
Getting Started with OpenSplice DDS Community Ed.Angelo Corsaro
 
Connected Mobile and Web Applications with Vortex
Connected Mobile and Web Applications with VortexConnected Mobile and Web Applications with Vortex
Connected Mobile and Web Applications with VortexAngelo Corsaro
 
Building Real-Time Web Applications with Vortex-Web
Building Real-Time Web Applications with Vortex-WebBuilding Real-Time Web Applications with Vortex-Web
Building Real-Time Web Applications with Vortex-WebAngelo Corsaro
 
Advanced OpenSplice Programming - Part II
Advanced OpenSplice Programming - Part IIAdvanced OpenSplice Programming - Part II
Advanced OpenSplice Programming - Part IIAngelo Corsaro
 
Getting Started with Vortex
Getting Started with VortexGetting Started with Vortex
Getting Started with VortexAngelo Corsaro
 
Building Reactive Applications with DDS
Building Reactive Applications with DDSBuilding Reactive Applications with DDS
Building Reactive Applications with DDSAngelo Corsaro
 
Introducing Vortex Lite
Introducing Vortex LiteIntroducing Vortex Lite
Introducing Vortex LiteAngelo Corsaro
 
Building and Scaling Internet of Things Applications with Vortex Cloud
Building and Scaling Internet of Things Applications with Vortex CloudBuilding and Scaling Internet of Things Applications with Vortex Cloud
Building and Scaling Internet of Things Applications with Vortex CloudAngelo Corsaro
 
Plan estratgicoparalaspersonasconte aysusfamilias (1)
Plan estratgicoparalaspersonasconte aysusfamilias (1)Plan estratgicoparalaspersonasconte aysusfamilias (1)
Plan estratgicoparalaspersonasconte aysusfamilias (1)Pepe Jara Cueva
 
獨立媒體六四專輯
獨立媒體六四專輯獨立媒體六四專輯
獨立媒體六四專輯oiwan
 
Archydro
ArchydroArchydro
Archydroabkhiz
 

Destacado (20)

20 Tips for OpenSplice Newbies
20 Tips for OpenSplice Newbies20 Tips for OpenSplice Newbies
20 Tips for OpenSplice Newbies
 
Tuning and Troubleshooting OpenSplice DDS Applications
Tuning and Troubleshooting OpenSplice DDS ApplicationsTuning and Troubleshooting OpenSplice DDS Applications
Tuning and Troubleshooting OpenSplice DDS Applications
 
Classical Distributed Algorithms with DDS
Classical Distributed Algorithms with DDSClassical Distributed Algorithms with DDS
Classical Distributed Algorithms with DDS
 
Stream Processing with DDS and CEP
Stream Processing with  DDS and CEPStream Processing with  DDS and CEP
Stream Processing with DDS and CEP
 
Vortex Tutorial -- Part I
Vortex Tutorial -- Part IVortex Tutorial -- Part I
Vortex Tutorial -- Part I
 
Desktop, Embedded and Mobile Apps with Vortex Café
Desktop, Embedded and Mobile Apps with Vortex CaféDesktop, Embedded and Mobile Apps with Vortex Café
Desktop, Embedded and Mobile Apps with Vortex Café
 
Vortex Tutorial Part II
Vortex Tutorial Part IIVortex Tutorial Part II
Vortex Tutorial Part II
 
Getting Started with OpenSplice DDS Community Ed.
Getting Started with OpenSplice DDS Community Ed.Getting Started with OpenSplice DDS Community Ed.
Getting Started with OpenSplice DDS Community Ed.
 
Connected Mobile and Web Applications with Vortex
Connected Mobile and Web Applications with VortexConnected Mobile and Web Applications with Vortex
Connected Mobile and Web Applications with Vortex
 
Building Real-Time Web Applications with Vortex-Web
Building Real-Time Web Applications with Vortex-WebBuilding Real-Time Web Applications with Vortex-Web
Building Real-Time Web Applications with Vortex-Web
 
Advanced OpenSplice Programming - Part II
Advanced OpenSplice Programming - Part IIAdvanced OpenSplice Programming - Part II
Advanced OpenSplice Programming - Part II
 
OpenSplice DDS v6
OpenSplice DDS v6OpenSplice DDS v6
OpenSplice DDS v6
 
Getting Started with Vortex
Getting Started with VortexGetting Started with Vortex
Getting Started with Vortex
 
Building Reactive Applications with DDS
Building Reactive Applications with DDSBuilding Reactive Applications with DDS
Building Reactive Applications with DDS
 
Introducing Vortex Lite
Introducing Vortex LiteIntroducing Vortex Lite
Introducing Vortex Lite
 
Building and Scaling Internet of Things Applications with Vortex Cloud
Building and Scaling Internet of Things Applications with Vortex CloudBuilding and Scaling Internet of Things Applications with Vortex Cloud
Building and Scaling Internet of Things Applications with Vortex Cloud
 
Plan estratgicoparalaspersonasconte aysusfamilias (1)
Plan estratgicoparalaspersonasconte aysusfamilias (1)Plan estratgicoparalaspersonasconte aysusfamilias (1)
Plan estratgicoparalaspersonasconte aysusfamilias (1)
 
獨立媒體六四專輯
獨立媒體六四專輯獨立媒體六四專輯
獨立媒體六四專輯
 
Wfwp Europe2008.1ppt
Wfwp Europe2008.1pptWfwp Europe2008.1ppt
Wfwp Europe2008.1ppt
 
Archydro
ArchydroArchydro
Archydro
 

Similar a Advanced OpenSplice Programming - Part I

Interoperable, Extensible and Efficient System Architectures
Interoperable, Extensible and Efficient System ArchitecturesInteroperable, Extensible and Efficient System Architectures
Interoperable, Extensible and Efficient System ArchitecturesAngelo Corsaro
 
Got Big Data? Get OpenSplice!
Got Big Data? Get OpenSplice!Got Big Data? Get OpenSplice!
Got Big Data? Get OpenSplice!Angelo Corsaro
 
Distributed Simulations with DDS and HLA
Distributed Simulations with DDS and HLADistributed Simulations with DDS and HLA
Distributed Simulations with DDS and HLAAngelo Corsaro
 
DDS + Android = OpenSplice Mobile
DDS + Android = OpenSplice MobileDDS + Android = OpenSplice Mobile
DDS + Android = OpenSplice MobileAngelo Corsaro
 
DDS-PSM-Cxx and simd-cxx
DDS-PSM-Cxx and simd-cxxDDS-PSM-Cxx and simd-cxx
DDS-PSM-Cxx and simd-cxxAngelo Corsaro
 
DDS in SCADA, Utilities, Smart Grid and Smart Cities
DDS in SCADA, Utilities, Smart Grid and Smart CitiesDDS in SCADA, Utilities, Smart Grid and Smart Cities
DDS in SCADA, Utilities, Smart Grid and Smart CitiesAngelo Corsaro
 
Tweeting with OpenSplice DDS
Tweeting with OpenSplice DDSTweeting with OpenSplice DDS
Tweeting with OpenSplice DDSAngelo Corsaro
 
The OpenSplice DDS Revolution -- Episode II
The OpenSplice DDS Revolution -- Episode IIThe OpenSplice DDS Revolution -- Episode II
The OpenSplice DDS Revolution -- Episode IIAngelo Corsaro
 
Data Sharing in Extremely Resource Constrained Envionrments
Data Sharing in Extremely Resource Constrained EnvionrmentsData Sharing in Extremely Resource Constrained Envionrments
Data Sharing in Extremely Resource Constrained EnvionrmentsAngelo Corsaro
 
JEEConf 2017 - In-Memory Data Streams With Hazelcast Jet
JEEConf 2017 - In-Memory Data Streams With Hazelcast JetJEEConf 2017 - In-Memory Data Streams With Hazelcast Jet
JEEConf 2017 - In-Memory Data Streams With Hazelcast JetNeil Stevenson
 
Cyclone DDS: Sharing Data in the IoT Age
Cyclone DDS: Sharing Data in the IoT AgeCyclone DDS: Sharing Data in the IoT Age
Cyclone DDS: Sharing Data in the IoT AgeAngelo Corsaro
 
DME for ZYNQ FPGA - A new way to design your SOC
DME for ZYNQ FPGA - A new way to design your SOCDME for ZYNQ FPGA - A new way to design your SOC
DME for ZYNQ FPGA - A new way to design your SOCBengt Edlund
 
Cyclone DDS Unleashed: The Origins
Cyclone DDS Unleashed: The OriginsCyclone DDS Unleashed: The Origins
Cyclone DDS Unleashed: The OriginsZettaScaleTechnology
 
Access control in decentralized online social networks applying a policy hidi...
Access control in decentralized online social networks applying a policy hidi...Access control in decentralized online social networks applying a policy hidi...
Access control in decentralized online social networks applying a policy hidi...IGEEKS TECHNOLOGIES
 
DataXDay - The wonders of deep learning: how to leverage it for natural langu...
DataXDay - The wonders of deep learning: how to leverage it for natural langu...DataXDay - The wonders of deep learning: how to leverage it for natural langu...
DataXDay - The wonders of deep learning: how to leverage it for natural langu...DataXDay Conference by Xebia
 

Similar a Advanced OpenSplice Programming - Part I (20)

Interoperable, Extensible and Efficient System Architectures
Interoperable, Extensible and Efficient System ArchitecturesInteroperable, Extensible and Efficient System Architectures
Interoperable, Extensible and Efficient System Architectures
 
DDS Made Simple
DDS Made SimpleDDS Made Simple
DDS Made Simple
 
DDS Everywhere
DDS EverywhereDDS Everywhere
DDS Everywhere
 
Got Big Data? Get OpenSplice!
Got Big Data? Get OpenSplice!Got Big Data? Get OpenSplice!
Got Big Data? Get OpenSplice!
 
Distributed Simulations with DDS and HLA
Distributed Simulations with DDS and HLADistributed Simulations with DDS and HLA
Distributed Simulations with DDS and HLA
 
DDS + Android = OpenSplice Mobile
DDS + Android = OpenSplice MobileDDS + Android = OpenSplice Mobile
DDS + Android = OpenSplice Mobile
 
DDS-PSM-Cxx and simd-cxx
DDS-PSM-Cxx and simd-cxxDDS-PSM-Cxx and simd-cxx
DDS-PSM-Cxx and simd-cxx
 
DDS in SCADA, Utilities, Smart Grid and Smart Cities
DDS in SCADA, Utilities, Smart Grid and Smart CitiesDDS in SCADA, Utilities, Smart Grid and Smart Cities
DDS in SCADA, Utilities, Smart Grid and Smart Cities
 
Tweeting with OpenSplice DDS
Tweeting with OpenSplice DDSTweeting with OpenSplice DDS
Tweeting with OpenSplice DDS
 
Cloudand Xchange
Cloudand XchangeCloudand Xchange
Cloudand Xchange
 
The OpenSplice DDS Revolution -- Episode II
The OpenSplice DDS Revolution -- Episode IIThe OpenSplice DDS Revolution -- Episode II
The OpenSplice DDS Revolution -- Episode II
 
Data Sharing in Extremely Resource Constrained Envionrments
Data Sharing in Extremely Resource Constrained EnvionrmentsData Sharing in Extremely Resource Constrained Envionrments
Data Sharing in Extremely Resource Constrained Envionrments
 
JEEConf 2017 - In-Memory Data Streams With Hazelcast Jet
JEEConf 2017 - In-Memory Data Streams With Hazelcast JetJEEConf 2017 - In-Memory Data Streams With Hazelcast Jet
JEEConf 2017 - In-Memory Data Streams With Hazelcast Jet
 
Cyclone DDS: Sharing Data in the IoT Age
Cyclone DDS: Sharing Data in the IoT AgeCyclone DDS: Sharing Data in the IoT Age
Cyclone DDS: Sharing Data in the IoT Age
 
SimD
SimDSimD
SimD
 
DME for ZYNQ FPGA - A new way to design your SOC
DME for ZYNQ FPGA - A new way to design your SOCDME for ZYNQ FPGA - A new way to design your SOC
DME for ZYNQ FPGA - A new way to design your SOC
 
Cyclone DDS Unleashed: The Origins
Cyclone DDS Unleashed: The OriginsCyclone DDS Unleashed: The Origins
Cyclone DDS Unleashed: The Origins
 
Access control in decentralized online social networks applying a policy hidi...
Access control in decentralized online social networks applying a policy hidi...Access control in decentralized online social networks applying a policy hidi...
Access control in decentralized online social networks applying a policy hidi...
 
Type-safe DSLs
Type-safe DSLsType-safe DSLs
Type-safe DSLs
 
DataXDay - The wonders of deep learning: how to leverage it for natural langu...
DataXDay - The wonders of deep learning: how to leverage it for natural langu...DataXDay - The wonders of deep learning: how to leverage it for natural langu...
DataXDay - The wonders of deep learning: how to leverage it for natural langu...
 

Más de Angelo Corsaro

zenoh: The Edge Data Fabric
zenoh: The Edge Data Fabriczenoh: The Edge Data Fabric
zenoh: The Edge Data FabricAngelo Corsaro
 
Data Decentralisation: Efficiency, Privacy and Fair Monetisation
Data Decentralisation: Efficiency, Privacy and Fair MonetisationData Decentralisation: Efficiency, Privacy and Fair Monetisation
Data Decentralisation: Efficiency, Privacy and Fair MonetisationAngelo Corsaro
 
zenoh: zero overhead pub/sub store/query compute
zenoh: zero overhead pub/sub store/query computezenoh: zero overhead pub/sub store/query compute
zenoh: zero overhead pub/sub store/query computeAngelo Corsaro
 
zenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocolzenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocolAngelo Corsaro
 
zenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocolzenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocolAngelo Corsaro
 
Breaking the Edge -- A Journey Through Cloud, Edge and Fog Computing
Breaking the Edge -- A Journey Through Cloud, Edge and Fog ComputingBreaking the Edge -- A Journey Through Cloud, Edge and Fog Computing
Breaking the Edge -- A Journey Through Cloud, Edge and Fog ComputingAngelo Corsaro
 
fog05: The Fog Computing Infrastructure
fog05: The Fog Computing Infrastructurefog05: The Fog Computing Infrastructure
fog05: The Fog Computing InfrastructureAngelo Corsaro
 
fog05: The Fog Computing Platform
fog05: The Fog Computing Platformfog05: The Fog Computing Platform
fog05: The Fog Computing PlatformAngelo Corsaro
 
Programming in Scala - Lecture Four
Programming in Scala - Lecture FourProgramming in Scala - Lecture Four
Programming in Scala - Lecture FourAngelo Corsaro
 
Programming in Scala - Lecture Three
Programming in Scala - Lecture ThreeProgramming in Scala - Lecture Three
Programming in Scala - Lecture ThreeAngelo Corsaro
 
Programming in Scala - Lecture Two
Programming in Scala - Lecture TwoProgramming in Scala - Lecture Two
Programming in Scala - Lecture TwoAngelo Corsaro
 
Programming in Scala - Lecture One
Programming in Scala - Lecture OneProgramming in Scala - Lecture One
Programming in Scala - Lecture OneAngelo Corsaro
 
The DDS Security Standard
The DDS Security StandardThe DDS Security Standard
The DDS Security StandardAngelo Corsaro
 
RUSTing -- Partially Ordered Rust Programming Ruminations
RUSTing -- Partially Ordered Rust Programming RuminationsRUSTing -- Partially Ordered Rust Programming Ruminations
RUSTing -- Partially Ordered Rust Programming RuminationsAngelo Corsaro
 
Vortex II -- The Industrial IoT Connectivity Standard
Vortex II -- The  Industrial IoT  Connectivity StandardVortex II -- The  Industrial IoT  Connectivity Standard
Vortex II -- The Industrial IoT Connectivity StandardAngelo Corsaro
 

Más de Angelo Corsaro (20)

Zenoh: The Genesis
Zenoh: The GenesisZenoh: The Genesis
Zenoh: The Genesis
 
zenoh: The Edge Data Fabric
zenoh: The Edge Data Fabriczenoh: The Edge Data Fabric
zenoh: The Edge Data Fabric
 
Zenoh Tutorial
Zenoh TutorialZenoh Tutorial
Zenoh Tutorial
 
Data Decentralisation: Efficiency, Privacy and Fair Monetisation
Data Decentralisation: Efficiency, Privacy and Fair MonetisationData Decentralisation: Efficiency, Privacy and Fair Monetisation
Data Decentralisation: Efficiency, Privacy and Fair Monetisation
 
zenoh: zero overhead pub/sub store/query compute
zenoh: zero overhead pub/sub store/query computezenoh: zero overhead pub/sub store/query compute
zenoh: zero overhead pub/sub store/query compute
 
zenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocolzenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocol
 
zenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocolzenoh -- the ZEro Network OverHead protocol
zenoh -- the ZEro Network OverHead protocol
 
Breaking the Edge -- A Journey Through Cloud, Edge and Fog Computing
Breaking the Edge -- A Journey Through Cloud, Edge and Fog ComputingBreaking the Edge -- A Journey Through Cloud, Edge and Fog Computing
Breaking the Edge -- A Journey Through Cloud, Edge and Fog Computing
 
Eastern Sicily
Eastern SicilyEastern Sicily
Eastern Sicily
 
fog05: The Fog Computing Infrastructure
fog05: The Fog Computing Infrastructurefog05: The Fog Computing Infrastructure
fog05: The Fog Computing Infrastructure
 
fog05: The Fog Computing Platform
fog05: The Fog Computing Platformfog05: The Fog Computing Platform
fog05: The Fog Computing Platform
 
Programming in Scala - Lecture Four
Programming in Scala - Lecture FourProgramming in Scala - Lecture Four
Programming in Scala - Lecture Four
 
Programming in Scala - Lecture Three
Programming in Scala - Lecture ThreeProgramming in Scala - Lecture Three
Programming in Scala - Lecture Three
 
Programming in Scala - Lecture Two
Programming in Scala - Lecture TwoProgramming in Scala - Lecture Two
Programming in Scala - Lecture Two
 
Programming in Scala - Lecture One
Programming in Scala - Lecture OneProgramming in Scala - Lecture One
Programming in Scala - Lecture One
 
The DDS Security Standard
The DDS Security StandardThe DDS Security Standard
The DDS Security Standard
 
RUSTing -- Partially Ordered Rust Programming Ruminations
RUSTing -- Partially Ordered Rust Programming RuminationsRUSTing -- Partially Ordered Rust Programming Ruminations
RUSTing -- Partially Ordered Rust Programming Ruminations
 
Vortex II -- The Industrial IoT Connectivity Standard
Vortex II -- The  Industrial IoT  Connectivity StandardVortex II -- The  Industrial IoT  Connectivity Standard
Vortex II -- The Industrial IoT Connectivity Standard
 
Fog Computing Defined
Fog Computing DefinedFog Computing Defined
Fog Computing Defined
 
DDS In Action Part II
DDS In Action Part IIDDS In Action Part II
DDS In Action Part II
 

Último

Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 

Último (20)

Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 

Advanced OpenSplice Programming - Part I

  • 1. Advanced OpenSplice DDS Programming - Part I - OpenSplice DDS Angelo CORSARO, Ph.D. Chief Technology Officer OMG DDS Sig Co-Chair PrismTech angelo.corsaro@prismtech.com
  • 2. Before we get into technical details let’s try to answer two questions: Copyright  2011,  PrismTech  –    All  Rights  Reserved. 1. What does OpenSplice DDS do? 2. What kind of applications are using it? OpenSplice DDS
  • 3. OpenSplice DDS enables seamless, loosely- Copyright  2011,  PrismTech  –    All  Rights  Reserved. coupled, timely, scalable and dependable data sharing between distributed applications OpenSplice DDS and network connected devices.
  • 4. Some Use Cases Copyright  2011,  PrismTech  –    All  Rights  Reserved. OpenSplice DDS Integrated Modular Vetronics Training & Simulation Systems Naval Combat Systems Air Traffic Control & Management Unmanned Air Vehicles Aerospace Applications
  • 5. Some Use Cases Copyright  2011,  PrismTech  –    All  Rights  Reserved. OpenSplice DDS Agricultural Vehicle Systems Large Scale SCADA Systems Smart Cities Train Control Systems Complex Medical Devices Big Data (In-Memory) Analytics
  • 6. A Fresh Look at OpenSplice OpenSplice DDS
  • 7. From Local OpenSplice DDS to Distributed Data
  • 8. Data in Programming Languages Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ Statically Typed Programming Languages provide mechanisms to declare a variable for given type as well as defining new types OpenSplice DDS    int  x;      class  Rational  {  ...  }   ☐ Scoping rules are then used to define what values and types are accessible at any given point in a program text
  • 9. “Local” Data ☐ Consider the Following code fragment below in an imperative programming language: Copyright  2011,  PrismTech  –    All  Rights  Reserved. State 1 { 1  {  } 2    int  x; 2  {  int  x  } 3    x  =  7; 3  {  x  =  7  } OpenSplice DDS 4    { 4  {  x  =  7,  {  }  } 5        int  y; 5  {  x  =  7,  {  int  y  }  } 6        y  =  18; 6  {  x  =  7,  {  y  =  18  }  } 7        double  z; 7  {  x  =  7,  {  y  =  18,  double  z  }  } 8        z  =  3.141593 8  {  x  =  7,  {  y  =  18,  z  =  3.1416  }  } 9        x  =  x  -­‐  4; 9  {  x  =  3,  {  y  =  2  }  } 10        y  =  x  +  y; 10  {  x  =  3,  {  y  =  21  }  } 11        z  =  2  *  z  *  y; 11  {  x  =  3,  {  y  =  21,  z  =  131.9472  }  } 12    } 12  {  x  =  3,  {    }} 13 } 13  {  }
  • 10. “Local” Data ☐ One final consideration to do is that variables in a programming language are in essence alias to a memory location Copyright  2011,  PrismTech  –    All  Rights  Reserved. int  x; int  y; OpenSplice DDS ...
  • 11. Distributed Data Extending the elegant model provided by programming Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ languages to distributed systems has been and still is a quite popular research topic OpenSplice DDS ☐ Historically the solutions to the distributed data problem where divided into those based on Distributed Shared Memory and those based on Message Passing ☐ OpenSplice DDS provide a new interesting way of addressing this problem. Let’s see...
  • 13. Distributed Data in OpenSplice ☐ OpenSplice DDS provides the abstraction Copyright  2011,  PrismTech  –    All  Rights  Reserved. of an “Active” Global Data Space ☐ The Global Data Space is fully distributed TopicA and does not suffer Single Point of Failure TopicE OpenSplice DDS issues TopicB ... TopicD ☐ Applications can autonomously join and TopicC leave this data space as well as declare new “Data Types” OpenSplice DDS Global Data Space ☐ In OpenSplice, “data types” are called Topics
  • 14. Global Data Space ☐ The Global Data Space is actually called “Domain” in OpenSplice DDS Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ Domains are identified by integer. An application can join a domain by creating a domain participant as follows: TopicA TopicE OpenSplice DDS //  Create  a  Topic ... int  domain_id  =  18; TopicB TopicD auto  dp  =  DomainParticipant(domain_id); TopicC ☐ A Domain defines a top-level scope thus the content of a domain is not accessible from OpenSplice DDS Global Data Space another domain ☐ Finally an application can join multiple domains by creating one domain participant per-domain
  • 15. Topics ☐ A Topic is defined by means of a “Circle”, Square”, “Triangle” (name, type, qos) tuple, where Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ name: identifies the topic within Name OpenSplice’s Global Data Space Topic ☐ type: is the programming language Typ S OpenSplice DDS DURABILITY, Qo type associated with the topic. This e DEADLINE, type can be defined in IDL, XML, and ShapeType PRIORITY, Java. Types are extensible and … evolvable ☐ qos: is a collection of policies that struct ShapeType { string color; control non-functional properties of long x; this topic, such as its durability, long long y; size; reliability, etc. };
  • 16. Defining a Topic Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ In code, if we wanted to define the Square topic we would do (with the new DDS-PSM-Cxx v1.0 API): // Create a Topic OpenSplice DDS auto dp = DomainParticipant(18); auto topic = Topic<ShapeType>(dp, “Square”, dp.default_topic_qos()); // Or equivalently and more concisely: auto topic = Topic<ShapeType>(dp, “Square”); ☐ The effect of this code is to define a topic called “Square” with type ShapeType and default QoS within the OpenSplice Global Data Space
  • 17. Looking with the Spyglass domain 18 Copyright  2011,  PrismTech  –    All  Rights  Reserved. Topic Square struct&ShapeType&{ &&string&&&color;&&&&&& &&long&&&x;&&& &&long&&&y; OpenSplice DDS &&long&&&size; }; Policies auto topic = Topic<ShapeType>(dp, “Square”);
  • 18. Topics Scope ☐ Topic definitions are (somewhat) equivalent to type definitions in a programming Copyright  2011,  PrismTech  –    All  Rights  Reserved. language. In the sense that they define a new, generalized, type to be used within the global data space ☐ The scope of a Topic definition is the entire Domain, thus one could say that there is only one level of scoping. To make the parallel with Java, one could say OpenSplice DDS that it is as if Topics where defined in a namespace named after the domain-id domain0  {TopicA,  TopicB,  ...} domain1  {Topic1,  Topic2,  ...} ☐ As a consequence topic definitions in one domain are not visible from a different domain
  • 19. If Topic are Types what are Variables? ☐ As described earlier a Topic definition can be thought as a Type Copyright  2011,  PrismTech  –    All  Rights  Reserved. definition in a programming language ☐ In a statically typed programming language (e.g. Java), given a type Foo I can define a variable of type Foo as: OpenSplice DDS    Foo  x;   ☐ Then I can initialize it as: x  =  new  Foo(...);   ☐ Then I can mutate it, by: x.setBar(...); ☐ How are instance of a Topic defined?
  • 20. DataWriter Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ OpenSplice DDS uses DataWriters to declare and write instances of a Topic ☐ A DataWriter for our Square topic can be defined as follows: OpenSplice DDS // Create a Publisher auto pub = Publisher(dp); // Create a DataWriter auto dw = DataWriter<ShapeType>(pub, topic); // Write data dw.write(ShapeType(“RED”,11,77,99));
  • 21. Looking with the Spyglass Copyright  2011,  PrismTech  –    All  Rights  Reserved. Topic Square struct&ShapeType&{ &&string&&&color;&&&&&& &&long&&&x;&&& &&long&&&y; OpenSplice DDS dw &&long&&&size; }; Policies color x y size auto dw = DataWriter<ShapeType>(pub, topic);
  • 22. Looking with the Spyglass Copyright  2011,  PrismTech  –    All  Rights  Reserved. Topic Square struct&ShapeType&{ &&string&&&color;&&&&&& &&long&&&x;&&& &&long&&&y; OpenSplice DDS dw &&long&&&size; }; Policies color x y size "RED" 11 77 99 dw.write(ShapeType(“RED”,11,77,99));
  • 23. An Experiment... ☐ What does the following code do? Copyright  2011,  PrismTech  –    All  Rights  Reserved. // Create a Publisher auto pub = Publisher(dp); // Create DataWriters auto dw1 = DataWriter<ShapeType>(pub, topic); OpenSplice DDS auto dw2 = DataWriter<ShapeType>(pub, topic); // Write Data dw1.write(ShapeType(“RED”,10,20,30)); dw2.write(ShapeType(“BLUE”,30,20, 10));
  • 24. Looking with the Spyglass Copyright  2011,  PrismTech  –    All  Rights  Reserved. Topic Square struct&ShapeType&{ &&string&&&color;&&&&&& &&long&&&x;&&& &&long&&&y; OpenSplice DDS &&long&&&size; }; dw1 Policies Data Writers for the same topic color x y size are aliased to the same variable! dw2 auto dw1 = DataWriter<ShapeType>(pub, topic); auto dw2 = DataWriter<ShapeType>(pub, topic);
  • 25. Looking with the Spyglass Copyright  2011,  PrismTech  –    All  Rights  Reserved. Topic Square struct&ShapeType&{ &&string&&&color;&&&&&& &&long&&&x;&&& &&long&&&y; OpenSplice DDS &&long&&&size; }; dw1 Policies color x y size RED 10 20 30 dw2 dw1.write(ShapeType(“RED”,10,20,30));
  • 26. Looking with the Spyglass Copyright  2011,  PrismTech  –    All  Rights  Reserved. Topic Square struct&ShapeType&{ &&string&&&color;&&&&&& &&long&&&x;&&& &&long&&&y; OpenSplice DDS &&long&&&size; }; dw1 Policies color x y size BLUE 30 20 10 dw2 dw2.write(ShapeType(“BLUE”,30,20, 10));
  • 27. Topic Instances ☐ Topic type can identify an arbitrary number of attributes as defining the Copyright  2011,  PrismTech  –    All  Rights  Reserved. topic key ☐ In this case, each unique key value defines a topic instance ☐ Example: OpenSplice DDS struct ShapeType { @Key long color; long x; long y; long size; };
  • 28. Let’s Experiment... ☐ What does the following code do? Copyright  2011,  PrismTech  –    All  Rights  Reserved. // Create a Publisher auto pub = Publisher(dp); // Create DataWriters OpenSplice DDS auto dw = DataWriter<ShapeType>(pub, topic); // Write Data dw.write(ShapeType(“RED”,10,20,30)); dw.write(ShapeType(“BLUE”,30,20,10));
  • 29. Looking with the Spyglass Copyright  2011,  PrismTech  –    All  Rights  Reserved. Topic Square struct&ShapeType&{ &&string&&&color;&&&&&& &&long&&&x;&&& &&long&&&y; OpenSplice DDS dw &&long&&&size; }; Policies color x y size RED 10 20 30 dw.write(ShapeType(“RED”,10,20,30));
  • 30. Looking with the Spyglass Copyright  2011,  PrismTech  –    All  Rights  Reserved. Topic Square struct&ShapeType&{ &&string&&&color;&&&&&& &&long&&&x;&&& &&long&&&y; OpenSplice DDS dw &&long&&&size; }; Policies color x y size RED 10 20 30 BLUE 30 20 10 dw.write(ShapeType(“BLUE”,30,20,10));
  • 31. LongVariable Example ☐ The “distributed” version of the following code: Copyright  2011,  PrismTech  –    All  Rights  Reserved. int  x; int  y; x  =  10; y  =  20; OpenSplice DDS Topic Type ☐ Becomes: // Create a Publisher struct LongVariable { auto lvt = Topic<LongVariable>(dp, “TLongVariable”); @Key string name; // Create DataWriters long value; auto dw = DataWriter<LongVariable>(pub, topic); }; // Write Data dw.write(LongVariable(“x”,10)); dw.write(LongVariable(“y”,20));
  • 32. Looking with the Spyglass Copyright  2011,  PrismTech  –    All  Rights  Reserved. Topic TLongValue struct LongVariable { @Key string name; long value; OpenSplice DDS dw }; Policies name value x 10 y 20
  • 33. DataReader Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ OpenSplice DDS uses DataReaders to read instances of a Topic ☐ A DataReader for our Square topic can be defined as follows: OpenSplice DDS // Create a Subscriber auto sub = Subscriber(dp); // Create a DataWriter auto dr = DataReader<ShapeType>(sub, topic); // Read data auto data = dr.read(); ☐ The read operation will read by default all instance values. Special selector operation are available to pick a specific instance. More later
  • 34. DataReader/DataWriter Matching ☐ DataWriters and DataReaders Copyright  2011,  PrismTech  –    All  Rights  Reserved. are automatically and dynamically matched by the Data Reader DDS Dynamic Discovery Data Writer OpenSplice DDS Data Reader ☐ A rich set of QoS Policies Data Writer TopicA TopicD allows to control existential, TopicB Data Reader temporal, and spatial Data Writer TopicC ... properties of data and Data Data impacts DataReader/ Writer Reader DataWriter matching DDS Global Data Space
  • 36. Publishers / Subscribers Domain (e.g. Domain 123) Domain Participant Copyright  2011,  PrismTech  –    All  Rights  Reserved. Topic Partition (e.g. “Telemetry”, “Shapes”, ) T1 Publisher T1 T3 Subscriber Tx OpenSplice DDS Topic Instances/Samples Ty Tb Ta DataWrter DataReader Tc Publishers and Subscribers in DDS play two roles: ☐ Coordinate actions across DataReaders/DataWriters ☐ e.g. Atomic writes across data-writers ☐ Control access to DDS partitions, a mechanism provided by DDS to further
  • 37. DDS Partitions Domain Partitions DDS Publishers and Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ Subscribers can specify a M:0:0 M:0:1 M:0:2 list of regular expressions representing the partitions OpenSplice DDS to join M:1:0 M:1:1 M:1:2 ☐ Actual partition can be any string, but some M:2:0 M:2:1 M:2:2 structure can be given in order mimic hierarchy
  • 38. DDS Partitions Matching Domain Partitions Copyright  2011,  PrismTech  –    All  Rights  Reserved. M:0:0 M:0:1 M:0:2 M:0:* OpenSplice DDS M:1:0 M:1:1 M:1:2 M:2:0 M:2:1 M:2:2
  • 39. DDS Partitions Matching Domain Partitions Copyright  2011,  PrismTech  –    All  Rights  Reserved. M:0:0 M:0:1 M:0:2 OpenSplice DDS M:1:0 M:1:1 M:1:2 M:2:0 M:2:1 M:2:2 M:*:2
  • 40. DDS Partitions Matching Domain Partitions Copyright  2011,  PrismTech  –    All  Rights  Reserved. M:0:0 M:0:1 M:0:2 OpenSplice DDS M:1:0 M:1:1 M:1:2 M:2:0 M:2:1 M:2:2 M:0:0, M:1:1, M:2:2
  • 41. Anatomy of a DDS Application OpenSplice DDS
  • 42. Anatomy of a DDS Application [DDS C++ API 2010] Domain Domain Copyright  2011,  PrismTech  –    All  Rights  Reserved. auto dp = DomainParticipant(domainId); Participant Session // Create a Topic Publisher Topic Subscriber OpenSplice DDS auto topic = Topic<ShapeType>(dp, “Circle”); // Create a Publisher / Subscriber auto pub = Publisher(dp); auto sub = Subscriber(dp); Reader/Writers for User Defined for Types DataWriter DataReader // Create a DataWriter/DataWriter auto writer = DataWriter<ShapeType>(pub, topic); Reader/Writer for auto reader = DataReader<ShapeType>(sub, topic); application defined Topic Types
  • 43. Anatomy of a DDS Application [DDS C++ API 2010] Domain Domain Copyright  2011,  PrismTech  –    All  Rights  Reserved. auto dp = DomainParticipant(domainId); Participant Session // Create a Topic Publisher Topic Subscriber OpenSplice DDS auto topic = Topic<ShapeType>(dp, “Circle”); // Create a Publisher / Subscriber auto pub = Publisher(dp); auto sub = Subscriber(dp); Reader/Writers for User Defined for Types DataWriter DataReader // Write data writer.write(ShapeType(“RED”, 131, 107, 89)); Reader/Writer for // But you can also write like this... writer << ShapeType(“RED”, 131, 107, 89); application defined Topic Types // Read new data (loaned) auto data = reader.read();
  • 45. Reader/Writer Caches Application Application Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. DataWriter DataReader DataReader ... OpenSplice DDS DataWriter Cache DataReader Cache DataReader Cache Network
  • 46. Reader/Writer Caches write( ) Application Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. DataWriter DataReader DataReader ... OpenSplice DDS DataWriter Cache DataReader Cache DataReader Cache Network
  • 47. Reader/Writer Caches Application Application Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. DataWriter DataReader DataReader ... OpenSplice DDS DataWriter Cache DataReader Cache DataReader Cache Topic Instance Network
  • 48. Reader/Writer Caches Application Application Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. DataWriter DataReader DataReader ... OpenSplice DDS DataWriter Cache DataReader Cache DataReader Cache Network
  • 49. Reader/Writer Caches Application Application Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. DataWriter DataReader DataReader ... OpenSplice DDS DataWriter Cache DataReader Cache DataReader Cache Topic Instance Topic Instance Network
  • 50. Reader/Writer Caches write( ) Application Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. DataWriter DataReader DataReader ... OpenSplice DDS DataWriter Cache DataReader Cache DataReader Cache Network
  • 51. Reader/Writer Caches Application Application Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. DataWriter DataReader DataReader ... OpenSplice DDS DataWriter Cache DataReader Cache DataReader Cache Writer History Network
  • 52. Reader/Writer Caches Application Application Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. DataWriter DataReader DataReader ... OpenSplice DDS DataWriter Cache DataReader Cache DataReader Cache Network
  • 53. Reader/Writer Caches Application Application Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. DataWriter DataReader DataReader ... OpenSplice DDS DataWriter Cache DataReader Cache DataReader Cache Reader History Reader History Network
  • 54. Reader/Writer Caches write( ) Application Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. DataWriter DataReader DataReader ... OpenSplice DDS DataWriter Cache DataReader Cache DataReader Cache Network
  • 55. Reader/Writer Caches Application Application Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. DataWriter DataReader DataReader ... OpenSplice DDS DataWriter Cache DataReader Cache DataReader Cache Network
  • 56. Reader/Writer Caches Application Application Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. DataWriter DataReader DataReader ... OpenSplice DDS DataWriter Cache DataReader Cache DataReader Cache Network
  • 57. Reader/Writer Caches Application Application Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. DataWriter DataReader DataReader ... OpenSplice DDS DataWriter Cache DataReader Cache DataReader Cache Network
  • 58. Reader/Writer Caches Application Application Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. DataWriter DataReader DataReader ... OpenSplice DDS DataWriter Cache DataReader Cache DataReader Cache QoS Policies ‣ History ‣ Destination Order Network ‣ Presentation ‣ Partition QoS Policies ‣ Time Based Filter ‣ Reliability ‣ Durability ‣ Ownership ‣ History ‣ Transport Priority ‣ Latency Budget ‣ Time Based Filter
  • 59. Writer Cache Properties ☐ An entry for each topic instance Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ Each cache entry might contain one or more samples, the number of DataWriter samples is controlled by the History QoS Policy OpenSplice DDS ... ☐ Depending on the setting of the Durability QoS Policy, the content of the cache may be made available DataWriter Cache to late joiners. The depth of the cache controls how many samples per instance will be delivered to late joiners
  • 60. Reader Cache Properties ☐ An entry for each topic instance Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ Each cache entry might contain one or more samples, the number of samples is controlled by the History QoS Policy DataReader ☐ History.KeepLast(n) keeps the last n samples OpenSplice DDS per instance ☐ History.KeepAll maintains all the samples, ... modulo resource constraints ☐ For a given instance: DataReader Cache ☐ Samples from the same writer are inserted in write-order ☐ Samples from multiple-writers are ordered using time-stamps (source or reception depending on configurable a QoS Policy)
  • 61. Eventual Consistency DDS caches provide eventual consistency semantics Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ ☐ This means that a read will see the effect of a preceding write eventually OpenSplice DDS ☐ Furthermore, given a data-writer that is currently matching N readers, we can think of DDS as providing eventual consistency with W=0 and R=1 ☐ W: the number of Acks expected in order to return from a write ☐ R: the number of sources from which a read access data
  • 63. Reader/Writer Caches Application Application Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. DataWriter DataReader DataReader ... OpenSplice DDS DataWriter Cache DataReader Cache DataReader Cache Network Assumptions: DataReader configured with history depth of 2 and DataWriter with default history depth of 1
  • 64. Reader/Writer Caches write( 1 ) Application Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. DataWriter DataReader DataReader ... OpenSplice DDS DataWriter Cache DataReader Cache DataReader Cache Network Assumptions: DataReader configured with history depth of 2 and DataWriter with default history depth of 1
  • 65. Reader/Writer Caches Application Application Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. DataWriter DataReader DataReader 1 ... OpenSplice DDS DataWriter Cache DataReader Cache DataReader Cache Network Assumptions: DataReader configured with history depth of 2 and DataWriter with default history depth of 1
  • 66. Reader/Writer Caches Application Application Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. DataWriter DataReader DataReader 1 ... OpenSplice DDS DataWriter Cache DataReader Cache DataReader Cache 1 Network Assumptions: DataReader configured with history depth of 2 and DataWriter with default history depth of 1
  • 67. Reader/Writer Caches Application Application Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. DataWriter DataReader DataReader 1 1 1 ... OpenSplice DDS DataWriter Cache DataReader Cache DataReader Cache Network Assumptions: DataReader configured with history depth of 2 and DataWriter with default history depth of 1
  • 68. Reader/Writer Caches write( 2 ) Application Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. DataWriter DataReader DataReader 1 1 1 ... OpenSplice DDS DataWriter Cache DataReader Cache DataReader Cache Network Assumptions: DataReader configured with history depth of 2 and DataWriter with default history depth of 1
  • 69. Reader/Writer Caches Application Application Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. DataWriter DataReader DataReader 2 1 1 ... OpenSplice DDS DataWriter Cache DataReader Cache DataReader Cache Network Assumptions: DataReader configured with history depth of 2 and DataWriter with default history depth of 1
  • 70. Reader/Writer Caches Application Application Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. DataWriter DataReader DataReader 2 1 1 ... OpenSplice DDS DataWriter Cache DataReader Cache DataReader Cache 2 Network Assumptions: DataReader configured with history depth of 2 and DataWriter with default history depth of 1
  • 71. Reader/Writer Caches Application Application Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. DataWriter DataReader DataReader 2 1 1 ... OpenSplice DDS 2 2 DataWriter Cache DataReader Cache DataReader Cache Network Assumptions: DataReader configured with history depth of 2 and DataWriter with default history depth of 1
  • 72. Reader/Writer Caches write( 3 ) Application Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. DataWriter DataReader DataReader 2 1 1 ... OpenSplice DDS 2 2 DataWriter Cache DataReader Cache DataReader Cache Network Assumptions: DataReader configured with history depth of 2 and DataWriter with default history depth of 1
  • 73. Reader/Writer Caches Application Application Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. DataWriter DataReader DataReader 3 1 1 ... OpenSplice DDS 2 2 DataWriter Cache DataReader Cache DataReader Cache Network Assumptions: DataReader configured with history depth of 2 and DataWriter with default history depth of 1
  • 74. Reader/Writer Caches Application Application Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. DataWriter DataReader DataReader 3 1 1 ... OpenSplice DDS 2 2 DataWriter Cache DataReader Cache DataReader Cache 3 Network Assumptions: DataReader configured with history depth of 2 and DataWriter with default history depth of 1
  • 75. Reader/Writer Caches Application Application Application Copyright  2011,  PrismTech  –    All  Rights  Reserved. DataWriter DataReader DataReader 3 2 2 ... OpenSplice DDS 3 3 DataWriter Cache DataReader Cache DataReader Cache Network Assumptions: DataReader configured with history depth of 2 and DataWriter with default history depth of 1
  • 77. Dynamic View of a Stream Copyright  2011,  PrismTech  –    All  Rights  Reserved. OpenSplice DDS ... Stream: Set of samples written over time for a given topic instance.
  • 78. Eventual View of a Stream Assumptions (Default Settings): Reader History = KeepLast (1) WriterHistory = KeepLast (1) Copyright  2011,  PrismTech  –    All  Rights  Reserved. Writer History Reader History ‘Past’ Samples OpenSplice DDS Stream: Set of samples written over time for a given topic instance.
  • 79. Eventual View of a Stream Assumptions: Reader History = KeepLast (n) with n > 1 WriterHistory = KeepLast (1) Copyright  2011,  PrismTech  –    All  Rights  Reserved. Writer History Reader History ‘Past’ Samples OpenSplice DDS Stream: Set of samples written over time for a given topic instance.
  • 80. Eventual View of a Stream Assumptions: Reader History = KeepLast (n) with n > 1 WriterHistory = KeepLast (m) with n > m > 1 Copyright  2011,  PrismTech  –    All  Rights  Reserved. Writer History Reader History ‘Past’ Samples OpenSplice DDS Stream: Set of samples written over time for a given topic instance.
  • 81. Eventual View of a Stream Assumptions: Reader History = KeepAll WriterHistory = KeepLast (m) with n > m > 1 Copyright  2011,  PrismTech  –    All  Rights  Reserved. Writer History Reader History OpenSplice DDS ...
  • 82. Interacting with the DataReader Cache OpenSplice DDS
  • 83. Reading Data Samples ☐ Samples can be read from the Data Reader History Cache Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ The action of reading a sample is non-destructive. Samples are not removed from the cache OpenSplice DDS DataReader DataReader ... read ... DataReader Cache DataReader Cache
  • 84. Taking Data Samples ☐ Samples can be taken from the Data Reader History Cache Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ The action of taking a sample is destructive. Samples are removed from the cache OpenSplice DDS DataReader DataReader ... take ... DataReader Cache DataReader Cache
  • 85. Read vs. Take Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ The read operation should always be access the latest know value for topics that represent distributed state OpenSplice DDS ☐ The take operation should be used to get the last notification from a topic that represent an event
  • 87. Cherry Picking in DDS Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ DDS provides some very flexible mechanisms for selecting the data to be read: OpenSplice DDS ☐ Data Content ☐ Data Status ☐ These mechanisms are composable
  • 89. Filters and Queries Application ☐ DDS Filters allow to control what gets into a DataReader cache Copyright  2011,  PrismTech  –    All  Rights  Reserved. Query ☐ DDS Queries allow to control what gets out of a DataReader cache DataReader OpenSplice DDS ☐ Filters are defined by means of ... ContentFilteredTopics ... ... ... ☐ Queries operate in conjunction with DataReader Cache read operations Filter ☐ Filters and Queries are expressed as SQL where clauses
  • 90. struct ShapeType { Filters @Key string color; long x; long y; [C++ API] }; long shapesize; Copyright  2011,  PrismTech  –    All  Rights  Reserved. /** * NOTE: The Scala API if not provided with DP/Sub/Pub assumes * default domains and default partition. **/ // Create a Topic auto topic = Topic<ShapeType>(dp, “Circle”); OpenSplice DDS // Define filter expression and parameters auto filter = Filter(“x < 100 AND y < 200”); // Define content filtered topic auto cftopic = ContentFilteredTopic<ShapeType>(“CFCircle”, topic, filter) // Create a DataReader for the content-filtered Topic auto dr = DataReader<ShapeType>(sub,cftopic)
  • 91. struct ShapeType { Query @Key string color; long x; long y; [C++ API] }; long shapesize; Copyright  2011,  PrismTech  –    All  Rights  Reserved. // Define filter expression and parameters auto dr = DataReader<ShapeType>(sub, topic) OpenSplice DDS val query = Query(dr, “x < 100 AND y < 200”); dr.select() .content(query) .read();
  • 92. Instances ☐ DDS provides a very efficient way of reading data belonging to a Copyright  2011,  PrismTech  –    All  Rights  Reserved. specific Topic Instance ☐ Obviously, one could use queries to match the key’s value, but this is not as efficient as the special purpose instance selector OpenSplice DDS auto handle = dr.lookup_instance(ShapeType(“RED”, 0, 0, 0)); auto data = dr.select() .instance(handle) .read();
  • 94. Sample, Instance, and View State ☐ The samples included in the DataReader cache have associated Copyright  2011,  PrismTech  –    All  Rights  Reserved. some meta-information which, among other things, describes the status of the sample and its associated stream/instance ☐ The Sample State (READ, NOT_READ) allows to distinguish between OpenSplice DDS new samples and samples that have already been read ☐ The View State (NEW, NOT_NEW) allows to distinguish a new instance from an existing one ☐ The Intance State (ALIVE, NOT_ALIVE_DISPOSED, NOT_ALIVE_NO_WRITERS) allows to track the life-cycle transitions of the instance to which a sample belongs
  • 95. State Selector in Action [C++ API] Copyright  2011,  PrismTech  –    All  Rights  Reserved. // Read only new samples auto data = dr.read() // Read any samples from live instances auto data = dr.select() OpenSplice DDS .state(DataState::any_data()) .read();
  • 96. Putting all Together [C++ API] Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ Selectors can be composed in a flexible and expressive manner OpenSplice DDS auto data = dr.select() .content(query) .state(data_state) .instance(handle) .read();
  • 97. OpenSplice DDS Summing Up
  • 98. Concluding Remarks OpenSplice DDS provides a very powerful abstraction for building Copyright  2011,  PrismTech  –    All  Rights  Reserved. ☐ distributed applications grounded on the concept of a fully distributed global data space OpenSplice DDS ☐ Topics are used to define the types that populate the global data space while DataWriters and DataReaders are used to produce and consume values ☐ DataReaders allow very flexible data access through cache access operations
  • 100. References Copyright  2011,  PrismTech  –    All  Rights  Reserved. OpenSplice | DDS Escalier ¥ #1 OMG DDS Implementation ¥ Fastest growing JVM Language ¥ Scala API for OpenSplice DDS ¥ Open Source ¥ Open Source ¥ Open Source ¥ www.opensplice.org ¥ www.scala-lang.org ¥ github.com/kydos/escalier OpenSplice DDS ¥ Simple C++ API for DDS ¥ DDS-PSM-Java for OpenSplice DDS ¥ DDS-based Advanced Distributed ¥ Open Source ¥ Open Source Algorithms Toolkit ¥ github.com/kydos/simd-cxx ¥ github.com/kydos/simd-java ¥ Open Source ¥ github.com/kydos/dada
  • 101. :: Connect with Us :: ¥opensplice.com ¥forums.opensplice.org ¥@acorsaro ¥opensplice.org ¥opensplicedds@prismtech.com ¥@prismtech OpenSplice DDS ¥ crc@prismtech.com ¥sales@prismtech.com ¥youtube.com/opensplicetube ¥slideshare.net/angelo.corsaro