SlideShare uma empresa Scribd logo
1 de 82
Baixar para ler offline
OpenSplice | DDS Tutorial
-- Part II -Angelo CORSARO, Ph.D.	


	

	


Chief Technology Officer
OMG DDS Sig Co-Chair

PrismTech	


angelo.corsaro@prismtech.com
Part I Recap
DDS is a standard technology for ubiquitous, interoperable,
secure, platform independent, and real-time data sharing
across network connected devices
Data Distribution Service (DDS)

•

DDS’ Global Data Space is fully
distributed, highly efficient and
scalable

Data
Writer
QoS

Data
Writer

TopicD

Data
Reader

QoS

TopicA
Data
Writer

QoS
QoS

TopicC

Data
Reader

TopicB
...

Data
Writer

Data
Reader

DDS Global Data Space

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

•

DDS provides a Global Data Space
abstraction that allow applications to
autonomously, anonymously,
securely and efficiently share data 	


Data
Reader
DDS Entities
Domain (e.g. Domain 123)
Domain
Participant
Topic

Partition (e.g. “Telemetry”, “Shapes”, )

Topic Instances/Samples

Ta

•
•
•
•

Tb

Publisher
Subscriber

Tx
Ty

Tc

DataWrter

DataReader

DomainParticipant: Provides access to a data cloud -- called a domain in DDS	

Topic: Domain-wide definition of a kind of Information	

Publisher/Subscriber: Provide scope to data sharing through the concept of partitions
DataReader/DataWriter: Allow to read/write data for a given topic in the partitions their Subscriber/Publisher are associated with.

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

T1
T1 T3
Part II
Quality of Service
QoS Model
•

QoS-Policies control local and endto-end properties of DDS entities	

Type Matching

Local properties controlled by QoS
are related resource usage	


QoS matching
QoS

QoS

QoS

•
•

Some QoS-Policies are matched
based on a Request vs. Offered
(RxO) Model

QoS

QoS

Topic
Name

Publisher

End-to-end properties controlled by
QoS are related to temporal and
spatial aspects of data distribution 	


QoS

QoS

...

DataWriter

writes

Type

reads

Subscriber
DataReader

...

...
DomainParticipant

DataWriter

writes

Type

reads

DataReader

DomainParticipant

Name
Topic

QoS

QoS

QoS
Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

•
QoS Policies
[T: Topic] [DR: DataReader] [DW: DataWriter] [P: Publisher]

[S: Subscriber]

Applicability

RxO

Modifiable

USER_DATA

DP, DR, DW

N

Y

TOPIC_DATA

T

N

Y

GROUP_DATA

P, S

N

Y

DURABILITY

T, DR, DW

Y

N

DURABILITY
SERVICE

T, DW

N

N

HISTORY

T, DR, DW

N

N

PRESENTATION

P, S

Y

N

RELIABILITY

T, DR, DW

Y

N

PARTITION

P, S

N

Y

DESTINATION
ORDER

T, DR, DW

Y

N

LIFESPAN

T, DW

N

Y

Configuration

Data Availability

Data Delivery

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

QoS Policy

[DP: Domain Participant]
QoS Policies
[T: Topic] [DR: DataReader] [DW: DataWriter] [P: Publisher]

[S: Subscriber]

QoS Policy

Applicability

RxO

Modifiable

DEADLINE

T, DR, DW

Y

Y

LATENCY BUDGET

T, DR, DW

Y

[DP: Domain Participant]

Y

Temporal/
Importance
Characteristics

T, DW

N

Y

TIME BASED FILTER

DR

N

Y

OWNERSHIP

T, DR, DW

Y

N

OWNERSHIP
STRENGTH

DW

N

Y

Replication

LIVELINESS

T, DR, DW

Y

N

Fault-Detection

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

TRANSPORT
PRIORITY
QoS DSL
•
•

The ISO C++ and Java 5 APIs provide DSL for dealing with QoS Policies configuration	


•

Policies as well as Entity QoS are immutable — this allows for better safety and
object sharing	


•

Policies are treated as algebraic data types and the DSL provide constructors of
each of the cases	


•

A QoS Provider can now be used to retrieve QoS settings from external sources, e.g.
a file, an HTTP server, DDS durability

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

The DSL uses language specific idioms, such as fluid interfaces, as well as specific
features of the languages
C++ QoS Policy DSL

//	
  	
  	
  ==	
  ISO	
  C++	
  DDS	
  API	
  ==	
  
!
!

DataWriterQos	
  dwqos	
  =	
  pub.default_datawriter_qos()	
  	
  
!
	
  	
  <<	
  History.KeepLast(10)	
  
	
  	
  <<	
  Durability.Transient();	
  
Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

!
Java 5 QoS Policy DSL
//	
  	
  	
  ==	
  Java	
  5	
  DDS	
  API	
  ==	
  
!

final	
  PolicyFactory	
  pf	
  =	
  ...	
  
!

DataWriterQos	
  dwqos	
  =	
  pub.getDefaultDataWriterQos()	
  
!
	
   .withPolicies	
  (	
  
	
   	
   pf.History.withKeepLast(10),	
  
	
   	
   pf.Durability.withTransient(),	
  
	
  	
  );	
  
!

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

!
Data Delivery
Reliability

Data Delivery

Presentation

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

Partition

Destination
Order
Reliability QoS Policy
The Reliability Policy controls the level of guarantee offered by the DDS
in delivering data to subscribers	


•

Best Effort. Indicates that it is acceptable not to retry propagation
of samples

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

•

Reliable. In steady-state, and with no data writer crashes, guarantees
that all samples in the DataWriter history will eventually be
delivered to all the DataReader	


QoS Policy

Applicability

RxO

Modifiable

RELIABILITY

T, DR, DW

Y

N
Setting Reliability Policy
//	
  	
  	
  ==	
  ISO	
  C++	
  DDS	
  API	
  ==	
  
!

//	
  Reliable	
  Reliability	
  
DataWriterQos	
  dwqos	
  =	
  	
  
!
	
  	
  	
  pub.default_datawriter_qos()	
  <<	
  Reliability.Reliable();	
  
!
//	
  Best-­‐Effort	
  Reliability	
  
DataWriterQos	
  dwqos	
  =	
  	
  
	
  	
  	
  pub.default_datawriter_qos()	
  <<	
  Reliability.BestEffort();	
  

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

!
Setting Reliability Policy
//	
  	
  	
  ==	
  Java	
  5	
  DDS	
  API	
  ==	
  
!

final	
  PolicyFactory	
  pf	
  =	
  ...	
  
!

//	
  Reliable	
  Reliability	
  
DataWriterQos	
  dwqos	
  =	
  	
  
!
	
  	
  	
  pub.getDefaultDataWriterQos()	
  
!
	
  	
  	
  	
  	
  	
  .withPolicies(pf.Reliability.withReliable());	
  	
  
//	
  Best-­‐Effort	
  Reliability	
  
DataWriterQos	
  dwqos	
  =	
  	
  
	
  	
  	
  pub.getDefaultDataWriterQos()	
  
	
  	
  	
  	
  	
  	
  .withPolicies(pf.Reliability.withBestEffort());	
  	
  

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

!
Partitions
•

Partitions are the mechanism provided by DDS to
organise information within a domain	


•
•

Access to partitions is controlled through QoS Policies	


• “system:telemetry”	
  
• “system:log”	
  
• “data:row-­‐2:col-­‐3”	
  

•

Partitions addressed by name or regular expressions:	


•
• “data:row-­‐2:col-­‐*”

”system:telemetry”	
  

Partitions

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

Partitions are defined as strings:
Partition QoS Policy
The Partition QoS Policy can be
used as subjects for organising the
flows of data	


•

The Partition QoS Policy is used
to connect Publishers/Subscribers
to a Partitions’ List which might
also contain wildcards, e.g. tracks.*	


•

Topics instances are published and
subscribed across one or more
Partitions

Partitions

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

•
Setting Partition QoS Policy
//	
  	
  	
  ==	
  ISO	
  C++	
  DDS	
  API	
  ==	
  
!

//	
  Setting	
  a	
  Partition	
  
PublisherQos	
  pqos	
  =	
  	
  
!
	
  	
  	
  dp.default_publisher_qos()	
  <<	
  Partition(“MyPartition”);	
  
!
//	
  Setting	
  a	
  List	
  of	
  Partitions	
  
PublisherQos	
  pqos	
  =	
  	
  
	
  	
  	
  dp.default_publisher_qos()	
  <<	
  Partition(myPartitionList);

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

!
Setting Partition QoS Policy
//	
  	
  	
  ==	
  Java	
  5	
  DDS	
  API	
  ==	
  
!

final	
  PolicyFactory	
  pf	
  =	
  ...	
  
!

//	
  Setting	
  a	
  Partition	
  
PublisherQos	
  pqos	
  =	
  	
  
!
	
  	
  	
  dp.getDefaultPublisherQos()	
  
!
	
  	
  	
  	
  	
  	
  .withPolicies(pf.Partition(“MyPartition”));	
  	
  
//	
  Setting	
  a	
  List	
  of	
  Partitions	
  
PublisherQos	
  pqos	
  =	
  	
  
	
  	
  	
  dp.getDefaultPublisherQos()	
  
	
  	
  	
  	
  	
  	
  .withPolicies(pf.Partition(myPartitionList));	
  	
  

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

!
Data Availability
History

Durability

Ownership

Ownership
Strength

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

Lifespan

Data
Availability
History QoS Policy
3
time

2

time

3
4

e
ssur
Pre

KeepLast(3)

The DataWriter HISTORY QoS Policy controls
the amount of data that can be made available to
late joining DataReaders under
TRANSIENT_LOCAL Durability	

The DataReader HISTORY QoS Policy controls
how many samples will be kept on the reader cache	


•

Keep Last. DDS will keep the most recent
“depth” samples of each instance of data
identified by its key	


•

Keep All. The DDS keep all the samples of
each instance of data identified by its key -- up
to reaching some configurable resource limits

time

KeepAll

QoS Policy
HISTORY

Applicability
T, DR, DW

RxO
N

Modifiable
N

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

1

2

e
ssur
Pre

0

1

e
ssur
Pre

0

KeepLast(1)
Durability QoS Policy
The DURABILITY QoS controls the data availability w.r.t. late joiners,
specifically the DDS provides the following variants:	


•
•

Volatile. No need to keep data instances for late joining data readers	


•
•

Transient. Data instance availability outlives the data writer	


Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

Transient Local. Data instance availability for late joining data reader is
tied to the data writer availability	


Persistent. Data instance availability outlives system restarts
QoS Policy Applicability
DURABILITY T, DR, DW

RxO
Y

Modifiable
N
Volatile Durability
Data
Writer
QoS

TopicA

•
•

Data
Reader

No Time Decoupling
Readers get only data produced after they joined the Global Data Space

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

1
Volatile Durability
Late Joiner
!

!
Data
Reader
Data
Writer
QoS

TopicA

Data
Reader

•
•

No Time Decoupling
Readers get only data produced after they joined the Global Data Space

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

1
Volatile Durability
Late Joiner
!

!
Data
Reader
Data
Writer
2

QoS

TopicA

Data
Reader

•
•

No Time Decoupling
Readers get only data produced after they joined the Global Data Space

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

1
Transient Local Durability
Data
Writer
QoS

TopicA

•
•

Data
Reader

Some Time Decoupling
Data availability is tied to the availability of the data writer and the history settings

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

1
Transient Local Durability
Late Joiner
!

!
Data
Reader
Data
Writer
1

QoS

TopicA

Data
Reader

•
•

Some Time Decoupling
Data availability is tied to the availability of the data writer and the history settings

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

1
Transient-Local Durability
Data
Reader
Data
Writer

1

2

1

QoS

TopicA

Data
Reader

•
•

Some Time Decoupling
Data availability is tied to the availability of the data writer and the history settings

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

1
Transient Durability
Data
Writer
QoS

TopicA
1

•
•

Time Decoupling	

Data availability is tied to the availability of the durability service

Data
Reader

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

1
Transient Durability
Late Joiner
!

!
Data
Reader
Data
Writer
QoS

TopicA

Data
Reader

1

•
•

Time Decoupling	

Data availability is tied to the availability of the durability service

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

1
Transient Durability
Data
Reader
Data
Writer

1

2

QoS

TopicA
2

Data
Reader

1

•
•

Time Decoupling	

Data availability is tied to the availability of the durability service

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

1
Transient Durability
Data
Reader
2

1

QoS

TopicA
1
2

•
•

Time Decoupling	

Data availability is tied to the availability of the durability service

1

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

2

Data
Reader
Transient Durability
Data
Reader

2

1

QoS

TopicA
1
2

1

!
Data
Reader
!

•
•

Time Decoupling	


Late Joiner

Data availability is tied to the availability of the durability service

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

2

Data
Reader
Setting the Durability Policy
//	
  	
  	
  ==	
  Java	
  5	
  DDS	
  API	
  ==	
  
!

final	
  PolicyFactory	
  pf	
  =	
  ...	
  
!

!
//	
  Setting	
  TransientLocalDurability	
  
PublisherQos	
  pqos	
  =	
  	
  
	
  	
  	
  dp.getDefaultPublisherQos()	
  
	
  	
  	
  	
  	
  	
  .withPolicies(pf.Durability().withTransientLocal());	
  	
  
!

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

!
Ownership QoS Policy
Availability of data producers can be controlled via two QoS Policies	


•
•
•

OWNERSHIP (SHARED vs. EXCLUSIVE)	


•

Writer strength is used to coordinate replicated writers

Instances of exclusively owned Topics can be modified (are owned)
by the higher strength writer 	


QoS Policy
OWNERSHIP
STRENGTH

Applicability
T, DR, DW
DW

RxO
Y
N

Modifiable
N
Y

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

OWNERSHIP STRENGTH
Temporal Properties
TimeBasedFilter

Deadline

[Inbound]

[Outbound]

LatencyBudget

Latency

TransportPriority
Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

Throughput
Latency Budget

•

The LATENCY_BUDGET QoS
policy specifies the maximum
acceptable delay from the time
the data is written until the
data is inserted in the
receiver's application-cache 	


QoS Policy Applicability
LATENCY
T, DR, DW
BUDGET

RxO
Y

Modifiable
Y

Latency = T1+T2+T3

A non-zero latency-budget
allows a DDS implementation
to batch samples and improve
CPU/Network utilisation

DataWriter

T3

T1

Batching
T2

DataReader
Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

•
Deadline QoS Policy
The DEADLINE QoS policy defines the
maximum inter-arrival time between data
samples	


RxO
Y

Modifiable
Y

DataWriter indicates that the application
commits to write a new sample at least
once every deadline period	

DataWriter

•

Applicability
T, DR, DW

DataReaders are notified when the
DEADLINE is violated

Deadline

Deadline

Deadline

Deadline Violation

Deadline

Deadline

DataReader
Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

•

QoS Policy
DEADLINE
Transport Priority QoS Policy

QoS Policy

Applicability

RxO

Modifiable

TRANSPORT
PRIORITY

T, DW

N

Y

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

•

The TRANSPORT_PRIORITY QoS policy is a hint to the
infrastructure as to how to set the priority of the underlying
transport used to send the data.
Time-Based Filter QoS Policy

•

The Time Based Filter
allows to control the
throughput at which data is
received by a data reader	

Samples produced more
often than the minimum
inter-arrival time are not
delivered to the data reader

QoS Policy

Applicability

RxO

Modifiable

TIME BASED FILTER

DR

N

Y

mit
Latency = T1+T2+T3

DataWriter

T3

DataReader

T2
Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

•

mit

mit
mit
mit = minimum inter-arrival time
produced sample

delivered sample

discarded sample
QoS Provider
This class allows to externally define policies and decouples the
mechanism used to define and access policy definition with policy
creation
	
  	
  	
  	
  	
  	
  //	
  QosProvider...	
  
	
  	
  	
  	
  	
  	
  QosProvider	
  qos_provider(	
  
!
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "http://www.opensplice.org/demo/config/qos.xml",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "ishapes-­‐profile");	
  
!
!

	
  	
  	
  	
  	
  	
  DataReader<ShapeType>	
  dr(sub,	
  topic,	
  qos_provider.datareader_qos());	
  

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

•
•

The new C++ and Java APIs introduce the concept of a QoS Provider
Demo: QoS in Action
Shapes Application
•

The iShapes application is used by DDS
vendors to demonstrate some of the
basic mechanism as well as product
interoperability	


•

Three Topics	


•

One Type
struct ShapeType {
string color;
long x;
long y;
long shapesize;
};
#pragma keylist ShapeType color

Spotted shapes represent subscriptions
Pierced shapes represent publications

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

•

Circle, Square, Triangle
QoS Idioms
Soft State
In distributed systems you often need to model soft-state -- a state that
is periodically updated	


•

Examples are the reading of a sensor (e.g. Temperature Sensor), the
position of a vehicle, etc. 	


•

The QoS combination to model Soft-State is the following:
Reliability	
  	
  	
  	
  	
  	
  =>	
  	
  BestEffort	
  
Durability	
  	
  	
  	
  	
  	
  	
  =>	
  	
  Volatile	
  	
  
History	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  =>	
  	
  KeepLast(n)	
  [with	
  n	
  =	
  1	
  in	
  most	
  of	
  the	
  cases]	
  
Deadline	
  	
  	
  	
  	
  	
  	
  	
  	
  =>	
  	
  updatePeriod	
  
LatencyBudget	
  	
  	
  	
  =>	
  	
  updatePeriod/3	
  [rule	
  of	
  thumb]	
  
DestinationOrder	
  =>	
  	
  SourceTimestamp	
  [if	
  multiple	
  writers	
  per	
  instance]

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

•
Hard State
•

In distributed systems you often need to model hard-state -- a state that
is sporadically updated and that often has temporal persistence
requirements	


•
•

Examples are system configuration, a price estimate, etc.	


Reliability	
  	
  	
  	
  	
  	
  =>	
  	
  Reliable	
  
Durability	
  	
  	
  	
  	
  	
  	
  =>	
  	
  Transient	
  |	
  Persistent	
  	
  
History	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  =>	
  	
  KeepLast(n)	
  [with	
  n	
  =	
  1	
  in	
  most	
  of	
  the	
  cases]	
  
DestinationOrder	
  =>	
  	
  SourceTimestamp	
  [if	
  multiple	
  writers	
  per	
  instance]

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

The QoS combination to model Hard-State is the following:
Events
In distributed systems you often need to model events -- the occurrence
of something noteworthy for our system	


•

Examples are a collision alert, the temperature beyond a given threshold,
etc.	


•

The QoS combination to model Events is the following:
Reliability	
  	
  	
  	
  	
  	
  =>	
  	
  Reliable	
  
Durability	
  	
  	
  	
  	
  	
  	
  =>	
  	
  any	
  	
  	
  	
  	
  	
  	
  	
  [depends	
  on	
  system	
  requirements]	
  	
  
History	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  =>	
  	
  KeepAll	
  [on	
  both	
  DataWriter	
  and	
  DataReader!]	
  
DestinationOrder	
  =>	
  	
  SourceTimestamp

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

•
Accessing the Reader Cache
Reading Samples
Samples can be read from the Data Reader History Cache	

The action of reading a sample is non-destructive. Samples are not
removed from the cache
DataReader

DataReader

...
DataReader Cache

read

...
DataReader Cache

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

•
•
Taking Samples
Samples can be taken from the Data Reader History Cache	

The action of taking a sample is destructive. Samples are removed
from the cache
DataReader

DataReader

...
DataReader Cache

take

...
DataReader Cache

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

•
•
Sample Selectors
DDS provides some very flexible mechanisms for selecting the
samples to be read/take:	


•
•
•

Content	

Status	


These mechanisms are composable

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

•
Content-Based Selection
Filters and Queries
•

DDS Filters allow to control what gets
into a DataReader cache	


•

DDS Queries allow to control what
gets out of a DataReader cache	


Application

Query
DataReader

Filters are defined by means of
ContentFilteredTopics	


•

Filters and Queries are expressed as
SQL where clauses

DataReader Cache
Filter

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

Queries operate in conjunction with
read operations	


...

•

...
...
...

•
// == ISO C++ DDS API
!
// Create a Topic	

auto topic = Topic<ShapeType>(dp, “Circle”);
!
// 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)

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

Filters

struct ShapeType {
string color;
long x;
long y;
long shapesize;
};
#pragma keylist ShapeType color
Filters

struct ShapeType {
string color;
long x;
long y;
long shapesize;
};
#pragma keylist ShapeType color

!
final	
  PolicyFactory	
  pf	
  =	
  runtime.policyFactory();	
  
	
  	
  	
  final	
  DataReaderQos	
  drqos	
  =	
  
	
  	
  	
  	
  	
  	
  sub.getDefaultDataReaderQos()	
  !
	
  	
  	
  	
  	
  	
  	
  	
  .withPolicy	
  (	
  
!
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  pf.ContentFilter()	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  .withFilter(	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  new	
  JavaScriptFilter<ShapeType>("data.x	
  >	
  data.y"))	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  );	
  
!
final	
  DataReader<ShapeType>	
  dr	
  =	
  sub.createDataReader(shape,	
  drqos);

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

//	
  	
  	
  ==	
  Java	
  5DDS	
  API	
  ==	
  
Query

struct ShapeType {
string color;
long x;
long y;
long shapesize;
};
#pragma keylist ShapeType color

//	
  	
  	
  ==	
  ISO	
  C++	
  DDS	
  API	
  ==	
  
!

//	
  Define	
  filter	
  expression	
  and	
  parameters	
  
!
auto	
  dr	
  =	
  DataReader<ShapeType>(sub,	
  topic)	
  	
  
val	
  query	
  =	
  Query(dr,	
  “x	
  <	
  100	
  AND	
  y	
  <	
  200”);	
  
!
!

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

dr.select()	
  
	
  	
  	
  	
  .content(query)	
  
	
  	
  	
  	
  .read();
Query

struct ShapeType {
string color;
long x;
long y;
long shapesize;
};
#pragma keylist ShapeType color

//	
  	
  	
  ==	
  Java	
  5	
  DDS	
  API	
  ==	
  
!

Filter<ShapeType>	
  filter	
  =	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
!
	
  	
  	
  new	
  JavaScriptFilter<ShapeType>("data.x	
  >	
  data.y"))	
  
!
!

!

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

dr.select()	
  
	
  	
  	
  	
  .content(filter)	
  
	
  	
  	
  	
  .read();
Instances
•

DDS provides a very efficient way of reading data belonging to a 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
//	
  	
  	
  ==	
  ISO	
  C++	
  DDS	
  API	
  ==	
  
auto	
  handle	
  =	
  	
  
!
	
  	
  	
  dr.lookup_instance(ShapeType(“RED”,	
  0,	
  0,	
  0));	
  
!

auto	
  data	
  =	
  	
  
	
  	
  	
  	
  	
  dr.select()	
  
	
  	
  	
  	
  	
  	
  .instance(handle)	
  
	
  	
  	
  	
  	
  	
  .read();

!

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

!
State Based Selection
Sample, Instance, and View State
The samples included in the DataReader cache have associated some metainformation 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 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 Instance State (ALIVE, NOT_ALIVE_DISPOSED, NOT_ALIVE_NO_WRITERS)
allows to track the life-cycle transitions of the instance to which a sample belongs

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

•
State Selector in Action
//	
  	
  	
  ==	
  ISO	
  C++	
  DDS	
  API	
  ==	
  
!

//	
  Read	
  only	
  new	
  samples	
  
auto	
  data	
  =	
  dr.read()	
   !
!

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

!
//	
  Read	
  any	
  samples	
  from	
  live	
  instances	
  
auto	
  data	
  =	
  	
  
	
  	
  	
  	
  	
  	
  	
  dr.select()	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  .state(DataState::any_data())	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  .read();
State Selector in Action
//	
  	
  	
  ==	
  Java	
  5	
  DDS	
  API	
  ==	
  
!

//	
  Read	
  only	
  new	
  samples	
  
auto	
  data	
  =	
  dr.read()	
  
!

!

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

!
//	
  Read	
  any	
  samples	
  from	
  live	
  instances	
  
auto	
  data	
  =	
  	
  
	
  	
  	
  	
  	
  	
  	
  dr.select()	
  
	
  	
  	
  	
  	
  	
  	
  	
  .dataState(sub.createDataState().withAnySampleState())	
  
	
  	
  	
  	
  	
  	
  	
  	
  .read();
Putting all Together

//	
  	
  	
  ==	
  ISO	
  C++	
  DDS	
  API	
  ==	
  
!

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

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

•

Selectors can be composed in a flexible and expressive manner
Application / DDS 	

Interaction Models
Interaction Models
Polling

•

The application proactively polls for data availability as well as special events, such as a
deadline being missed, etc. Notice that all DDS API calls, exclusion made for wait
operations, are non-blocking	


Synchronous Notification
The application synchronously waits for some conditions to be verified, e.g., data
availability, instance lifecycle change, etc.	


Asynchronous Notification

•

The application registers the interest to be asynchronously notified when specific
condition are satisfied, e.g. data available, a publication matched, etc.

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

•
Synchronous Notifications
•

DDS provides a mechanism known as WaitSet to synchronously
wait for a condition	


•

Condition can predicate on:	

communication statuses	

data availability	

data availability with specific content	

user-triggered conditions

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

•
•
•
•
WaitSet
//	
  	
  	
  ==	
  Java	
  5	
  DDS	
  API	
  ==	
  
!

//	
  Create	
  the	
  waitset	
  
WaitSet	
  ws	
  =	
  runtime.createWaitSet();	
  
!

Subscriber.DataState	
  ds	
  =	
  sub.createDataState();	
  
!

!

//	
  Attach	
  the	
  condition	
  
ws.attachCondition(c);	
  
!

//	
  Wait	
  for	
  the	
  condition	
  
ws.wait();

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

//	
  Create	
  the	
  condition	
  
!
Condition	
  c	
  =	
  dr.createReadCondition(	
  
!
	
   	
   	
   	
   	
   	
   	
   ds.withAnyViewState()	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  .with(InstanceState.ALIVE)	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  .with(SampleState.NOT_READ));	
  
Asynchronous Notifications
•

DDS provides a mechanism known as Listeners for asynchronous
notification of a given condition	


•

Listener interest can predicate on:	

communication statuses	

data availability

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

•
•
Listener Declaration
//	
  	
  	
  ==	
  ISO	
  C++	
  DDS	
  API	
  ==	
  
!

class	
  ShapeListener	
  :	
  public	
  dds::sub::NoOpDataReaderListener<ShapeType>	
  {	
  
public:	
  
	
  	
  ShapeListener()	
  {}	
  
	
  	
  virtual	
  void	
  on_data_available(dds::sub::DataReader<ShapeType>&	
  dr)	
  {	
  
	
  	
  	
  	
  auto	
  samples	
  =	
  dr.read();	
  
	
  	
  	
  	
  std::for_each(samples.begin(),	
  
	
   	
   	
  	
  samples.end(),	
  
!
	
   	
   	
  	
  [](const	
  dds::sub::Sample<ShapeType>&	
  sample)	
  {	
  	
  
!
	
   	
   	
  	
  	
  	
  if	
  (sample.info().valid())	
  	
  //	
  Check	
  if	
  sample	
  contains	
  valid	
  data	
  
	
   	
   	
  	
  	
  	
  	
  	
  std::cout	
  <<	
  sample.data()	
  <<	
  std::endl;	
  
	
   	
   	
  	
  });	
  
	
  	
  }	
  
!

	
  	
  virtual	
  void	
  on_liveliness_changed(dds::sub::DataReader<ShapeType>&	
  the_reader,	
  
	
   	
   	
   	
   	
  	
  	
  	
  const	
  dds::core::status::LivelinessChangedStatus&	
  status)	
  	
  
	
  	
  {	
  	
  
	
  	
  	
  	
  std::cout	
  <<	
  ">>	
  Liveliness	
  Changed!	
  "	
  <<	
  std::endl;	
  
	
  	
  }	
  
};	
  

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

!
Listener Registration
//	
  	
  	
  ==	
  ISO	
  C++	
  DDS	
  API	
  ==	
  
!

auto	
  l	
  =	
  new	
  ShapeListener();	
  
!

//	
  Create	
  a	
  “nothing”	
  status	
  mask	
  
StatusMask	
  mask	
  =	
  StatusMask::none();	
  
!
//	
  Add	
  the	
  statuses	
  we	
  are	
  interested	
  in.	
  
mask	
  <<	
  StatusMask::data_available()	
  	
  
	
  	
  	
  	
  	
  <<	
  StatusMask::liveliness_changed()	
  	
  
	
  	
  	
  	
  	
  <<	
  StatusMask::liveliness_lost();	
  	
  
!

//	
  Register	
  the	
  listener	
  with	
  the	
  associated	
  mask	
  
dr.listener(l,	
  mask);	
  

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

!

!
Common Bootstrap Questions
Can I use C++11?

If you want to use C++11 in your DDS applications then you need
to enable support for it. Check:	


•

http://dev.opensplice.org/releases/downloads/docs/isocpp/html/
isocpp_customlibs.html

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

•
•

OpenSplice default configuration does not require C++11
Which DDS Implementation
If you are planning to use C/C++ or C# you may consider
OpenSplice DDS	


•

If you are developing Java Applications or are interested in targeting
Android then you may consider OpenSplice Mobile

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

•
Where can I find the Java 5 API?

The Java 5 API is currently implemented only as part of OpenSplice
Mobile	


•

OpenSplice Mobile is a pure Java implementation of DDS
Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

•
Can I “Script” DDS Applications?
Assuming you deploy on the JVM then you have two options	


•

Use the DDS Java 5 API through Scala, and then run your scala
program as a script	


•

The Molière Scala API for DDS and run the resulting program as a
script

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

•

Use the DDS API from JavaScript (or any other script language
supported by the JVM) and execute the script through the
javax.script.ScriptEngine
How can I Debug my DDS App?
OpenSplice DDS

•

Use the Tuner to inspect entities and QoS	


OpenSplice Mobile

•

Use OpenSplice Monitor to inspect entities and QoS

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

!
Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

OpenSplice Monitor
Part II
Summary & Concluding Remarks
Summary & Remarks

•

DDS a rich set of QoS to control the key non-functional properties
of data	


•

DDS provides idiomatic API which are highly expressive and simple
to use

Copyright	
  2013,	
  PrismTech	
  –	
  	
  All	
  Rights	
  Reserved.

•

DDS provides an elegant Data Space abstraction that allows
application to share data ubiquitously and efficiently -- the Data
Space implementation is fully distributed
:: Connect with Us ::

¥opensplice.com
¥opensplice.org

¥forums.opensplice.org
¥opensplicedds@prismtech.com

¥@acorsaro
¥@prismtech

	


¥ crc@prismtech.com
¥youtube.com/opensplicetube

¥slideshare.net/angelo.corsaro

¥sales@prismtech.com

Mais conteúdo relacionado

Mais procurados

The Data Distribution Service Tutorial
The Data Distribution Service TutorialThe Data Distribution Service Tutorial
The Data Distribution Service TutorialAngelo Corsaro
 
The Data Distribution Service Tutorial
The Data Distribution Service TutorialThe Data Distribution Service Tutorial
The Data Distribution Service TutorialAngelo Corsaro
 
DDS: The IoT Data Sharing Standard
DDS: The IoT Data Sharing StandardDDS: The IoT Data Sharing Standard
DDS: The IoT Data Sharing StandardAngelo Corsaro
 
10 Reasons for Choosing OpenSplice DDS
10 Reasons for Choosing OpenSplice DDS10 Reasons for Choosing OpenSplice DDS
10 Reasons for Choosing OpenSplice DDSAngelo 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 Data Distribution Service
The Data Distribution ServiceThe Data Distribution Service
The Data Distribution ServiceAngelo Corsaro
 
OMG DDS: The Data Distribution Service for Real-Time Systems
OMG DDS: The Data Distribution Service for Real-Time SystemsOMG DDS: The Data Distribution Service for Real-Time Systems
OMG DDS: The Data Distribution Service for Real-Time SystemsAngelo Corsaro
 
The DDS Security Standard
The DDS Security StandardThe DDS Security Standard
The DDS Security StandardAngelo Corsaro
 
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
 
Comparison of MQTT and DDS as M2M Protocols for the Internet of Things
Comparison of MQTT and DDS as M2M Protocols for the Internet of ThingsComparison of MQTT and DDS as M2M Protocols for the Internet of Things
Comparison of MQTT and DDS as M2M Protocols for the Internet of ThingsReal-Time Innovations (RTI)
 
Tuning and Troubleshooting OpenSplice DDS Applications
Tuning and Troubleshooting OpenSplice DDS ApplicationsTuning and Troubleshooting OpenSplice DDS Applications
Tuning and Troubleshooting OpenSplice DDS ApplicationsAngelo Corsaro
 
DDS Advanced Tutorial - OMG June 2013 Berlin Meeting
DDS Advanced Tutorial - OMG June 2013 Berlin MeetingDDS Advanced Tutorial - OMG June 2013 Berlin Meeting
DDS Advanced Tutorial - OMG June 2013 Berlin MeetingJaime Martin Losa
 
RTI DDS Intro with DDS Secure
RTI DDS Intro with DDS SecureRTI DDS Intro with DDS Secure
RTI DDS Intro with DDS SecureJohn Breitenbach
 
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
 
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
 

Mais procurados (20)

The Data Distribution Service Tutorial
The Data Distribution Service TutorialThe Data Distribution Service Tutorial
The Data Distribution Service Tutorial
 
The Data Distribution Service Tutorial
The Data Distribution Service TutorialThe Data Distribution Service Tutorial
The Data Distribution Service Tutorial
 
DDS: The IoT Data Sharing Standard
DDS: The IoT Data Sharing StandardDDS: The IoT Data Sharing Standard
DDS: The IoT Data Sharing Standard
 
10 Reasons for Choosing OpenSplice DDS
10 Reasons for Choosing OpenSplice DDS10 Reasons for Choosing OpenSplice DDS
10 Reasons for Choosing OpenSplice DDS
 
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
 
DDS Over Low Bandwidth Data Links
DDS Over Low Bandwidth Data LinksDDS Over Low Bandwidth Data Links
DDS Over Low Bandwidth Data Links
 
Best Practices Using RTI Connext DDS
Best Practices Using RTI Connext DDSBest Practices Using RTI Connext DDS
Best Practices Using RTI Connext DDS
 
The Data Distribution Service
The Data Distribution ServiceThe Data Distribution Service
The Data Distribution Service
 
OMG DDS: The Data Distribution Service for Real-Time Systems
OMG DDS: The Data Distribution Service for Real-Time SystemsOMG DDS: The Data Distribution Service for Real-Time Systems
OMG DDS: The Data Distribution Service for Real-Time Systems
 
The DDS Security Standard
The DDS Security StandardThe DDS Security Standard
The DDS Security Standard
 
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
 
Comparison of MQTT and DDS as M2M Protocols for the Internet of Things
Comparison of MQTT and DDS as M2M Protocols for the Internet of ThingsComparison of MQTT and DDS as M2M Protocols for the Internet of Things
Comparison of MQTT and DDS as M2M Protocols for the Internet of Things
 
Tuning and Troubleshooting OpenSplice DDS Applications
Tuning and Troubleshooting OpenSplice DDS ApplicationsTuning and Troubleshooting OpenSplice DDS Applications
Tuning and Troubleshooting OpenSplice DDS Applications
 
DDS Advanced Tutorial - OMG June 2013 Berlin Meeting
DDS Advanced Tutorial - OMG June 2013 Berlin MeetingDDS Advanced Tutorial - OMG June 2013 Berlin Meeting
DDS Advanced Tutorial - OMG June 2013 Berlin Meeting
 
UML Profile for DDS
UML Profile for DDSUML Profile for DDS
UML Profile for DDS
 
DDS In Action Part II
DDS In Action Part IIDDS In Action Part II
DDS In Action Part II
 
Zenoh Tutorial
Zenoh TutorialZenoh Tutorial
Zenoh Tutorial
 
RTI DDS Intro with DDS Secure
RTI DDS Intro with DDS SecureRTI DDS Intro with DDS Secure
RTI DDS Intro with DDS Secure
 
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
 
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
 

Destaque

20 Tips for OpenSplice Newbies
20 Tips for OpenSplice Newbies20 Tips for OpenSplice Newbies
20 Tips for OpenSplice NewbiesAngelo Corsaro
 
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
 
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
 
Advanced OpenSplice Programming - Part I
Advanced OpenSplice Programming - Part IAdvanced OpenSplice Programming - Part I
Advanced OpenSplice Programming - Part IAngelo Corsaro
 
Advanced OpenSplice Programming - Part II
Advanced OpenSplice Programming - Part IIAdvanced OpenSplice Programming - Part II
Advanced OpenSplice Programming - Part IIAngelo 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
 
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
 
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
 
Standardizing the Data Distribution Service (DDS) API for Modern C++
Standardizing the Data Distribution Service (DDS) API for Modern C++Standardizing the Data Distribution Service (DDS) API for Modern C++
Standardizing the Data Distribution Service (DDS) API for Modern C++Sumant Tambe
 
RUSTing -- Partially Ordered Rust Programming Ruminations
RUSTing -- Partially Ordered Rust Programming RuminationsRUSTing -- Partially Ordered Rust Programming Ruminations
RUSTing -- Partially Ordered Rust Programming RuminationsAngelo Corsaro
 
Corporate Disclosure From An Investors Perspective 2006
Corporate Disclosure From An Investors Perspective  2006Corporate Disclosure From An Investors Perspective  2006
Corporate Disclosure From An Investors Perspective 2006Reed Kathrein
 
La coruña
La coruñaLa coruña
La coruñaC FM
 

Destaque (20)

20 Tips for OpenSplice Newbies
20 Tips for OpenSplice Newbies20 Tips for OpenSplice Newbies
20 Tips for OpenSplice Newbies
 
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
 
OpenSplice DDS v6
OpenSplice DDS v6OpenSplice DDS v6
OpenSplice DDS v6
 
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
 
Advanced OpenSplice Programming - Part I
Advanced OpenSplice Programming - Part IAdvanced OpenSplice Programming - Part I
Advanced OpenSplice Programming - Part I
 
Advanced OpenSplice Programming - Part II
Advanced OpenSplice Programming - Part IIAdvanced OpenSplice Programming - Part II
Advanced OpenSplice Programming - Part II
 
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
 
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.
 
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
 
Standardizing the Data Distribution Service (DDS) API for Modern C++
Standardizing the Data Distribution Service (DDS) API for Modern C++Standardizing the Data Distribution Service (DDS) API for Modern C++
Standardizing the Data Distribution Service (DDS) API for Modern C++
 
RUSTing -- Partially Ordered Rust Programming Ruminations
RUSTing -- Partially Ordered Rust Programming RuminationsRUSTing -- Partially Ordered Rust Programming Ruminations
RUSTing -- Partially Ordered Rust Programming Ruminations
 
Corporate Disclosure From An Investors Perspective 2006
Corporate Disclosure From An Investors Perspective  2006Corporate Disclosure From An Investors Perspective  2006
Corporate Disclosure From An Investors Perspective 2006
 
La coruña
La coruñaLa coruña
La coruña
 

Semelhante a OpenSplice DDS Tutorial -- Part II

Introduction to DDS: Context, Information Model, Security, and Applications.
Introduction to DDS: Context, Information Model, Security, and Applications.Introduction to DDS: Context, Information Model, Security, and Applications.
Introduction to DDS: Context, Information Model, Security, and Applications.Gerardo Pardo-Castellote
 
Deep Dive into the OPC UA / DDS Gateway Specification
Deep Dive into the OPC UA / DDS Gateway SpecificationDeep Dive into the OPC UA / DDS Gateway Specification
Deep Dive into the OPC UA / DDS Gateway SpecificationGerardo Pardo-Castellote
 
Distributed Algorithms with DDS
Distributed Algorithms with DDSDistributed Algorithms with DDS
Distributed Algorithms with DDSAngelo Corsaro
 
Reactive Data Centric Architectures with DDS
Reactive Data Centric Architectures with DDSReactive Data Centric Architectures with DDS
Reactive Data Centric Architectures with DDSAngelo Corsaro
 
Connected Mobile and Web Applications with PrismTech Vortex Data Sharing Plat...
Connected Mobile and Web Applications with PrismTech Vortex Data Sharing Plat...Connected Mobile and Web Applications with PrismTech Vortex Data Sharing Plat...
Connected Mobile and Web Applications with PrismTech Vortex Data Sharing Plat...ADLINK Technology IoT
 
DDS and OPC UA Explained
DDS and OPC UA ExplainedDDS and OPC UA Explained
DDS and OPC UA ExplainedAngelo Corsaro
 
Real Time Java DDS
Real Time Java DDSReal Time Java DDS
Real Time Java DDSkerush
 
JoTechies - Azure SQL DB
JoTechies - Azure SQL DBJoTechies - Azure SQL DB
JoTechies - Azure SQL DBJoTechies
 
DDS tutorial with connector
DDS tutorial with connectorDDS tutorial with connector
DDS tutorial with connectorJavier Povedano
 
Distributed Systems: How to connect your real-time applications
Distributed Systems: How to connect your real-time applicationsDistributed Systems: How to connect your real-time applications
Distributed Systems: How to connect your real-time applicationsJaime Martin Losa
 
Case Study _Cloud Native Transformation Deploying Integration workloads to AK...
Case Study _Cloud Native Transformation Deploying Integration workloads to AK...Case Study _Cloud Native Transformation Deploying Integration workloads to AK...
Case Study _Cloud Native Transformation Deploying Integration workloads to AK...Srikanth Prathipati
 
Creating a Python Microservice Tier in Four Sprints with Cassandra, Kafka, an...
Creating a Python Microservice Tier in Four Sprints with Cassandra, Kafka, an...Creating a Python Microservice Tier in Four Sprints with Cassandra, Kafka, an...
Creating a Python Microservice Tier in Four Sprints with Cassandra, Kafka, an...Jeffrey Carpenter
 
MBSE meets Industrial IoT: Introducing the New MagicDraw Plug-in for RTI Co...
MBSE meets Industrial IoT: Introducing the New MagicDraw Plug-in for RTI Co...MBSE meets Industrial IoT: Introducing the New MagicDraw Plug-in for RTI Co...
MBSE meets Industrial IoT: Introducing the New MagicDraw Plug-in for RTI Co...Istvan Rath
 
Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe
Desktop, Embedded and Mobile Apps with PrismTech Vortex CafeDesktop, Embedded and Mobile Apps with PrismTech Vortex Cafe
Desktop, Embedded and Mobile Apps with PrismTech Vortex CafeADLINK Technology IoT
 
IRJET- A Survey on Remote Data Possession Verification Protocol in Cloud Storage
IRJET- A Survey on Remote Data Possession Verification Protocol in Cloud StorageIRJET- A Survey on Remote Data Possession Verification Protocol in Cloud Storage
IRJET- A Survey on Remote Data Possession Verification Protocol in Cloud StorageIRJET Journal
 
Optimizing Lustre and GPFS with DDN
Optimizing Lustre and GPFS with DDNOptimizing Lustre and GPFS with DDN
Optimizing Lustre and GPFS with DDNinside-BigData.com
 

Semelhante a OpenSplice DDS Tutorial -- Part II (20)

Vortex Tutorial Part 2
Vortex Tutorial Part 2Vortex Tutorial Part 2
Vortex Tutorial Part 2
 
Introduction to DDS: Context, Information Model, Security, and Applications.
Introduction to DDS: Context, Information Model, Security, and Applications.Introduction to DDS: Context, Information Model, Security, and Applications.
Introduction to DDS: Context, Information Model, Security, and Applications.
 
Deep Dive into the OPC UA / DDS Gateway Specification
Deep Dive into the OPC UA / DDS Gateway SpecificationDeep Dive into the OPC UA / DDS Gateway Specification
Deep Dive into the OPC UA / DDS Gateway Specification
 
Distributed Algorithms with DDS
Distributed Algorithms with DDSDistributed Algorithms with DDS
Distributed Algorithms with DDS
 
Introducing Vortex Lite
Introducing Vortex LiteIntroducing Vortex Lite
Introducing Vortex Lite
 
Reactive Data Centric Architectures with DDS
Reactive Data Centric Architectures with DDSReactive Data Centric Architectures with DDS
Reactive Data Centric Architectures with DDS
 
Connected Mobile and Web Applications with PrismTech Vortex Data Sharing Plat...
Connected Mobile and Web Applications with PrismTech Vortex Data Sharing Plat...Connected Mobile and Web Applications with PrismTech Vortex Data Sharing Plat...
Connected Mobile and Web Applications with PrismTech Vortex Data Sharing Plat...
 
DDS and OPC UA Explained
DDS and OPC UA ExplainedDDS and OPC UA Explained
DDS and OPC UA Explained
 
Real Time Java DDS
Real Time Java DDSReal Time Java DDS
Real Time Java DDS
 
JoTechies - Azure SQL DB
JoTechies - Azure SQL DBJoTechies - Azure SQL DB
JoTechies - Azure SQL DB
 
DDS tutorial with connector
DDS tutorial with connectorDDS tutorial with connector
DDS tutorial with connector
 
PrismTech Vortex Tutorial Part 1
PrismTech Vortex Tutorial Part 1PrismTech Vortex Tutorial Part 1
PrismTech Vortex Tutorial Part 1
 
Distributed Systems: How to connect your real-time applications
Distributed Systems: How to connect your real-time applicationsDistributed Systems: How to connect your real-time applications
Distributed Systems: How to connect your real-time applications
 
Case Study _Cloud Native Transformation Deploying Integration workloads to AK...
Case Study _Cloud Native Transformation Deploying Integration workloads to AK...Case Study _Cloud Native Transformation Deploying Integration workloads to AK...
Case Study _Cloud Native Transformation Deploying Integration workloads to AK...
 
Creating a Python Microservice Tier in Four Sprints with Cassandra, Kafka, an...
Creating a Python Microservice Tier in Four Sprints with Cassandra, Kafka, an...Creating a Python Microservice Tier in Four Sprints with Cassandra, Kafka, an...
Creating a Python Microservice Tier in Four Sprints with Cassandra, Kafka, an...
 
MBSE meets Industrial IoT: Introducing the New MagicDraw Plug-in for RTI Co...
MBSE meets Industrial IoT: Introducing the New MagicDraw Plug-in for RTI Co...MBSE meets Industrial IoT: Introducing the New MagicDraw Plug-in for RTI Co...
MBSE meets Industrial IoT: Introducing the New MagicDraw Plug-in for RTI Co...
 
INFO
INFOINFO
INFO
 
Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe
Desktop, Embedded and Mobile Apps with PrismTech Vortex CafeDesktop, Embedded and Mobile Apps with PrismTech Vortex Cafe
Desktop, Embedded and Mobile Apps with PrismTech Vortex Cafe
 
IRJET- A Survey on Remote Data Possession Verification Protocol in Cloud Storage
IRJET- A Survey on Remote Data Possession Verification Protocol in Cloud StorageIRJET- A Survey on Remote Data Possession Verification Protocol in Cloud Storage
IRJET- A Survey on Remote Data Possession Verification Protocol in Cloud Storage
 
Optimizing Lustre and GPFS with DDN
Optimizing Lustre and GPFS with DDNOptimizing Lustre and GPFS with DDN
Optimizing Lustre and GPFS with DDN
 

Mais 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 -- 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
 
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
 
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
 
The Cloudy, Foggy and Misty Internet of Things -- Toward Fluid IoT Architect...
The Cloudy, Foggy and Misty Internet of Things --  Toward Fluid IoT Architect...The Cloudy, Foggy and Misty Internet of Things --  Toward Fluid IoT Architect...
The Cloudy, Foggy and Misty Internet of Things -- Toward Fluid IoT Architect...Angelo Corsaro
 
Fluid IoT Architectures
Fluid IoT ArchitecturesFluid IoT Architectures
Fluid IoT ArchitecturesAngelo Corsaro
 
Building IoT Applications with Vortex and the Intel Edison Starter Kit
Building IoT Applications with Vortex and the Intel Edison Starter KitBuilding IoT Applications with Vortex and the Intel Edison Starter Kit
Building IoT Applications with Vortex and the Intel Edison Starter KitAngelo Corsaro
 
Microservices Architecture with Vortex — Part II
Microservices Architecture with Vortex — Part IIMicroservices Architecture with Vortex — Part II
Microservices Architecture with Vortex — Part IIAngelo Corsaro
 

Mais 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
 
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 -- 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
 
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
 
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
 
The Cloudy, Foggy and Misty Internet of Things -- Toward Fluid IoT Architect...
The Cloudy, Foggy and Misty Internet of Things --  Toward Fluid IoT Architect...The Cloudy, Foggy and Misty Internet of Things --  Toward Fluid IoT Architect...
The Cloudy, Foggy and Misty Internet of Things -- Toward Fluid IoT Architect...
 
Fluid IoT Architectures
Fluid IoT ArchitecturesFluid IoT Architectures
Fluid IoT Architectures
 
Building IoT Applications with Vortex and the Intel Edison Starter Kit
Building IoT Applications with Vortex and the Intel Edison Starter KitBuilding IoT Applications with Vortex and the Intel Edison Starter Kit
Building IoT Applications with Vortex and the Intel Edison Starter Kit
 
Microservices Architecture with Vortex — Part II
Microservices Architecture with Vortex — Part IIMicroservices Architecture with Vortex — Part II
Microservices Architecture with Vortex — Part II
 

Último

Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 

Último (20)

Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 

OpenSplice DDS Tutorial -- Part II

  • 1. OpenSplice | DDS Tutorial -- Part II -Angelo CORSARO, Ph.D. Chief Technology Officer OMG DDS Sig Co-Chair PrismTech angelo.corsaro@prismtech.com
  • 3. DDS is a standard technology for ubiquitous, interoperable, secure, platform independent, and real-time data sharing across network connected devices
  • 4. Data Distribution Service (DDS) • DDS’ Global Data Space is fully distributed, highly efficient and scalable Data Writer QoS Data Writer TopicD Data Reader QoS TopicA Data Writer QoS QoS TopicC Data Reader TopicB ... Data Writer Data Reader DDS Global Data Space Copyright  2013,  PrismTech  –    All  Rights  Reserved. • DDS provides a Global Data Space abstraction that allow applications to autonomously, anonymously, securely and efficiently share data Data Reader
  • 5. DDS Entities Domain (e.g. Domain 123) Domain Participant Topic Partition (e.g. “Telemetry”, “Shapes”, ) Topic Instances/Samples Ta • • • • Tb Publisher Subscriber Tx Ty Tc DataWrter DataReader DomainParticipant: Provides access to a data cloud -- called a domain in DDS Topic: Domain-wide definition of a kind of Information Publisher/Subscriber: Provide scope to data sharing through the concept of partitions DataReader/DataWriter: Allow to read/write data for a given topic in the partitions their Subscriber/Publisher are associated with. Copyright  2013,  PrismTech  –    All  Rights  Reserved. T1 T1 T3
  • 8. QoS Model • QoS-Policies control local and endto-end properties of DDS entities Type Matching Local properties controlled by QoS are related resource usage QoS matching QoS QoS QoS • • Some QoS-Policies are matched based on a Request vs. Offered (RxO) Model QoS QoS Topic Name Publisher End-to-end properties controlled by QoS are related to temporal and spatial aspects of data distribution QoS QoS ... DataWriter writes Type reads Subscriber DataReader ... ... DomainParticipant DataWriter writes Type reads DataReader DomainParticipant Name Topic QoS QoS QoS Copyright  2013,  PrismTech  –    All  Rights  Reserved. •
  • 9. QoS Policies [T: Topic] [DR: DataReader] [DW: DataWriter] [P: Publisher] [S: Subscriber] Applicability RxO Modifiable USER_DATA DP, DR, DW N Y TOPIC_DATA T N Y GROUP_DATA P, S N Y DURABILITY T, DR, DW Y N DURABILITY SERVICE T, DW N N HISTORY T, DR, DW N N PRESENTATION P, S Y N RELIABILITY T, DR, DW Y N PARTITION P, S N Y DESTINATION ORDER T, DR, DW Y N LIFESPAN T, DW N Y Configuration Data Availability Data Delivery Copyright  2013,  PrismTech  –    All  Rights  Reserved. QoS Policy [DP: Domain Participant]
  • 10. QoS Policies [T: Topic] [DR: DataReader] [DW: DataWriter] [P: Publisher] [S: Subscriber] QoS Policy Applicability RxO Modifiable DEADLINE T, DR, DW Y Y LATENCY BUDGET T, DR, DW Y [DP: Domain Participant] Y Temporal/ Importance Characteristics T, DW N Y TIME BASED FILTER DR N Y OWNERSHIP T, DR, DW Y N OWNERSHIP STRENGTH DW N Y Replication LIVELINESS T, DR, DW Y N Fault-Detection Copyright  2013,  PrismTech  –    All  Rights  Reserved. TRANSPORT PRIORITY
  • 11. QoS DSL • • The ISO C++ and Java 5 APIs provide DSL for dealing with QoS Policies configuration • Policies as well as Entity QoS are immutable — this allows for better safety and object sharing • Policies are treated as algebraic data types and the DSL provide constructors of each of the cases • A QoS Provider can now be used to retrieve QoS settings from external sources, e.g. a file, an HTTP server, DDS durability Copyright  2013,  PrismTech  –    All  Rights  Reserved. The DSL uses language specific idioms, such as fluid interfaces, as well as specific features of the languages
  • 12. C++ QoS Policy DSL //      ==  ISO  C++  DDS  API  ==   ! ! DataWriterQos  dwqos  =  pub.default_datawriter_qos()     !    <<  History.KeepLast(10)      <<  Durability.Transient();   Copyright  2013,  PrismTech  –    All  Rights  Reserved. !
  • 13. Java 5 QoS Policy DSL //      ==  Java  5  DDS  API  ==   ! final  PolicyFactory  pf  =  ...   ! DataWriterQos  dwqos  =  pub.getDefaultDataWriterQos()   !   .withPolicies  (       pf.History.withKeepLast(10),       pf.Durability.withTransient(),      );   ! Copyright  2013,  PrismTech  –    All  Rights  Reserved. !
  • 14. Data Delivery Reliability Data Delivery Presentation Copyright  2013,  PrismTech  –    All  Rights  Reserved. Partition Destination Order
  • 15. Reliability QoS Policy The Reliability Policy controls the level of guarantee offered by the DDS in delivering data to subscribers • Best Effort. Indicates that it is acceptable not to retry propagation of samples Copyright  2013,  PrismTech  –    All  Rights  Reserved. • Reliable. In steady-state, and with no data writer crashes, guarantees that all samples in the DataWriter history will eventually be delivered to all the DataReader QoS Policy Applicability RxO Modifiable RELIABILITY T, DR, DW Y N
  • 16. Setting Reliability Policy //      ==  ISO  C++  DDS  API  ==   ! //  Reliable  Reliability   DataWriterQos  dwqos  =     !      pub.default_datawriter_qos()  <<  Reliability.Reliable();   ! //  Best-­‐Effort  Reliability   DataWriterQos  dwqos  =          pub.default_datawriter_qos()  <<  Reliability.BestEffort();   Copyright  2013,  PrismTech  –    All  Rights  Reserved. !
  • 17. Setting Reliability Policy //      ==  Java  5  DDS  API  ==   ! final  PolicyFactory  pf  =  ...   ! //  Reliable  Reliability   DataWriterQos  dwqos  =     !      pub.getDefaultDataWriterQos()   !            .withPolicies(pf.Reliability.withReliable());     //  Best-­‐Effort  Reliability   DataWriterQos  dwqos  =          pub.getDefaultDataWriterQos()              .withPolicies(pf.Reliability.withBestEffort());     Copyright  2013,  PrismTech  –    All  Rights  Reserved. !
  • 18. Partitions • Partitions are the mechanism provided by DDS to organise information within a domain • • Access to partitions is controlled through QoS Policies • “system:telemetry”   • “system:log”   • “data:row-­‐2:col-­‐3”   • Partitions addressed by name or regular expressions: • • “data:row-­‐2:col-­‐*” ”system:telemetry”   Partitions Copyright  2013,  PrismTech  –    All  Rights  Reserved. Partitions are defined as strings:
  • 19. Partition QoS Policy The Partition QoS Policy can be used as subjects for organising the flows of data • The Partition QoS Policy is used to connect Publishers/Subscribers to a Partitions’ List which might also contain wildcards, e.g. tracks.* • Topics instances are published and subscribed across one or more Partitions Partitions Copyright  2013,  PrismTech  –    All  Rights  Reserved. •
  • 20. Setting Partition QoS Policy //      ==  ISO  C++  DDS  API  ==   ! //  Setting  a  Partition   PublisherQos  pqos  =     !      dp.default_publisher_qos()  <<  Partition(“MyPartition”);   ! //  Setting  a  List  of  Partitions   PublisherQos  pqos  =          dp.default_publisher_qos()  <<  Partition(myPartitionList); Copyright  2013,  PrismTech  –    All  Rights  Reserved. !
  • 21. Setting Partition QoS Policy //      ==  Java  5  DDS  API  ==   ! final  PolicyFactory  pf  =  ...   ! //  Setting  a  Partition   PublisherQos  pqos  =     !      dp.getDefaultPublisherQos()   !            .withPolicies(pf.Partition(“MyPartition”));     //  Setting  a  List  of  Partitions   PublisherQos  pqos  =          dp.getDefaultPublisherQos()              .withPolicies(pf.Partition(myPartitionList));     Copyright  2013,  PrismTech  –    All  Rights  Reserved. !
  • 22. Data Availability History Durability Ownership Ownership Strength Copyright  2013,  PrismTech  –    All  Rights  Reserved. Lifespan Data Availability
  • 23. History QoS Policy 3 time 2 time 3 4 e ssur Pre KeepLast(3) The DataWriter HISTORY QoS Policy controls the amount of data that can be made available to late joining DataReaders under TRANSIENT_LOCAL Durability The DataReader HISTORY QoS Policy controls how many samples will be kept on the reader cache • Keep Last. DDS will keep the most recent “depth” samples of each instance of data identified by its key • Keep All. The DDS keep all the samples of each instance of data identified by its key -- up to reaching some configurable resource limits time KeepAll QoS Policy HISTORY Applicability T, DR, DW RxO N Modifiable N Copyright  2013,  PrismTech  –    All  Rights  Reserved. 1 2 e ssur Pre 0 1 e ssur Pre 0 KeepLast(1)
  • 24. Durability QoS Policy The DURABILITY QoS controls the data availability w.r.t. late joiners, specifically the DDS provides the following variants: • • Volatile. No need to keep data instances for late joining data readers • • Transient. Data instance availability outlives the data writer Copyright  2013,  PrismTech  –    All  Rights  Reserved. Transient Local. Data instance availability for late joining data reader is tied to the data writer availability Persistent. Data instance availability outlives system restarts QoS Policy Applicability DURABILITY T, DR, DW RxO Y Modifiable N
  • 25. Volatile Durability Data Writer QoS TopicA • • Data Reader No Time Decoupling Readers get only data produced after they joined the Global Data Space Copyright  2013,  PrismTech  –    All  Rights  Reserved. 1
  • 26. Volatile Durability Late Joiner ! ! Data Reader Data Writer QoS TopicA Data Reader • • No Time Decoupling Readers get only data produced after they joined the Global Data Space Copyright  2013,  PrismTech  –    All  Rights  Reserved. 1
  • 27. Volatile Durability Late Joiner ! ! Data Reader Data Writer 2 QoS TopicA Data Reader • • No Time Decoupling Readers get only data produced after they joined the Global Data Space Copyright  2013,  PrismTech  –    All  Rights  Reserved. 1
  • 28. Transient Local Durability Data Writer QoS TopicA • • Data Reader Some Time Decoupling Data availability is tied to the availability of the data writer and the history settings Copyright  2013,  PrismTech  –    All  Rights  Reserved. 1
  • 29. Transient Local Durability Late Joiner ! ! Data Reader Data Writer 1 QoS TopicA Data Reader • • Some Time Decoupling Data availability is tied to the availability of the data writer and the history settings Copyright  2013,  PrismTech  –    All  Rights  Reserved. 1
  • 30. Transient-Local Durability Data Reader Data Writer 1 2 1 QoS TopicA Data Reader • • Some Time Decoupling Data availability is tied to the availability of the data writer and the history settings Copyright  2013,  PrismTech  –    All  Rights  Reserved. 1
  • 31. Transient Durability Data Writer QoS TopicA 1 • • Time Decoupling Data availability is tied to the availability of the durability service Data Reader Copyright  2013,  PrismTech  –    All  Rights  Reserved. 1
  • 32. Transient Durability Late Joiner ! ! Data Reader Data Writer QoS TopicA Data Reader 1 • • Time Decoupling Data availability is tied to the availability of the durability service Copyright  2013,  PrismTech  –    All  Rights  Reserved. 1
  • 33. Transient Durability Data Reader Data Writer 1 2 QoS TopicA 2 Data Reader 1 • • Time Decoupling Data availability is tied to the availability of the durability service Copyright  2013,  PrismTech  –    All  Rights  Reserved. 1
  • 34. Transient Durability Data Reader 2 1 QoS TopicA 1 2 • • Time Decoupling Data availability is tied to the availability of the durability service 1 Copyright  2013,  PrismTech  –    All  Rights  Reserved. 2 Data Reader
  • 35. Transient Durability Data Reader 2 1 QoS TopicA 1 2 1 ! Data Reader ! • • Time Decoupling Late Joiner Data availability is tied to the availability of the durability service Copyright  2013,  PrismTech  –    All  Rights  Reserved. 2 Data Reader
  • 36. Setting the Durability Policy //      ==  Java  5  DDS  API  ==   ! final  PolicyFactory  pf  =  ...   ! ! //  Setting  TransientLocalDurability   PublisherQos  pqos  =          dp.getDefaultPublisherQos()              .withPolicies(pf.Durability().withTransientLocal());     ! Copyright  2013,  PrismTech  –    All  Rights  Reserved. !
  • 37. Ownership QoS Policy Availability of data producers can be controlled via two QoS Policies • • • OWNERSHIP (SHARED vs. EXCLUSIVE) • Writer strength is used to coordinate replicated writers Instances of exclusively owned Topics can be modified (are owned) by the higher strength writer QoS Policy OWNERSHIP STRENGTH Applicability T, DR, DW DW RxO Y N Modifiable N Y Copyright  2013,  PrismTech  –    All  Rights  Reserved. OWNERSHIP STRENGTH
  • 39. Latency Budget • The LATENCY_BUDGET QoS policy specifies the maximum acceptable delay from the time the data is written until the data is inserted in the receiver's application-cache QoS Policy Applicability LATENCY T, DR, DW BUDGET RxO Y Modifiable Y Latency = T1+T2+T3 A non-zero latency-budget allows a DDS implementation to batch samples and improve CPU/Network utilisation DataWriter T3 T1 Batching T2 DataReader Copyright  2013,  PrismTech  –    All  Rights  Reserved. •
  • 40. Deadline QoS Policy The DEADLINE QoS policy defines the maximum inter-arrival time between data samples RxO Y Modifiable Y DataWriter indicates that the application commits to write a new sample at least once every deadline period DataWriter • Applicability T, DR, DW DataReaders are notified when the DEADLINE is violated Deadline Deadline Deadline Deadline Violation Deadline Deadline DataReader Copyright  2013,  PrismTech  –    All  Rights  Reserved. • QoS Policy DEADLINE
  • 41. Transport Priority QoS Policy QoS Policy Applicability RxO Modifiable TRANSPORT PRIORITY T, DW N Y Copyright  2013,  PrismTech  –    All  Rights  Reserved. • The TRANSPORT_PRIORITY QoS policy is a hint to the infrastructure as to how to set the priority of the underlying transport used to send the data.
  • 42. Time-Based Filter QoS Policy • The Time Based Filter allows to control the throughput at which data is received by a data reader Samples produced more often than the minimum inter-arrival time are not delivered to the data reader QoS Policy Applicability RxO Modifiable TIME BASED FILTER DR N Y mit Latency = T1+T2+T3 DataWriter T3 DataReader T2 Copyright  2013,  PrismTech  –    All  Rights  Reserved. • mit mit mit mit = minimum inter-arrival time produced sample delivered sample discarded sample
  • 43. QoS Provider This class allows to externally define policies and decouples the mechanism used to define and access policy definition with policy creation            //  QosProvider...              QosProvider  qos_provider(   !                        "http://www.opensplice.org/demo/config/qos.xml",                          "ishapes-­‐profile");   ! !            DataReader<ShapeType>  dr(sub,  topic,  qos_provider.datareader_qos());   Copyright  2013,  PrismTech  –    All  Rights  Reserved. • • The new C++ and Java APIs introduce the concept of a QoS Provider
  • 44. Demo: QoS in Action
  • 45. Shapes Application • The iShapes application is used by DDS vendors to demonstrate some of the basic mechanism as well as product interoperability • Three Topics • One Type struct ShapeType { string color; long x; long y; long shapesize; }; #pragma keylist ShapeType color Spotted shapes represent subscriptions Pierced shapes represent publications Copyright  2013,  PrismTech  –    All  Rights  Reserved. • Circle, Square, Triangle
  • 47. Soft State In distributed systems you often need to model soft-state -- a state that is periodically updated • Examples are the reading of a sensor (e.g. Temperature Sensor), the position of a vehicle, etc. • The QoS combination to model Soft-State is the following: Reliability            =>    BestEffort   Durability              =>    Volatile     History                    =>    KeepLast(n)  [with  n  =  1  in  most  of  the  cases]   Deadline                  =>    updatePeriod   LatencyBudget        =>    updatePeriod/3  [rule  of  thumb]   DestinationOrder  =>    SourceTimestamp  [if  multiple  writers  per  instance] Copyright  2013,  PrismTech  –    All  Rights  Reserved. •
  • 48. Hard State • In distributed systems you often need to model hard-state -- a state that is sporadically updated and that often has temporal persistence requirements • • Examples are system configuration, a price estimate, etc. Reliability            =>    Reliable   Durability              =>    Transient  |  Persistent     History                    =>    KeepLast(n)  [with  n  =  1  in  most  of  the  cases]   DestinationOrder  =>    SourceTimestamp  [if  multiple  writers  per  instance] Copyright  2013,  PrismTech  –    All  Rights  Reserved. The QoS combination to model Hard-State is the following:
  • 49. Events In distributed systems you often need to model events -- the occurrence of something noteworthy for our system • Examples are a collision alert, the temperature beyond a given threshold, etc. • The QoS combination to model Events is the following: Reliability            =>    Reliable   Durability              =>    any                [depends  on  system  requirements]     History                    =>    KeepAll  [on  both  DataWriter  and  DataReader!]   DestinationOrder  =>    SourceTimestamp Copyright  2013,  PrismTech  –    All  Rights  Reserved. •
  • 51. Reading Samples Samples can be read from the Data Reader History Cache The action of reading a sample is non-destructive. Samples are not removed from the cache DataReader DataReader ... DataReader Cache read ... DataReader Cache Copyright  2013,  PrismTech  –    All  Rights  Reserved. • •
  • 52. Taking Samples Samples can be taken from the Data Reader History Cache The action of taking a sample is destructive. Samples are removed from the cache DataReader DataReader ... DataReader Cache take ... DataReader Cache Copyright  2013,  PrismTech  –    All  Rights  Reserved. • •
  • 53. Sample Selectors DDS provides some very flexible mechanisms for selecting the samples to be read/take: • • • Content Status These mechanisms are composable Copyright  2013,  PrismTech  –    All  Rights  Reserved. •
  • 55. Filters and Queries • DDS Filters allow to control what gets into a DataReader cache • DDS Queries allow to control what gets out of a DataReader cache Application Query DataReader Filters are defined by means of ContentFilteredTopics • Filters and Queries are expressed as SQL where clauses DataReader Cache Filter Copyright  2013,  PrismTech  –    All  Rights  Reserved. Queries operate in conjunction with read operations ... • ... ... ... •
  • 56. // == ISO C++ DDS API ! // Create a Topic auto topic = Topic<ShapeType>(dp, “Circle”); ! // 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) Copyright  2013,  PrismTech  –    All  Rights  Reserved. Filters struct ShapeType { string color; long x; long y; long shapesize; }; #pragma keylist ShapeType color
  • 57. Filters struct ShapeType { string color; long x; long y; long shapesize; }; #pragma keylist ShapeType color ! final  PolicyFactory  pf  =  runtime.policyFactory();        final  DataReaderQos  drqos  =              sub.getDefaultDataReaderQos()  !                .withPolicy  (   !                          pf.ContentFilter()                                  .withFilter(                                          new  JavaScriptFilter<ShapeType>("data.x  >  data.y"))                    );   ! final  DataReader<ShapeType>  dr  =  sub.createDataReader(shape,  drqos); Copyright  2013,  PrismTech  –    All  Rights  Reserved. //      ==  Java  5DDS  API  ==  
  • 58. Query struct ShapeType { string color; long x; long y; long shapesize; }; #pragma keylist ShapeType color //      ==  ISO  C++  DDS  API  ==   ! //  Define  filter  expression  and  parameters   ! auto  dr  =  DataReader<ShapeType>(sub,  topic)     val  query  =  Query(dr,  “x  <  100  AND  y  <  200”);   ! ! Copyright  2013,  PrismTech  –    All  Rights  Reserved. dr.select()          .content(query)          .read();
  • 59. Query struct ShapeType { string color; long x; long y; long shapesize; }; #pragma keylist ShapeType color //      ==  Java  5  DDS  API  ==   ! Filter<ShapeType>  filter  =                                             !      new  JavaScriptFilter<ShapeType>("data.x  >  data.y"))   ! ! ! Copyright  2013,  PrismTech  –    All  Rights  Reserved. dr.select()          .content(filter)          .read();
  • 60. Instances • DDS provides a very efficient way of reading data belonging to a 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 //      ==  ISO  C++  DDS  API  ==   auto  handle  =     !      dr.lookup_instance(ShapeType(“RED”,  0,  0,  0));   ! auto  data  =              dr.select()              .instance(handle)              .read(); ! Copyright  2013,  PrismTech  –    All  Rights  Reserved. !
  • 62. Sample, Instance, and View State The samples included in the DataReader cache have associated some metainformation 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 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 Instance State (ALIVE, NOT_ALIVE_DISPOSED, NOT_ALIVE_NO_WRITERS) allows to track the life-cycle transitions of the instance to which a sample belongs Copyright  2013,  PrismTech  –    All  Rights  Reserved. •
  • 63. State Selector in Action //      ==  ISO  C++  DDS  API  ==   ! //  Read  only  new  samples   auto  data  =  dr.read()   ! ! Copyright  2013,  PrismTech  –    All  Rights  Reserved. ! //  Read  any  samples  from  live  instances   auto  data  =                  dr.select()                    .state(DataState::any_data())                    .read();
  • 64. State Selector in Action //      ==  Java  5  DDS  API  ==   ! //  Read  only  new  samples   auto  data  =  dr.read()   ! ! Copyright  2013,  PrismTech  –    All  Rights  Reserved. ! //  Read  any  samples  from  live  instances   auto  data  =                  dr.select()                  .dataState(sub.createDataState().withAnySampleState())                  .read();
  • 65. Putting all Together //      ==  ISO  C++  DDS  API  ==   ! auto  data  =     !      dr.select()   !                .content(query)                  .state(data_state)                  .instance(handle)            .read(); Copyright  2013,  PrismTech  –    All  Rights  Reserved. • Selectors can be composed in a flexible and expressive manner
  • 66. Application / DDS Interaction Models
  • 67. Interaction Models Polling • The application proactively polls for data availability as well as special events, such as a deadline being missed, etc. Notice that all DDS API calls, exclusion made for wait operations, are non-blocking Synchronous Notification The application synchronously waits for some conditions to be verified, e.g., data availability, instance lifecycle change, etc. Asynchronous Notification • The application registers the interest to be asynchronously notified when specific condition are satisfied, e.g. data available, a publication matched, etc. Copyright  2013,  PrismTech  –    All  Rights  Reserved. •
  • 68. Synchronous Notifications • DDS provides a mechanism known as WaitSet to synchronously wait for a condition • Condition can predicate on: communication statuses data availability data availability with specific content user-triggered conditions Copyright  2013,  PrismTech  –    All  Rights  Reserved. • • • •
  • 69. WaitSet //      ==  Java  5  DDS  API  ==   ! //  Create  the  waitset   WaitSet  ws  =  runtime.createWaitSet();   ! Subscriber.DataState  ds  =  sub.createDataState();   ! ! //  Attach  the  condition   ws.attachCondition(c);   ! //  Wait  for  the  condition   ws.wait(); Copyright  2013,  PrismTech  –    All  Rights  Reserved. //  Create  the  condition   ! Condition  c  =  dr.createReadCondition(   !               ds.withAnyViewState()                                        .with(InstanceState.ALIVE)                                        .with(SampleState.NOT_READ));  
  • 70. Asynchronous Notifications • DDS provides a mechanism known as Listeners for asynchronous notification of a given condition • Listener interest can predicate on: communication statuses data availability Copyright  2013,  PrismTech  –    All  Rights  Reserved. • •
  • 71. Listener Declaration //      ==  ISO  C++  DDS  API  ==   ! class  ShapeListener  :  public  dds::sub::NoOpDataReaderListener<ShapeType>  {   public:      ShapeListener()  {}      virtual  void  on_data_available(dds::sub::DataReader<ShapeType>&  dr)  {          auto  samples  =  dr.read();          std::for_each(samples.begin(),          samples.end(),   !        [](const  dds::sub::Sample<ShapeType>&  sample)  {     !            if  (sample.info().valid())    //  Check  if  sample  contains  valid  data                  std::cout  <<  sample.data()  <<  std::endl;          });      }   !    virtual  void  on_liveliness_changed(dds::sub::DataReader<ShapeType>&  the_reader,                  const  dds::core::status::LivelinessChangedStatus&  status)        {            std::cout  <<  ">>  Liveliness  Changed!  "  <<  std::endl;      }   };   Copyright  2013,  PrismTech  –    All  Rights  Reserved. !
  • 72. Listener Registration //      ==  ISO  C++  DDS  API  ==   ! auto  l  =  new  ShapeListener();   ! //  Create  a  “nothing”  status  mask   StatusMask  mask  =  StatusMask::none();   ! //  Add  the  statuses  we  are  interested  in.   mask  <<  StatusMask::data_available()              <<  StatusMask::liveliness_changed()              <<  StatusMask::liveliness_lost();     ! //  Register  the  listener  with  the  associated  mask   dr.listener(l,  mask);   Copyright  2013,  PrismTech  –    All  Rights  Reserved. ! !
  • 74. Can I use C++11? If you want to use C++11 in your DDS applications then you need to enable support for it. Check: • http://dev.opensplice.org/releases/downloads/docs/isocpp/html/ isocpp_customlibs.html Copyright  2013,  PrismTech  –    All  Rights  Reserved. • • OpenSplice default configuration does not require C++11
  • 75. Which DDS Implementation If you are planning to use C/C++ or C# you may consider OpenSplice DDS • If you are developing Java Applications or are interested in targeting Android then you may consider OpenSplice Mobile Copyright  2013,  PrismTech  –    All  Rights  Reserved. •
  • 76. Where can I find the Java 5 API? The Java 5 API is currently implemented only as part of OpenSplice Mobile • OpenSplice Mobile is a pure Java implementation of DDS Copyright  2013,  PrismTech  –    All  Rights  Reserved. •
  • 77. Can I “Script” DDS Applications? Assuming you deploy on the JVM then you have two options • Use the DDS Java 5 API through Scala, and then run your scala program as a script • The Molière Scala API for DDS and run the resulting program as a script Copyright  2013,  PrismTech  –    All  Rights  Reserved. • Use the DDS API from JavaScript (or any other script language supported by the JVM) and execute the script through the javax.script.ScriptEngine
  • 78. How can I Debug my DDS App? OpenSplice DDS • Use the Tuner to inspect entities and QoS OpenSplice Mobile • Use OpenSplice Monitor to inspect entities and QoS Copyright  2013,  PrismTech  –    All  Rights  Reserved. !
  • 79. Copyright  2013,  PrismTech  –    All  Rights  Reserved. OpenSplice Monitor
  • 80. Part II Summary & Concluding Remarks
  • 81. Summary & Remarks • DDS a rich set of QoS to control the key non-functional properties of data • DDS provides idiomatic API which are highly expressive and simple to use Copyright  2013,  PrismTech  –    All  Rights  Reserved. • DDS provides an elegant Data Space abstraction that allows application to share data ubiquitously and efficiently -- the Data Space implementation is fully distributed
  • 82. :: Connect with Us :: ¥opensplice.com ¥opensplice.org ¥forums.opensplice.org ¥opensplicedds@prismtech.com ¥@acorsaro ¥@prismtech ¥ crc@prismtech.com ¥youtube.com/opensplicetube ¥slideshare.net/angelo.corsaro ¥sales@prismtech.com