Tarantool development patches archive
 help / color / mirror / Atom feed
From: Vladislav Shpilevoy <v.shpilevoy@tarantool.org>
To: Alexander Turenko <alexander.turenko@tarantool.org>
Cc: tarantool-patches@freelists.org
Subject: [tarantool-patches] Re: [PATCH] travis-ci: set right flags in release testing jobs
Date: Fri, 26 Apr 2019 13:18:28 +0300	[thread overview]
Message-ID: <febe2df5-697b-5eac-b94d-0908ba832af3@tarantool.org> (raw)
In-Reply-To: <64db98703d236c2e6775601a48fb19c3bc8ba955.1556241512.git.alexander.turenko@tarantool.org>

Hi! Thanks for the patch!

Firstly, after your patch I can't build Tarantool with gcc-7
on Mac with this new -DENABLE_WERROR=ON option. I get these
errors:

error: unknown warning option '-Wno-format-truncation' [-Werror,-Wunknown-warning-option]
errorScanning dependencies of target rope_stress.test
error: unknown warning option '-Wno-format-truncation' [-Werror,-Wunknown-warning-option]
error: unknown warning option '-Wno-cast-function-type'; did you mean '-Wno-bad-function-cast'? [-Werror,-Wunknown-warning-option]
error: unknown warning option '-Wno-format-truncation' [-Werror,-Wunknown-warning-option]
error: unknown warning option '-Wno-cast-function-type'; did you mean '-Wno-bad-function-cast'? [-Werror,-Wunknown-warning-option]

After that I found that master branch also can't be built, but
for another reason:
https://github.com/tarantool/tarantool/issues/4184

I think, that your commit should not exacerbate it, at least.

See 9 comments below, and my fixes on the branch in a separate commit.

> diff --git a/src/box/lua/net_box.c b/src/box/lua/net_box.c
> index 2dfc4fc9d..14177aaab 100644
> --- a/src/box/lua/net_box.c
> +++ b/src/box/lua/net_box.c
> @@ -689,12 +689,12 @@ netbox_decode_sql_info(struct lua_State *L, const char **data)
>  	if (map_size == 2) {
>  		key = mp_decode_uint(data);
>  		assert(key == SQL_INFO_AUTOINCREMENT_IDS);
> -		(void)key;
> +		(void) key;

1. Unnecessary diff. Please, drop.

>  		uint64_t count = mp_decode_array(data);
>  		assert(count > 0);
>  		lua_createtable(L, 0, count);
>  		for (uint32_t j = 0; j < count; ++j) {
> -			int64_t id;
> +			int64_t id = INT64_MIN;

2. Is there any concrete reason why the value is so
non-trivial? Why not just simple zero?

>  			mp_read_int64(data, &id);
>  			luaL_pushint64(L, id);
>  			lua_rawseti(L, -2, j + 1);
> diff --git a/src/box/sql/func.c b/src/box/sql/func.c
> index f3790ba01..f96709a75 100644
> --- a/src/box/sql/func.c
> +++ b/src/box/sql/func.c
> @@ -761,12 +761,13 @@ sql_utf8_pattern_compare(const char *pattern,
>  				if (c != MATCH_ALL_WILDCARD &&
>  				    c != MATCH_ONE_WILDCARD)
>  					break;
> -				if (c == MATCH_ONE_WILDCARD &&
> -				    (c2 = Utf8Read(string, string_end)) ==
> -				    SQL_END_OF_STRING)
> -					return NO_WILDCARD_MATCH;
> -				if (c2 == SQL_INVALID_UTF8_SYMBOL)
> -					return NO_MATCH;
> +				if (c == MATCH_ONE_WILDCARD) {

3. Now you check for 'c == MATCH_ONE_WILDCARD' two times: here and
two lines above. Please, consider my fixes:

=====================================================================
 			       SQL_END_OF_STRING) {
 				if (c == SQL_INVALID_UTF8_SYMBOL)
 					return INVALID_PATTERN;
-				if (c != MATCH_ALL_WILDCARD &&
-				    c != MATCH_ONE_WILDCARD)
-					break;
 				if (c == MATCH_ONE_WILDCARD) {
 					c2 = Utf8Read(string, string_end);
 					if (c2 == SQL_INVALID_UTF8_SYMBOL)
 						return NO_MATCH;
 					if (c2 == SQL_END_OF_STRING)
 						return NO_WILDCARD_MATCH;
+				} else if (c != MATCH_ALL_WILDCARD) {
+					break;
 				}
 			}
 			/*
=====================================================================

> +					c2 = Utf8Read(string, string_end);
> +					if (c2 == SQL_INVALID_UTF8_SYMBOL)
> +						return NO_MATCH;
> +					if (c2 == SQL_END_OF_STRING)
> +						return NO_WILDCARD_MATCH;
> +				}
>  			}
>  			/*
>  			 * "%" at the end of the pattern matches.
> diff --git a/src/box/vy_cache.c b/src/box/vy_cache.c
> index be11b986f..7007d0e35 100644
> --- a/src/box/vy_cache.c
> +++ b/src/box/vy_cache.c
> @@ -661,7 +661,7 @@ vy_cache_iterator_seek(struct vy_cache_iterator *itr, struct vy_entry last)
>  				ITER_GT : ITER_LT;
>  	}
>  
> -	bool exact;
> +	bool exact = false;
>  	if (!vy_stmt_is_empty_key(key.stmt)) {
>  		itr->curr_pos = iterator_type == ITER_EQ ||
>  				iterator_type == ITER_GE ||
> diff --git a/src/box/vy_mem.c b/src/box/vy_mem.c
> index 9513d5b80..a4fae26e2 100644
> --- a/src/box/vy_mem.c
> +++ b/src/box/vy_mem.c
> @@ -392,7 +392,7 @@ vy_mem_iterator_seek(struct vy_mem_iterator *itr, struct vy_entry last)
>  				ITER_GT : ITER_LT;
>  	}
>  
> -	bool exact;
> +	bool exact = false;

4. Sorry, can't review Vinyl part, because I do not understand this code.
But anyway your solution is better than an uninitialized variable. By the way,
can it be the problem Kirill investigates right now, when some tuples are
not returned from 'select'?

>  	struct vy_mem_tree_key tree_key;
>  	tree_key.entry = key;
>  	/* (lsn == INT64_MAX - 1) means that lsn is ignored in comparison */
> diff --git a/src/box/xrow.c b/src/box/xrow.c
> index aaed84e38..ccdd9def5 100644
> --- a/src/box/xrow.c
> +++ b/src/box/xrow.c
> @@ -509,9 +509,14 @@ iproto_write_error(int fd, const struct error *e, uint32_t schema_version,
>  			     schema_version, sizeof(body) + msg_len);
>  
>  	body.v_data_len = mp_bswap_u32(msg_len);
> -	(void) write(fd, header, sizeof(header));
> -	(void) write(fd, &body, sizeof(body));
> -	(void) write(fd, e->errmsg, msg_len);
> +
> +	int rc1, rc2, rc3;
> +	rc1 = write(fd, header, sizeof(header));
> +	rc2 = write(fd, &body, sizeof(body));
> +	rc3 = write(fd, e->errmsg, msg_len);
> +	(void) rc1;
> +	(void) rc2;
> +	(void) rc3;

5. Firstly, you could use one 'rc' for all of them. It would be shorter.
Secondly, why not just remove these (void) casts? We ignore returned value
in many places and it is ok, if it isn't really important.

In this concrete place an error has already happened, and it makes
no sense to create one another - this is why the values are ignored.

=====================================================================
 	body.v_data_len = mp_bswap_u32(msg_len);
-
-	int rc1, rc2, rc3;
-	rc1 = write(fd, header, sizeof(header));
-	rc2 = write(fd, &body, sizeof(body));
-	rc3 = write(fd, e->errmsg, msg_len);
-	(void) rc1;
-	(void) rc2;
-	(void) rc3;
+	write(fd, header, sizeof(header));
+	write(fd, &body, sizeof(body));
+	write(fd, e->errmsg, msg_len);
=====================================================================

>  }
>  
>  int
> @@ -624,12 +629,15 @@ xrow_decode_dml(struct xrow_header *row, struct request *request,
>  	request->header = row;
>  	request->type = row->type;
>  
> +	const char *start = NULL;
> +	const char *end = NULL;
> +
>  	if (row->bodycnt == 0)
>  		goto done;
>  
>  	assert(row->bodycnt == 1);
> -	const char *data = (const char *) row->body[0].iov_base;
> -	const char *end = data + row->body[0].iov_len;
> +	const char *data = start = (const char *) row->body[0].iov_base;
> +	end = data + row->body[0].iov_len;
>  	assert((end - data) > 0);
>  
>  	if (mp_typeof(*data) != MP_MAP || mp_check_map(data, end) > 0) {
> @@ -701,8 +709,8 @@ error:
>  done:
>  	if (key_map) {
>  		enum iproto_key key = (enum iproto_key) bit_ctz_u64(key_map);
> -		xrow_on_decode_err(row->body[0].iov_base, end,
> -				   ER_MISSING_REQUEST_FIELD, iproto_key_name(key));
> +		xrow_on_decode_err(start, end, ER_MISSING_REQUEST_FIELD,
> +				   iproto_key_name(key));

6. Why did you add 'start' variable? This code was fully okay, as I
understand. Compiler could not raise an error on 'row->body[0].iov_base'
usage here. Please, drop this hunk. A patch should not contain unrelated
changes making review harder and git history dirtier.

>  		return -1;
>  	}
>  	return 0;
> @@ -1071,12 +1079,16 @@ xrow_decode_ballot(struct xrow_header *row, struct ballot *ballot)
>  	ballot->is_ro = false;
>  	vclock_create(&ballot->vclock);
>  
> +	const char *start = NULL;
> +	const char *end = NULL;
> +
>  	if (row->bodycnt == 0)
>  		goto err;
> +

7. Excessive empty line. Please, drop.

>  	assert(row->bodycnt == 1);
>  
> -	const char *data = (const char *) row->body[0].iov_base;
> -	const char *end = data + row->body[0].iov_len;
> +	const char *data = start = (const char *) row->body[0].iov_base;
> +	end = data + row->body[0].iov_len;
>  	const char *tmp = data;
>  	if (mp_check(&tmp, end) != 0 || mp_typeof(*data) != MP_MAP)
>  		goto err;
> @@ -1124,8 +1136,7 @@ xrow_decode_ballot(struct xrow_header *row, struct ballot *ballot)
>  	}
>  	return 0;
>  err:
> -	xrow_on_decode_err(row->body[0].iov_base, end, ER_INVALID_MSGPACK,
> -			   "packet body");
> +	xrow_on_decode_err(start, end, ER_INVALID_MSGPACK, "packet body");

8. The same as 6.

>  	return -1;
>  }
>  
> diff --git a/src/lua/init.c b/src/lua/init.c
> index d18c8af94..f66a3eb46 100644
> --- a/src/lua/init.c
> +++ b/src/lua/init.c
> @@ -319,7 +319,9 @@ tarantool_lua_setpaths(struct lua_State *L)
>  {
>  	const char *home = getenv("HOME");
>  	char cwd[PATH_MAX] = {'\0'};
> -	getcwd(cwd, sizeof(cwd));
> +	char *rc = getcwd(cwd, sizeof(cwd));
> +	if (rc == NULL)
> +		panic("can't get cwd; errno: %d", errno);

9. 'cwd' variable is not used at all and can be removed. It was
introduced here 9e7c421758af156d19a66cebf713e24b42d8654b but
was forgotten to remove sometime.

=====================================================================
 	const char *home = getenv("HOME");
-	char cwd[PATH_MAX] = {'\0'};
-	char *rc = getcwd(cwd, sizeof(cwd));
-	if (rc == NULL)
-		panic("can't get cwd; errno: %d", errno);
 	lua_getglobal(L, "package");
 	int top = lua_gettop(L);
=====================================================================

>  	lua_getglobal(L, "package");
>  	int top = lua_gettop(L);
>  
> -- 
> 2.21.0
> 

  reply	other threads:[~2019-04-26 10:18 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-26  1:29 [tarantool-patches] " Alexander Turenko
2019-04-26 10:18 ` Vladislav Shpilevoy [this message]
2019-04-28  5:40   ` [tarantool-patches] " Alexander Turenko
2019-04-28  8:54     ` Vladislav Shpilevoy
2019-04-28  9:11       ` Vladislav Shpilevoy
2019-04-28 21:38         ` Alexander Turenko
2019-04-28 21:35       ` Alexander Turenko
2019-04-29 10:07         ` Vladislav Shpilevoy
2019-04-29 12:57           ` [PATCH v2] " Alexander Turenko
2019-04-29 17:09             ` Vladimir Davydov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=febe2df5-697b-5eac-b94d-0908ba832af3@tarantool.org \
    --to=v.shpilevoy@tarantool.org \
    --cc=alexander.turenko@tarantool.org \
    --cc=tarantool-patches@freelists.org \
    --subject='[tarantool-patches] Re: [PATCH] travis-ci: set right flags in release testing jobs' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox