SlideShare a Scribd company logo
1©2015 Tail-f Systems all rights reservedFebruary 13, 2015
CDB Technical Introduction
2©2015 Tail-f Systems all rights reservedFebruary 13, 2015
CDB – ConfD Database
NETCONF SNMP REST CLI Web
CDB
Database
Data Provider API
CDB API
Management Agent API
App AppApp
ConfD Core Engine
App
External
DatabaseOperational
Data
App
• Hierarchical database
• ACID test compliant
• Atomicity, consistency, isolation, durability
• Fast, lightweight, fault-tolerant
• Compact binary XML format
• Memory resident with journal in persistent storage
• Schema automatically derived from YANG
• Supports 1:N data replication
• Supports automatic schema version
up/downgrades
• CDB can hold some or all data
• Configuration data and/or Operational data
• External database can be used in addition to or instead of
• Automatic loading of initial data
• Applications read data, then subscribe to relevant
configuration changes
• Subscription notifications with priority level
ordering
• Multiple datastores per NETCONF standards
• Startup, running, candidate, operational
3©2015 Tail-f Systems all rights reservedFebruary 13, 2015
Hierarchical
• CDB uses an Hierarchical (XML) data model
• Ideal for configuration data, which is tree structured
• No Object-Relational-Mapping (ORM) required
/ dhcp/
aaa/
voip/
defaultLe…
maxLeas…
SubNets/ subNet/
mask
range
lowAddr
highAddr
logFacility
net
4©2015 Tail-f Systems all rights reservedFebruary 13, 2015
Object Relational Mapping (ORM)
Hierarchical Relational
/ dhcp/
aaa/
voip/
defaultLe…
maxLeas…
SubNets/ subNet/
mask
range
lowAddr
highAddr
logFacility
net
5©2015 Tail-f Systems all rights reservedFebruary 13, 2015
ACID
The four properties that define a transaction:
• Atomicity
• Transactions are indivisible, all-or-nothing
• Consistency
• Transactions are all-at-once
• {create A, create B} and {create B, create A} are identical
• Independence
• Transactions do not interfere with each other
• Durability
• Committed data remains in the system even in case of a restart, etc
6©2015 Tail-f Systems all rights reservedFebruary 13, 2015
Database Storage
MO = Managed Object
(i.e. configuration consumer)
JOURNAL
START TRANSACTION
WRITE 14 TO
/some/leaf/somewhere
WRITE “hello” TO
/some/other/leaf
COMMIT
START TRANSACTION
WRITE -1 TO /foo/bar
ABORTED
START TR
ON DISK
Values stored
binary
Paths stored as
sequences of
32-bit hashes
ConfD
CDB
IN MEMORY
MO
MO
MO
7©2015 Tail-f Systems all rights reservedFebruary 13, 2015
Data Model Becomes Database Schema
Network
Element
NETCONF SNMP REST CLI Web
CDB
Database
Data Provider API
CDB API
Management Agent API
OSS/BSS
App AppApp
ConfD Core Engine
App
External
DatabaseOperational
Data
App
Management Agent API
Auto-rendered management interfaces and data schema
YANG
Data Models
8©2015 Tail-f Systems all rights reservedFebruary 13, 2015
JOURNAL
ConfD
CDB
IN MEMORY
MO
MO
MO
Database Replication
ACTIVE NODE
Journal
records
JOURNAL
ConfD
CDB
IN MEMORY
MO
MO
MO
STANDBY NODE
9©2015 Tail-f Systems all rights reservedFebruary 13, 2015
CDB Start
• CDB in-memory contents blank at this point
• Read up schema from disk
• Start transaction
• Read up data from disk
• Data on disk consistent with schema?
• If not: Trigger automatic schema upgrade (see next page)
• CDB doesn’t differentiate between up- or downgrade,
it just notices that the schema is different
• CDB does not rely on version in the namespace declaration
• Validate
• Commit
10©2015 Tail-f Systems all rights reservedFebruary 13, 2015
CDB Automatic Schema Upgrade
• Elements with default value added to schema
• Default values added to new database
• Elements removed from schema
• Values removed from new database
• Elements with trivial type changes
• Value promoted to new type in new database
• Data is converted to string representation, then to new type
• Elements with complex type changes
• No value in new database
• All other elements
• Copied as is to new database
Check the devel.log for messages about what conversions were made
11©2015 Tail-f Systems all rights reservedFebruary 13, 2015
CDB Programmatic Schema Upgrade
Then add your own upgrade clients
• Complement to the automatic schema upgrade
• Connect in start phase 0
• Compute values for the new database
• Read any old or new database values
• Compute new values
• Write (overwrite) new values
• If the schema is changed cautiously,
CDB automatic schema upgrade might be able to handle everything
12©2015 Tail-f Systems all rights reservedFebruary 13, 2015
CDB Schema Upgrade Examples
• 32-bit flag field becomes 64-bits
• New flags should be initialized to all zeros
• Automatic upgrade sufficient
• New Maximum Transfer Unit (MTU) field added
• Should be 1500 for Eth interfaces, 48 for ATM interfaces
• Upgrade client reads InterfaceType value, classifies it and writes the appropriate MTU value
• InterfaceType changed from string to enumeration
• All strings that match enumeration value are auto upgraded
• Remaining values left unset: set by upgrade client
• Time field changed from seconds to nanoseconds
• Upgrade client reads the old value, multiplies by 109 and overwrites the automatically
promoted value
13©2015 Tail-f Systems all rights reservedFebruary 13, 2015
Data Stores
• Each data store is a full copy of the configuration
• Each data store can be mapped to CDB or external data base
• Running can be split across CDB and several data bases
• 5 combinations (S+Rro, S+R, R, R+C, Rro+C)
• Operational data store
• Store status, performance or application data
CandidateStart-up Running
Operational
14©2015 Tail-f Systems all rights reservedFebruary 13, 2015
Data Stores
• Start-up
• If enabled, start-up configuration is copied to (overwriting) the running configuration at system
start
• If not enabled, configuration in running remains unchanged from last time system was running
• The first time the system starts, configuration is read from factory default files ( *_init.xml )
• Running
• Holds the currently running configuration
• Candidate
• Data store for future configuration under construction
• Copied to running to make it take effect
15©2015 Tail-f Systems all rights reservedFebruary 13, 2015
Sessions
• Session Start (login)
• Display values
• Update values
• Request Commit
• Lock data store (running, candidate, start-up)
• Run validation sequence
• Run Transaction (next slide)
• Wait for acknowledgement from standby node(s)
• Inform subscribers of changes
• Unlock data store
• Session Continues
16©2015 Tail-f Systems all rights reservedFebruary 13, 2015
Transactions
17©2015 Tail-f Systems all rights reservedFebruary 13, 2015
The Life of a Managed Object
• Subscribe to relevant configuration changes
• Read out configuration at startup
• Enter event loop
• If subscription event, react to configuration change
RESTCLINETCONF SNMP
Management Agent API
Managed Object API
MO MO
CDB
ConfD Core Engine
CDB API
Data Provider API
Web
18©2015 Tail-f Systems all rights reservedFebruary 13, 2015
Read out Configuration at Startup
• Initialization
• cdb_connect()
• cdb_start_session()
• cdb_set_namespace()
• Read elements
• cdb_get_u_int32()
• cdb_get_bool()
• cdb_get_str()
• cdb_get_ipv4()
• cdb_get_enum_hash()
• … (~30 more)
• Read many
• cdb_get_object()
• cdb_get_values()
• Count elements
• cdb_exists()
• cdb_num_instances()
• Move in data tree
• cdb_cd()
• cdb_pushd()
• Finalization
• cdb_end_session()
• cdb_close()
19©2015 Tail-f Systems all rights reservedFebruary 13, 2015
Read out Configuration at Startup
Sessions
• CDB protected with Single Writer-
Multiple Reader lock
• No configuration changes can occur
between cdb_start_session() and
cdb_end_session()
• Don’t keep the session open
unnecessarily, delays configuration
changes
• Timeout after some minutes
Namespaces
• Each data model is defined in an
XML Namespace
• ConfD handles multiple data
models/namespaces
• Each subsystem should be separate
namespace
• Generate header file with
namespace hash constant
sock = socket(PF_INET, SOCK_STREAM, 0);
cdb_connect(sock, CDB_READ_SOCKET, &confd_ip_port, size);
cdb_start_session(sock, CDB_RUNNING);
cdb_set_namespace(sock, dhcpd__ns);
20©2015 Tail-f Systems all rights reservedFebruary 13, 2015
Read out Configuration at Startup
Keypaths
• Each element in CDB is addressed by its path
cdb_get_duration(sock, &dur, “/dhcp/defaultLeaseTime”)
• Paths may include keys
cdb_get_ipv4(sock,&ip,”/dhcp/SubNets/subNet{10.0.0.0 255.0.0.0}/lowAddr”)
cdb_get_ipv4(sock, &ip, ”/dhcp/SubNets/subNet{%s %s}/lowAddr”, net, mask)
cdb_get_ipv4(sock, &ip, ”/dhcp/SubNets/subNet{%x %x}/lowAddr”, net, mask)
• Index may be used in place of keys
n = cdb_num_instances(sock, "/dhcp/SubNets/subNet");
for (i=0; i<n; i++) {
cdb_cd(sock, "/dhcp/SubNets/subNet[%d]", i);
do_subnet(…);
}
21©2015 Tail-f Systems all rights reservedFebruary 13, 2015
Triggers when
anything in
scope changes
Subscribe to Configuration Changes
subsock = socket(PF_INET, SOCK_STREAM, 0);
cdb_connect(subsock, CDB_SUBSCRIPTION_SOCKET, &confd, size);
cdb_subscribe(subsock, 3, dhcpd__ns, &spoint, "/dhcp");
cdb_subscribe_done(subsock);
/ dhcp/
aaa/
voip/
defaultLe…
maxLeas…
SubNets/ subNet/
mask
range
lowAddr
highAddr
logFacility
net
Managed Objects typically have
several subscription points
22©2015 Tail-f Systems all rights reservedFebruary 13, 2015
Enter Event Loop
• Event loop needs to monitor subscription socket
• Typically using poll()/select()
while(1) {
set[0].fd = subsock;
set[0].events = POLLIN;
set[0].revents = 0;
poll(set, 1, -1); // Monitor one socket, wait forever
if (set[0].revents & POLLIN) {
cdb_read_subscription_socket(subsock, sub_points, &reslen);
// React on changes here…
// sub_points[] contains triggering subscription points,
// reslen how many
}
cdb_sync_subscription_socket(subsock, CDB_DONE_PRIORITY);
}
• How to handle CDB subscription notifications will be covered in the training module
“CDB Subscribers”
23©2015 Tail-f Systems all rights reservedFebruary 13, 2015

More Related Content

What's hot

Module 3: NETCONF and YANG Concepts
Module 3: NETCONF and YANG ConceptsModule 3: NETCONF and YANG Concepts
Module 3: NETCONF and YANG ConceptsTail-f Systems
 
DDoS Mitigation using BGP Flowspec
DDoS Mitigation using BGP Flowspec DDoS Mitigation using BGP Flowspec
DDoS Mitigation using BGP Flowspec APNIC
 
Tutorial: Using GoBGP as an IXP connecting router
Tutorial: Using GoBGP as an IXP connecting routerTutorial: Using GoBGP as an IXP connecting router
Tutorial: Using GoBGP as an IXP connecting routerShu Sugimoto
 
Real-Time Data Flows with Apache NiFi
Real-Time Data Flows with Apache NiFiReal-Time Data Flows with Apache NiFi
Real-Time Data Flows with Apache NiFiManish Gupta
 
Managing 2000 Node Cluster with Ambari
Managing 2000 Node Cluster with AmbariManaging 2000 Node Cluster with Ambari
Managing 2000 Node Cluster with AmbariDataWorks Summit
 
SR-IOV ixgbe Driver Limitations and Improvement
SR-IOV ixgbe Driver Limitations and ImprovementSR-IOV ixgbe Driver Limitations and Improvement
SR-IOV ixgbe Driver Limitations and ImprovementLF Events
 
Apache NiFi User Guide
Apache NiFi User GuideApache NiFi User Guide
Apache NiFi User GuideDeon Huang
 
PLNOG 13: Piotr Okupski: Implementation of Wanguard software as a protection ...
PLNOG 13: Piotr Okupski: Implementation of Wanguard software as a protection ...PLNOG 13: Piotr Okupski: Implementation of Wanguard software as a protection ...
PLNOG 13: Piotr Okupski: Implementation of Wanguard software as a protection ...PROIDEA
 
OPTEE on QEMU - Build Tutorial
OPTEE on QEMU - Build TutorialOPTEE on QEMU - Build Tutorial
OPTEE on QEMU - Build TutorialDalton Valadares
 
FD.IO Vector Packet Processing
FD.IO Vector Packet ProcessingFD.IO Vector Packet Processing
FD.IO Vector Packet ProcessingKernel TLV
 
netconf, restconf, grpc_basic
netconf, restconf, grpc_basicnetconf, restconf, grpc_basic
netconf, restconf, grpc_basicGyewan An
 
Apache sqoop with an use case
Apache sqoop with an use caseApache sqoop with an use case
Apache sqoop with an use caseDavin Abraham
 
Trace kernel code tips
Trace kernel code tipsTrace kernel code tips
Trace kernel code tipsViller Hsiao
 

What's hot (20)

Module 3: NETCONF and YANG Concepts
Module 3: NETCONF and YANG ConceptsModule 3: NETCONF and YANG Concepts
Module 3: NETCONF and YANG Concepts
 
DDoS Mitigation using BGP Flowspec
DDoS Mitigation using BGP Flowspec DDoS Mitigation using BGP Flowspec
DDoS Mitigation using BGP Flowspec
 
Tutorial: Using GoBGP as an IXP connecting router
Tutorial: Using GoBGP as an IXP connecting routerTutorial: Using GoBGP as an IXP connecting router
Tutorial: Using GoBGP as an IXP connecting router
 
NETCONF YANG tutorial
NETCONF YANG tutorialNETCONF YANG tutorial
NETCONF YANG tutorial
 
Real-Time Data Flows with Apache NiFi
Real-Time Data Flows with Apache NiFiReal-Time Data Flows with Apache NiFi
Real-Time Data Flows with Apache NiFi
 
Tail f - Why ConfD
Tail f - Why ConfDTail f - Why ConfD
Tail f - Why ConfD
 
Managing 2000 Node Cluster with Ambari
Managing 2000 Node Cluster with AmbariManaging 2000 Node Cluster with Ambari
Managing 2000 Node Cluster with Ambari
 
Apache NiFi Crash Course Intro
Apache NiFi Crash Course IntroApache NiFi Crash Course Intro
Apache NiFi Crash Course Intro
 
SR-IOV ixgbe Driver Limitations and Improvement
SR-IOV ixgbe Driver Limitations and ImprovementSR-IOV ixgbe Driver Limitations and Improvement
SR-IOV ixgbe Driver Limitations and Improvement
 
Nifi
NifiNifi
Nifi
 
Shell scripting
Shell scriptingShell scripting
Shell scripting
 
Apache NiFi User Guide
Apache NiFi User GuideApache NiFi User Guide
Apache NiFi User Guide
 
PLNOG 13: Piotr Okupski: Implementation of Wanguard software as a protection ...
PLNOG 13: Piotr Okupski: Implementation of Wanguard software as a protection ...PLNOG 13: Piotr Okupski: Implementation of Wanguard software as a protection ...
PLNOG 13: Piotr Okupski: Implementation of Wanguard software as a protection ...
 
Sqoop
SqoopSqoop
Sqoop
 
Inter as vpn option c
Inter as vpn option c Inter as vpn option c
Inter as vpn option c
 
OPTEE on QEMU - Build Tutorial
OPTEE on QEMU - Build TutorialOPTEE on QEMU - Build Tutorial
OPTEE on QEMU - Build Tutorial
 
FD.IO Vector Packet Processing
FD.IO Vector Packet ProcessingFD.IO Vector Packet Processing
FD.IO Vector Packet Processing
 
netconf, restconf, grpc_basic
netconf, restconf, grpc_basicnetconf, restconf, grpc_basic
netconf, restconf, grpc_basic
 
Apache sqoop with an use case
Apache sqoop with an use caseApache sqoop with an use case
Apache sqoop with an use case
 
Trace kernel code tips
Trace kernel code tipsTrace kernel code tips
Trace kernel code tips
 

Viewers also liked

Module 12: NETCONF Northbound Interface
Module 12: NETCONF Northbound InterfaceModule 12: NETCONF Northbound Interface
Module 12: NETCONF Northbound InterfaceTail-f Systems
 
Webinar: Applying REST to Network Management – An Implementor’s View
Webinar: Applying REST to Network Management – An Implementor’s View Webinar: Applying REST to Network Management – An Implementor’s View
Webinar: Applying REST to Network Management – An Implementor’s View Tail-f Systems
 
Module 8: C Data Types
Module 8: C Data TypesModule 8: C Data Types
Module 8: C Data TypesTail-f Systems
 
Module 6: YANG Tutorial - part 2
Module 6: YANG Tutorial - part 2Module 6: YANG Tutorial - part 2
Module 6: YANG Tutorial - part 2Tail-f Systems
 
Open Network OS Overview as of 2015/10/16
Open Network OS Overview as of 2015/10/16Open Network OS Overview as of 2015/10/16
Open Network OS Overview as of 2015/10/16Kentaro Ebisawa
 
Module 11: Operational Data Providers
Module 11: Operational Data ProvidersModule 11: Operational Data Providers
Module 11: Operational Data ProvidersTail-f Systems
 
Dynamic Service Chaining
Dynamic Service Chaining Dynamic Service Chaining
Dynamic Service Chaining Tail-f Systems
 
Tail-f Webinar OpenFlow Switch Management Using NETCONF and YANG
Tail-f Webinar OpenFlow Switch Management Using NETCONF and YANGTail-f Webinar OpenFlow Switch Management Using NETCONF and YANG
Tail-f Webinar OpenFlow Switch Management Using NETCONF and YANGTail-f Systems
 
Module 7: Installation and Getting Started
Module 7: Installation and Getting StartedModule 7: Installation and Getting Started
Module 7: Installation and Getting StartedTail-f Systems
 

Viewers also liked (10)

Module 12: NETCONF Northbound Interface
Module 12: NETCONF Northbound InterfaceModule 12: NETCONF Northbound Interface
Module 12: NETCONF Northbound Interface
 
Webinar: Applying REST to Network Management – An Implementor’s View
Webinar: Applying REST to Network Management – An Implementor’s View Webinar: Applying REST to Network Management – An Implementor’s View
Webinar: Applying REST to Network Management – An Implementor’s View
 
Module 8: C Data Types
Module 8: C Data TypesModule 8: C Data Types
Module 8: C Data Types
 
Module 6: YANG Tutorial - part 2
Module 6: YANG Tutorial - part 2Module 6: YANG Tutorial - part 2
Module 6: YANG Tutorial - part 2
 
Open Network OS Overview as of 2015/10/16
Open Network OS Overview as of 2015/10/16Open Network OS Overview as of 2015/10/16
Open Network OS Overview as of 2015/10/16
 
Module 11: Operational Data Providers
Module 11: Operational Data ProvidersModule 11: Operational Data Providers
Module 11: Operational Data Providers
 
Tail-f - Why NETCONF
Tail-f - Why NETCONFTail-f - Why NETCONF
Tail-f - Why NETCONF
 
Dynamic Service Chaining
Dynamic Service Chaining Dynamic Service Chaining
Dynamic Service Chaining
 
Tail-f Webinar OpenFlow Switch Management Using NETCONF and YANG
Tail-f Webinar OpenFlow Switch Management Using NETCONF and YANGTail-f Webinar OpenFlow Switch Management Using NETCONF and YANG
Tail-f Webinar OpenFlow Switch Management Using NETCONF and YANG
 
Module 7: Installation and Getting Started
Module 7: Installation and Getting StartedModule 7: Installation and Getting Started
Module 7: Installation and Getting Started
 

Similar to Module 9: CDB Technical Intro

Application High Availability and Upgrades Using Oracle GoldenGate
Application High Availability and Upgrades Using Oracle GoldenGateApplication High Availability and Upgrades Using Oracle GoldenGate
Application High Availability and Upgrades Using Oracle GoldenGateShane Borden
 
Gloc gangler 2018._v4
Gloc gangler 2018._v4Gloc gangler 2018._v4
Gloc gangler 2018._v4Secure-24
 
[db tech showcase Tokyo 2016] E34: Oracle SE - RAC, HA and Standby are Still ...
[db tech showcase Tokyo 2016] E34: Oracle SE - RAC, HA and Standby are Still ...[db tech showcase Tokyo 2016] E34: Oracle SE - RAC, HA and Standby are Still ...
[db tech showcase Tokyo 2016] E34: Oracle SE - RAC, HA and Standby are Still ...Insight Technology, Inc.
 
PGEncryption_Tutorial
PGEncryption_TutorialPGEncryption_Tutorial
PGEncryption_TutorialVibhor Kumar
 
9.6_Course Material-Postgresql_002.pdf
9.6_Course Material-Postgresql_002.pdf9.6_Course Material-Postgresql_002.pdf
9.6_Course Material-Postgresql_002.pdfsreedb2
 
The Central View of your Data with Postgres
The Central View of your Data with PostgresThe Central View of your Data with Postgres
The Central View of your Data with PostgresEDB
 
Migrate from Oracle to Aurora PostgreSQL: Best Practices, Design Patterns, & ...
Migrate from Oracle to Aurora PostgreSQL: Best Practices, Design Patterns, & ...Migrate from Oracle to Aurora PostgreSQL: Best Practices, Design Patterns, & ...
Migrate from Oracle to Aurora PostgreSQL: Best Practices, Design Patterns, & ...Amazon Web Services
 
IMCSummit 2015 - Day 1 Developer Track - In-memory Computing for Iterative CP...
IMCSummit 2015 - Day 1 Developer Track - In-memory Computing for Iterative CP...IMCSummit 2015 - Day 1 Developer Track - In-memory Computing for Iterative CP...
IMCSummit 2015 - Day 1 Developer Track - In-memory Computing for Iterative CP...In-Memory Computing Summit
 
New enhancements for security and usability in EDB 13
New enhancements for security and usability in EDB 13New enhancements for security and usability in EDB 13
New enhancements for security and usability in EDB 13EDB
 
The Good, The Bad and the Ugly
The Good, The Bad and the UglyThe Good, The Bad and the Ugly
The Good, The Bad and the UglyRoy Salazar
 
Data Virtualization and ETL
Data Virtualization and ETLData Virtualization and ETL
Data Virtualization and ETLLily Luo
 
IBMHadoopofferingTechline-Systems2015
IBMHadoopofferingTechline-Systems2015IBMHadoopofferingTechline-Systems2015
IBMHadoopofferingTechline-Systems2015Daniela Zuppini
 
Introduction to MySQL Cluster
Introduction to MySQL ClusterIntroduction to MySQL Cluster
Introduction to MySQL ClusterAbel Flórez
 
Big data should be simple
Big data should be simpleBig data should be simple
Big data should be simpleDori Waldman
 
Postgres Point-in-Time Recovery
Postgres Point-in-Time RecoveryPostgres Point-in-Time Recovery
Postgres Point-in-Time RecoveryEDB
 
Simplify Consolidation with Oracle Database 12c
Simplify Consolidation with Oracle Database 12cSimplify Consolidation with Oracle Database 12c
Simplify Consolidation with Oracle Database 12cMaris Elsins
 
IBM Licensing: Technical fundamentals for discovery
IBM Licensing: Technical fundamentals for discoveryIBM Licensing: Technical fundamentals for discovery
IBM Licensing: Technical fundamentals for discoveryMartin Thompson
 
KPN ETL Factory (KETL) - Automated Code generation using Metadata to build Da...
KPN ETL Factory (KETL) - Automated Code generation using Metadata to build Da...KPN ETL Factory (KETL) - Automated Code generation using Metadata to build Da...
KPN ETL Factory (KETL) - Automated Code generation using Metadata to build Da...DataWorks Summit
 
5 Postgres DBA Tips
5 Postgres DBA Tips5 Postgres DBA Tips
5 Postgres DBA TipsEDB
 

Similar to Module 9: CDB Technical Intro (20)

Application High Availability and Upgrades Using Oracle GoldenGate
Application High Availability and Upgrades Using Oracle GoldenGateApplication High Availability and Upgrades Using Oracle GoldenGate
Application High Availability and Upgrades Using Oracle GoldenGate
 
Gloc gangler 2018._v4
Gloc gangler 2018._v4Gloc gangler 2018._v4
Gloc gangler 2018._v4
 
[db tech showcase Tokyo 2016] E34: Oracle SE - RAC, HA and Standby are Still ...
[db tech showcase Tokyo 2016] E34: Oracle SE - RAC, HA and Standby are Still ...[db tech showcase Tokyo 2016] E34: Oracle SE - RAC, HA and Standby are Still ...
[db tech showcase Tokyo 2016] E34: Oracle SE - RAC, HA and Standby are Still ...
 
PGEncryption_Tutorial
PGEncryption_TutorialPGEncryption_Tutorial
PGEncryption_Tutorial
 
9.6_Course Material-Postgresql_002.pdf
9.6_Course Material-Postgresql_002.pdf9.6_Course Material-Postgresql_002.pdf
9.6_Course Material-Postgresql_002.pdf
 
The Central View of your Data with Postgres
The Central View of your Data with PostgresThe Central View of your Data with Postgres
The Central View of your Data with Postgres
 
Migrate from Oracle to Aurora PostgreSQL: Best Practices, Design Patterns, & ...
Migrate from Oracle to Aurora PostgreSQL: Best Practices, Design Patterns, & ...Migrate from Oracle to Aurora PostgreSQL: Best Practices, Design Patterns, & ...
Migrate from Oracle to Aurora PostgreSQL: Best Practices, Design Patterns, & ...
 
IMCSummit 2015 - Day 1 Developer Track - In-memory Computing for Iterative CP...
IMCSummit 2015 - Day 1 Developer Track - In-memory Computing for Iterative CP...IMCSummit 2015 - Day 1 Developer Track - In-memory Computing for Iterative CP...
IMCSummit 2015 - Day 1 Developer Track - In-memory Computing for Iterative CP...
 
New enhancements for security and usability in EDB 13
New enhancements for security and usability in EDB 13New enhancements for security and usability in EDB 13
New enhancements for security and usability in EDB 13
 
The Good, The Bad and the Ugly
The Good, The Bad and the UglyThe Good, The Bad and the Ugly
The Good, The Bad and the Ugly
 
Data Virtualization and ETL
Data Virtualization and ETLData Virtualization and ETL
Data Virtualization and ETL
 
IBMHadoopofferingTechline-Systems2015
IBMHadoopofferingTechline-Systems2015IBMHadoopofferingTechline-Systems2015
IBMHadoopofferingTechline-Systems2015
 
Introduction to MySQL Cluster
Introduction to MySQL ClusterIntroduction to MySQL Cluster
Introduction to MySQL Cluster
 
Big data should be simple
Big data should be simpleBig data should be simple
Big data should be simple
 
Postgres Point-in-Time Recovery
Postgres Point-in-Time RecoveryPostgres Point-in-Time Recovery
Postgres Point-in-Time Recovery
 
Simplify Consolidation with Oracle Database 12c
Simplify Consolidation with Oracle Database 12cSimplify Consolidation with Oracle Database 12c
Simplify Consolidation with Oracle Database 12c
 
IBM Licensing: Technical fundamentals for discovery
IBM Licensing: Technical fundamentals for discoveryIBM Licensing: Technical fundamentals for discovery
IBM Licensing: Technical fundamentals for discovery
 
KPN ETL Factory (KETL) - Automated Code generation using Metadata to build Da...
KPN ETL Factory (KETL) - Automated Code generation using Metadata to build Da...KPN ETL Factory (KETL) - Automated Code generation using Metadata to build Da...
KPN ETL Factory (KETL) - Automated Code generation using Metadata to build Da...
 
Greenplum Architecture
Greenplum ArchitectureGreenplum Architecture
Greenplum Architecture
 
5 Postgres DBA Tips
5 Postgres DBA Tips5 Postgres DBA Tips
5 Postgres DBA Tips
 

Recently uploaded

Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Jeffrey Haguewood
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesThousandEyes
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Ramesh Iyer
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesBhaskar Mitra
 
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀DianaGray10
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Product School
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfCheryl Hung
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...Product School
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersSafe Software
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...Product School
 
Demystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyDemystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyJohn Staveley
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)Ralf Eggert
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualityInflectra
 
UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1DianaGray10
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf91mobiles
 
IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024IoTAnalytics
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...Product School
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform EngineeringJemma Hussein Allen
 

Recently uploaded (20)

Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
 
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
Demystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyDemystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John Staveley
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 

Module 9: CDB Technical Intro

  • 1. 1©2015 Tail-f Systems all rights reservedFebruary 13, 2015 CDB Technical Introduction
  • 2. 2©2015 Tail-f Systems all rights reservedFebruary 13, 2015 CDB – ConfD Database NETCONF SNMP REST CLI Web CDB Database Data Provider API CDB API Management Agent API App AppApp ConfD Core Engine App External DatabaseOperational Data App • Hierarchical database • ACID test compliant • Atomicity, consistency, isolation, durability • Fast, lightweight, fault-tolerant • Compact binary XML format • Memory resident with journal in persistent storage • Schema automatically derived from YANG • Supports 1:N data replication • Supports automatic schema version up/downgrades • CDB can hold some or all data • Configuration data and/or Operational data • External database can be used in addition to or instead of • Automatic loading of initial data • Applications read data, then subscribe to relevant configuration changes • Subscription notifications with priority level ordering • Multiple datastores per NETCONF standards • Startup, running, candidate, operational
  • 3. 3©2015 Tail-f Systems all rights reservedFebruary 13, 2015 Hierarchical • CDB uses an Hierarchical (XML) data model • Ideal for configuration data, which is tree structured • No Object-Relational-Mapping (ORM) required / dhcp/ aaa/ voip/ defaultLe… maxLeas… SubNets/ subNet/ mask range lowAddr highAddr logFacility net
  • 4. 4©2015 Tail-f Systems all rights reservedFebruary 13, 2015 Object Relational Mapping (ORM) Hierarchical Relational / dhcp/ aaa/ voip/ defaultLe… maxLeas… SubNets/ subNet/ mask range lowAddr highAddr logFacility net
  • 5. 5©2015 Tail-f Systems all rights reservedFebruary 13, 2015 ACID The four properties that define a transaction: • Atomicity • Transactions are indivisible, all-or-nothing • Consistency • Transactions are all-at-once • {create A, create B} and {create B, create A} are identical • Independence • Transactions do not interfere with each other • Durability • Committed data remains in the system even in case of a restart, etc
  • 6. 6©2015 Tail-f Systems all rights reservedFebruary 13, 2015 Database Storage MO = Managed Object (i.e. configuration consumer) JOURNAL START TRANSACTION WRITE 14 TO /some/leaf/somewhere WRITE “hello” TO /some/other/leaf COMMIT START TRANSACTION WRITE -1 TO /foo/bar ABORTED START TR ON DISK Values stored binary Paths stored as sequences of 32-bit hashes ConfD CDB IN MEMORY MO MO MO
  • 7. 7©2015 Tail-f Systems all rights reservedFebruary 13, 2015 Data Model Becomes Database Schema Network Element NETCONF SNMP REST CLI Web CDB Database Data Provider API CDB API Management Agent API OSS/BSS App AppApp ConfD Core Engine App External DatabaseOperational Data App Management Agent API Auto-rendered management interfaces and data schema YANG Data Models
  • 8. 8©2015 Tail-f Systems all rights reservedFebruary 13, 2015 JOURNAL ConfD CDB IN MEMORY MO MO MO Database Replication ACTIVE NODE Journal records JOURNAL ConfD CDB IN MEMORY MO MO MO STANDBY NODE
  • 9. 9©2015 Tail-f Systems all rights reservedFebruary 13, 2015 CDB Start • CDB in-memory contents blank at this point • Read up schema from disk • Start transaction • Read up data from disk • Data on disk consistent with schema? • If not: Trigger automatic schema upgrade (see next page) • CDB doesn’t differentiate between up- or downgrade, it just notices that the schema is different • CDB does not rely on version in the namespace declaration • Validate • Commit
  • 10. 10©2015 Tail-f Systems all rights reservedFebruary 13, 2015 CDB Automatic Schema Upgrade • Elements with default value added to schema • Default values added to new database • Elements removed from schema • Values removed from new database • Elements with trivial type changes • Value promoted to new type in new database • Data is converted to string representation, then to new type • Elements with complex type changes • No value in new database • All other elements • Copied as is to new database Check the devel.log for messages about what conversions were made
  • 11. 11©2015 Tail-f Systems all rights reservedFebruary 13, 2015 CDB Programmatic Schema Upgrade Then add your own upgrade clients • Complement to the automatic schema upgrade • Connect in start phase 0 • Compute values for the new database • Read any old or new database values • Compute new values • Write (overwrite) new values • If the schema is changed cautiously, CDB automatic schema upgrade might be able to handle everything
  • 12. 12©2015 Tail-f Systems all rights reservedFebruary 13, 2015 CDB Schema Upgrade Examples • 32-bit flag field becomes 64-bits • New flags should be initialized to all zeros • Automatic upgrade sufficient • New Maximum Transfer Unit (MTU) field added • Should be 1500 for Eth interfaces, 48 for ATM interfaces • Upgrade client reads InterfaceType value, classifies it and writes the appropriate MTU value • InterfaceType changed from string to enumeration • All strings that match enumeration value are auto upgraded • Remaining values left unset: set by upgrade client • Time field changed from seconds to nanoseconds • Upgrade client reads the old value, multiplies by 109 and overwrites the automatically promoted value
  • 13. 13©2015 Tail-f Systems all rights reservedFebruary 13, 2015 Data Stores • Each data store is a full copy of the configuration • Each data store can be mapped to CDB or external data base • Running can be split across CDB and several data bases • 5 combinations (S+Rro, S+R, R, R+C, Rro+C) • Operational data store • Store status, performance or application data CandidateStart-up Running Operational
  • 14. 14©2015 Tail-f Systems all rights reservedFebruary 13, 2015 Data Stores • Start-up • If enabled, start-up configuration is copied to (overwriting) the running configuration at system start • If not enabled, configuration in running remains unchanged from last time system was running • The first time the system starts, configuration is read from factory default files ( *_init.xml ) • Running • Holds the currently running configuration • Candidate • Data store for future configuration under construction • Copied to running to make it take effect
  • 15. 15©2015 Tail-f Systems all rights reservedFebruary 13, 2015 Sessions • Session Start (login) • Display values • Update values • Request Commit • Lock data store (running, candidate, start-up) • Run validation sequence • Run Transaction (next slide) • Wait for acknowledgement from standby node(s) • Inform subscribers of changes • Unlock data store • Session Continues
  • 16. 16©2015 Tail-f Systems all rights reservedFebruary 13, 2015 Transactions
  • 17. 17©2015 Tail-f Systems all rights reservedFebruary 13, 2015 The Life of a Managed Object • Subscribe to relevant configuration changes • Read out configuration at startup • Enter event loop • If subscription event, react to configuration change RESTCLINETCONF SNMP Management Agent API Managed Object API MO MO CDB ConfD Core Engine CDB API Data Provider API Web
  • 18. 18©2015 Tail-f Systems all rights reservedFebruary 13, 2015 Read out Configuration at Startup • Initialization • cdb_connect() • cdb_start_session() • cdb_set_namespace() • Read elements • cdb_get_u_int32() • cdb_get_bool() • cdb_get_str() • cdb_get_ipv4() • cdb_get_enum_hash() • … (~30 more) • Read many • cdb_get_object() • cdb_get_values() • Count elements • cdb_exists() • cdb_num_instances() • Move in data tree • cdb_cd() • cdb_pushd() • Finalization • cdb_end_session() • cdb_close()
  • 19. 19©2015 Tail-f Systems all rights reservedFebruary 13, 2015 Read out Configuration at Startup Sessions • CDB protected with Single Writer- Multiple Reader lock • No configuration changes can occur between cdb_start_session() and cdb_end_session() • Don’t keep the session open unnecessarily, delays configuration changes • Timeout after some minutes Namespaces • Each data model is defined in an XML Namespace • ConfD handles multiple data models/namespaces • Each subsystem should be separate namespace • Generate header file with namespace hash constant sock = socket(PF_INET, SOCK_STREAM, 0); cdb_connect(sock, CDB_READ_SOCKET, &confd_ip_port, size); cdb_start_session(sock, CDB_RUNNING); cdb_set_namespace(sock, dhcpd__ns);
  • 20. 20©2015 Tail-f Systems all rights reservedFebruary 13, 2015 Read out Configuration at Startup Keypaths • Each element in CDB is addressed by its path cdb_get_duration(sock, &dur, “/dhcp/defaultLeaseTime”) • Paths may include keys cdb_get_ipv4(sock,&ip,”/dhcp/SubNets/subNet{10.0.0.0 255.0.0.0}/lowAddr”) cdb_get_ipv4(sock, &ip, ”/dhcp/SubNets/subNet{%s %s}/lowAddr”, net, mask) cdb_get_ipv4(sock, &ip, ”/dhcp/SubNets/subNet{%x %x}/lowAddr”, net, mask) • Index may be used in place of keys n = cdb_num_instances(sock, "/dhcp/SubNets/subNet"); for (i=0; i<n; i++) { cdb_cd(sock, "/dhcp/SubNets/subNet[%d]", i); do_subnet(…); }
  • 21. 21©2015 Tail-f Systems all rights reservedFebruary 13, 2015 Triggers when anything in scope changes Subscribe to Configuration Changes subsock = socket(PF_INET, SOCK_STREAM, 0); cdb_connect(subsock, CDB_SUBSCRIPTION_SOCKET, &confd, size); cdb_subscribe(subsock, 3, dhcpd__ns, &spoint, "/dhcp"); cdb_subscribe_done(subsock); / dhcp/ aaa/ voip/ defaultLe… maxLeas… SubNets/ subNet/ mask range lowAddr highAddr logFacility net Managed Objects typically have several subscription points
  • 22. 22©2015 Tail-f Systems all rights reservedFebruary 13, 2015 Enter Event Loop • Event loop needs to monitor subscription socket • Typically using poll()/select() while(1) { set[0].fd = subsock; set[0].events = POLLIN; set[0].revents = 0; poll(set, 1, -1); // Monitor one socket, wait forever if (set[0].revents & POLLIN) { cdb_read_subscription_socket(subsock, sub_points, &reslen); // React on changes here… // sub_points[] contains triggering subscription points, // reslen how many } cdb_sync_subscription_socket(subsock, CDB_DONE_PRIORITY); } • How to handle CDB subscription notifications will be covered in the training module “CDB Subscribers”
  • 23. 23©2015 Tail-f Systems all rights reservedFebruary 13, 2015