PDA

View Full Version : Finding out when replication is finished


antun
02-06-2004, 04:31 PM
As you might know, views can take time to create. It's often useful to know when a group of views have finished replicating. The code in red below shows how to accomplish this. Note that you have to use the tag form of <datapath> rather than as an attribute:


<canvas debug="true">
<dataset name="ds1">
<top>
<node>one</node>
<node>two</node>
<node>three</node>
<node>four</node>
<node>five</node>
<node>six</node>
<node>seven</node>
<node>eight</node>
<node>nine</node>
<node>ten</node>
<node>eleven</node>
<node>twelve</node>
<node>thirteen</node>
<node>fourteen</node>
<node>fifteen</node>
</top>
</dataset>
<dataset name="ds2">
<top>
<xnode>1</xnode>
<xnode>2</xnode>
<xnode>3</xnode>
<xnode>4</xnode>
<xnode>5</xnode>
<xnode>6</xnode>
<xnode>7</xnode>
<xnode>8</xnode>
<xnode>9</xnode>
<xnode>10</xnode>
<xnode>11</xnode>
<xnode>12</xnode>
<xnode>13</xnode>
<xnode>14</xnode>
<xnode>15</xnode>
</top>
</dataset>
<view y="100">
<simplelayout/>
<view id="rman">
<datapath id="checkdp">
<attribute name="doneDel" value="null"/>
<method event="onnodes" args="nodes">
<![CDATA[
for ( var i = 0; i < nodes.length ; i++ ){
var tnode = nodes[i].getFirstChild();
tnode.setData( tnode.data + "x" );
}
]]>
</method>

<method event="onclones" args="clones">
var lastclone = clones[ clones.length - 1 ];
if ( !this.doneDel ){
this.doneDel = new LzDelegate( this, 'replicationDone');
} else {
this.doneDel.unregisterAll();
}
this.doneDel.register( lastclone , "oninit" );
</method>
<method name="replicationDone">
Debug.write( 'REPLICATION IS DONE!');
</method>

</datapath>
<simplelayout axis="x"/>
<text datapath="name()"/>
<text datapath="text()"/>
<attribute name="waittime" value="100"/>
<node>
<method event="onconstruct">
<![CDATA[
var endtime = parent.waittime + getTimer();
while ( getTimer() < endtime ){
//nop
}
]]>
</method>
</node>
</view>
</view>

<button>Toggle Datapath
<attribute name="toggle" value="false"/>
<method event="onclick">
if ( toggle ){
rman.setDatapath( "ds1:/top/node" )
} else {
rman.setDatapath( "ds2:/top/xnode" )
}
this.toggle = !this.toggle;
</method>
</button>
</canvas>


Enjoy!

jshood
07-19-2005, 10:49 PM
I'm wondering if anyone has any experience finding out when Lazy replication has finished. The problem I see is that the number of clones created can exceed the number of nodes in the dataset.

I've been playing with comparing the number of clones created with the number of nodes in the dataset as per this example.

Anyone have any similar thoughts or a better way to do this?


<method event="onclones" args="clones">


<![CDATA[

var lastclone = clones[ clones.length - 1 ];

if (this.nodes.length = clones.length )
{
this.replicationDone();

}
else
{
if ( !this.doneDel ){
this.doneDel = new LzDelegate( this, 'replicationDone');
}
else
{
this.doneDel.unregisterAll();
}
}
this.doneDel.register( lastclone , "oninit" );
]]>
</method>

ranzhang
08-16-2006, 06:20 PM
this.doneDel.register( lastclone , "oninit" );

this.doneDel.register( lastclone , "ondata" );

It would work better if you use pooling for data.

This is because pooling will make use of generated views hence oninit event do not fire when refreshing a large number of nodes.

Ran