blob: d3692de4bb8fd26df2338633b23060e081dd13fb [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<META NAME="ROBOTS" CONTENT="NOINDEX">
<link rel="canonical" href="https://ignite.apache.org/releases/1.7.0/javadoc/org/apache/ignite/compute/ComputeTaskSplitAdapter.html" />
<!-- Generated by javadoc (version 1.7.0_80) on Mon Aug 01 20:32:31 MSK 2016 -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ComputeTaskSplitAdapter (Ignite 1.7.0)</title>
<meta name="date" content="2016-08-01">
<link rel="stylesheet" type="text/css" href="../../../../javadoc.css" title="Style">
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-61232409-1', 'auto');
ga('send', 'pageview');
</script></head>
<body>
<script type="text/javascript"><!--
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="ComputeTaskSplitAdapter (Ignite 1.7.0)";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar_top">
<!-- -->
</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/ComputeTaskSplitAdapter.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
<div class="aboutLanguage"><em>Ignite - In-Memory Data Fabric</em></div>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../org/apache/ignite/compute/ComputeTaskSpis.html" title="annotation in org.apache.ignite.compute"><span class="strong">Prev Class</span></a></li>
<li><a href="../../../../org/apache/ignite/compute/ComputeTaskTimeoutException.html" title="class in org.apache.ignite.compute"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/apache/ignite/compute/ComputeTaskSplitAdapter.html" target="_top">Frames</a></li>
<li><a href="ComputeTaskSplitAdapter.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.ignite.compute</div>
<h2 title="Class ComputeTaskSplitAdapter" class="title">Class ComputeTaskSplitAdapter&lt;T,R&gt;</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li><a href="../../../../org/apache/ignite/compute/ComputeTaskAdapter.html" title="class in org.apache.ignite.compute">org.apache.ignite.compute.ComputeTaskAdapter</a>&lt;T,R&gt;</li>
<li>
<ul class="inheritance">
<li>org.apache.ignite.compute.ComputeTaskSplitAdapter&lt;T,R&gt;</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl><dt><span class="strong">Type Parameters:</span></dt><dd><code>T</code> - Type of the task execution argument.</dd><dd><code>R</code> - Type of the task result returning from <a href="../../../../org/apache/ignite/compute/ComputeTask.html#reduce(java.util.List)"><code>ComputeTask.reduce(List)</code></a> method.</dd></dl>
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>, <a href="../../../../org/apache/ignite/compute/ComputeTask.html" title="interface in org.apache.ignite.compute">ComputeTask</a>&lt;T,R&gt;</dd>
</dl>
<dl>
<dt>Direct Known Subclasses:</dt>
<dd><a href="../../../../org/apache/ignite/compute/gridify/GridifyTaskSplitAdapter.html" title="class in org.apache.ignite.compute.gridify">GridifyTaskSplitAdapter</a></dd>
</dl>
<hr>
<br>
<pre>public abstract class <span class="strong">ComputeTaskSplitAdapter&lt;T,R&gt;</span>
extends <a href="../../../../org/apache/ignite/compute/ComputeTaskAdapter.html" title="class in org.apache.ignite.compute">ComputeTaskAdapter</a>&lt;T,R&gt;</pre>
<div class="block">This class defines simplified adapter for <a href="../../../../org/apache/ignite/compute/ComputeTask.html" title="interface in org.apache.ignite.compute"><code>ComputeTask</code></a>. This adapter can be used
when jobs can be randomly assigned to available grid nodes. This adapter is sufficient
in most homogeneous environments where all nodes are equally suitable for executing grid
job. See <a href="../../../../org/apache/ignite/compute/ComputeTaskSplitAdapter.html#split(int,%20T)"><code>split(int, Object)</code></a> method for more details.
<p>
Below is a coding example of how you would use <code>ComputeTaskSplitAdapter</code>:
<pre name="code" class="java">
public class MyFooBarTask extends ComputeTaskSplitAdapter&lt;Object, String&gt; {
&#64;Override
protected Collection&lt;? extends ComputeJob&gt; split(int gridSize, Object arg) throws IgniteCheckedException {
List&lt;MyFooBarJob&gt; jobs = new ArrayList&lt;MyFooBarJob&gt;(gridSize);
for (int i = 0; i &lt; gridSize; i++) {
jobs.add(new MyFooBarJob(arg));
}
// Node assignment via load balancer
// happens automatically.
return jobs;
}
// Aggregate results into one compound result.
public String reduce(List&lt;ComputeJobResult&gt; results) throws IgniteCheckedException {
// For the purpose of this example we simply
// concatenate string representation of every
// job result
StringBuilder buf = new StringBuilder();
for (ComputeJobResult res : results) {
// Append string representation of result
// returned by every job.
buf.append(res.getData().string());
}
return buf.string();
}
}
</pre></div>
<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../serialized-form.html#org.apache.ignite.compute.ComputeTaskSplitAdapter">Serialized Form</a></dd></dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor_summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><strong><a href="../../../../org/apache/ignite/compute/ComputeTaskSplitAdapter.html#ComputeTaskSplitAdapter()">ComputeTaskSplitAdapter</a></strong>()</code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method_summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;? extends <a href="../../../../org/apache/ignite/compute/ComputeJob.html" title="interface in org.apache.ignite.compute">ComputeJob</a>,<a href="../../../../org/apache/ignite/cluster/ClusterNode.html" title="interface in org.apache.ignite.cluster">ClusterNode</a>&gt;</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/ignite/compute/ComputeTaskSplitAdapter.html#map(java.util.List,%20T)">map</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../org/apache/ignite/cluster/ClusterNode.html" title="interface in org.apache.ignite.cluster">ClusterNode</a>&gt;&nbsp;subgrid,
<a href="../../../../org/apache/ignite/compute/ComputeTaskSplitAdapter.html" title="type parameter in ComputeTaskSplitAdapter">T</a>&nbsp;arg)</code>
<div class="block">This method is called to map or split grid task into multiple grid jobs.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected abstract <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;? extends <a href="../../../../org/apache/ignite/compute/ComputeJob.html" title="interface in org.apache.ignite.compute">ComputeJob</a>&gt;</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/ignite/compute/ComputeTaskSplitAdapter.html#split(int,%20T)">split</a></strong>(int&nbsp;gridSize,
<a href="../../../../org/apache/ignite/compute/ComputeTaskSplitAdapter.html" title="type parameter in ComputeTaskSplitAdapter">T</a>&nbsp;arg)</code>
<div class="block">This is a simplified version of <a href="../../../../org/apache/ignite/compute/ComputeTask.html#map(java.util.List,%20T)"><code>ComputeTask.map(List, Object)</code></a> method.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods_inherited_from_class_org.apache.ignite.compute.ComputeTaskAdapter">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;org.apache.ignite.compute.<a href="../../../../org/apache/ignite/compute/ComputeTaskAdapter.html" title="class in org.apache.ignite.compute">ComputeTaskAdapter</a></h3>
<code><a href="../../../../org/apache/ignite/compute/ComputeTaskAdapter.html#result(org.apache.ignite.compute.ComputeJobResult,%20java.util.List)">result</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long,%20int)" title="class or interface in java.lang">wait</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods_inherited_from_class_org.apache.ignite.compute.ComputeTask">
<!-- -->
</a>
<h3>Methods inherited from interface&nbsp;org.apache.ignite.compute.<a href="../../../../org/apache/ignite/compute/ComputeTask.html" title="interface in org.apache.ignite.compute">ComputeTask</a></h3>
<code><a href="../../../../org/apache/ignite/compute/ComputeTask.html#reduce(java.util.List)">reduce</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor_detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="ComputeTaskSplitAdapter()">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>ComputeTaskSplitAdapter</h4>
<pre>public&nbsp;ComputeTaskSplitAdapter()</pre>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method_detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="split(int,java.lang.Object)">
<!-- -->
</a><a name="split(int, T)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>split</h4>
<pre>protected abstract&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;? extends <a href="../../../../org/apache/ignite/compute/ComputeJob.html" title="interface in org.apache.ignite.compute">ComputeJob</a>&gt;&nbsp;split(int&nbsp;gridSize,
<a href="../../../../org/apache/ignite/compute/ComputeTaskSplitAdapter.html" title="type parameter in ComputeTaskSplitAdapter">T</a>&nbsp;arg)
throws <a href="../../../../org/apache/ignite/IgniteException.html" title="class in org.apache.ignite">IgniteException</a></pre>
<div class="block">This is a simplified version of <a href="../../../../org/apache/ignite/compute/ComputeTask.html#map(java.util.List,%20T)"><code>ComputeTask.map(List, Object)</code></a> method.
<p>
This method basically takes given argument and splits it into a collection
of <a href="../../../../org/apache/ignite/compute/ComputeJob.html" title="interface in org.apache.ignite.compute"><code>ComputeJob</code></a> using provided grid size as indication of how many node are
available. These jobs will be randomly mapped to available grid nodes. Note that
if number of jobs is greater than number of grid nodes (i.e, grid size), the grid
nodes will be reused and some jobs will end up on the same grid nodes.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>gridSize</code> - Number of available grid nodes. Note that returned number of
jobs can be less, equal or greater than this grid size.</dd><dd><code>arg</code> - Task execution argument. Can be <code>null</code>.</dd>
<dt><span class="strong">Returns:</span></dt><dd>Collection of grid jobs. These jobs will be randomly mapped to
available grid nodes. Note that if number of jobs is greater than number of
grid nodes (i.e, grid size), the grid nodes will be reused and some jobs
will end up on the same grid nodes.</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="../../../../org/apache/ignite/IgniteException.html" title="class in org.apache.ignite">IgniteException</a></code> - Thrown in case of any errors.</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../org/apache/ignite/compute/ComputeTask.html#map(java.util.List,%20T)"><code>ComputeTask.map(List, Object)</code></a></dd></dl>
</li>
</ul>
<a name="map(java.util.List,java.lang.Object)">
<!-- -->
</a><a name="map(java.util.List, T)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>map</h4>
<pre>public final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;? extends <a href="../../../../org/apache/ignite/compute/ComputeJob.html" title="interface in org.apache.ignite.compute">ComputeJob</a>,<a href="../../../../org/apache/ignite/cluster/ClusterNode.html" title="interface in org.apache.ignite.cluster">ClusterNode</a>&gt;&nbsp;map(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../org/apache/ignite/cluster/ClusterNode.html" title="interface in org.apache.ignite.cluster">ClusterNode</a>&gt;&nbsp;subgrid,
<a href="../../../../org/apache/ignite/compute/ComputeTaskSplitAdapter.html" title="type parameter in ComputeTaskSplitAdapter">T</a>&nbsp;arg)</pre>
<div class="block">This method is called to map or split grid task into multiple grid jobs. This is the
first method that gets called when task execution starts.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>subgrid</code> - Nodes available for this task execution. Note that order of nodes is
guaranteed to be randomized by container. This ensures that every time
you simply iterate through grid nodes, the order of nodes will be random which
over time should result into all nodes being used equally.</dd><dd><code>arg</code> - Task execution argument. Can be <code>null</code>. This is the same argument
as the one passed into <code>Grid#execute(...)</code> methods.</dd>
<dt><span class="strong">Returns:</span></dt><dd>Map of grid jobs assigned to subgrid node. Unless <a href="../../../../org/apache/ignite/compute/ComputeTaskContinuousMapper.html" title="interface in org.apache.ignite.compute"><code>ComputeTaskContinuousMapper</code></a> is
injected into task, if <code>null</code> or empty map is returned, exception will be thrown.</dd></dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar_bottom">
<!-- -->
</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/ComputeTaskSplitAdapter.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
<div class="aboutLanguage"><em>Ignite - In-Memory Data Fabric</em></div>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../org/apache/ignite/compute/ComputeTaskSpis.html" title="annotation in org.apache.ignite.compute"><span class="strong">Prev Class</span></a></li>
<li><a href="../../../../org/apache/ignite/compute/ComputeTaskTimeoutException.html" title="class in org.apache.ignite.compute"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/apache/ignite/compute/ComputeTaskSplitAdapter.html" target="_top">Frames</a></li>
<li><a href="ComputeTaskSplitAdapter.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small><table width="100%" border="0" cellspacing=0 cellpadding=0 style="padding: 5px"> <tr> <td> <table style="padding-left: 0; margin: 0"> <tbody style="padding: 0; margin: 0"> <tr style="padding: 0; margin: 0"> <td> <a target=_blank href="https://ignite.apache.org"><nobr>2015 Copyright &#169; Apache Software Foundation</nobr></a> </td> </tr> </tbody> </table> </td> <td width="100%" align="right" valign="center"> <a href="https://twitter.com/ApacheIgnite" class="twitter-follow-button" data-show-count="false" data-size="large">Follow @ApacheIgnite</a> <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script> </td> </tr> <tr> <td colspan="2" valign="top" align="left"> <table style="padding-left: 0; margin: 0"> <tbody style="padding: 0; margin: 0"> <tr style="padding: 0; margin: 0"> <td> <b>Ignite Fabric</b> </td> <td>:&nbsp;&nbsp; ver. <strong>1.7.0</strong> </td> </tr> <tr style="padding: 0; margin: 0"> <td> <b>Release Date</b> </td> <td>:&nbsp;&nbsp; August 1 2016 </td> </tr> </tbody> </table> </td> </tr> </table></small></p>
</body>
</html>