<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">HI! Thank you for review.<br class="">The new diff is below.<br class=""><br class=""><blockquote type="cite" class="">18 окт. 2018 г., в 15:43, Vladimir Davydov <<a href="mailto:vdavydov.dev@gmail.com" class="">vdavydov.dev@gmail.com</a>> написал(а):<br class=""><br class="">On Tue, Oct 16, 2018 at 01:10:53PM +0300, Serge Petrenko wrote:<br class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br class=""></blockquote></blockquote><blockquote type="cite" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">+<span class="Apple-tab-span" style="white-space:pre">     </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>if (row_count % 100000 == 0)<br class="">+<span class="Apple-tab-span" style="white-space:pre">  </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>say_info("%.1fM rows recieved", row_count / 1e6);<br class=""></blockquote><br class="">Without knowing the total number of rows to be received, this isn't very<br class="">informative IMO.<br class=""></blockquote><div class=""><br class=""></div><div class="">The same is done in logging during recovery. Here it at least lets you make a rough</div><div class="">time estimation.</div><br class=""><blockquote type="cite" class=""><br class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span class="Apple-tab-span" style="white-space:pre">   </span><span class="Apple-tab-span" style="white-space:pre">    </span>} else if (row.type == IPROTO_OK) {<br class=""><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>if (applier->version_id < version_id(1, 7, 0)) {<br class=""><span class="Apple-tab-span" style="white-space:pre"> </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>/*<br class="">@@ -354,6 +358,9 @@ applier_join(struct applier *applier)<br class=""><span class="Apple-tab-span" style="white-space:pre">       </span><span class="Apple-tab-span" style="white-space:pre">    </span>if (iproto_type_is_dml(row.type)) {<br class=""><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>vclock_follow_xrow(&replicaset.vclock, &row);<br class=""><span class="Apple-tab-span" style="white-space:pre">  </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>xstream_write_xc(applier->subscribe_stream, &row);<br class="">+<span class="Apple-tab-span" style="white-space:pre">     </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>++row_count;<br class="">+<span class="Apple-tab-span" style="white-space:pre">  </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>if (row_count % 100000 == 0)<br class="">+<span class="Apple-tab-span" style="white-space:pre">  </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>say_info("%.1fM rows recieved", row_count / 1e6);<br class=""></blockquote><br class="">When bootstrapping from Tarantool < 1.7, final join won't end here, it<br class="">will end in applier_subscribe(). Not sure if we want to handle this case<br class="">though.<br class=""></blockquote><div class=""><br class=""></div>I suggest not adding logging to the subscribe stage, it is not needed IMO.<div class=""><br class=""><blockquote type="cite" class=""><br class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span class="Apple-tab-span" style="white-space:pre">     </span><span class="Apple-tab-span" style="white-space:pre">    </span>} else if (row.type == IPROTO_OK) {<br class=""><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span>/*<br class=""><span class="Apple-tab-span" style="white-space:pre">     </span><span class="Apple-tab-span" style="white-space:pre">    </span><span class="Apple-tab-span" style="white-space:pre">    </span> * Current vclock. This is not used now,<br class="">diff --git a/src/box/lua/info.c b/src/box/lua/info.c<br class="">index 655768ec4..4c25255c0 100644<br class="">--- a/src/box/lua/info.c<br class="">+++ b/src/box/lua/info.c<br class="">@@ -119,8 +119,13 @@ static void<br class="">lbox_pushrelay(lua_State *L, struct relay *relay)<br class="">{<br class=""><span class="Apple-tab-span" style="white-space:pre">        </span>lua_newtable(L);<br class="">-<span class="Apple-tab-span" style="white-space:pre">      </span>lua_pushstring(L, "vclock");<br class="">-<span class="Apple-tab-span" style="white-space:pre">        </span>lbox_pushvclock(L, relay_vclock(relay));<br class="">+<span class="Apple-tab-span" style="white-space:pre">      </span>if (relay_vclock(relay)->map == 0) {<br class="">+<span class="Apple-tab-span" style="white-space:pre">       </span><span class="Apple-tab-span" style="white-space:pre">    </span>lua_pushstring(L, "status");<br class="">+<span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">    </span>lua_pushstring(L, "joining");<br class="">+<span class="Apple-tab-span" style="white-space:pre">       </span>} else {<br class="">+<span class="Apple-tab-span" style="white-space:pre">      </span><span class="Apple-tab-span" style="white-space:pre">    </span>lua_pushstring(L, "vclock");<br class="">+<span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">    </span>lbox_pushvclock(L, relay_vclock(relay));<br class="">+<span class="Apple-tab-span" style="white-space:pre">      </span>}<br class=""></blockquote><br class="">This wouldn't work, because struct replica doesn't exist before initial<br class="">join is complete.<br class=""></blockquote><br class="">Yes, you’re correct. Removed this.<br class=""><br class="">---<br class=""> src/box/<a href="http://applier.cc" class="">applier.cc</a> | 7 +++++++<br class=""> 1 file changed, 7 insertions(+)<br class=""><br class="">diff --git a/src/box/<a href="http://applier.cc" class="">applier.cc</a> b/src/box/<a href="http://applier.cc" class="">applier.cc</a><br class="">index 7da278e68..ba68c3d07 100644<br class="">--- a/src/box/<a href="http://applier.cc" class="">applier.cc</a><br class="">+++ b/src/box/<a href="http://applier.cc" class="">applier.cc</a><br class="">@@ -309,11 +309,15 @@ applier_join(struct applier *applier)<br class=""> <span class="Apple-tab-span" style="white-space:pre">  </span> * Receive initial data.<br class=""> <span class="Apple-tab-span" style="white-space:pre">    </span> */<br class=""> <span class="Apple-tab-span" style="white-space:pre"> </span>assert(applier->join_stream != NULL);<br class="">+<span class="Apple-tab-span" style="white-space:pre">      </span>uint64_t row_count = 0;<br class=""> <span class="Apple-tab-span" style="white-space:pre">  </span>while (true) {<br class=""> <span class="Apple-tab-span" style="white-space:pre">           </span>coio_read_xrow(coio, ibuf, &row);<br class=""> <span class="Apple-tab-span" style="white-space:pre">            </span>applier->last_row_time = ev_monotonic_now(loop());<br class=""> <span class="Apple-tab-span" style="white-space:pre">            </span>if (iproto_type_is_dml(row.type)) {<br class=""> <span class="Apple-tab-span" style="white-space:pre">                      </span>xstream_write_xc(applier->join_stream, &row);<br class="">+<span class="Apple-tab-span" style="white-space:pre">                  </span>++row_count;<br class="">+<span class="Apple-tab-span" style="white-space:pre">                  </span>if (row_count % 100000 == 0)<br class="">+<span class="Apple-tab-span" style="white-space:pre">                          </span>say_info("%.1fM rows recieved", row_count / 1e6);<br class=""> <span class="Apple-tab-span" style="white-space:pre">              </span>} else if (row.type == IPROTO_OK) {<br class=""> <span class="Apple-tab-span" style="white-space:pre">                      </span>if (applier->version_id < version_id(1, 7, 0)) {<br class=""> <span class="Apple-tab-span" style="white-space:pre">                           </span>/*<br class="">@@ -354,6 +358,9 @@ applier_join(struct applier *applier)<br class=""> <span class="Apple-tab-span" style="white-space:pre">         </span>if (iproto_type_is_dml(row.type)) {<br class=""> <span class="Apple-tab-span" style="white-space:pre">                      </span>vclock_follow_xrow(&replicaset.vclock, &row);<br class=""> <span class="Apple-tab-span" style="white-space:pre">                    </span>xstream_write_xc(applier->subscribe_stream, &row);<br class="">+<span class="Apple-tab-span" style="white-space:pre">                     </span>++row_count;<br class="">+<span class="Apple-tab-span" style="white-space:pre">                  </span>if (row_count % 100000 == 0)<br class="">+<span class="Apple-tab-span" style="white-space:pre">                          </span>say_info("%.1fM rows recieved", row_count / 1e6);<br class=""> <span class="Apple-tab-span" style="white-space:pre">              </span>} else if (row.type == IPROTO_OK) {<br class=""> <span class="Apple-tab-span" style="white-space:pre">                      </span>/*<br class=""> <span class="Apple-tab-span" style="white-space:pre">                       </span> * Current vclock. This is not used now,<br class="">-- <br class="">2.17.1 (Apple Git-112)<br class=""><br class=""><br class=""></div></body></html>