perfsonar-dev - nmwg: r349 - in trunk/nmwg/doc/dLS/gLS: . examples images
Subject: perfsonar development work
List archive
- From:
- To: ,
- Subject: nmwg: r349 - in trunk/nmwg/doc/dLS/gLS: . examples images
- Date: Tue, 20 May 2008 17:30:12 -0400
Author: zurawski
Date: 2008-05-20 17:30:12 -0400 (Tue, 20 May 2008)
New Revision: 349
Added:
trunk/nmwg/doc/dLS/gLS/images/graph2.png
Modified:
trunk/nmwg/doc/dLS/gLS/examples/graph.dot
trunk/nmwg/doc/dLS/gLS/examples/ipTree.pl
trunk/nmwg/doc/dLS/gLS/images/graph.png
trunk/nmwg/doc/dLS/gLS/phase_1.html
trunk/nmwg/doc/dLS/gLS/phase_1.xml
trunk/nmwg/doc/dLS/gLS/phase_1_color.html
Log:
Changes to the perl summarization source and example. This was due to a
question posed by Maciej. Also added a new eventType requirement for
the synchronization messages.
-jason
Modified: trunk/nmwg/doc/dLS/gLS/examples/graph.dot
===================================================================
--- trunk/nmwg/doc/dLS/gLS/examples/graph.dot 2008-05-20 16:05:26 UTC (rev
348)
+++ trunk/nmwg/doc/dLS/gLS/examples/graph.dot 2008-05-20 21:30:12 UTC (rev
349)
@@ -1,11 +1,11 @@
digraph g {
"128.0.0.0/9";
"128.4.131.23/32"[ color=crimson, style=filled ];
- "128.0.0.0/1";
"128.4.133.163/32"[ color=crimson, style=filled ];
"128.175.13.92/32"[ color=crimson, style=filled ];
"128.4.40.0/28";
"128.4.128.0/17";
+ "0.0.0.0/0";
"128.4.40.17/32"[ color=crimson, style=filled ];
"128.4.133.164/30";
"128.4.40.12/32"[ color=crimson, style=filled ];
@@ -18,12 +18,12 @@
"128.4.40.10/32"[ color=crimson, style=filled ];
"128.0.0.0/9" -> "128.4.0.0/17";
"128.0.0.0/9" -> "128.4.128.0/17";
- "128.0.0.0/1" -> "128.0.0.0/9";
- "128.0.0.0/1" -> "128.128.0.0/9";
"128.4.40.0/28" -> "128.4.40.10/32";
"128.4.40.0/28" -> "128.4.40.12/32";
"128.4.128.0/17" -> "128.4.132.0/22";
"128.4.128.0/17" -> "128.4.131.23/32";
+ "0.0.0.0/0" -> "128.0.0.0/9";
+ "0.0.0.0/0" -> "128.128.0.0/9";
"128.4.133.164/30" -> "128.4.133.164/32";
"128.4.133.164/30" -> "128.4.133.167/32";
"128.128.0.0/9" -> "128.175.13.74/32";
Modified: trunk/nmwg/doc/dLS/gLS/examples/ipTree.pl
===================================================================
--- trunk/nmwg/doc/dLS/gLS/examples/ipTree.pl 2008-05-20 16:05:26 UTC (rev
348)
+++ trunk/nmwg/doc/dLS/gLS/examples/ipTree.pl 2008-05-20 21:30:12 UTC (rev
349)
@@ -9,6 +9,16 @@
IP addresses as well as a potential solution to finding dominating values
when used in a Radix Tree (Patricia Trie) data structure.
+=head1 USAGE
+
+ perl ipTree.pl
+
+An outputed list of the minimum dominators of the resulting IPTrie will be
+be displayed. This will generate a graphviz .dot file (graph.dot) of the
+IPTrie that can then be used with the graphviz executable:
+
+ dot graph.dot -Tpng -o graph.png
+
=head1 DESCRIPTION
The perfSONAR dLS and gLS require a way to summarize large amounts of
@@ -47,11 +57,28 @@
"128.4.133.163",
"128.4.133.164");
+#my @map = ("150.254.160.194",
+# "150.254.160.195",
+# "150.254.160.196",
+# "120.10.0.11",
+# "120.10.0.12",
+# "120.10.0.17",
+# "120.11.5.1",
+# "120.11.5.2",
+# "80.15.11.2",
+# "80.15.11.3");
+
my $vote =
getCDIRSummaries(\@map);
$tr =
makePatriciaTrie(\@map,
$vote, $tr);
manipulatePatriciaTrie($tr);
genGraph(\%tree);
+my $final = listMinDoms();
+print "Min Dominators:\n\n";
+foreach my $f (@{$final}) {
+ print $f , "\n";
+}
+
exit(1);
=head2 getCDIRSummaries($map)
@@ -66,13 +93,12 @@
my($map) = @_;
# We can get ALL applicable CIDR summaries for each (in order of least to
- # greatest). Then vote on what is popular, skip 0.0.0.0/0 though...
+ # greatest).
my %vote = ();
foreach my $host (@{$map}) {
my @list = Net::CIDR::addr2cidr($host);
foreach my $range (@list) {
- next if $range eq "0.0.0.0/0";
$vote{$range}++ if defined $vote{$range};
$vote{$range} = 1 if not defined $vote{$range};
}
@@ -91,6 +117,7 @@
$tally{$vote{$range}} =
\@temp;
}
}
+
return \%tally;
}
@@ -273,7 +300,9 @@
=cut
sub genGraph {
- print "digraph g {\n";
+
+ open(DOT, ">graph.dot");
+ print DOT "digraph g {\n";
foreach my $item (keys %tree) {
next unless $item;
@@ -282,10 +311,10 @@
# color the terminal elements so we know they are not dominators
if($array[1] eq "32") {
- print "\t\"" , $item , "\"[ color=crimson, style=filled ];\n";
+ print DOT "\t\"" , $item , "\"[ color=crimson, style=filled ];\n";
}
else {
- print "\t\"" , $item , "\";\n";
+ print DOT "\t\"" , $item , "\";\n";
}
}
@@ -293,13 +322,87 @@
next unless $item;
foreach my $c (@{$tree{$item}{"C"}}) {
next unless $c;
- print "\t\"" , $item , "\" -> \"" , $c , "\";\n";
+ print DOT "\t\"" , $item , "\" -> \"" , $c , "\";\n";
}
}
- print "}\n";
+ print DOT "}\n";
+ close(DOT);
+ return;
}
+=head2 listMinDoms
+
+Given the tree, 'slice off' the top level of nodes that are
+not necessarily representative of the domination (e.g. if they
+are just used to direct traffic through the tree, and do not
+have direct /32 children). We return a list of nodes that
+represent the minimum set of addresses that can be used to
+describe any of the originals.
+
+=cut
+
+sub listMinDoms {
+
+ # First locate the root in the tree
+
+ my @expand = ();
+ foreach my $node (keys %tree) {
+ unless($tree{$node}{"U"}) {
+ # add the root the 'expand' list so we can
+ # examine it (and it's children, etc.) then
+ # exit
+
+ push @expand, $node;
+ last;
+ }
+ }
+
+ my $counter = 0;
+ my @minDoms = ();
+
+ # now we are going to walk the tree. If a non-leaf
+ # node has two non-leaf children is is useless to us,
+ # so we skip it. If a non-leaf node has at least one
+ # leaf child, this is a part of our 'boundary' so
+ # we list it as a minDominator.
+
+ while($expand[$counter]) {
+ my $minDomFlag = 0;
+ my $expandFlag = 0;
+ foreach my $child (sort @{$tree{$expand[$counter]}{"C"}}) {
+ my @array = split(/\//, $child);
+
+ # /32's are leaf nodes, if one of our children is a leaf
+ # we are a on the min dominator boundary
+ if($array[1] eq "32") {
+
+ # Make sure we only add the node once...
+ if(($#minDoms == -1) or ($minDoms[$#minDoms] ne $expand[$counter])) {
+ push @minDoms, $expand[$counter];
+ }
+ $minDomFlag++;
+ }
+ else {
+ # If we have a non leaf node as a child, we will probably
+ # need to expland that child later...
+
+ push @expand, $child;
+ $expandFlag++;
+ }
+ }
+
+ # corner case: if we have a non leaf child and a leaf
+ # child we need to remove the non leaf child from the
+ # expand list
+
+ pop @expand if $expandFlag and $minDomFlag;
+ $counter++;
+ }
+
+ return
\@minDoms;
+}
+
__END__
=head1 SEE ALSO
Modified: trunk/nmwg/doc/dLS/gLS/images/graph.png
===================================================================
(Binary files differ)
Added: trunk/nmwg/doc/dLS/gLS/images/graph2.png
Property changes on: trunk/nmwg/doc/dLS/gLS/images/graph2.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/nmwg/doc/dLS/gLS/phase_1.html
===================================================================
--- trunk/nmwg/doc/dLS/gLS/phase_1.html 2008-05-20 16:05:26 UTC (rev 348)
+++ trunk/nmwg/doc/dLS/gLS/phase_1.html 2008-05-20 21:30:12 UTC (rev 349)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta
http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>dLS
Implementation Phase 1 -- The Rise of the gLS</title><meta name="generator"
content="DocBook XSL Stylesheets V1.71.0" /></head><body><div class="article"
lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a
id="id2478927"></a>dLS Implementation Phase 1 -- The Rise of the
gLS</h1></div><div><div class="authorgroup"><div class="author"><h3
class="author"><span class="firstname">J.</span> <span
class="surname">Boote</span></h3></div><div class="author"><h3
class="author"><span class="firstname">M.</span> <span
class="surname">Glowiak</span></h3></div><div class="author"><h3
class="author"><span class="firstname">M.</span> <span
class="surname">Swany</span></h3></div><div class="author"><h3
class="author"><span class="firstname">J.</span> <span
class="surname">Zurawski</span></h3></div></div></div></div><hr /></div><div
class="
toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a
href="#changes">1. Document Changes</a></span></dt><dt><span
class="section"><a href="#introduction">2.
Introduction</a></span></dt><dt><span class="section"><a
href="#architecture">3. Architecture</a></span></dt><dd><dl><dt><span
class="section"><a href="#gLS_instances">3.1. gLS
Instances</a></span></dt><dt><span class="section"><a
href="#bootstrapping">3.2. Bootstrapping</a></span></dt><dt><span
class="section"><a href="#synchronization">3.3.
Synchronization</a></span></dt><dt><span class="section"><a
href="#hLS_instances">3.4. hLS Instances</a></span></dt><dt><span
class="section"><a href="#registration">3.5. Multiple
Registration</a></span></dt><dt><span class="section"><a
href="#interaction">3.6. Interaction</a></span></dt></dl></dd><dt><span
class="section"><a href="#api">4. API</a></span></dt><dd><dl><dt><span
class="section"><a href="#level0_api">4.1. Level 0
API</a></span></dt><dt><span class="sect
ion"><a href="#level1_api">4.2. Level 1 API</a></span></dt><!
dd><dl><
dt><span class="section"><a href="#level1_api_ext">4.2.1. Level 1 API
Extension</a></span></dt></dl></dd><dt><span class="section"><a
href="#level2_api">4.3. Level 2 API</a></span></dt><dd><dl><dt><span
class="section"><a href="#level2_api_ext">4.3.1. Level 2 API
Extension</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a
href="#operation">5. Operation</a></span></dt><dt><span class="section"><a
href="#implementation">6. Implementation</a></span></dt><dd><dl><dt><span
class="section"><a href="#implementation_general">6.1. Overall
Considerations</a></span></dt><dt><span class="section"><a
href="#implementation_java">6.2. Java Considerations</a></span></dt><dt><span
class="section"><a href="#implementation_perl">6.3. Perl
Considerations</a></span></dt><dd><dl><dt><span class="section"><a
href="#implementation_perl_mode">6.3.1. gLS and hLS Operation
Differences</a></span></dt><dt><span class="section"><a
href="#implementation_perl_summarization">6.3.2. Summarizing
Registered Data</a></span></dt><dt><span class="section"><a
href="#implementation_perl_storage">6.3.3. Storage
Reorganization</a></span></dt><dt><span class="section"><a
href="#implementation_perl_registration">6.3.4. Multiple and Self
Registration</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a
href="#appendix">7. Appendix</a></span></dt><dd><dl><dt><span
class="section"><a href="#appendix_summary">7.1. Summary Message
Example</a></span></dt><dt><span class="section"><a
href="#appendix_summarization_source">7.2. Summarization Source
Code</a></span></dt><dd><dl><dt><span class="section"><a
href="#appendix_summarization_source_java">7.2.1. Summarization Source Code
(Java)</a></span></dt><dt><span class="section"><a
href="#appendix_summarization_source_perl">7.2.2. Summarization Source Code
(Perl)</a></span></dt></dl></dd><dt><span class="section"><a
href="#appendix_synch">7.3. Synchronization
Example</a></span></dt></dl></dd><dt><span class="glossary"><a href=
"#glossary">Terms</a></span></dt><dt><span class="bibliograp!
hy"><a h
ref="#bibliography">References</a></span></dt></dl></div><div class="section"
lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"
style="clear: both"><a id="changes"></a>1. Document
Changes</h2></div></div></div><div class="table"><a id="table.1"></a><p
class="title"><b>Table 1. Change Log</b></p><div
class="table-contents"><table summary="Change Log" border="1"><colgroup><col
align="left" /></colgroup><thead><tr><th align="left">Version</th><th
align="left">Date</th><th align="left">Description</th><th
align="left">Author(s)</th></tr></thead><tbody><tr><td
align="left">1.00</td><td align="left">05/11/2007</td><td
align="left">Initial Preparation</td><td align="left">J.
Zurawski</td></tr><tr><td align="left">1.01</td><td
align="left">05/18/2007</td><td align="left">EventType Clarifications</td><td
align="left">J. Zurawski</td></tr></tbody></table></div></div><br
class="table-break" /></div><div class="section" lang="en" xml:lang="en"><div
class="titl
epage"><div><div><h2 class="title" style="clear: both"><a
id="introduction"></a>2. Introduction</h2></div></div></div><p>
- This document builds upon the work described in <a
href="#id2531604">dLS Design Document</a>
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta
http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>dLS
Implementation Phase 1 -- The Rise of the gLS</title><meta name="generator"
content="DocBook XSL Stylesheets V1.71.0" /></head><body><div class="article"
lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a
id="id2478927"></a>dLS Implementation Phase 1 -- The Rise of the
gLS</h1></div><div><div class="authorgroup"><div class="author"><h3
class="author"><span class="firstname">J.</span> <span
class="surname">Boote</span></h3></div><div class="author"><h3
class="author"><span class="firstname">M.</span> <span
class="surname">Glowiak</span></h3></div><div class="author"><h3
class="author"><span class="firstname">M.</span> <span
class="surname">Swany</span></h3></div><div class="author"><h3
class="author"><span class="firstname">J.</span> <span
class="surname">Zurawski</span></h3></div></div></div></div><hr /></div><div
class="
toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a
href="#changes">1. Document Changes</a></span></dt><dt><span
class="section"><a href="#introduction">2.
Introduction</a></span></dt><dt><span class="section"><a
href="#architecture">3. Architecture</a></span></dt><dd><dl><dt><span
class="section"><a href="#gLS_instances">3.1. gLS
Instances</a></span></dt><dt><span class="section"><a
href="#bootstrapping">3.2. Bootstrapping</a></span></dt><dt><span
class="section"><a href="#synchronization">3.3.
Synchronization</a></span></dt><dt><span class="section"><a
href="#hLS_instances">3.4. hLS Instances</a></span></dt><dt><span
class="section"><a href="#registration">3.5. Multiple
Registration</a></span></dt><dt><span class="section"><a
href="#interaction">3.6. Interaction</a></span></dt></dl></dd><dt><span
class="section"><a href="#api">4. API</a></span></dt><dd><dl><dt><span
class="section"><a href="#level0_api">4.1. Level 0
API</a></span></dt><dt><span class="sect
ion"><a href="#level1_api">4.2. Level 1 API</a></span></dt><!
dd><dl><
dt><span class="section"><a href="#level1_api_ext">4.2.1. Level 1 API
Extension</a></span></dt></dl></dd><dt><span class="section"><a
href="#level2_api">4.3. Level 2 API</a></span></dt><dd><dl><dt><span
class="section"><a href="#level2_api_ext">4.3.1. Level 2 API
Extension</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a
href="#operation">5. Operation</a></span></dt><dt><span class="section"><a
href="#implementation">6. Implementation</a></span></dt><dd><dl><dt><span
class="section"><a href="#implementation_general">6.1. Overall
Considerations</a></span></dt><dt><span class="section"><a
href="#implementation_java">6.2. Java Considerations</a></span></dt><dt><span
class="section"><a href="#implementation_perl">6.3. Perl
Considerations</a></span></dt><dd><dl><dt><span class="section"><a
href="#implementation_perl_mode">6.3.1. gLS and hLS Operation
Differences</a></span></dt><dt><span class="section"><a
href="#implementation_perl_summarization">6.3.2. Summarizing
Registered Data</a></span></dt><dt><span class="section"><a
href="#implementation_perl_storage">6.3.3. Storage
Reorganization</a></span></dt><dt><span class="section"><a
href="#implementation_perl_registration">6.3.4. Multiple and Self
Registration</a></span></dt><dt><span class="section"><a
href="#implementation_perl_ets">6.3.5.
EventTypes</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a
href="#appendix">7. Appendix</a></span></dt><dd><dl><dt><span
class="section"><a href="#appendix_summary">7.1. Summary Message
Example</a></span></dt><dt><span class="section"><a
href="#appendix_summarization_source">7.2. Summarization Source
Code</a></span></dt><dd><dl><dt><span class="section"><a
href="#appendix_summarization_source_java">7.2.1. Summarization Source Code
(Java)</a></span></dt><dt><span class="section"><a
href="#appendix_summarization_source_perl">7.2.2. Summarization Source Code
(Perl)</a></span></dt></dl></dd><dt><span class="section"><a
href="#appendix_sy
nch">7.3. Synchronization Example</a></span></dt></dl></dd><!
dt><span
class="glossary"><a href="#glossary">Terms</a></span></dt><dt><span
class="bibliography"><a
href="#bibliography">References</a></span></dt></dl></div><div
class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2
class="title" style="clear: both"><a id="changes"></a>1. Document
Changes</h2></div></div></div><div class="table"><a id="table.1"></a><p
class="title"><b>Table 1. Change Log</b></p><div
class="table-contents"><table summary="Change Log" border="1"><colgroup><col
align="left" /></colgroup><thead><tr><th align="left">Version</th><th
align="left">Date</th><th align="left">Description</th><th
align="left">Author(s)</th></tr></thead><tbody><tr><td
align="left">1.00</td><td align="left">05/11/2007</td><td
align="left">Initial Preparation</td><td align="left">J.
Zurawski</td></tr><tr><td align="left">1.01</td><td
align="left">05/18/2007</td><td align="left">EventType Clarifications</td><td
align="left">J. Zurawski</td></tr><tr><td align="left">1.02</
td><td align="left">05/20/2007</td><td align="left">Summarization
Clarification/Algorithm Change</td><td align="left">J.
Zurawski</td></tr></tbody></table></div></div><br class="table-break"
/></div><div class="section" lang="en" xml:lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
id="introduction"></a>2. Introduction</h2></div></div></div><p>
+ This document builds upon the work described in <a
href="#id2531864">dLS Design Document</a>
to create <span><strong class="command">Phase 1</strong></span> of the
proposed distributed
information service. This document will describe concrete details of
the
plan, prescribing both the overall structure of the system as well as
@@ -69,8 +69,8 @@
specifically can I find).</p></li></ol></div><p>
</p><div class="section" lang="en" xml:lang="en"><div
class="titlepage"><div><div><h3 class="title"><a
id="gLS_instances"></a>3.1. gLS Instances</h3></div></div></div><p>
The <span class="emphasis"><em>perfSONAR</em></span> project
partners (e.g.
- <a href="#id2531623">ESnet</a>, <a href="#id2531641">Geant2</a>,
- <a href="#id2531660">Internet2</a>, and <a
href="#id2531678">RNP</a>) are
+ <a href="#id2531884">ESnet</a>, <a href="#id2531902">Geant2</a>,
+ <a href="#id2531920">Internet2</a>, and <a
href="#id2532214">RNP</a>) are
expected to stand up and maintain <span
class="emphasis"><em>root</em></span>
<a href="#gLS">gLS</a> instances. As the driving force behind
<span class="emphasis"><em>perfSONAR</em></span>, this contribution
serves as the basis
@@ -182,6 +182,14 @@
</p><p>
</p><div class="mediaobject"><img src="images/sync.png" /></div><p>
</p><p>
+ In general, synchronization can be performed using the already
+ defined <span><strong
class="command">LSRegisterRequest</strong></span> message. To ensure that
+ the meaning of the data is preserved, it will be necessary to add a
new
+ <span class="emphasis"><em>eventType</em></span>:
+ <span><strong
class="command">http://ogf.org/ns/nmwg/tools/org/perfsonar/service/lookup/registration/synchronization/2.0</strong></span>.
+ Using this eventType will trigger the internal semantics of a
+ <span class="emphasis"><em>non-authoritative</em></span>
registration of data to the gLS.
+ </p><p>
Open questions remain if this should be a periodic scheduled event
that
is frequent enough to capture new information propagation without
overloading <span class="emphasis"><em>gLS</em></span> instances or
if it may be able to
@@ -285,8 +293,8 @@
service designers.
</p></div><div class="section" lang="en" xml:lang="en"><div
class="titlepage"><div><div><h3 class="title"><a
id="interaction"></a>3.6. Interaction</h3></div></div></div><p>
Currently, services and clients only have a single way to query an
- <span class="emphasis"><em>LS</em></span> instance for data: <a
href="#id2531989">XQuery</a>
- or <a href="#id2531696">XPath</a> statements. While useful to
individuals
+ <span class="emphasis"><em>LS</em></span> instance for data: <a
href="#id2532250">XQuery</a>
+ or <a href="#id2532232">XPath</a> statements. While useful to
individuals
with an intimate knowledge of the data storage structure and the
query
language syntax, this leaves other services and client applications
frustrated and out of luck when it comes to lookup.
@@ -467,7 +475,7 @@
the <span class="emphasis"><em>LSRegisterRequest</em></span> message
should contain the
following <span class="emphasis"><em>eventType</em></span>s:
</p><p>
- </p><div class="itemizedlist"><ul type="opencircle"><li
style="list-style-type:
circle"><p>http://ogf.org/ns/nmwg/tools/org/perfsonar/service/lookup/registration/summary/2.0</p></li><li
style="list-style-type:
circle"><p>http://ogf.org/ns/nmwg/tools/org/perfsonar/service/lookup/registration/service/2.0</p></li></ul></div><p>
+ </p><div class="itemizedlist"><ul type="opencircle"><li
style="list-style-type:
circle"><p>http://ogf.org/ns/nmwg/tools/org/perfsonar/service/lookup/registration/summary/2.0</p></li><li
style="list-style-type:
circle"><p>http://ogf.org/ns/nmwg/tools/org/perfsonar/service/lookup/registration/service/2.0</p></li><li
style="list-style-type:
circle"><p>http://ogf.org/ns/nmwg/tools/org/perfsonar/service/lookup/registration/synchronization/2.0</p></li></ul></div><p>
</p><p>
The <span class="emphasis"><em>LSDeregisterRequest</em></span>
message should contain the
following <span class="emphasis"><em>eventType</em></span>s:
@@ -508,6 +516,9 @@
</p></li><li style="list-style-type: circle"><p>
<a href="#implementation_perl_registration">Multiple and Self
Registration</a> - Changes to
how we treat the act of registration.
+ </p></li><li style="list-style-type: circle"><p>
+ <a href="#implementation_perl_ets">EventTypes</a> - Several new
+ eventTypes are necessary.
</p></li></ul></div><p>
</p><div class="section" lang="en" xml:lang="en"><div
class="titlepage"><div><div><h4 class="title"><a
id="implementation_perl_mode"></a>6.3.1. gLS and hLS Operation
Differences</h4></div></div></div><p>
The <span class="emphasis"><em>gLS</em></span> must contain the
following functionality
@@ -592,6 +603,9 @@
a <span class="emphasis"><em>default</em></span> LS instance.
This will also mean
addressing the storage issue discussed in
<a href="#implementation_perl_storage">Storage Reorganization</a>.
+ </p></div><div class="section" lang="en" xml:lang="en"><div
class="titlepage"><div><div><h4 class="title"><a
id="implementation_perl_ets"></a>6.3.5. EventTypes</h4></div></div></div><p>
+ See <a href="#implementation_general">Overall Considerations</a>
for a list. The
+ immediate plan may avoid use of the time extension.
</p></div></div></div><div class="section" lang="en"
xml:lang="en"><div class="titlepage"><div><div><h2 class="title"
style="clear: both"><a id="appendix"></a>7. Appendix</h2></div></div></div><p>
The following sections describe some of the more concreate details of
this
implementation when applicable.
@@ -726,7 +740,7 @@
</pre></div><div class="section" lang="en" xml:lang="en"><div
class="titlepage"><div><div><h3 class="title"><a
id="appendix_summarization_source"></a>7.2. Summarization Source
Code</h3></div></div></div><p>
As a proof of concept to performing a rudimentary
<span class="emphasis"><em>K Dominators</em></span> identification
of the IP addresses an
- <span class="emphasis"><em>hLS</em></span> will know of consider the
following source
+ <span class="emphasis"><em>hLS</em></span> will know of, consider
the following source
code written in both Java and Perl.
</p><div class="section" lang="en" xml:lang="en"><div
class="titlepage"><div><div><h4 class="title"><a
id="appendix_summarization_source_java"></a>7.2.1. Summarization Source Code
(Java)</h4></div></div></div><p>
<span><strong class="command">TBD</strong></span>
@@ -745,6 +759,16 @@
IP addresses as well as a potential solution to finding dominating values
when used in a Radix Tree (Patricia Trie) data structure.
+=head1 USAGE
+
+ perl ipTree.pl
+
+An outputed list of the minimum dominators of the resulting IPTrie will be
+be displayed. This will generate a graphviz .dot file (graph.dot) of the
+IPTrie that can then be used with the graphviz executable:
+
+ dot graph.dot -Tpng -o graph.png
+
=head1 DESCRIPTION
The perfSONAR dLS and gLS require a way to summarize large amounts of
@@ -783,11 +807,28 @@
"128.4.133.163",
"128.4.133.164");
+#my @map = ("150.254.160.194",
+# "150.254.160.195",
+# "150.254.160.196",
+# "120.10.0.11",
+# "120.10.0.12",
+# "120.10.0.17",
+# "120.11.5.1",
+# "120.11.5.2",
+# "80.15.11.2",
+# "80.15.11.3");
+
my $vote =
getCDIRSummaries(\@map);
$tr =
makePatriciaTrie(\@map,
$vote, $tr);
manipulatePatriciaTrie($tr);
genGraph(\%tree);
+my $final = listMinDoms();
+print "Min Dominators:\n\n";
+foreach my $f (@{$final}) {
+ print $f , "\n";
+}
+
exit(1);
=head2 getCDIRSummaries($map)
@@ -802,13 +843,12 @@
my($map) = @_;
# We can get ALL applicable CIDR summaries for each (in order of least to
- # greatest). Then vote on what is popular, skip 0.0.0.0/0 though...
+ # greatest).
my %vote = ();
foreach my $host (@{$map}) {
my @list = Net::CIDR::addr2cidr($host);
foreach my $range (@list) {
- next if $range eq "0.0.0.0/0";
$vote{$range}++ if defined $vote{$range};
$vote{$range} = 1 if not defined $vote{$range};
}
@@ -827,6 +867,7 @@
$tally{$vote{$range}} =
\@temp;
}
}
+
return \%tally;
}
@@ -1009,7 +1050,9 @@
=cut
sub genGraph {
- print "digraph g {\n";
+
+ open(DOT, ">graph.dot");
+ print DOT "digraph g {\n";
foreach my $item (keys %tree) {
next unless $item;
@@ -1018,10 +1061,10 @@
# color the terminal elements so we know they are not dominators
if($array[1] eq "32") {
- print "\t\"" , $item , "\"[ color=crimson, style=filled ];\n";
+ print DOT "\t\"" , $item , "\"[ color=crimson, style=filled ];\n";
}
else {
- print "\t\"" , $item , "\";\n";
+ print DOT "\t\"" , $item , "\";\n";
}
}
@@ -1029,13 +1072,87 @@
next unless $item;
foreach my $c (@{$tree{$item}{"C"}}) {
next unless $c;
- print "\t\"" , $item , "\" -> \"" , $c , "\";\n";
+ print DOT "\t\"" , $item , "\" -> \"" , $c , "\";\n";
}
}
- print "}\n";
+ print DOT "}\n";
+ close(DOT);
+ return;
}
+=head2 listMinDoms
+
+Given the tree, 'slice off' the top level of nodes that are
+not necessarily representative of the domination (e.g. if they
+are just used to direct traffic through the tree, and do not
+have direct /32 children). We return a list of nodes that
+represent the minimum set of addresses that can be used to
+describe any of the originals.
+
+=cut
+
+sub listMinDoms {
+
+ # First locate the root in the tree
+
+ my @expand = ();
+ foreach my $node (keys %tree) {
+ unless($tree{$node}{"U"}) {
+ # add the root the 'expand' list so we can
+ # examine it (and it's children, etc.) then
+ # exit
+
+ push @expand, $node;
+ last;
+ }
+ }
+
+ my $counter = 0;
+ my @minDoms = ();
+
+ # now we are going to walk the tree. If a non-leaf
+ # node has two non-leaf children is is useless to us,
+ # so we skip it. If a non-leaf node has at least one
+ # leaf child, this is a part of our 'boundary' so
+ # we list it as a minDominator.
+
+ while($expand[$counter]) {
+ my $minDomFlag = 0;
+ my $expandFlag = 0;
+ foreach my $child (sort @{$tree{$expand[$counter]}{"C"}}) {
+ my @array = split(/\//, $child);
+
+ # /32's are leaf nodes, if one of our children is a leaf
+ # we are a on the min dominator boundary
+ if($array[1] eq "32") {
+
+ # Make sure we only add the node once...
+ if(($#minDoms == -1) or ($minDoms[$#minDoms] ne $expand[$counter])) {
+ push @minDoms, $expand[$counter];
+ }
+ $minDomFlag++;
+ }
+ else {
+ # If we have a non leaf node as a child, we will probably
+ # need to expland that child later...
+
+ push @expand, $child;
+ $expandFlag++;
+ }
+ }
+
+ # corner case: if we have a non leaf child and a leaf
+ # child we need to remove the non leaf child from the
+ # expand list
+
+ pop @expand if $expandFlag and $minDomFlag;
+ $counter++;
+ }
+
+ return
\@minDoms;
+}
+
__END__
=head1 SEE ALSO
@@ -1088,10 +1205,14 @@
<span class="emphasis"><em>Net::IPTrie</em></span>) to solve
this problem. Similar
libraries may not be available in Java, but can easily be
re-created.</p></li><li style="list-style-type: circle"><p>The
output (shown below) is currently used to create a
- <a href="#id2532007">Graphviz</a> formated image. The script
can be
- modified to output the tree in a more readable
format.</p></li><li style="list-style-type: circle"><p>This script does not
allow one to specifiy a set value for
- <span class="emphasis"><em>K</em></span> and return only those
dominators. A simple
- walk of the tree should be able to perform this
task.</p></li></ul></div><p>
+ <a href="#id2532268">Graphviz</a> formated image. The script
can be
+ modified to output the tree in different formats (including
+ directly into a summarization message).</p></li><li
style="list-style-type: circle"><p>This script does not allow one to specifiy
a set value for
+ <span class="emphasis"><em>K</em></span> and return only those
dominators. The
+ script does calculate the minimum dominator nodes (e.g. nodes
+ that are the parent of at least one leaf and are not included
+ simply for navigation reasons). This concept is demonstrated
+ in the output below.</p></li></ul></div><p>
</p><p>
The following output represents a <span
class="emphasis"><em>Graphviz</em></span>
description of a DAG.
@@ -1102,11 +1223,11 @@
digraph g {
"128.0.0.0/9";
"128.4.131.23/32"[ color=crimson, style=filled ];
- "128.0.0.0/1";
"128.4.133.163/32"[ color=crimson, style=filled ];
"128.175.13.92/32"[ color=crimson, style=filled ];
"128.4.40.0/28";
"128.4.128.0/17";
+ "0.0.0.0/0";
"128.4.40.17/32"[ color=crimson, style=filled ];
"128.4.133.164/30";
"128.4.40.12/32"[ color=crimson, style=filled ];
@@ -1119,12 +1240,12 @@
"128.4.40.10/32"[ color=crimson, style=filled ];
"128.0.0.0/9" -> "128.4.0.0/17";
"128.0.0.0/9" -> "128.4.128.0/17";
- "128.0.0.0/1" -> "128.0.0.0/9";
- "128.0.0.0/1" -> "128.128.0.0/9";
"128.4.40.0/28" -> "128.4.40.10/32";
"128.4.40.0/28" -> "128.4.40.12/32";
"128.4.128.0/17" -> "128.4.132.0/22";
"128.4.128.0/17" -> "128.4.131.23/32";
+ "0.0.0.0/0" -> "128.0.0.0/9";
+ "0.0.0.0/0" -> "128.128.0.0/9";
"128.4.133.164/30" -> "128.4.133.164/32";
"128.4.133.164/30" -> "128.4.133.167/32";
"128.128.0.0/9" -> "128.175.13.74/32";
@@ -1143,6 +1264,20 @@
(represented in red).
</p><p>
</p><div class="mediaobject"><img src="images/graph.png"
/></div><p>
+ </p><p>
+ Some important things to note about this image:
+ </p><p>
+ </p><div class="itemizedlist"><ul type="opencircle"><li
style="list-style-type: circle"><p>There are several <span
class="emphasis"><em>positional</em></span> elements
+ that are not directly connected to a leaf node, but simply
+ used to hold the tree together.</p></li><li
style="list-style-type: circle"><p>Each non-leaf node should be a minimal
CIDR summary.</p></li><li style="list-style-type: circle"><p>A <span
class="emphasis"><em>proper</em></span> list of
+ <span class="emphasis"><em>K Dominators</em></span> would
ignore the aforementioned
+ <span class="emphasis"><em>positional</em></span> nodes.
</p></li></ul></div><p>
+ </p><p>
+ The following altered image shows how we could
+ <span class="emphasis"><em>prune</em></span> the tree to remove
useless elements, and
+ pick out the top (3 in this case) dominating elements.
+ </p><p>
+ </p><div class="mediaobject"><img src="images/graph2.png"
/></div><p>
</p></div></div><div class="section" lang="en" xml:lang="en"><div
class="titlepage"><div><div><h3 class="title"><a
id="appendix_synch"></a>7.3. Synchronization Example</h3></div></div></div><p>
The following example illustrates synchronization using the
perfSONAR-PS framework mainly for backup up <span
class="emphasis"><em>DCN</em></span>
@@ -1433,20 +1568,20 @@
A <span class="emphasis"><em>globally</em></span> acessible
Lookup Service.
</p></dd></dl></div><div class="glossdiv"><h3
class="title">H</h3><dl><dt><a id="hLS"></a>hLS</dt><dd><p>
The <span class="emphasis"><em>home</em></span> Lookup Service.
- </p></dd></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div></div><div class="bibliography"><div
class="titlepage"><div><div><h2 class="title"><a
id="bibliography"></a>References</h2></div></div></div><div
class="biblioentry"><a id="id2531604"></a><p>[<abbr
class="abbrev">dLS</abbr>] <span class="title"><i>
+ </p></dd></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div></div><div class="bibliography"><div
class="titlepage"><div><div><h2 class="title"><a
id="bibliography"></a>References</h2></div></div></div><div
class="biblioentry"><a id="id2531864"></a><p>[<abbr
class="abbrev">dLS</abbr>] <span class="title"><i>
<a
href="http://anonsvn.internet2.edu/svn/nmwg/trunk/nmwg/doc/dLS/dLS_spec_1.html"
target="_top">http://anonsvn.internet2.edu/svn/nmwg/trunk/nmwg/doc/dLS/dLS_spec_1.html</a>
- </i>. </span></p></div><div class="biblioentry"><a
id="id2531623"></a><p>[<abbr class="abbrev">ESnet</abbr>] <span
class="title"><i>
+ </i>. </span></p></div><div class="biblioentry"><a
id="id2531884"></a><p>[<abbr class="abbrev">ESnet</abbr>] <span
class="title"><i>
<a href="http://www.es.net" target="_top">http://www.es.net</a>
- </i>. </span></p></div><div class="biblioentry"><a
id="id2531641"></a><p>[<abbr class="abbrev">Geant2</abbr>] <span
class="title"><i>
+ </i>. </span></p></div><div class="biblioentry"><a
id="id2531902"></a><p>[<abbr class="abbrev">Geant2</abbr>] <span
class="title"><i>
<a href="http://www.geant2.net"
target="_top">http://www.geant2.net</a>
- </i>. </span></p></div><div class="biblioentry"><a
id="id2531660"></a><p>[<abbr class="abbrev">Internet2</abbr>] <span
class="title"><i>
+ </i>. </span></p></div><div class="biblioentry"><a
id="id2531920"></a><p>[<abbr class="abbrev">Internet2</abbr>] <span
class="title"><i>
<a href="http://www.internet2.edu"
target="_top">http://www.internet2.edu</a>
- </i>. </span></p></div><div class="biblioentry"><a
id="id2531678"></a><p>[<abbr class="abbrev">RNP</abbr>] <span
class="title"><i>
+ </i>. </span></p></div><div class="biblioentry"><a
id="id2532214"></a><p>[<abbr class="abbrev">RNP</abbr>] <span
class="title"><i>
<a href="http://www.rnp.br/en" target="_top">http://www.rnp.br/en</a>
- </i>. </span></p></div><div class="biblioentry"><a
id="id2531696"></a><p>[<abbr class="abbrev">XPath</abbr>] <span
class="title"><i>
+ </i>. </span></p></div><div class="biblioentry"><a
id="id2532232"></a><p>[<abbr class="abbrev">XPath</abbr>] <span
class="title"><i>
<a href="http://www.w3.org/TR/xpath" target="_top">XPath</a>
- </i>. </span></p></div><div class="biblioentry"><a
id="id2531989"></a><p>[<abbr class="abbrev">XQuery</abbr>] <span
class="title"><i>
+ </i>. </span></p></div><div class="biblioentry"><a
id="id2532250"></a><p>[<abbr class="abbrev">XQuery</abbr>] <span
class="title"><i>
<a href="http://www.w3.org/TR/xquery/" target="_top">XQuery</a>
- </i>. </span></p></div><div class="biblioentry"><a
id="id2532007"></a><p>[<abbr class="abbrev">Graphviz</abbr>] <span
class="title"><i>
+ </i>. </span></p></div><div class="biblioentry"><a
id="id2532268"></a><p>[<abbr class="abbrev">Graphviz</abbr>] <span
class="title"><i>
<a href="http://www.graphviz.org/" target="_top">Graphviz</a>
</i>. </span></p></div></div></div></body></html>
Modified: trunk/nmwg/doc/dLS/gLS/phase_1.xml
===================================================================
--- trunk/nmwg/doc/dLS/gLS/phase_1.xml 2008-05-20 16:05:26 UTC (rev 348)
+++ trunk/nmwg/doc/dLS/gLS/phase_1.xml 2008-05-20 21:30:12 UTC (rev 349)
@@ -60,6 +60,12 @@
<entry>EventType Clarifications</entry>
<entry>J. Zurawski</entry>
</row>
+ <row>
+ <entry>1.02</entry>
+ <entry>05/20/2007</entry>
+ <entry>Summarization Clarification/Algorithm Change</entry>
+ <entry>J. Zurawski</entry>
+ </row>
</tbody>
</tgroup>
</table>
@@ -375,6 +381,16 @@
</para>
<para>
+ In general, synchronization can be performed using the already
+ defined <command>LSRegisterRequest</command> message. To ensure that
+ the meaning of the data is preserved, it will be necessary to add a
new
+ <emphasis>eventType</emphasis>:
+
<command>http://ogf.org/ns/nmwg/tools/org/perfsonar/service/lookup/registration/synchronization/2.0</command>.
+ Using this eventType will trigger the internal semantics of a
+ <emphasis>non-authoritative</emphasis> registration of data to the
gLS.
+ </para>
+
+ <para>
Open questions remain if this should be a periodic scheduled event
that
is frequent enough to capture new information propagation without
overloading <emphasis>gLS</emphasis> instances or if it may be able
to
@@ -1108,6 +1124,9 @@
<listitem>
<para>http://ogf.org/ns/nmwg/tools/org/perfsonar/service/lookup/registration/service/2.0</para>
</listitem>
+ <listitem>
+
<para>http://ogf.org/ns/nmwg/tools/org/perfsonar/service/lookup/registration/synchronization/2.0</para>
+ </listitem>
</itemizedlist>
</para>
@@ -1246,6 +1265,12 @@
how we treat the act of registration.
</para>
</listitem>
+ <listitem>
+ <para>
+ <xref linkend="implementation_perl_ets" /> - Several new
+ eventTypes are necessary.
+ </para>
+ </listitem>
</itemizedlist>
</para>
@@ -1400,6 +1425,17 @@
</para>
</section>
+
+
+ <section id="implementation_perl_ets" xreflabel="EventTypes">
+ <title>EventTypes</title>
+
+ <para>
+ See <xref linkend="implementation_general" /> for a list. The
+ immediate plan may avoid use of the time extension.
+ </para>
+
+ </section>
</section>
@@ -1437,7 +1473,7 @@
<para>
As a proof of concept to performing a rudimentary
<emphasis>K Dominators</emphasis> identification of the IP addresses
an
- <emphasis>hLS</emphasis> will know of consider the following source
+ <emphasis>hLS</emphasis> will know of, consider the following source
code written in both Java and Perl.
</para>
@@ -1475,12 +1511,16 @@
<listitem>
<para>The output (shown below) is currently used to create a
<citation>Graphviz</citation> formated image. The script can
be
- modified to output the tree in a more readable format.</para>
+ modified to output the tree in different formats (including
+ directly into a summarization message).</para>
</listitem>
<listitem>
<para>This script does not allow one to specifiy a set value
for
- <emphasis>K</emphasis> and return only those dominators. A
simple
- walk of the tree should be able to perform this task.</para>
+ <emphasis>K</emphasis> and return only those dominators. The
+ script does calculate the minimum dominator nodes (e.g. nodes
+ that are the parent of at least one leaf and are not included
+ simply for navigation reasons). This concept is demonstrated
+ in the output below.</para>
</listitem>
</itemizedlist>
</para>
@@ -1510,6 +1550,42 @@
</mediaobject>
</para>
+ <para>
+ Some important things to note about this image:
+ </para>
+
+ <para>
+ <itemizedlist mark='opencircle'>
+ <listitem>
+ <para>There are several <emphasis>positional</emphasis>
elements
+ that are not directly connected to a leaf node, but simply
+ used to hold the tree together.</para>
+ </listitem>
+ <listitem>
+ <para>Each non-leaf node should be a minimal CIDR
summary.</para>
+ </listitem>
+ <listitem>
+ <para>A <emphasis>proper</emphasis> list of
+ <emphasis>K Dominators</emphasis> would ignore the
aforementioned
+ <emphasis>positional</emphasis> nodes. </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+
+ <para>
+ The following altered image shows how we could
+ <emphasis>prune</emphasis> the tree to remove useless elements, and
+ pick out the top (3 in this case) dominating elements.
+ </para>
+
+ <para>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/graph2.png"/>
+ </imageobject>
+ </mediaobject>
+ </para>
+
</section>
</section>
Modified: trunk/nmwg/doc/dLS/gLS/phase_1_color.html
===================================================================
--- trunk/nmwg/doc/dLS/gLS/phase_1_color.html 2008-05-20 16:05:26 UTC (rev
348)
+++ trunk/nmwg/doc/dLS/gLS/phase_1_color.html 2008-05-20 21:30:12 UTC (rev
349)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta
http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>dLS
Implementation Phase 1 -- The Rise of the gLS</title><meta name="generator"
content="DocBook XSL Stylesheets V1.71.0" /></head><body><div class="article"
lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a
id="id2478927"></a>dLS Implementation Phase 1 -- The Rise of the
gLS</h1></div><div><div class="authorgroup"><div class="author"><h3
class="author"><span class="firstname">J.</span> <span
class="surname">Boote</span></h3></div><div class="author"><h3
class="author"><span class="firstname">M.</span> <span
class="surname">Glowiak</span></h3></div><div class="author"><h3
class="author"><span class="firstname">M.</span> <span
class="surname">Swany</span></h3></div><div class="author"><h3
class="author"><span class="firstname">J.</span> <span
class="surname">Zurawski</span></h3></div></div></div></div><hr /></div><div
class="
toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a
href="#changes">1. Document Changes</a></span></dt><dt><span
class="section"><a href="#introduction">2.
Introduction</a></span></dt><dt><span class="section"><a
href="#architecture">3. Architecture</a></span></dt><dd><dl><dt><span
class="section"><a href="#gLS_instances">3.1. gLS
Instances</a></span></dt><dt><span class="section"><a
href="#bootstrapping">3.2. Bootstrapping</a></span></dt><dt><span
class="section"><a href="#synchronization">3.3.
Synchronization</a></span></dt><dt><span class="section"><a
href="#hLS_instances">3.4. hLS Instances</a></span></dt><dt><span
class="section"><a href="#registration">3.5. Multiple
Registration</a></span></dt><dt><span class="section"><a
href="#interaction">3.6. Interaction</a></span></dt></dl></dd><dt><span
class="section"><a href="#api">4. API</a></span></dt><dd><dl><dt><span
class="section"><a href="#level0_api">4.1. Level 0
API</a></span></dt><dt><span class="sect
ion"><a href="#level1_api">4.2. Level 1 API</a></span></dt><!
dd><dl><
dt><span class="section"><a href="#level1_api_ext">4.2.1. Level 1 API
Extension</a></span></dt></dl></dd><dt><span class="section"><a
href="#level2_api">4.3. Level 2 API</a></span></dt><dd><dl><dt><span
class="section"><a href="#level2_api_ext">4.3.1. Level 2 API
Extension</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a
href="#operation">5. Operation</a></span></dt><dt><span class="section"><a
href="#implementation">6. Implementation</a></span></dt><dd><dl><dt><span
class="section"><a href="#implementation_general">6.1. Overall
Considerations</a></span></dt><dt><span class="section"><a
href="#implementation_java">6.2. Java Considerations</a></span></dt><dt><span
class="section"><a href="#implementation_perl">6.3. Perl
Considerations</a></span></dt><dd><dl><dt><span class="section"><a
href="#implementation_perl_mode">6.3.1. gLS and hLS Operation
Differences</a></span></dt><dt><span class="section"><a
href="#implementation_perl_summarization">6.3.2. Summarizing
Registered Data</a></span></dt><dt><span class="section"><a
href="#implementation_perl_storage">6.3.3. Storage
Reorganization</a></span></dt><dt><span class="section"><a
href="#implementation_perl_registration">6.3.4. Multiple and Self
Registration</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a
href="#appendix">7. Appendix</a></span></dt><dd><dl><dt><span
class="section"><a href="#appendix_summary">7.1. Summary Message
Example</a></span></dt><dt><span class="section"><a
href="#appendix_summarization_source">7.2. Summarization Source
Code</a></span></dt><dd><dl><dt><span class="section"><a
href="#appendix_summarization_source_java">7.2.1. Summarization Source Code
(Java)</a></span></dt><dt><span class="section"><a
href="#appendix_summarization_source_perl">7.2.2. Summarization Source Code
(Perl)</a></span></dt></dl></dd><dt><span class="section"><a
href="#appendix_synch">7.3. Synchronization
Example</a></span></dt></dl></dd><dt><span class="glossary"><a href=
"#glossary">Terms</a></span></dt><dt><span class="bibliograp!
hy"><a h
ref="#bibliography">References</a></span></dt></dl></div><div class="section"
lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"
style="clear: both"><a id="changes"></a>1. Document
Changes</h2></div></div></div><div class="table"><a id="table.1"></a><p
class="title"><b>Table 1. Change Log</b></p><div
class="table-contents"><table summary="Change Log" border="1"><colgroup><col
align="left" /></colgroup><thead><tr><th align="left">Version</th><th
align="left">Date</th><th align="left">Description</th><th
align="left">Author(s)</th></tr></thead><tbody><tr><td
align="left">1.00</td><td align="left">05/11/2007</td><td
align="left">Initial Preparation</td><td align="left">J.
Zurawski</td></tr><tr><td align="left">1.01</td><td
align="left">05/18/2007</td><td align="left">EventType Clarifications</td><td
align="left">J. Zurawski</td></tr></tbody></table></div></div><br
class="table-break" /></div><div class="section" lang="en" xml:lang="en"><div
class="titl
epage"><div><div><h2 class="title" style="clear: both"><a
id="introduction"></a>2. Introduction</h2></div></div></div><p>
- This document builds upon the work described in <a
href="#id2531604">dLS Design Document</a>
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta
http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>dLS
Implementation Phase 1 -- The Rise of the gLS</title><meta name="generator"
content="DocBook XSL Stylesheets V1.71.0" /></head><body><div class="article"
lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a
id="id2478927"></a>dLS Implementation Phase 1 -- The Rise of the
gLS</h1></div><div><div class="authorgroup"><div class="author"><h3
class="author"><span class="firstname">J.</span> <span
class="surname">Boote</span></h3></div><div class="author"><h3
class="author"><span class="firstname">M.</span> <span
class="surname">Glowiak</span></h3></div><div class="author"><h3
class="author"><span class="firstname">M.</span> <span
class="surname">Swany</span></h3></div><div class="author"><h3
class="author"><span class="firstname">J.</span> <span
class="surname">Zurawski</span></h3></div></div></div></div><hr /></div><div
class="
toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a
href="#changes">1. Document Changes</a></span></dt><dt><span
class="section"><a href="#introduction">2.
Introduction</a></span></dt><dt><span class="section"><a
href="#architecture">3. Architecture</a></span></dt><dd><dl><dt><span
class="section"><a href="#gLS_instances">3.1. gLS
Instances</a></span></dt><dt><span class="section"><a
href="#bootstrapping">3.2. Bootstrapping</a></span></dt><dt><span
class="section"><a href="#synchronization">3.3.
Synchronization</a></span></dt><dt><span class="section"><a
href="#hLS_instances">3.4. hLS Instances</a></span></dt><dt><span
class="section"><a href="#registration">3.5. Multiple
Registration</a></span></dt><dt><span class="section"><a
href="#interaction">3.6. Interaction</a></span></dt></dl></dd><dt><span
class="section"><a href="#api">4. API</a></span></dt><dd><dl><dt><span
class="section"><a href="#level0_api">4.1. Level 0
API</a></span></dt><dt><span class="sect
ion"><a href="#level1_api">4.2. Level 1 API</a></span></dt><!
dd><dl><
dt><span class="section"><a href="#level1_api_ext">4.2.1. Level 1 API
Extension</a></span></dt></dl></dd><dt><span class="section"><a
href="#level2_api">4.3. Level 2 API</a></span></dt><dd><dl><dt><span
class="section"><a href="#level2_api_ext">4.3.1. Level 2 API
Extension</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a
href="#operation">5. Operation</a></span></dt><dt><span class="section"><a
href="#implementation">6. Implementation</a></span></dt><dd><dl><dt><span
class="section"><a href="#implementation_general">6.1. Overall
Considerations</a></span></dt><dt><span class="section"><a
href="#implementation_java">6.2. Java Considerations</a></span></dt><dt><span
class="section"><a href="#implementation_perl">6.3. Perl
Considerations</a></span></dt><dd><dl><dt><span class="section"><a
href="#implementation_perl_mode">6.3.1. gLS and hLS Operation
Differences</a></span></dt><dt><span class="section"><a
href="#implementation_perl_summarization">6.3.2. Summarizing
Registered Data</a></span></dt><dt><span class="section"><a
href="#implementation_perl_storage">6.3.3. Storage
Reorganization</a></span></dt><dt><span class="section"><a
href="#implementation_perl_registration">6.3.4. Multiple and Self
Registration</a></span></dt><dt><span class="section"><a
href="#implementation_perl_ets">6.3.5.
EventTypes</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a
href="#appendix">7. Appendix</a></span></dt><dd><dl><dt><span
class="section"><a href="#appendix_summary">7.1. Summary Message
Example</a></span></dt><dt><span class="section"><a
href="#appendix_summarization_source">7.2. Summarization Source
Code</a></span></dt><dd><dl><dt><span class="section"><a
href="#appendix_summarization_source_java">7.2.1. Summarization Source Code
(Java)</a></span></dt><dt><span class="section"><a
href="#appendix_summarization_source_perl">7.2.2. Summarization Source Code
(Perl)</a></span></dt></dl></dd><dt><span class="section"><a
href="#appendix_sy
nch">7.3. Synchronization Example</a></span></dt></dl></dd><!
dt><span
class="glossary"><a href="#glossary">Terms</a></span></dt><dt><span
class="bibliography"><a
href="#bibliography">References</a></span></dt></dl></div><div
class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2
class="title" style="clear: both"><a id="changes"></a>1. Document
Changes</h2></div></div></div><div class="table"><a id="table.1"></a><p
class="title"><b>Table 1. Change Log</b></p><div
class="table-contents"><table summary="Change Log" border="1"><colgroup><col
align="left" /></colgroup><thead><tr><th align="left">Version</th><th
align="left">Date</th><th align="left">Description</th><th
align="left">Author(s)</th></tr></thead><tbody><tr><td
align="left">1.00</td><td align="left">05/11/2007</td><td
align="left">Initial Preparation</td><td align="left">J.
Zurawski</td></tr><tr><td align="left">1.01</td><td
align="left">05/18/2007</td><td align="left">EventType Clarifications</td><td
align="left">J. Zurawski</td></tr><tr><td align="left">1.02</
td><td align="left">05/20/2007</td><td align="left">Summarization
Clarification/Algorithm Change</td><td align="left">J.
Zurawski</td></tr></tbody></table></div></div><br class="table-break"
/></div><div class="section" lang="en" xml:lang="en"><div
class="titlepage"><div><div><h2 class="title" style="clear: both"><a
id="introduction"></a>2. Introduction</h2></div></div></div><p>
+ This document builds upon the work described in <a
href="#id2531864">dLS Design Document</a>
to create <span><strong class="command">Phase 1</strong></span> of the
proposed distributed
information service. This document will describe concrete details of
the
plan, prescribing both the overall structure of the system as well as
@@ -69,8 +69,8 @@
specifically can I find).</p></li></ol></div><p>
</p><div class="section" lang="en" xml:lang="en"><div
class="titlepage"><div><div><h3 class="title"><a
id="gLS_instances"></a>3.1. gLS Instances</h3></div></div></div><p>
The <span class="emphasis"><em>perfSONAR</em></span> project
partners (e.g.
- <a href="#id2531623">ESnet</a>, <a href="#id2531641">Geant2</a>,
- <a href="#id2531660">Internet2</a>, and <a
href="#id2531678">RNP</a>) are
+ <a href="#id2531884">ESnet</a>, <a href="#id2531902">Geant2</a>,
+ <a href="#id2531920">Internet2</a>, and <a
href="#id2532214">RNP</a>) are
expected to stand up and maintain <span
class="emphasis"><em>root</em></span>
<a href="#gLS">gLS</a> instances. As the driving force behind
<span class="emphasis"><em>perfSONAR</em></span>, this contribution
serves as the basis
@@ -182,6 +182,14 @@
</p><p>
</p><div class="mediaobject"><img src="images/sync.png" /></div><p>
</p><p>
+ In general, synchronization can be performed using the already
+ defined <span><strong
class="command">LSRegisterRequest</strong></span> message. To ensure that
+ the meaning of the data is preserved, it will be necessary to add a
new
+ <span class="emphasis"><em>eventType</em></span>:
+ <span><strong
class="command">http://ogf.org/ns/nmwg/tools/org/perfsonar/service/lookup/registration/synchronization/2.0</strong></span>.
+ Using this eventType will trigger the internal semantics of a
+ <span class="emphasis"><em>non-authoritative</em></span>
registration of data to the gLS.
+ </p><p>
Open questions remain if this should be a periodic scheduled event
that
is frequent enough to capture new information propagation without
overloading <span class="emphasis"><em>gLS</em></span> instances or
if it may be able to
@@ -285,8 +293,8 @@
service designers.
</p></div><div class="section" lang="en" xml:lang="en"><div
class="titlepage"><div><div><h3 class="title"><a
id="interaction"></a>3.6. Interaction</h3></div></div></div><p>
Currently, services and clients only have a single way to query an
- <span class="emphasis"><em>LS</em></span> instance for data: <a
href="#id2531989">XQuery</a>
- or <a href="#id2531696">XPath</a> statements. While useful to
individuals
+ <span class="emphasis"><em>LS</em></span> instance for data: <a
href="#id2532250">XQuery</a>
+ or <a href="#id2532232">XPath</a> statements. While useful to
individuals
with an intimate knowledge of the data storage structure and the
query
language syntax, this leaves other services and client applications
frustrated and out of luck when it comes to lookup.
@@ -467,7 +475,7 @@
the <span class="emphasis"><em>LSRegisterRequest</em></span> message
should contain the
following <span class="emphasis"><em>eventType</em></span>s:
</p><p>
- </p><div class="itemizedlist"><ul type="opencircle"><li
style="list-style-type:
circle"><p>http://ogf.org/ns/nmwg/tools/org/perfsonar/service/lookup/registration/summary/2.0</p></li><li
style="list-style-type:
circle"><p>http://ogf.org/ns/nmwg/tools/org/perfsonar/service/lookup/registration/service/2.0</p></li></ul></div><p>
+ </p><div class="itemizedlist"><ul type="opencircle"><li
style="list-style-type:
circle"><p>http://ogf.org/ns/nmwg/tools/org/perfsonar/service/lookup/registration/summary/2.0</p></li><li
style="list-style-type:
circle"><p>http://ogf.org/ns/nmwg/tools/org/perfsonar/service/lookup/registration/service/2.0</p></li><li
style="list-style-type:
circle"><p>http://ogf.org/ns/nmwg/tools/org/perfsonar/service/lookup/registration/synchronization/2.0</p></li></ul></div><p>
</p><p>
The <span class="emphasis"><em>LSDeregisterRequest</em></span>
message should contain the
following <span class="emphasis"><em>eventType</em></span>s:
@@ -508,6 +516,9 @@
</p></li><li style="list-style-type: circle"><p>
<a href="#implementation_perl_registration">Multiple and Self
Registration</a> - Changes to
how we treat the act of registration.
+ </p></li><li style="list-style-type: circle"><p>
+ <a href="#implementation_perl_ets">EventTypes</a> - Several new
+ eventTypes are necessary.
</p></li></ul></div><p>
</p><div class="section" lang="en" xml:lang="en"><div
class="titlepage"><div><div><h4 class="title"><a
id="implementation_perl_mode"></a>6.3.1. gLS and hLS Operation
Differences</h4></div></div></div><p>
The <span class="emphasis"><em>gLS</em></span> must contain the
following functionality
@@ -592,6 +603,9 @@
a <span class="emphasis"><em>default</em></span> LS instance.
This will also mean
addressing the storage issue discussed in
<a href="#implementation_perl_storage">Storage Reorganization</a>.
+ </p></div><div class="section" lang="en" xml:lang="en"><div
class="titlepage"><div><div><h4 class="title"><a
id="implementation_perl_ets"></a>6.3.5. EventTypes</h4></div></div></div><p>
+ See <a href="#implementation_general">Overall Considerations</a>
for a list. The
+ immediate plan may avoid use of the time extension.
</p></div></div></div><div class="section" lang="en"
xml:lang="en"><div class="titlepage"><div><div><h2 class="title"
style="clear: both"><a id="appendix"></a>7. Appendix</h2></div></div></div><p>
The following sections describe some of the more concreate details of
this
implementation when applicable.
@@ -726,7 +740,7 @@
</pre></div><div class="section" lang="en" xml:lang="en"><div
class="titlepage"><div><div><h3 class="title"><a
id="appendix_summarization_source"></a>7.2. Summarization Source
Code</h3></div></div></div><p>
As a proof of concept to performing a rudimentary
<span class="emphasis"><em>K Dominators</em></span> identification
of the IP addresses an
- <span class="emphasis"><em>hLS</em></span> will know of consider the
following source
+ <span class="emphasis"><em>hLS</em></span> will know of, consider
the following source
code written in both Java and Perl.
</p><div class="section" lang="en" xml:lang="en"><div
class="titlepage"><div><div><h4 class="title"><a
id="appendix_summarization_source_java"></a>7.2.1. Summarization Source Code
(Java)</h4></div></div></div><p>
<span><strong class="command">TBD</strong></span>
@@ -745,6 +759,16 @@
IP addresses as well as a potential solution to finding dominating values
when used in a Radix Tree (Patricia Trie) data structure.
+=head1 USAGE
+
+ perl ipTree.pl
+
+An outputed list of the minimum dominators of the resulting IPTrie will be
+be displayed. This will generate a graphviz .dot file (graph.dot) of the
+IPTrie that can then be used with the graphviz executable:
+
+ dot graph.dot -Tpng -o graph.png
+
=head1 DESCRIPTION
The perfSONAR dLS and gLS require a way to summarize large amounts of
@@ -783,11 +807,28 @@
"128.4.133.163",
"128.4.133.164");
+#my @map = ("150.254.160.194",
+# "150.254.160.195",
+# "150.254.160.196",
+# "120.10.0.11",
+# "120.10.0.12",
+# "120.10.0.17",
+# "120.11.5.1",
+# "120.11.5.2",
+# "80.15.11.2",
+# "80.15.11.3");
+
my $vote =
getCDIRSummaries(\@map);
$tr =
makePatriciaTrie(\@map,
$vote, $tr);
manipulatePatriciaTrie($tr);
genGraph(\%tree);
+my $final = listMinDoms();
+print "Min Dominators:\n\n";
+foreach my $f (@{$final}) {
+ print $f , "\n";
+}
+
exit(1);
=head2 getCDIRSummaries($map)
@@ -802,13 +843,12 @@
my($map) = @_;
# We can get ALL applicable CIDR summaries for each (in order of least to
- # greatest). Then vote on what is popular, skip 0.0.0.0/0 though...
+ # greatest).
my %vote = ();
foreach my $host (@{$map}) {
my @list = Net::CIDR::addr2cidr($host);
foreach my $range (@list) {
- next if $range eq "0.0.0.0/0";
$vote{$range}++ if defined $vote{$range};
$vote{$range} = 1 if not defined $vote{$range};
}
@@ -827,6 +867,7 @@
$tally{$vote{$range}} =
\@temp;
}
}
+
return \%tally;
}
@@ -1009,7 +1050,9 @@
=cut
sub genGraph {
- print "digraph g {\n";
+
+ open(DOT, ">graph.dot");
+ print DOT "digraph g {\n";
foreach my $item (keys %tree) {
next unless $item;
@@ -1018,10 +1061,10 @@
# color the terminal elements so we know they are not dominators
if($array[1] eq "32") {
- print "\t\"" , $item , "\"[ color=crimson, style=filled ];\n";
+ print DOT "\t\"" , $item , "\"[ color=crimson, style=filled ];\n";
}
else {
- print "\t\"" , $item , "\";\n";
+ print DOT "\t\"" , $item , "\";\n";
}
}
@@ -1029,13 +1072,87 @@
next unless $item;
foreach my $c (@{$tree{$item}{"C"}}) {
next unless $c;
- print "\t\"" , $item , "\" -> \"" , $c , "\";\n";
+ print DOT "\t\"" , $item , "\" -> \"" , $c , "\";\n";
}
}
- print "}\n";
+ print DOT "}\n";
+ close(DOT);
+ return;
}
+=head2 listMinDoms
+
+Given the tree, 'slice off' the top level of nodes that are
+not necessarily representative of the domination (e.g. if they
+are just used to direct traffic through the tree, and do not
+have direct /32 children). We return a list of nodes that
+represent the minimum set of addresses that can be used to
+describe any of the originals.
+
+=cut
+
+sub listMinDoms {
+
+ # First locate the root in the tree
+
+ my @expand = ();
+ foreach my $node (keys %tree) {
+ unless($tree{$node}{"U"}) {
+ # add the root the 'expand' list so we can
+ # examine it (and it's children, etc.) then
+ # exit
+
+ push @expand, $node;
+ last;
+ }
+ }
+
+ my $counter = 0;
+ my @minDoms = ();
+
+ # now we are going to walk the tree. If a non-leaf
+ # node has two non-leaf children is is useless to us,
+ # so we skip it. If a non-leaf node has at least one
+ # leaf child, this is a part of our 'boundary' so
+ # we list it as a minDominator.
+
+ while($expand[$counter]) {
+ my $minDomFlag = 0;
+ my $expandFlag = 0;
+ foreach my $child (sort @{$tree{$expand[$counter]}{"C"}}) {
+ my @array = split(/\//, $child);
+
+ # /32's are leaf nodes, if one of our children is a leaf
+ # we are a on the min dominator boundary
+ if($array[1] eq "32") {
+
+ # Make sure we only add the node once...
+ if(($#minDoms == -1) or ($minDoms[$#minDoms] ne $expand[$counter])) {
+ push @minDoms, $expand[$counter];
+ }
+ $minDomFlag++;
+ }
+ else {
+ # If we have a non leaf node as a child, we will probably
+ # need to expland that child later...
+
+ push @expand, $child;
+ $expandFlag++;
+ }
+ }
+
+ # corner case: if we have a non leaf child and a leaf
+ # child we need to remove the non leaf child from the
+ # expand list
+
+ pop @expand if $expandFlag and $minDomFlag;
+ $counter++;
+ }
+
+ return
\@minDoms;
+}
+
__END__
=head1 SEE ALSO
@@ -1088,10 +1205,14 @@
<span class="emphasis"><em>Net::IPTrie</em></span>) to solve
this problem. Similar
libraries may not be available in Java, but can easily be
re-created.</p></li><li style="list-style-type: circle"><p>The
output (shown below) is currently used to create a
- <a href="#id2532007">Graphviz</a> formated image. The script
can be
- modified to output the tree in a more readable
format.</p></li><li style="list-style-type: circle"><p>This script does not
allow one to specifiy a set value for
- <span class="emphasis"><em>K</em></span> and return only those
dominators. A simple
- walk of the tree should be able to perform this
task.</p></li></ul></div><p>
+ <a href="#id2532268">Graphviz</a> formated image. The script
can be
+ modified to output the tree in different formats (including
+ directly into a summarization message).</p></li><li
style="list-style-type: circle"><p>This script does not allow one to specifiy
a set value for
+ <span class="emphasis"><em>K</em></span> and return only those
dominators. The
+ script does calculate the minimum dominator nodes (e.g. nodes
+ that are the parent of at least one leaf and are not included
+ simply for navigation reasons). This concept is demonstrated
+ in the output below.</p></li></ul></div><p>
</p><p>
The following output represents a <span
class="emphasis"><em>Graphviz</em></span>
description of a DAG.
@@ -1102,11 +1223,11 @@
digraph g {
"128.0.0.0/9";
"128.4.131.23/32"[ color=crimson, style=filled ];
- "128.0.0.0/1";
"128.4.133.163/32"[ color=crimson, style=filled ];
"128.175.13.92/32"[ color=crimson, style=filled ];
"128.4.40.0/28";
"128.4.128.0/17";
+ "0.0.0.0/0";
"128.4.40.17/32"[ color=crimson, style=filled ];
"128.4.133.164/30";
"128.4.40.12/32"[ color=crimson, style=filled ];
@@ -1119,12 +1240,12 @@
"128.4.40.10/32"[ color=crimson, style=filled ];
"128.0.0.0/9" -> "128.4.0.0/17";
"128.0.0.0/9" -> "128.4.128.0/17";
- "128.0.0.0/1" -> "128.0.0.0/9";
- "128.0.0.0/1" -> "128.128.0.0/9";
"128.4.40.0/28" -> "128.4.40.10/32";
"128.4.40.0/28" -> "128.4.40.12/32";
"128.4.128.0/17" -> "128.4.132.0/22";
"128.4.128.0/17" -> "128.4.131.23/32";
+ "0.0.0.0/0" -> "128.0.0.0/9";
+ "0.0.0.0/0" -> "128.128.0.0/9";
"128.4.133.164/30" -> "128.4.133.164/32";
"128.4.133.164/30" -> "128.4.133.167/32";
"128.128.0.0/9" -> "128.175.13.74/32";
@@ -1143,6 +1264,20 @@
(represented in red).
</p><p>
</p><div class="mediaobject"><img src="images/graph.png"
/></div><p>
+ </p><p>
+ Some important things to note about this image:
+ </p><p>
+ </p><div class="itemizedlist"><ul type="opencircle"><li
style="list-style-type: circle"><p>There are several <span
class="emphasis"><em>positional</em></span> elements
+ that are not directly connected to a leaf node, but simply
+ used to hold the tree together.</p></li><li
style="list-style-type: circle"><p>Each non-leaf node should be a minimal
CIDR summary.</p></li><li style="list-style-type: circle"><p>A <span
class="emphasis"><em>proper</em></span> list of
+ <span class="emphasis"><em>K Dominators</em></span> would
ignore the aforementioned
+ <span class="emphasis"><em>positional</em></span> nodes.
</p></li></ul></div><p>
+ </p><p>
+ The following altered image shows how we could
+ <span class="emphasis"><em>prune</em></span> the tree to remove
useless elements, and
+ pick out the top (3 in this case) dominating elements.
+ </p><p>
+ </p><div class="mediaobject"><img src="images/graph2.png"
/></div><p>
</p></div></div><div class="section" lang="en" xml:lang="en"><div
class="titlepage"><div><div><h3 class="title"><a
id="appendix_synch"></a>7.3. Synchronization Example</h3></div></div></div><p>
The following example illustrates synchronization using the
perfSONAR-PS framework mainly for backup up <span
class="emphasis"><em>DCN</em></span>
@@ -1433,20 +1568,20 @@
A <span class="emphasis"><em>globally</em></span> acessible
Lookup Service.
</p></dd></dl></div><div class="glossdiv"><h3
class="title">H</h3><dl><dt><a id="hLS"></a>hLS</dt><dd><p>
The <span class="emphasis"><em>home</em></span> Lookup Service.
- </p></dd></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div></div><div class="bibliography"><div
class="titlepage"><div><div><h2 class="title"><a
id="bibliography"></a>References</h2></div></div></div><div
class="biblioentry"><a id="id2531604"></a><p>[<abbr
class="abbrev">dLS</abbr>] <span class="title"><i>
+ </p></dd></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div><div class="glossdiv"><dl></dl></div><div
class="glossdiv"><dl></dl></div></div><div class="bibliography"><div
class="titlepage"><div><div><h2 class="title"><a
id="bibliography"></a>References</h2></div></div></div><div
class="biblioentry"><a id="id2531864"></a><p>[<abbr
class="abbrev">dLS</abbr>] <span class="title"><i>
<a
href="http://anonsvn.internet2.edu/svn/nmwg/trunk/nmwg/doc/dLS/dLS_spec_1.html"
target="_top">http://anonsvn.internet2.edu/svn/nmwg/trunk/nmwg/doc/dLS/dLS_spec_1.html</a>
- </i>. </span></p></div><div class="biblioentry"><a
id="id2531623"></a><p>[<abbr class="abbrev">ESnet</abbr>] <span
class="title"><i>
+ </i>. </span></p></div><div class="biblioentry"><a
id="id2531884"></a><p>[<abbr class="abbrev">ESnet</abbr>] <span
class="title"><i>
<a href="http://www.es.net" target="_top">http://www.es.net</a>
- </i>. </span></p></div><div class="biblioentry"><a
id="id2531641"></a><p>[<abbr class="abbrev">Geant2</abbr>] <span
class="title"><i>
+ </i>. </span></p></div><div class="biblioentry"><a
id="id2531902"></a><p>[<abbr class="abbrev">Geant2</abbr>] <span
class="title"><i>
<a href="http://www.geant2.net"
target="_top">http://www.geant2.net</a>
- </i>. </span></p></div><div class="biblioentry"><a
id="id2531660"></a><p>[<abbr class="abbrev">Internet2</abbr>] <span
class="title"><i>
+ </i>. </span></p></div><div class="biblioentry"><a
id="id2531920"></a><p>[<abbr class="abbrev">Internet2</abbr>] <span
class="title"><i>
<a href="http://www.internet2.edu"
target="_top">http://www.internet2.edu</a>
- </i>. </span></p></div><div class="biblioentry"><a
id="id2531678"></a><p>[<abbr class="abbrev">RNP</abbr>] <span
class="title"><i>
+ </i>. </span></p></div><div class="biblioentry"><a
id="id2532214"></a><p>[<abbr class="abbrev">RNP</abbr>] <span
class="title"><i>
<a href="http://www.rnp.br/en" target="_top">http://www.rnp.br/en</a>
- </i>. </span></p></div><div class="biblioentry"><a
id="id2531696"></a><p>[<abbr class="abbrev">XPath</abbr>] <span
class="title"><i>
+ </i>. </span></p></div><div class="biblioentry"><a
id="id2532232"></a><p>[<abbr class="abbrev">XPath</abbr>] <span
class="title"><i>
<a href="http://www.w3.org/TR/xpath" target="_top">XPath</a>
- </i>. </span></p></div><div class="biblioentry"><a
id="id2531989"></a><p>[<abbr class="abbrev">XQuery</abbr>] <span
class="title"><i>
+ </i>. </span></p></div><div class="biblioentry"><a
id="id2532250"></a><p>[<abbr class="abbrev">XQuery</abbr>] <span
class="title"><i>
<a href="http://www.w3.org/TR/xquery/" target="_top">XQuery</a>
- </i>. </span></p></div><div class="biblioentry"><a
id="id2532007"></a><p>[<abbr class="abbrev">Graphviz</abbr>] <span
class="title"><i>
+ </i>. </span></p></div><div class="biblioentry"><a
id="id2532268"></a><p>[<abbr class="abbrev">Graphviz</abbr>] <span
class="title"><i>
<a href="http://www.graphviz.org/" target="_top">Graphviz</a>
</i>. </span></p></div></div></div></body></html>
- nmwg: r349 - in trunk/nmwg/doc/dLS/gLS: . examples images, svnlog, 05/20/2008
Archive powered by MHonArc 2.6.16.