浏览代码

Merge remote-tracking branch 'origin/closedown-4.0.x'

Signed-off-by: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 12 年之前
父节点
当前提交
3eb5c09dcd

+ 2 - 2
common/monitoring/preflight

@@ -72,7 +72,7 @@ if [ "${1:0:1}" == '-' ]; then
     echo ---SpaceUsedAndFree---
     swap=`free | tail -n 1 | awk '{print $3,$4}'`
     echo Physical Memory: $mem
-    echo Virtual Memory: $swap
+    echo Swap: $swap
 
     i=0
     for name in `df $dfOption | tail -n +2 | awk '{if(NF>=4) print $NF}'`; do
@@ -140,7 +140,7 @@ else
     echo ---SpaceUsedAndFree---
     swap=`free | tail -n 1 | awk '{print $3,$4}'`
     echo Physical Memory: $mem
-    echo Virtual Memory: $swap
+    echo Swap: $swap
     for name in `df -l | tail -n +2 | awk '{if(NF>=4) print $NF}'`
     do
         arr0[i]=$name

+ 1 - 1
common/thorhelper/thorsoapcall.cpp

@@ -1477,7 +1477,7 @@ private:
                         while (chunkSize)
                         {
                             if (chunkSize > WSCBUFFERSIZE)
-                                DBGLOG("SOAPCALL chunk size %ld", chunkSize);
+                                DBGLOG("SOAPCALL chunk size %d", chunkSize);
 
                             //read chunk data directly into response
                             size32_t count = dataProvider->getBytes(response.reserve(dataLen + chunkSize), chunkSize);

+ 3 - 10
dali/base/dadfs.cpp

@@ -8222,17 +8222,10 @@ class CInitGroups
             }
             switch (groupType) {
                 case grp_roxie:
-                // Redundant copies are located via the flags.
-                // Old environments may contain duplicated sever information for multiple ports
-                // MORE - it's not clear whether this is correct for full redundancy and overloaded clusters
-                {
-                    unsigned k;
-                    if (eps.contains(ep))
-                        break;
-                    if (k==eps.ordinality())
-                        eps.append(ep); // just add (don't care about order and no duplicates)
+                    // Redundant copies are located via the flags.
+                    // Old environments may contain duplicated sever information for multiple ports
+                    eps.appendUniq(ep);
                     break;
-                }
                 case grp_thor:
                 case grp_thorspares:
                     eps.append(ep);

+ 4 - 0
dali/dfu/dfurun.cpp

@@ -1209,6 +1209,10 @@ public:
                             if (fdesc) 
                                 destination->setNumPartsOverride(fdesc->numParts());
                         }
+
+                        if (options->getFailIfNoSourceFile())
+                            opttree->setPropBool("@failIfNoSourceFile", true);
+
                         Owned<IFileDescriptor> fdesc = destination->getFileDescriptor(iskey,options->getSuppressNonKeyRepeats()&&!iskey);
                         if (fdesc) {
                             if (options->getSubfileCopy()) {// need to set destination compressed or not

+ 10 - 0
dali/dfu/dfuwu.cpp

@@ -2018,6 +2018,16 @@ public:
         return false;
     }
 
+    bool getFailIfNoSourceFile() const
+    {
+        return queryRoot()->getPropBool("@failIfNoSourceFile");
+    }
+
+    void setFailIfNoSourceFile(bool val)
+    {
+        queryRoot()->setPropBool("@failIfNoSourceFile",val);
+    }
+
 };
 
 class CExceptionIterator: public CInterface, implements IExceptionIterator

+ 2 - 0
dali/dfu/dfuwu.hpp

@@ -167,6 +167,7 @@ interface IConstDFUoptions : extends IInterface
     virtual bool getEncDec(StringAttr &enc,StringAttr &dec) = 0;
 
     virtual IPropertyTree *queryTree() const = 0;                   // used by DFU server
+    virtual bool getFailIfNoSourceFile() const = 0;
 };
 
 interface IDFUoptions : extends IConstDFUoptions
@@ -201,6 +202,7 @@ interface IDFUoptions : extends IConstDFUoptions
     virtual void setSuppressNonKeyRepeats(bool val=true) = 0;
     virtual void setSubfileCopy(bool val=true) = 0;                             // i.e. called by supercopy
     virtual void setEncDec(const char *enc,const char *dec) = 0;
+    virtual void setFailIfNoSourceFile(bool val=false) = 0;
 };
 
 interface IConstDFUfileSpec: extends IInterface

+ 3 - 0
dali/dfuplus/dfuplus.cpp

@@ -427,6 +427,9 @@ bool CDfuPlusHelper::variableSpray(const char* srcxml,const char* srcip,const ch
     if(globals->hasProp("transferbuffersize"))
         req->setTransferBufferSize(globals->getPropInt("transferbuffersize"));
 
+    if(globals->hasProp("failIfNoSourceFile"))
+        req->setFailIfNoSourceFile(globals->getPropBool("failIfNoSourceFile",false));
+
     if(srcxml == NULL)
         info("\nVariable spraying from %s on %s to %s\n", srcfile, srcip, dstname);
     else

+ 5 - 0
dali/ft/filecopy.cpp

@@ -2654,6 +2654,11 @@ void FileSprayer::spray()
     if (!allowSplit() && querySplitPrefix())
         throwError(DFTERR_SplitNoSplitClash);
 
+    aindex_t sourceSize = sources.ordinality();
+    bool failIfNoSourceFile = options->getPropBool("@failIfNoSourceFile");
+
+    if ((sourceSize == 0) && failIfNoSourceFile)
+        throwError(DFTERR_NoFilesMatchWildcard);
 
     LocalAbortHandler localHandler(daftAbortHandler);
 

+ 104 - 2
docs/HPCCClientTools/CT_Mods/CT_ECL_CLI.xml

@@ -384,6 +384,7 @@ ecl deploy --target=roxie --name=FindPersonService libW20120224-125557.so
 ecl publish --target=roxie --name=FindPersonService -A libW20120224-125557.so
 ecl publish --target=roxie --name=FindPersonService -A ArchiveQuery.xml
 ecl publish --target=roxie --name=FindPersonService --activate findperson.ecl
+ecl publish --target=roxie --name=FindPersonService --activate --no-files findperson.ecl
 ecl publish --target=roxie --name=FindPersonService --no-activate findperson.ecl
 </programlisting>
 
@@ -424,7 +425,7 @@ ecl publish --target=roxie --name=FindPersonService --no-activate findperson.ecl
                 <row>
                   <entry>archive</entry>
 
-                  <entry>TheECL archive to deploy</entry>
+                  <entry>The ECL archive to deploy</entry>
                 </row>
 
                 <row>
@@ -463,9 +464,29 @@ ecl publish --target=roxie --name=FindPersonService --no-activate findperson.ecl
                 </row>
 
                 <row>
+                  <entry>-sp, --suspend-prev</entry>
+
+                  <entry>Suspend previously active query</entry>
+                </row>
+
+                <row>
+                  <entry>-dp, --delete-prev</entry>
+
+                  <entry>Delete previously active query</entry>
+                </row>
+
+                <row>
+                  <entry>--no-files</entry>
+
+                  <entry>Does not copy DFU file information for files
+                  referenced by the query</entry>
+                </row>
+
+                <row>
                   <entry>--no-reload</entry>
 
-                  <entry>Specifies to not reload the target cluster</entry>
+                  <entry>Specifies to not request a reload of the Roxie
+                  cluster</entry>
                 </row>
 
                 <row>
@@ -2372,6 +2393,87 @@ ecl packagemap validate roxie --active</programlisting>
             </tgroup>
           </informaltable></para>
       </sect2>
+
+      <sect2 role="brk">
+        <title>ecl roxie unused-files</title>
+
+        <para><emphasis role="bold">ecl roxie unused-files
+        &lt;processName&gt;</emphasis></para>
+
+        <para>Examples:</para>
+
+        <programlisting>ecl roxie unused-files myroxie
+</programlisting>
+
+        <para></para>
+
+        <para><informaltable colsep="0" frame="none" rowsep="0">
+            <tgroup cols="2">
+              <colspec align="left" colwidth="125.55pt" />
+
+              <colspec colwidth="384.85pt" />
+
+              <tbody>
+                <row>
+                  <entry>ecl roxie unused-files</entry>
+
+                  <entry>Finds files in the DFS for the given roxie process
+                  that are not currently used by queries on that
+                  roxie.</entry>
+                </row>
+
+                <row>
+                  <entry><emphasis role="bold">Options</emphasis></entry>
+                </row>
+
+                <row>
+                  <entry>--check-packagemaps</entry>
+
+                  <entry> Exclude files referenced in active
+                  packagemaps</entry>
+                </row>
+
+                <row>
+                  <entry>-v, --verbose</entry>
+
+                  <entry>Output additional tracing information</entry>
+                </row>
+
+                <row>
+                  <entry>-s, --server</entry>
+
+                  <entry>The IP Address or hostname of ESP server running
+                  eclwatch services</entry>
+                </row>
+
+                <row>
+                  <entry>-ssl</entry>
+
+                  <entry>Use SSL to secure the connection to the
+                  server.</entry>
+                </row>
+
+                <row>
+                  <entry>--port</entry>
+
+                  <entry>The eclwatch services port (Default is 8010)</entry>
+                </row>
+
+                <row>
+                  <entry>-u, --username</entry>
+
+                  <entry>The username (if necessary)</entry>
+                </row>
+
+                <row>
+                  <entry>-pw, --password</entry>
+
+                  <entry>The password (if necessary)</entry>
+                </row>
+              </tbody>
+            </tgroup>
+          </informaltable></para>
+      </sect2>
     </sect1>
   </chapter>
 </book>

+ 7 - 7
docs/RDDERef/RDDE_Mods/Packages.xml

@@ -168,12 +168,10 @@
       </listitem>
 
       <listitem>
-        <para>Add the packagemap(s) by associating the package information
-        with a QuerySet.</para>
-      </listitem>
+        <para>Activate the packagemap(s) with the pertinent package
+        information targeting a QuerySet.</para>
 
-      <listitem>
-        <para>Use the command</para>
+        <para>Use the command:</para>
       </listitem>
     </itemizedlist>
 
@@ -212,8 +210,10 @@
 
     <itemizedlist mark="bullet">
       <listitem>
-        <para>Add the packagemap redefining the contents of the superkey. Use
-        the command:</para>
+        <para>Add the packagemap redefining the contents of the superkey.
+        </para>
+
+        <para>Use the command:</para>
 
         <!--You should always validate or run the reporting step on the packages (NYI)-->
       </listitem>

+ 486 - 93
docs/RunningHPCCinaVirtualMachine/RunningHPCCinaVirtualMachine.xml

@@ -136,8 +136,9 @@
         </listitem>
 
         <listitem>
-          <para>VMWare<superscript>®</superscript> Player or Server (version
-          3.0 or later)</para>
+          <para>A virtualization software package:
+          VMware<superscript>®</superscript> Player or Server (version 3.0 or
+          later) or Oracle VM VirtualBox (version 4.0 or later). </para>
         </listitem>
 
         <listitem>
@@ -154,14 +155,235 @@
   <chapter>
     <title>Getting the Tools and the VM Image</title>
 
-    <para>To run this version of the HPCC System, you need the VM player
-    (version 3.0 or later) from VMWare<superscript>®</superscript>.</para>
+    <para>To run the virtual machine version of the HPCC System, you need
+    virtualization software. These packages allow you to run virtual images
+    inside a single host. There are a several different vendors who make
+    virtualization software, while any or all of these could work, we support
+    the following products:</para>
 
-    <para>In the following sections, you will:</para>
+    <itemizedlist>
+      <listitem>
+        <para>VMware's Virtual Machine </para>
+      </listitem>
 
-    <para><itemizedlist>
+      <listitem>
+        <para>Oracle's VM VirtualBox</para>
+      </listitem>
+    </itemizedlist>
+
+    <sect1>
+      <title>VMware Virtual Machine</title>
+
+      <para>The VMware player from VMware<superscript>®</superscript> is a
+      virtualization software you can use to run the HPCC virtual
+      machine.</para>
+
+      <para>In the following sections, you will:</para>
+
+      <para><itemizedlist>
+          <listitem>
+            <para>Download and install the VMware Player</para>
+          </listitem>
+
+          <listitem>
+            <para>Download the HPCC virtual machine image from HPCC
+            Systems.</para>
+          </listitem>
+
+          <listitem>
+            <para>Open and import the image in the VMware Player</para>
+          </listitem>
+        </itemizedlist>Once you have completed these steps, you can evaluate
+      the HPCC Platform and learn how to use it. </para>
+
+      <sect2>
+        <title>Download and Install the VMware Player</title>
+
+        <para>If you already have VMware Player installed, you can skip this
+        section and go to <xref linkend="get_hpcc" />.</para>
+
+        <orderedlist>
+          <listitem>
+            <para>Go to the VMware site: <ulink
+            url="http://www.vmware.com/products/player/">http://www.vmware.com/products/player/</ulink>.</para>
+          </listitem>
+
+          <listitem>
+            <para>Click on download link, then follow the instructions to
+            download the <emphasis>VMware Player for 32-bit and 64-bit
+            Windows</emphasis>.</para>
+
+            <para>Registration is required, but the player is free.</para>
+          </listitem>
+
+          <listitem>
+            <para>Download the VMware Player (save to a folder on your
+            machine).</para>
+          </listitem>
+
+          <listitem>
+            <para>Follow VMware's on-screen instructions and install the
+            VMware Player.</para>
+          </listitem>
+        </orderedlist>
+      </sect2>
+
+      <?hard-pagebreak ?>
+
+      <sect2>
+        <title id="get_hpcc">Get the latest HPCC Virtual Image File</title>
+
+        <para><orderedlist>
+            <listitem>
+              <para>Download the latest HPCC virtual machine image file
+              from:</para>
+
+              <para><ulink
+              url="http://HPCCsystems.com/download/hpcc-vm-image">http://hpccsystems.com/download/hpcc-vm-image</ulink></para>
+
+              <para><variablelist>
+                  <varlistentry>
+                    <term>Note:</term>
+
+                    <listitem>
+                      <para>You may need to register to login.</para>
+                    </listitem>
+                  </varlistentry>
+                </variablelist></para>
+            </listitem>
+
+            <listitem>
+              <para>Save the file to a folder on your machine.</para>
+            </listitem>
+
+            <listitem>
+              <para>Open the VMware Player. </para>
+            </listitem>
+
+            <listitem>
+              <para>From the <emphasis role="bold">Player</emphasis> menu,
+              select <emphasis role="bold">File</emphasis>, then <emphasis
+              role="bold">Open...</emphasis></para>
+            </listitem>
+
+            <listitem>
+              <para>Go to the folder where you saved the downloaded file and
+              select it.</para>
+
+              <para> For example (<emphasis
+              role="bluebold">HPCCSystemsVM-<emphasis>n.n.n.n</emphasis>.ova</emphasis>
+              , where n.n.n.n is the version number).</para>
+
+              <para>The .ova file should open an <emphasis>Import Virtual
+              Machine</emphasis> dialog window providing for the name of the
+              new virtual machine, and the storage path of the virtual machine
+              you selected. <figure id="ImportVm">
+                  <title xreflabel="welc">Import Virtual Machine</title>
+
+                  <mediaobject>
+                    <imageobject>
+                      <imagedata fileref="images/vmimg13.jpg" />
+                    </imageobject>
+                  </mediaobject>
+                </figure></para>
+            </listitem>
+
+            <listitem>
+              <para>Press the <emphasis role="bold">Import</emphasis> button
+              to import the virtual machine into the VMware Player. </para>
+
+              <para>Wait for the HPCC virtual machine to load to the desktop
+              in the VMware player. This may take a few minutes.</para>
+
+              <variablelist>
+                <varlistentry>
+                  <term><emphasis role="bold">Note</emphasis>:</term>
+
+                  <listitem>
+                    <para>The first time you use the VM Player, you must
+                    accept the license agreement. You may also be prompted to
+                    install add-ons, but they are not necessary for the HPCC
+                    virtual machine. </para>
+                  </listitem>
+                </varlistentry>
+              </variablelist>
+            </listitem>
+
+            <listitem>
+              <para>At the VMware Player main window the new virtual machine
+              you just imported is now listed. Double-click on that virtual
+              machine to start it.</para>
+            </listitem>
+
+            <listitem>
+              <?dbfo keep-together="always"?>
+
+              <para>Once the VM initialization completes, you will see a
+              window similar to the following:</para>
+
+              <figure id="welcometovm">
+                <title xreflabel="welc">VM Welcome Screen</title>
+
+                <mediaobject>
+                  <imageobject>
+                    <imagedata fileref="images/vmimg01.JPG" />
+                  </imageobject>
+                </mediaobject>
+              </figure>
+
+              <para><informaltable colsep="1" frame="all" rowsep="1">
+                  <?dbfo keep-together="always"?>
+
+                  <tgroup cols="2">
+                    <colspec colwidth="49.50pt" />
+
+                    <colspec />
+
+                    <tbody>
+                      <row>
+                        <entry><inlinegraphic
+                        fileref="images/caution.png" /></entry>
+
+                        <entry>Your virtual IP address could be different from
+                        the ones provided in the example images. Please use
+                        the IP address provided by <emphasis
+                        role="bold">your</emphasis> installation.</entry>
+                      </row>
+                    </tbody>
+                  </tgroup>
+                </informaltable></para>
+
+              <para>Do not resize this window, you will not interact with it.
+              In addition, there is no need to Login.</para>
+
+              <para><variablelist>
+                  <varlistentry>
+                    <term>TIP:</term>
+
+                    <listitem>
+                      <para>If you do click on the window, it will capture
+                      your keyboard/mouse. Press <emphasis
+                      role="bold">ctrl+alt</emphasis> to return control of
+                      your mouse.</para>
+                    </listitem>
+                  </varlistentry>
+                </variablelist></para>
+            </listitem>
+          </orderedlist></para>
+      </sect2>
+    </sect1>
+
+    <sect1>
+      <title>VM VirtualBox</title>
+
+      <para>Oracle's virtualization software, VM VirtualBox is supported for
+      running the HPCC virtual machine image. </para>
+
+      <para>In the following section(s), you will:</para>
+
+      <itemizedlist>
         <listitem>
-          <para>Download and install the VM Player</para>
+          <para>Download and install the VM VirtualBox</para>
         </listitem>
 
         <listitem>
@@ -170,127 +392,298 @@
         </listitem>
 
         <listitem>
-          <para>Open the image in the VM Player</para>
+          <para>Open and import the image in VM VirtualBox </para>
         </listitem>
-      </itemizedlist>Once you have completed these steps, you can evaluate the
-    HPCC Platform and learn how to use it. .</para>
+      </itemizedlist>
 
-    <sect1>
-      <title>Download and Install the VMWare player</title>
+      <sect2 id="Install_VM_VirtualBox">
+        <title>Download and Install the VM VirtualBox</title>
 
-      <para>If you already have VMPlayer (version 3.0 or later) installed, you
-      can skip this section and go to <xref linkend="get_hpcc" />.</para>
+        <para>If you already have the VM VirtualBox installed, skip to step
+        number 6, and verify the network configuration settings.</para>
 
-      <orderedlist>
-        <listitem>
-          <para>Go to the VMWare site: <ulink
-          url="http://www.vmware.com/products/player/">http://www.vmware.com/products/player/</ulink>.</para>
-        </listitem>
+        <orderedlist>
+          <listitem>
+            <para>Go to the VirtualBox site: <ulink
+            url="https://www.virtualbox.org/wiki/Downloads">https://www.virtualbox.org/wiki/Downloads</ulink>.</para>
+          </listitem>
 
-        <listitem>
-          <para>Click on download link, then follow the instructions to
-          download the version for 32-bit and 64-bit Windows.</para>
+          <listitem>
+            <para>Click on the appropriate link for your operating system. For
+            example <emphasis>VirtualBox for Windows hosts</emphasis>.</para>
+          </listitem>
 
-          <para>Registration is required, but the player is free.</para>
-        </listitem>
+          <listitem>
+            <para>Download the VirtualBox Installation file. Save to a folder
+            on your machine.</para>
+          </listitem>
 
-        <listitem>
-          <para>Download the VMWare Player (save to a folder on your
-          machine).</para>
-        </listitem>
+          <listitem>
+            <para>Double-click on the installation file to install VirtualBox.
+            </para>
+          </listitem>
 
-        <listitem>
-          <para>Follow VMWare's on-screen instructions and install the VM
-          Player.</para>
-        </listitem>
-      </orderedlist>
-    </sect1>
+          <listitem>
+            <para>Follow the on-screen instructions to complete the
+            installation of VirtualBox.</para>
+          </listitem>
 
-    <?hard-pagebreak ?>
+          <listitem>
+            <para>Start the VM VirtualBox application.</para>
+          </listitem>
 
-    <sect1>
-      <title id="get_hpcc">Get the latest HPCC Virtual Image File</title>
+          <listitem>
+            <para>Click on the <emphasis role="bold">Settings</emphasis> Icon,
+            this will open up the settings dialog window. <figure
+                id="VBoxSettingIcon">
+                <title xreflabel="welc">VirtualBox Settings Icon</title>
+
+                <mediaobject>
+                  <imageobject>
+                    <imagedata fileref="images/vmimg16.jpg" />
+                  </imageobject>
+                </mediaobject>
+              </figure> </para>
+          </listitem>
 
-      <para><orderedlist>
           <listitem>
-            <para>Download the latest HPCC virtual machine image file
-            from:</para>
+            <para>Select the <emphasis role="bold">Network</emphasis> menu
+            option. On the <emphasis>Adapter 1</emphasis> tab check the
+            <emphasis>Enable Network Adapter</emphasis> box, and set the
+            <emphasis>Attached to:</emphasis> option to <emphasis
+            role="bold">NAT</emphasis>. <figure id="VBoxNet1">
+                <title xreflabel="welc">VM VirtualBox Network Adapter
+                1</title>
+
+                <mediaobject>
+                  <imageobject>
+                    <imagedata fileref="images/vmimg17.jpg" />
+                  </imageobject>
+                </mediaobject>
+              </figure></para>
 
-            <para><ulink
-            url="http://HPCCsystems.com/download/hpcc-vm-image">http://hpccsystems.com/download/hpcc-vm-image</ulink></para>
+            <variablelist>
+              <varlistentry>
+                <term>Note:</term>
 
-            <para>Note: You may need to register and login.</para>
+                <listitem>
+                  <para>These settings may be set as required by default. If
+                  so just verify that they are correct.</para>
+                </listitem>
+              </varlistentry>
+            </variablelist>
           </listitem>
 
           <listitem>
-            <para>Save the .zip file to a folder on your machine, and extract
-            the contents to a folder on your machine.</para>
+            <para>From the same <emphasis>Network - Settings</emphasis>
+            window, select the tab for<emphasis> Adapter 2</emphasis>. Check
+            the <emphasis>Enable Network Adapter</emphasis> box, and set the
+            <emphasis>Attached to:</emphasis> option to <emphasis
+            role="bold">Host-only Adapter</emphasis>.</para>
           </listitem>
 
           <listitem>
-            <para>Go to the folder where you extracted the files and
-            double-click on the .vmx. file
-            (HPCCSystemsVM-<emphasis>n.n.n.n</emphasis>.vmx , where n.n.n.n is
-            the version number).</para>
-
-            <para>The .vmx file should open in the VMWare player. If your
-            VMPlayer is not installed correctly, the .vmx file will not open.
-            Please check your VMPlayer installation.</para>
+            <para>Press the <emphasis role="bold">OK</emphasis> button.</para>
           </listitem>
 
           <listitem>
-            <para>Wait for the HPCC virtual machine to load to the desktop in
-            the VM player. This may take a few minutes.</para>
+            <para>From the <emphasis role="bold">File</emphasis> menu, select
+            <emphasis role="bold">Preferences</emphasis>... </para>
 
-            <para><emphasis role="bold">Note</emphasis>: The first time you
-            use the VM Player, you must accept the license agreement. You may
-            also be prompted to install add-ons, but they are not necessary
-            for the HPCC virtual machine.</para>
+            <para>The <emphasis>VirtualBox - Settings</emphasis> dialog
+            displays.<figure id="VBoxSettings">
+                <title xreflabel="welc">VirtualBox - Settings</title>
+
+                <mediaobject>
+                  <imageobject>
+                    <imagedata fileref="images/vmimg14.jpg" />
+                  </imageobject>
+                </mediaobject>
+              </figure></para>
           </listitem>
 
           <listitem>
-            <?dbfo keep-together="always"?>
+            <para>Select<emphasis role="bold"> Network</emphasis> from the
+            list on the left side of the window. </para>
+          </listitem>
 
-            <para>Once the VM initialization completes, you will see a window
-            similar to the following:</para>
+          <listitem>
+            <para>Double-click on the <emphasis>VirtualBox Host-Only Ethernet
+            Adaptor</emphasis>. </para>
+          </listitem>
 
-            <figure id="welcometovm">
-              <title xreflabel="welc">VM Welcome Screen</title>
+          <listitem>
+            <para>From the<emphasis> Network Details</emphasis> window, select
+            the <emphasis role="bold">DHCP Server</emphasis> Tab and check the
+            <emphasis role="bold">Enable Server</emphasis> box. <figure
+                id="NetworkDetails">
+                <title xreflabel="welc">Network Details</title>
 
-              <mediaobject>
-                <imageobject>
-                  <imagedata fileref="images/vmimg01.JPG" />
-                </imageobject>
-              </mediaobject>
-            </figure>
+                <mediaobject>
+                  <imageobject>
+                    <imagedata fileref="images/vmimg15.jpg" />
+                  </imageobject>
+                </mediaobject>
+              </figure><variablelist>
+                <varlistentry>
+                  <term>Note: </term>
 
-            <para><informaltable colsep="1" frame="all" rowsep="1">
-                <?dbfo keep-together="always"?>
+                  <listitem>
+                    <para>You may need to add IP Address values to the Lower
+                    Address Bound and Upper Address Bound fields. The address
+                    the VM uses is in the private IP address range of
+                    192.168.x.x </para>
+                  </listitem>
+                </varlistentry>
+              </variablelist></para>
+          </listitem>
 
-                <tgroup cols="2">
-                  <colspec colwidth="49.50pt" />
+          <listitem>
+            <para>Press the <emphasis role="bold">OK</emphasis> button on the
+            <emphasis>Network Details</emphasis> dialog box, then press the
+            <emphasis role="bold">OK</emphasis> button on the
+            <emphasis>VirtualBox - Settings</emphasis> box. </para>
+          </listitem>
+        </orderedlist>
+      </sect2>
 
-                  <colspec />
+      <sect2>
+        <title id="get_HPCC">Import the HPCC Virtual Image File</title>
 
-                  <tbody>
-                    <row>
-                      <entry><inlinegraphic
-                      fileref="images/caution.png" /></entry>
+        <para><orderedlist>
+            <listitem>
+              <para>Download the latest HPCC virtual machine image file
+              from:</para>
 
-                      <entry>Your virtual IP address could be different from
-                      the ones provided in the example images. Please use the
-                      IP address provided by <emphasis
-                      role="bold">your</emphasis> installation.</entry>
-                    </row>
-                  </tbody>
-                </tgroup>
-              </informaltable></para>
+              <para><ulink
+              url="http://HPCCsystems.com/download/hpcc-vm-image">http://hpccsystems.com/download/hpcc-vm-image</ulink></para>
 
-            <para>Do not resize this window, you will not interact with it. In
-            addition, there is no need to Login, Configure Network, or Set
-            Timezone.</para>
-          </listitem>
-        </orderedlist></para>
+              <para><variablelist>
+                  <varlistentry>
+                    <term>Note:</term>
+
+                    <listitem>
+                      <para>You may need to register to login.</para>
+                    </listitem>
+                  </varlistentry>
+                </variablelist></para>
+            </listitem>
+
+            <listitem>
+              <para>Save the file to a folder on your machine.</para>
+            </listitem>
+
+            <listitem>
+              <para>Open VM VirtualBox.</para>
+            </listitem>
+
+            <listitem>
+              <para>From the <emphasis role="bold">File</emphasis> menu select
+              <emphasis role="bold">Import Appliance... (Ctrl +
+              I)</emphasis></para>
+            </listitem>
+
+            <listitem>
+              <para>Press the <emphasis role="bold">Open appliance</emphasis>
+              button from the dialog to select the appliance to import.
+              </para>
+            </listitem>
+
+            <listitem>
+              <para>Navigate to the folder where you saved the downloaded file
+              and select it.</para>
+
+              <para>For example (<emphasis
+              role="bluebold">HPCCSystemsVM-<emphasis>n.n.n.n</emphasis>.ova</emphasis>
+              , where n.n.n.n is the version number).</para>
+            </listitem>
+
+            <listitem>
+              <para>Press the <emphasis role="bold">Open</emphasis> button to
+              start the import. Follow the prompts in the import process
+              pressing <emphasis role="bold">Next</emphasis> as appropriate,
+              then press <emphasis role="bold">Import</emphasis>. </para>
+
+              <para>Wait for the HPCC virtual machine to import. This may take
+              a few minutes.</para>
+            </listitem>
+
+            <listitem>
+              <para>At the main window, the newly imported virtual machine is
+              now listed. </para>
+            </listitem>
+
+            <listitem>
+              <para>Double-click on that virtual machine to start it.
+              <variablelist>
+                  <varlistentry>
+                    <term>TIP: </term>
+
+                    <listitem>
+                      <para>If you get any Network Error messages, please
+                      review the steps in <xref
+                      linkend="Install_VM_VirtualBox" /> and verify that all
+                      the network settings are set appropriately. </para>
+                    </listitem>
+                  </varlistentry>
+                </variablelist></para>
+            </listitem>
+
+            <listitem>
+              <?dbfo keep-together="always"?>
+
+              <para>Once the VM initialization completes, you will see a
+              window similar to the following:</para>
+
+              <figure id="vbox_welcome">
+                <title xreflabel="welc">VirtualBox Welcome Screen</title>
+
+                <mediaobject>
+                  <imageobject>
+                    <imagedata fileref="images/vmimg01b.JPG" />
+                  </imageobject>
+                </mediaobject>
+              </figure>
+
+              <para><informaltable colsep="1" frame="all" rowsep="1">
+                  <?dbfo keep-together="always"?>
+
+                  <tgroup cols="2">
+                    <colspec colwidth="49.50pt" />
+
+                    <colspec />
+
+                    <tbody>
+                      <row>
+                        <entry><inlinegraphic
+                        fileref="images/caution.png" /></entry>
+
+                        <entry>Your virtual IP address could be different from
+                        the ones provided in the example images. Please use
+                        the IP address provided by <emphasis
+                        role="bold">your</emphasis> installation.</entry>
+                      </row>
+                    </tbody>
+                  </tgroup>
+                </informaltable></para>
+
+              <para>Do not resize this window, you will not interact with it.
+              In addition, there is no need to Login.</para>
+
+              <para><variablelist>
+                  <varlistentry>
+                    <term>TIP:</term>
+
+                    <listitem>
+                      <para>If you click on the window, it can capture your
+                      keyboard/mouse. Press the <emphasis role="bold">Right
+                      Ctrl</emphasis> to regain control of your mouse.</para>
+                    </listitem>
+                  </varlistentry>
+                </variablelist></para>
+            </listitem>
+          </orderedlist></para>
+      </sect2>
     </sect1>
   </chapter>
 
@@ -317,7 +710,7 @@
           Watch</emphasis> URL displayed (circled in red) in Figure 1,
           <emphasis>VM Welcome Screen</emphasis>. For example,
           http://nnn.nnn.nnn.nnn:8010, where nnn.nnn.nnn.nnn is your Virtual
-          Machine's IP address. </para>
+          Machine's IP address.</para>
 
           <para><informaltable colsep="1" frame="all" rowsep="1">
               <?dbfo keep-together="always"?>

二进制
docs/images/vmimg01.JPG


二进制
docs/images/vmimg01b.JPG


二进制
docs/images/vmimg13.jpg


二进制
docs/images/vmimg14.jpg


二进制
docs/images/vmimg15.jpg


二进制
docs/images/vmimg16.jpg


二进制
docs/images/vmimg17.jpg


二进制
docs/images/vmimg18.jpg


文件差异内容过多而无法显示
+ 17 - 17
ecllibrary/std/File.ecl


+ 6 - 6
esp/eclwatch/ws_XSLT/clusterprocesses.xslt

@@ -437,11 +437,11 @@
                         </th>
                      </xsl:for-each>
                      <!--process disk storage next-->
-                     <xsl:for-each select="../../../Columns/Item[text()!='Processes' and text()!='Up Time' and not(contains(text(), 'Memory')) and not(starts-with(text(), 'CPU')) and text()!='State' and text()!='Condition' and text()!='UpTime']">
+                     <xsl:for-each select="../../../Columns/Item[text()!='Processes' and text()!='Up Time' and not(contains(text(), 'Memory')) and not(starts-with(text(), 'CPU')) and text()!='State' and text()!='Condition' and text()!='UpTime' and text()!='Swap']">
                         <th align="center"><xsl:value-of select="."/></th>
                      </xsl:for-each>
-                     <!--process physical and virtual memory next-->      
-                     <xsl:for-each select="../../../Columns/Item[text() = 'Physical Memory' or text()='Virtual Memory']">
+                     <!--process physical memory and swap next-->      
+                     <xsl:for-each select="../../../Columns/Item[text() = 'Physical Memory' or text()='Swap']">
                         <th align="center"><xsl:value-of select="."/></th>
                      </xsl:for-each>
                      <!--process CPU Load next -->      
@@ -630,7 +630,7 @@
      
      <xsl:for-each select="/GetTargetClusterInfoResponse/Columns/Item">
           <xsl:variable name="text" select="text()"/>
-          <xsl:if test="$text!='Processes' and $text!='Up Time' and $text!='State' and $text!='Condition' and $text!='UpTime' and not(contains($text, 'Memory')) and not(starts-with($text, 'CPU'))">
+          <xsl:if test="$text!='Processes' and $text!='Up Time' and $text!='State' and $text!='Condition' and $text!='UpTime' and not(contains($text, 'Memory')) and not(starts-with($text, 'CPU')) and $text!='Swap'">
              <xsl:variable name="storageNode" select="$storageInfo[($OS!=0 and Description=$text) or ($OS=0 and starts-with(Description,$text))]"/>
              <xsl:choose>
                 <xsl:when test="$storageNode">
@@ -648,8 +648,8 @@
           </xsl:if>
       </xsl:for-each>      
              
-      <!--process Physical / Virtual memory next -->      
-      <xsl:for-each select="/GetTargetClusterInfoResponse/Columns/Item[text() = 'Physical Memory' or text()='Virtual Memory']">
+      <!--process Physical memory / Swap next -->      
+      <xsl:for-each select="/GetTargetClusterInfoResponse/Columns/Item[text() = 'Physical Memory' or text()='Swap']">
       <!--save:  and not(starts-with(text(), 'CPU') and contains(substring-after(text(), 'CPU'), 'Load'))-->
          <xsl:variable name="label" select="text()"/>
          <xsl:variable name="storageNode" select="$storageInfo[Description=$label]"/>

+ 7 - 1
esp/scm/ws_fs.ecm

@@ -80,6 +80,8 @@ ESPStruct [nil_remove] DFUWorkunit
 
     string encrypt;
     string decrypt;
+
+    [min_ver("1.08")] bool failIfNoSourceFile(false);
 };
 
 ESPStruct DFUException
@@ -300,6 +302,8 @@ ESPrequest [nil_remove] SprayFixed
     string decrypt;
     bool   wrap(false);
 
+    [min_ver("1.08")] bool failIfNoSourceFile(false);
+
 };
 
 ESPresponse [exceptions_inline] 
@@ -343,6 +347,8 @@ ESPrequest [nil_remove] SprayVariable
     string encrypt;
     string decrypt;
 
+    [min_ver("1.08")] bool failIfNoSourceFile(false);
+
 };
 
 ESPresponse [exceptions_inline] 
@@ -593,7 +599,7 @@ ESPresponse [exceptions_inline] UploadFilesResponse
 };
 
 ESPservice [
-    version("1.07"), default_client_version("1.07"),
+    version("1.08"), default_client_version("1.08"),
     exceptions_inline("./smc_xslt/exceptions.xslt")] FileSpray
 {
     ESPuses ESPstruct DFUWorkunit;

+ 6 - 0
esp/services/ws_fs/ws_fsService.cpp

@@ -1954,6 +1954,9 @@ bool CFileSprayEx::onSprayFixed(IEspContext &context, IEspSprayFixed &req, IEspS
         if (req.getPush())
             options->setPush(true);
 
+        if (req.getFailIfNoSourceFile())
+            options->setFailIfNoSourceFile(true);
+
         resp.setWuid(wu->queryId());
         resp.setRedirectUrl(StringBuffer("/FileSpray/GetDFUWorkunit?wuid=").append(wu->queryId()).str());
         submitDFUWorkUnit(wu.getClear());
@@ -2114,6 +2117,9 @@ bool CFileSprayEx::onSprayVariable(IEspContext &context, IEspSprayVariable &req,
         if (req.getPush())
             options->setPush(true);
 
+        if (req.getFailIfNoSourceFile())
+            options->setFailIfNoSourceFile(true);
+
         resp.setWuid(wu->queryId());
         resp.setRedirectUrl(StringBuffer("/FileSpray/GetDFUWorkunit?wuid=").append(wu->queryId()).str());
         submitDFUWorkUnit(wu.getClear());

+ 6 - 6
esp/services/ws_machine/machines.xslt

@@ -327,11 +327,11 @@
                         </th>
                      </xsl:for-each>
                      <!--process disk storage next-->
-                     <xsl:for-each select="../Columns/Item[text()!='Processes' and text()!='Up Time' and not(contains(text(), 'Memory')) and not(starts-with(text(), 'CPU')) and text()!='State' and text()!='Condition' and text()!='UpTime']">
+                     <xsl:for-each select="../Columns/Item[text()!='Processes' and text()!='Up Time' and not(contains(text(), 'Memory')) and not(starts-with(text(), 'CPU')) and text()!='State' and text()!='Condition' and text()!='UpTime' and text()!='Swap']">
                         <th align="center"><xsl:value-of select="."/></th>
                      </xsl:for-each>
-                     <!--process physical and virtual memory next-->      
-                     <xsl:for-each select="../Columns/Item[text() = 'Physical Memory' or text()='Virtual Memory']">
+                     <!--process physical memory and swap next-->      
+                     <xsl:for-each select="../Columns/Item[text() = 'Physical Memory' or text()='Swap']">
                         <th align="center"><xsl:value-of select="."/></th>
                      </xsl:for-each>
                      <!--process CPU Load next -->      
@@ -545,7 +545,7 @@
      
      <xsl:for-each select="/GetMachineInfoResponse/Columns/Item">
           <xsl:variable name="text" select="text()"/>
-          <xsl:if test="$text!='Processes' and $text!='Up Time' and $text!='State' and $text!='Condition' and $text!='UpTime' and not(contains($text, 'Memory')) and not(starts-with($text, 'CPU'))">
+          <xsl:if test="$text!='Processes' and $text!='Up Time' and $text!='State' and $text!='Condition' and $text!='UpTime' and not(contains($text, 'Memory')) and not(starts-with($text, 'CPU')) and $text!='Swap'">
              <xsl:variable name="storageNode" select="$storageInfo[($OS!=0 and Description=$text) or ($OS=0 and starts-with(Description,$text))]"/>
              <xsl:choose>
                 <xsl:when test="$storageNode">
@@ -563,8 +563,8 @@
           </xsl:if>
       </xsl:for-each>      
              
-      <!--process Physical / Virtual memory next -->      
-      <xsl:for-each select="/GetMachineInfoResponse/Columns/Item[text() = 'Physical Memory' or text()='Virtual Memory']">
+      <!--process Physical memory / Swap next -->      
+      <xsl:for-each select="/GetMachineInfoResponse/Columns/Item[text() = 'Physical Memory' or text()='Swap']">
       <!--save:  and not(starts-with(text(), 'CPU') and contains(substring-after(text(), 'CPU'), 'Load'))-->
          <xsl:variable name="label" select="text()"/>
          <xsl:variable name="storageNode" select="$storageInfo[Description=$label]"/>

+ 6 - 2
esp/services/ws_workunits/ws_workunitsService.cpp

@@ -2017,9 +2017,13 @@ void doWUQueryWithSort(IEspContext &context, IEspWUQueryRequest & req, IEspWUQue
     MemoryBuffer filterbuf;
 
     bool bDoubleCheckState = false;
-    if(req.getState())
+    if(req.getState() && *req.getState())
     {
-        addWUQueryFilter(filters, filterCount, filterbuf, strieq(req.getState(), "unknown") ? "" : req.getState(), WUSFstate);
+        filters[filterCount++] = WUSFstate;
+        if (!strieq(req.getState(), "unknown"))
+            filterbuf.append(req.getState());
+        else
+            filterbuf.append("");
         if (strieq(req.getState(), "submitted"))
             bDoubleCheckState = true;
     }

文件差异内容过多而无法显示
+ 52 - 45
plugins/fileservices/fileservices.cpp


+ 8 - 8
plugins/fileservices/fileservices.hpp

@@ -49,10 +49,10 @@ FILESERVICES_API void FILESERVICES_CALL fsSendEmailAttachText(ICodeContext * ctx
 FILESERVICES_API void FILESERVICES_CALL fsSendEmailAttachData(ICodeContext * ctx, const char * to, const char * subject, const char * body, size32_t lenAttachment, const void * attachment, const char * mimeType, const char * attachmentName, const char * mailServer, unsigned int port, const char * sender);
 FILESERVICES_API char * FILESERVICES_CALL fsCmdProcess(const char *prog, const char *src);
 FILESERVICES_API void FILESERVICES_CALL fsCmdProcess2(unsigned & tgtLen, char * & tgt, const char *prog, unsigned srcLen, const char * src);
-FILESERVICES_API void FILESERVICES_CALL fsSprayFixed(ICodeContext *ctx, const char * sourceIP, const char * sourcePath, int recordSize, const char * destinationGroup, const char * destinationLogicalName, int timeOut, const char * espServerIpPort, int maxConnections, bool overwrite=false, bool replicate=false, bool compress=false);
-FILESERVICES_API void FILESERVICES_CALL fsSprayVariable(ICodeContext *ctx, const char * sourceIP, const char * sourcePath, int sourceMaxRecordSize, const char * sourceCsvSeparate, const char * sourceCsvTerminate, const char * sourceCsvQuote, const char * destinationGroup, const char * destinationLogicalName, int timeOut, const char * espServerIpPort, int maxConnections, bool overwrite=false, bool replicate=false, bool compress=false);
-FILESERVICES_API void FILESERVICES_CALL fsSprayVariable2(ICodeContext *ctx, const char * sourceIP, const char * sourcePath, int sourceMaxRecordSize, const char * sourceCsvSeparate, const char * sourceCsvTerminate, const char * sourceCsvQuote, const char * destinationGroup, const char * destinationLogicalName, int timeOut, const char * espServerIpPort, int maxConnections, bool overwrite, bool replicate, bool compress, const char * sourceCsvEscape);
-FILESERVICES_API void FILESERVICES_CALL fsSprayXml(ICodeContext *ctx, const char * sourceIP, const char * sourcePath, int sourceMaxRecordSize, const char *sourceRowTag, const char *sourceEncoding, const char * destinationGroup, const char * destinationLogicalName, int timeOut, const char * espServerIpPort, int maxConnections, bool overwrite, bool replicate, bool compress=false);
+FILESERVICES_API void FILESERVICES_CALL fsSprayFixed(ICodeContext *ctx, const char * sourceIP, const char * sourcePath, int recordSize, const char * destinationGroup, const char * destinationLogicalName, int timeOut, const char * espServerIpPort, int maxConnections, bool overwrite=false, bool replicate=false, bool compress=false, bool failIfNoSourceFile=false);
+FILESERVICES_API void FILESERVICES_CALL fsSprayVariable(ICodeContext *ctx, const char * sourceIP, const char * sourcePath, int sourceMaxRecordSize, const char * sourceCsvSeparate, const char * sourceCsvTerminate, const char * sourceCsvQuote, const char * destinationGroup, const char * destinationLogicalName, int timeOut, const char * espServerIpPort, int maxConnections, bool overwrite=false, bool replicate=false, bool compress=false, bool failIfNoSourceFile=false);
+FILESERVICES_API void FILESERVICES_CALL fsSprayVariable2(ICodeContext *ctx, const char * sourceIP, const char * sourcePath, int sourceMaxRecordSize, const char * sourceCsvSeparate, const char * sourceCsvTerminate, const char * sourceCsvQuote, const char * destinationGroup, const char * destinationLogicalName, int timeOut, const char * espServerIpPort, int maxConnections, bool overwrite, bool replicate, bool compress, const char * sourceCsvEscape, bool failIfNoSourceFile=false);
+FILESERVICES_API void FILESERVICES_CALL fsSprayXml(ICodeContext *ctx, const char * sourceIP, const char * sourcePath, int sourceMaxRecordSize, const char *sourceRowTag, const char *sourceEncoding, const char * destinationGroup, const char * destinationLogicalName, int timeOut, const char * espServerIpPort, int maxConnections, bool overwrite, bool replicate, bool compress=false, bool failIfNoSourceFile=false);
 FILESERVICES_API void FILESERVICES_CALL fsDespray(ICodeContext *ctx, const char * sourceLogicalName, const char * destinationIP, const char * destinationPath, int timeOut, const char * espServerIpPort, int maxConnections, bool overwrite=false);
 FILESERVICES_API void FILESERVICES_CALL fsCopy(ICodeContext *ctx, const char * sourceLogicalName, const char *destinationGroup, const char * destinationLogicalName, const char * sourceDali, int timeOut, const char * espServerIpPort, int maxConnections, bool overwrite, bool replicate, bool asSuperfile, bool compress, bool forcePush, int transferBufferSize);
 FILESERVICES_API void FILESERVICES_CALL fsDkc(ICodeContext *ctx, const char * sourceLogicalName, const char * destinationIP, const char * destinationPath, int timeOut, const char * espServerIpPort, int maxConnections, bool overwrite);
@@ -75,10 +75,10 @@ FILESERVICES_API char *  FILESERVICES_CALL fsWaitDfuWorkunit(IGlobalCodeContext
 FILESERVICES_API void FILESERVICES_CALL fsAbortDfuWorkunit(IGlobalCodeContext *ctx, const char *wuid, const char * espServerIpPort);
 FILESERVICES_API void  FILESERVICES_CALL fsMonitorLogicalFileName(ICodeContext *ctx, const char *eventname, const char *_lfn,int shotcount, const char * espServerIpPort);
 FILESERVICES_API void  FILESERVICES_CALL fsMonitorFile(ICodeContext *ctx, const char *eventname, const char *ip, const char *filename, bool sub, int shotcount, const char * espServerIpPort);
-FILESERVICES_API char * FILESERVICES_CALL fsfSprayFixed(ICodeContext *ctx, const char * sourceIP, const char * sourcePath, int recordSize, const char * destinationGroup, const char * destinationLogicalName, int timeOut, const char * espServerIpPort, int maxConnections, bool overwrite=false, bool replicate=false, bool compress=false);
-FILESERVICES_API char * FILESERVICES_CALL fsfSprayVariable(ICodeContext *ctx, const char * sourceIP, const char * sourcePath, int sourceMaxRecordSize, const char * sourceCsvSeparate, const char * sourceCsvTerminate, const char * sourceCsvQuote, const char * destinationGroup, const char * destinationLogicalName, int timeOut, const char * espServerIpPort, int maxConnections, bool overwrite=false, bool replicate=false, bool compress=false);
-FILESERVICES_API char * FILESERVICES_CALL fsfSprayVariable2(ICodeContext *ctx, const char * sourceIP, const char * sourcePath, int sourceMaxRecordSize, const char * sourceCsvSeparate, const char * sourceCsvTerminate, const char * sourceCsvQuote, const char * destinationGroup, const char * destinationLogicalName, int timeOut, const char * espServerIpPort, int maxConnections, bool overwrite, bool replicate, bool compress, const char * sourceCsvEscape);
-FILESERVICES_API char * FILESERVICES_CALL fsfSprayXml(ICodeContext *ctx, const char * sourceIP, const char * sourcePath, int sourceMaxRecordSize, const char *sourceRowTag, const char *sourceEncoding, const char * destinationGroup, const char * destinationLogicalName, int timeOut, const char * espServerIpPort, int maxConnections, bool overwrite, bool replicate, bool compress=false);
+FILESERVICES_API char * FILESERVICES_CALL fsfSprayFixed(ICodeContext *ctx, const char * sourceIP, const char * sourcePath, int recordSize, const char * destinationGroup, const char * destinationLogicalName, int timeOut, const char * espServerIpPort, int maxConnections, bool overwrite=false, bool replicate=false, bool compress=false, bool failIfNoSourceFile=false);
+FILESERVICES_API char * FILESERVICES_CALL fsfSprayVariable(ICodeContext *ctx, const char * sourceIP, const char * sourcePath, int sourceMaxRecordSize, const char * sourceCsvSeparate, const char * sourceCsvTerminate, const char * sourceCsvQuote, const char * destinationGroup, const char * destinationLogicalName, int timeOut, const char * espServerIpPort, int maxConnections, bool overwrite=false, bool replicate=false, bool compress=false, bool failIfNoSourceFile=false);
+FILESERVICES_API char * FILESERVICES_CALL fsfSprayVariable2(ICodeContext *ctx, const char * sourceIP, const char * sourcePath, int sourceMaxRecordSize, const char * sourceCsvSeparate, const char * sourceCsvTerminate, const char * sourceCsvQuote, const char * destinationGroup, const char * destinationLogicalName, int timeOut, const char * espServerIpPort, int maxConnections, bool overwrite, bool replicate, bool compress, const char * sourceCsvEscape, bool failIfNoSourceFile=false);
+FILESERVICES_API char * FILESERVICES_CALL fsfSprayXml(ICodeContext *ctx, const char * sourceIP, const char * sourcePath, int sourceMaxRecordSize, const char *sourceRowTag, const char *sourceEncoding, const char * destinationGroup, const char * destinationLogicalName, int timeOut, const char * espServerIpPort, int maxConnections, bool overwrite, bool replicate, bool compress=false, bool failIfNoSourceFile=false);
 FILESERVICES_API char * FILESERVICES_CALL fsfDespray(ICodeContext *ctx, const char * sourceLogicalName, const char * destinationIP, const char * destinationPath, int timeOut, const char * espServerIpPort, int maxConnections, bool overwrite=false);
 FILESERVICES_API char * FILESERVICES_CALL fsfCopy(ICodeContext *ctx, const char * sourceLogicalName, const char *destinationGroup, const char * destinationLogicalName, const char * sourceDali, int timeOut, const char * espServerIpPort, int maxConnections, bool overwrite, bool replicate, bool asSuperfile, bool compress, bool forcePush, int transferBufferSize);
 FILESERVICES_API char * FILESERVICES_CALL fsfDkc(ICodeContext *ctx, const char * sourceLogicalName, const char * destinationIP, const char * destinationPath, int timeOut, const char * espServerIpPort, int maxConnections, bool overwrite);

+ 1 - 1
roxie/ccd/ccddali.cpp

@@ -415,7 +415,7 @@ public:
             return NULL;
         if (!fdesc || !fdesc->queryProperties().hasProp("@cloneFrom"))
             return NULL;
-        if (fdesc->queryProperties().hasProp("cloneFromGroup"))
+        if (fdesc->queryProperties().hasProp("cloneFromGroup") && fdesc->queryProperties().hasProp("@cloneFromDir"))
         {
             return recreateCloneSource(fdesc, _lfn);
         }