Back Midas Rome Roody Rootana
  Midas DAQ System, Page 94 of 142  Not logged in ELOG logo
New entries since:Wed Dec 31 16:00:00 1969
ID Date Author Topic Subject
  975   01 Mar 2014 Randolf PohlForumHuge events (>10MB) every second or so
Works, and here is how I did it. The attached example is based on the standard MIDAS
example in "src/midas/examples/experiment". 

My somewhat unsorted notes, haven't really tweaked the numbers. But it WORKS.

(1) mlogger writes "last.xml" (hard-coded!) which takes an awful amount of time
    as it writes the complete ODB containing the 10MB bank!
    just outcomment 
       // odb_save("last.xml");
    in mlogger.cxx, function 
    INT tr_start(INT run_number, char *error)
    (line ~3870 in mlogger rev. 5377, .cxx-file included)

(2) frontend.c:
     * the most important declarations are

/* BIG_DATA_BYTES is the data in 1 bank
   BIG_EVENT_SIZE is the event size. It's a bit larger than the bank size
                  because MIDAS needs to add some header bytes, I think
 */

#define BIG_DATA_BYTES  (10*1024*1024)   // 10 MB
#define BIG_EVENT_SIZE  (BIG_DATA_BYTES + 100)

/* maximum event size produced by this frontend */
INT max_event_size = BIG_EVENT_SIZE;

/* maximum event size for fragmented events (EQ_FRAGMENTED) */
INT max_event_size_frag = 5 * BIG_EVENT_SIZE;

/* buffer size to hold 10 events */
INT event_buffer_size = 10 * BIG_EVENT_SIZE;


     * bk_init() can hold at most 32kByte size events! Use bk_init32() instead.

     * complete frontend.c is attached

(3) in an xterm do
    # . setup.sh
    # odbedit -s 41943040
          (first invocation of odbedit must create large enough odb,
           otherwise you'll get "odb full" errors)
(4) odbedit> load big.odb      
    (attached). Essentials are:

    /Experiment/MAX_EVENT_SIZE = 20971520
    /Experiment/Buffer sizes/SYSTEM = 41943040   <- at least 2 events!

    To avoid excessive latecies when starting/stopping a run, do
    /Logger/ODB Dump = no 
    /Logger/Channels/0/Settings/ODB Dump = no 
     
    and create an Equipment Tree to make the mlogger happy

(5) a few more xterms, always ". setup.sh":
    # mlogger_patched (see (1))
    # ./frontend  (attched)

(6) in your odbedit (4) say "start". You should fill your disk rather quickly.
Attachment 1: big_event.tgz
  974   28 Feb 2014 Stefan RittSuggestionrunlog is "ugly"
 > If I am not mistaken, the mhttpd.css is hard coded (path/name) into the mhttpd.

I agree that this should be removed, Unfortunately I'm away right now, so I will fix it next week. Also will put in 
Andreas' diffs.

/Stefan
  973   28 Feb 2014 Andreas SuterSuggestionrunlog is "ugly"
Understand me right, I mostly like the new style, except the runlog as reported.
Attached you will find the diff's you were asking for. But as pointed out, I
haven't worked so far on CSS and hence this should be checked!!

I understand that the mhttpd.js needs to be the default one, however, mhttpd.css
might be left to the end-user to adopt to their specific needs. I shortly
checked in the mhttpd demon. It checks for the resources path in the ODB. If it
also would check for a CSS name, mhttpd.css could be changed/adopted by the
end-users without breaking things (at least it would then be their one business).

> > If I am not mistaken, the mhttpd.css is hard coded (path/name) into the mhttpd.
> 
> mhttpd.css is served from $MIDASSYS/resources/mhttpd.css. The actual path is
reported on the mhttpd 
> "help" page.
> 
> (I think the internal mhttpd.css and mhttpd.js should be removed as no longer
useful - nothing will work 
> right if the real mhttpd.js and mhttpd.css cannot be served).
> 
> > Especially the look and feel of the runlog is unsatisfactorily from my point
of view.
> 
> persons in charge of implementing the CSS stuff failed to convert quite a few
pages, for example, the elog 
> and the history editor pages were left completely broken. (mostly fixed now).
> 
> so thank you for reporting the runlog breakage, I hope Stefan & co can fix it
quickly. (I cannot do - I have 
> have no runlog pages on any of my test experiments).
> 
> > the old style was much more readable.
> 
> I think the new style is not too bad, except for a few visual artefacts here
and there, the general comment 
> that CSS is too complicated and hard to debug and the fact that over-subtle
colouring yields inconsistent 
> visuals between different monitors and ambient lighting conditions. (persons
who select the colours always 
> respond that "but to me, it looks just fine on my laptop", making it hard to
resolve any issues).
> 
> > I could recover the old style look and feel by slightly changing the mhttpd.cxx
> 
> If you post the patches that fix it for you, I can commit them to midas. (git
diff | mail olchansk@triumf.ca).
> 
> K.O.
Attachment 1: mhttpd.cxx.diff
diff --git a/src/mhttpd.cxx b/src/mhttpd.cxx
index 7437897..3940b96 100755
--- a/src/mhttpd.cxx
+++ b/src/mhttpd.cxx
@@ -3445,7 +3445,7 @@ void show_rawfile(const char *path)
    rsprintf("</table>");
 
    //main table:
-   rsprintf("<table class=\"dialogTable\">");
+   rsprintf("<table class=\"runlogTable\">");
    /*---- menu buttons ----*/
    rsprintf("<tr><td colspan=2>\n");
    rsprintf("<input type=submit name=cmd value=\"ELog\">\n");
Attachment 2: mhttpd.css.diff
diff --git a/resources/mhttpd.css b/resources/mhttpd.css
index 71c73a4..066cfe6 100644
--- a/resources/mhttpd.css
+++ b/resources/mhttpd.css
@@ -286,7 +286,7 @@ div.wrapper{
     margin: 0 auto -3em;
 }
 
-.historyConfigTable, .dialogTable, .messageBox, .genericTable, .sequencerTable{
+.historyConfigTable, .runlogTable, .dialogTable, .messageBox, .genericTable, .sequencerTable{
 	border-radius: 12px;
 	border: 2px solid #00B26B;
 	background-color: #EEEEEE;
@@ -304,6 +304,22 @@ table.sequencerTable td table{
 	margin: 0px;
 }
 
+table.genericTable tr:nth-child(even){
+	background: #EEEEEE;
+}
+table.genericTable tr:nth-child(odd){
+	background: #FAFAFA;
+}
+
+table.runlogTable td{
+        border:none;
+        text-align: left;
+        font-family: monospace;
+}
+
+table.runlogTable pre{
+        line-height: 125%;
+}
 
 table.dialogTable td{
 	border:none;
  972   27 Feb 2014 Andre FrankenthalBug ReportInstallation failing on Mac OS X 10.9 -- related to strlcat and strlcpy
> > 
> > I don't know if this actually fits the Bug Report category. I've been trying to install Midas on my Mac OS 
> > Mavericks and I keep getting errors like "conflicting types for '___builtin____strlcpy_chk' ..." and similarly for 
> > strlcat. I googled a bit and I think the problem might be that in Mavericks strlcat and strlcpy are already 
> > defined in string.h, and so there might be a redundant definition somewhere. I'm not sure what the best 
> > way to fix this would be though. Any help would be appreciated.
> > 
> 
> We have run into this problem - MacOS 10.9 plays funny games with definitions of strlcpy() & co - and it has been fixed since last Summer.
> 
> For the record, current MIDAS builds just fine on MacOS 10.9.2.
> 
> For a pure test, try the instructions posted at midas.triumf.ca:
> 
> cd $HOME
> mkdir packages
> cd packages
> git clone https://bitbucket.org/tmidas/midas
> git clone https://bitbucket.org/tmidas/mscb
> git clone https://bitbucket.org/tmidas/mxml
> cd midas
> make
> 
> K.O.

Thanks, it works like a charm now! I must have obtained an outdated version of Midas.

Andre
  971   27 Feb 2014 Konstantin OlchanskiBug ReportInstallation failing on Mac OS X 10.9 -- related to strlcat and strlcpy
> 
> I don't know if this actually fits the Bug Report category. I've been trying to install Midas on my Mac OS 
> Mavericks and I keep getting errors like "conflicting types for '___builtin____strlcpy_chk' ..." and similarly for 
> strlcat. I googled a bit and I think the problem might be that in Mavericks strlcat and strlcpy are already 
> defined in string.h, and so there might be a redundant definition somewhere. I'm not sure what the best 
> way to fix this would be though. Any help would be appreciated.
> 

We have run into this problem - MacOS 10.9 plays funny games with definitions of strlcpy() & co - and it has been fixed since last Summer.

For the record, current MIDAS builds just fine on MacOS 10.9.2.

For a pure test, try the instructions posted at midas.triumf.ca:

cd $HOME
mkdir packages
cd packages
git clone https://bitbucket.org/tmidas/midas
git clone https://bitbucket.org/tmidas/mscb
git clone https://bitbucket.org/tmidas/mxml
cd midas
make

K.O.
  970   27 Feb 2014 Konstantin OlchanskiSuggestionrunlog is "ugly"
> If I am not mistaken, the mhttpd.css is hard coded (path/name) into the mhttpd.

mhttpd.css is served from $MIDASSYS/resources/mhttpd.css. The actual path is reported on the mhttpd 
"help" page.

(I think the internal mhttpd.css and mhttpd.js should be removed as no longer useful - nothing will work 
right if the real mhttpd.js and mhttpd.css cannot be served).

> Especially the look and feel of the runlog is unsatisfactorily from my point of view.

persons in charge of implementing the CSS stuff failed to convert quite a few pages, for example, the elog 
and the history editor pages were left completely broken. (mostly fixed now).

so thank you for reporting the runlog breakage, I hope Stefan & co can fix it quickly. (I cannot do - I have 
have no runlog pages on any of my test experiments).

> the old style was much more readable.

I think the new style is not too bad, except for a few visual artefacts here and there, the general comment 
that CSS is too complicated and hard to debug and the fact that over-subtle colouring yields inconsistent 
visuals between different monitors and ambient lighting conditions. (persons who select the colours always 
respond that "but to me, it looks just fine on my laptop", making it hard to resolve any issues).

> I could recover the old style look and feel by slightly changing the mhttpd.cxx

If you post the patches that fix it for you, I can commit them to midas. (git diff | mail olchansk@triumf.ca).

K.O.
  969   27 Feb 2014 Andreas SuterSuggestionrunlog is "ugly"
I have a couple of questions and suggestions concerning the "new" CSS style of the mhttpd, especially related to the runlog

  1. If I am not mistaken, the mhttpd.css is hard coded (path/name) into the mhttpd. Wouldn't it be beneficial to have ODB entries where to get is from? This way people could change the look and feel more freely.
  2. Especially the look and feel of the runlog is unsatisfactorily from my point of view. See . The old style was much more readable. I could recover the old style look and feel by slightly changing the mhttpd.cxx where I changed in show_rawfile(const char*) "dialogTable" to "runlogTable" in the table class. This way I could tinker around with the mhttpd.css by adding the following stuff there:
    • adding .runlogTable in line 289 :
    • adding some style information for the runlogTable :
This way the "old" runlog look and feel recovered : , which I think is much more readable.
  • If possible, I would love to have alternating background colors between the runs for readability reasons, but I am not sure how easy it would be to add something like this.
    I not much experience with HTML/CSS yet, though a concrete implementation might be different.
  •   968   23 Feb 2014 William PageForumdb_check_record() for verifying structure of ODB subtree
    Hi,
    
    I have been trying to use db_check_record() in order to verify that a subtree in the ODB has the correct 
    variables, variable order, and overall size. I'm going off the documentation 
    (https://midas.psi.ch/htmldoc/group__odbfunctionc.html) and use a string to compare against the ODB 
    structure.  Since the string format is not specified for db_check_record(), I'm formatting my string 
    according to the db_create_record() example.
    
    Instead of db_check_record() checking the entire ODB subtree against all the variables represented in the 
    string, I'm finding that only the first variable is checked.  The later variables in the string can be 
    misspelled, out of order, or inexistent, and db_check_record() will still return 1.
    
    Am I using db_check_record incorrectly?  
    
    Thank you for any help with this issue.
    
    
    I also believe that some of the documentation for db_check_record is outdated.  For example, init_string 
    is referenced in the documentation but isn't part of the function definition.
      967   23 Feb 2014 Andre FrankenthalBug ReportInstallation failing on Mac OS X 10.9 -- related to strlcat and strlcpy
    Hi,
    
    I don't know if this actually fits the Bug Report category. I've been trying to install Midas on my Mac OS 
    Mavericks and I keep getting errors like "conflicting types for '___builtin____strlcpy_chk' ..." and similarly for 
    strlcat. I googled a bit and I think the problem might be that in Mavericks strlcat and strlcpy are already 
    defined in string.h, and so there might be a redundant definition somewhere. I'm not sure what the best 
    way to fix this would be though. Any help would be appreciated.
    
    Thanks,
    
    Andre
      966   21 Feb 2014 Konstantin OlchanskiInfoJavascript ODBMLs(), modified ODBMCopy() JSON encoding
    I made a few minor modifications to the ODB JSON encoder and implemented a javascript "ls" function to 
    report full ODB directory information as available from odbedit "ls -l" and the mhttpd odb editor page.
    
    Using the new ODBMLs(), the existing ODBMCreate(), ODBMDelete() & etc a complete ODB editor can be 
    written in Javascript (or in any other AJAX-capable language).
    
    While implementing this function, I found some problems in the ODB JSON encoder when handling 
    symlinks, also some problems with handling symlinks in odbedit and in the mhttpd ODB editor - these are 
    now fixed.
    
    Changes to the ODB JSON encoder:
    - added the missing information to the ODB KEY (access_mode, notify_count)
    - added symlink target information ("link")
    - changed encoding of simple variable (i.e. jcopy of /experiment/name) - when possible (i.e. ODB KEY 
    information is omitted), they are encoded as bare values (before, they were always encoded as structures 
    with variable names, etc). This change makes it possible to implement ODBGet() and ODBMGet() using the 
    AJAX jcopy method with JSON data encoding. Bare value encoding in ODBMCopy()/AJAX jcopy is enabled by 
    using the "json-nokeys-nolastwritten" encoding option.
    
    All these changes are supposed to be backward compatible (encoding used by ODBMCopy() for simple 
    values and "-nokeys-nolastwritten" was previously not documented).
    
    Documentation was updated:
    https://midas.triumf.ca/MidasWiki/index.php/Mhttpd.js
    
    K.O.
      965   19 Feb 2014 Stefan RittInfoCustom page header implemented
    > I am not sure what to do with the javascript snippet 
    
    Just read elog:908, it tells you to put this into a file, name it header.html for example, and put into the ODB:
    
    /Custom/Header [string32] = header.html
    
    make sure that you put the file into the directory indicated by /Custom/Path.
    
    Cheers,
    Stefan
      964   19 Feb 2014 Stefan RittBug Fixmake dox
    > On most Linux systems, doxygen is easy to install. Red Hat instructions are here: 
    > http://www.triumf.info/wiki/DAQwiki/index.php/SLinstall#Install_packages_needed_for_QUARTUS.2C_ROOT.2C_EPICS_and_MIDAS_DAQ
    > 
    > On MacOS, doxygen is easy to install via macports: sudo port install doxygen
    > 
    > > Is there a web site where one can see the generated graphs?
    > 
    > http://ladd00.triumf.ca/~olchansk/midas/index.html
    > 
    > there is no cron job to update this, but I may update it infrequently.
    > 
    > K.O.
    
    Great, thanks a lot!
    
    -Stefan
      963   18 Feb 2014 Konstantin OlchanskiBug Fixmake dox
    > > The capability to generate doxygen documentation of MIDAS was restored.
    > > 
    > > Use "make dox" and "make cleandox",
    > > find generated documentation in ./html,
    > > look at it via "firefox html/index.html".
    > > 
    > 
    > To generate the files, you need doxygen installed which not everybody has.
    
    On most Linux systems, doxygen is easy to install. Red Hat instructions are here: 
    http://www.triumf.info/wiki/DAQwiki/index.php/SLinstall#Install_packages_needed_for_QUARTUS.2C_ROOT.2C_EPICS_and_MIDAS_DAQ
    
    On MacOS, doxygen is easy to install via macports: sudo port install doxygen
    
    > Is there a web site where one can see the generated graphs?
    
    http://ladd00.triumf.ca/~olchansk/midas/index.html
    
    there is no cron job to update this, but I may update it infrequently.
    
    K.O.
      962   18 Feb 2014 Konstantin OlchanskiForumHuge events (>10MB) every second or so
    > I'm looking into using MIDAS for an experiment that creates one large event
    > (20MB or more) every second.
    
    Hi, there - 20 Mbyte event at 1/sec is not so large these days. (Well, depending on your hardware).
    
    Using typical 1-2 year old PC hardware, 20 M/sec to local disk should work right away. Sending data from a 
    remote front end (through the mserver), or writing to a remote disk (NFS, etc) - will of course requre a GigE 
    network connection.
    
    By default, MIDAS is configured for using about 1-2 Mbyte events, so for your case, you will need to:
    
    - increase the event size limits in your frontend,
    - increase /Experiment/MAX_EVENT_SIZE in ODB
    - increase the size of the SYSTEM event buffer (/Experiment/Buffer sizes/SYSTEM in ODB)
    
    I generally recommend sizing the SYSTEM event buffer to hold a few seconds worth of data (ot 
    accommodate any delays in writing to local disk - competing  reads, internal delays of the disks, etc).
    
    So for 20 M/s, the SYSTEM buffer size should be about 40-60 Mbytes.
    
    For your case, you also want to buffer 3-5-10 events, so the SYSTEM buffer size would be between 100 and 
    200 MBytes.
    
    Assuming you have between 8-16-32 GBytes of RAM, this should not be a problem.
    
    One the other hand, if you are running on a low-power ("green") ARM system with 1 Gbyte of RAM and a 
    1GHz CPU, you should be able to handle the data rate of 20 Mbytes/sec, as long as your network and 
    storage can handle it - I see GigE ethernet running at about 30-40 Mbytes/sec, so you should be okey,
    but local storage to SD flash is only about 10 Mbytes/sec - too slow. You can try USB-attached HDD or SSD, 
    this should run at up to 30-40 Mbytes/sec. I would expect no problems with this rate from MIDAS, as long 
    as you can fit into your 1 GByte of RAM - obviously your SYSTEM buffer will have to be a little smaller than 
    on a full-featured PC.
    
    More information on MIDAS event size limits is here (as already reported by Stefan)
    https://midas.triumf.ca/MidasWiki/index.php/Event_Buffer
    
    Let us know how it works out for you.
    
    K.O.
      961   18 Feb 2014 Konstantin OlchanskiInfoCustom page header implemented
    I am not sure what to do with the javascript snippet - I understand it should be somehow connected to /Custom/Header, but if I create the /Custom/Header string, I cannot put this snippet 
    into this string using odbedit - if I try to cut&paste it into odbedit, it is truncated to the first line - nor using the mhttpd odb editor - when I cut&paste it into the odb editor text entry box, it 
    is truncated to the first 519 bytes (must be a hard limit somewhere). K.O.
    
    > As reported in the bug tracker, the proposed header does not work if no specific (= different from the default 60 sec.) update period is specified, 
    > since then no cookie is present. Here is the updated code which works for all cases:
    > 
    > 
    > 
    > <div id="footerDiv" class="footerDiv">
    > <div style="display:inline; float:left;">MIDAS experiment "Test"</div>
    > <div id="refr" style="display:inline; float:right;"></div>
    > </div>
    > <script type="text/javascript">
    > var r = document.getElementById('refr');
    > var now = new Date();
    > var refr;
    > if (document.cookie.search('midas_refr') == -1)
    >    refr = 60;
    > else {
    >    var c = document.cookie.split('midas_refr=');
    >    refr = c.pop().split(';').shift();
    > }
    > r.innerHTML = now.toString() + '&nbsp;&nbsp;&nbsp;' + 'Refr:' + refr;
    > </script>
    > 
    > 
    > 
    > /Stefan
      960   18 Feb 2014 Konstantin OlchanskiInfoSeparation of MSCB subtree
    > Since several projects at PSI need MSCB but not MIDAS, I decided to separate the two repositories. So if you 
    > need MIDAS with MSCB support inside mhttpd, you have to clone MIDAS, MXML and MSCB from bitbucket 
    > (or the local clone at TRIUMF) as described in
    > 
    > https://midas.triumf.ca/MidasWiki/index.php/Main_Page#Download
    > 
    > I tried to fix all Makefiles to link to the new locations, but I'm not sure if I got all. So if something does not 
    > compile please let me know.
    > 
    > -Stefan
    
    After this split, Makefiles used to build experiment frontends need to be modified for the new location of the mscb tree:
    
    replace
    $(MIDASSYS)/mscb
    with
    $(MIDASSYS)/../mscb
    
    K.O.
      959   12 Feb 2014 Stefan RittInfoCustom page header implemented
    As reported in the bug tracker, the proposed header does not work if no specific (= different from the default 60 sec.) update period is specified, 
    since then no cookie is present. Here is the updated code which works for all cases:
    
    
    
    <div id="footerDiv" class="footerDiv">
    <div style="display:inline; float:left;">MIDAS experiment "Test"</div>
    <div id="refr" style="display:inline; float:right;"></div>
    </div>
    <script type="text/javascript">
    var r = document.getElementById('refr');
    var now = new Date();
    var refr;
    if (document.cookie.search('midas_refr') == -1)
       refr = 60;
    else {
       var c = document.cookie.split('midas_refr=');
       refr = c.pop().split(';').shift();
    }
    r.innerHTML = now.toString() + '&nbsp;&nbsp;&nbsp;' + 'Refr:' + refr;
    </script>
    
    
    
    /Stefan
      958   11 Feb 2014 Stefan RittBug Reportmhttpd, etc.

    Andreas Suter wrote:
    I found a couple of bugs in the current mhttpd, midas version: "93fa5ed"


    See my reply on the issue tracker:

    https://bitbucket.org/tmidas/midas/issue/18/mhttpd-bugs
      957   11 Feb 2014 Stefan RittForumHuge events (>10MB) every second or so
    > I'm looking into using MIDAS for an experiment that creates one large event
    > (20MB or more) every second.
    > 
    > Q1: It looks like I should use EQ_FRAGMENTED. Has this feature been in use
    > recently? Is it known to work/not work?
    > 
    > More specifically, the computer should initiate a 1 second data taking, start to
    > such the data out of the electronics (which may take a while), change some
    > experimental parameters, and start over. 
    > 
    > Q2: What's the best way to do this? EQ_PERIODIC? 
    > I cannot guarantee that the time required to read the hardware has an upper bound.
    > In a standalone-prog I would simply use a big loop and let the machine execute
    > it as fast as it can: 1.1s, 1.5s, 1.1s, 1.3s, 2.5s, ..... depending on the HW
    > deadtimes.
    > Will this work with EQ_PERIODIC?
    > 
    > (Sorry for these maybe stupid questions, but I have so far only used MIDAS for
    > externally generated events, with <32kB event size).
    > 
    > 
    > Thanks a lot,
    > 
    > Randolf
    
    Hi Randolf,
    
    EQ_FRAGMENTED is kind of historically, when computers had a few MB of memory and you have to play special tricks to get large data buffers through. Today I 
    would just use EQ_PERIODIC and increase the midas maximal event size to your needs. For details look here:
    
    https://midas.triumf.ca/MidasWiki/index.php/Event_Buffer
    
    The front-end scheduler is asynchronous, which means that your readout is called when the given period (1 second) is elapsed. If the readout takes longer 
    than 1s, the schedule will (hopefully) call your readout immediately after the event has been sent. So you get automatically your maximal data rate. At MEG, we 
    use 2 MB events with 10 Hz, so a 20 MB/sec data rate should not be a problem on decent computers.
    
    Best,
    Stefan
      956   11 Feb 2014 Randolf PohlForumHuge events (>10MB) every second or so
    I'm looking into using MIDAS for an experiment that creates one large event
    (20MB or more) every second.
    
    Q1: It looks like I should use EQ_FRAGMENTED. Has this feature been in use
    recently? Is it known to work/not work?
    
    More specifically, the computer should initiate a 1 second data taking, start to
    such the data out of the electronics (which may take a while), change some
    experimental parameters, and start over. 
    
    Q2: What's the best way to do this? EQ_PERIODIC? 
    I cannot guarantee that the time required to read the hardware has an upper bound.
    In a standalone-prog I would simply use a big loop and let the machine execute
    it as fast as it can: 1.1s, 1.5s, 1.1s, 1.3s, 2.5s, ..... depending on the HW
    deadtimes.
    Will this work with EQ_PERIODIC?
    
    (Sorry for these maybe stupid questions, but I have so far only used MIDAS for
    externally generated events, with <32kB event size).
    
    
    Thanks a lot,
    
    Randolf
    ELOG V3.1.4-2e1708b5