Merge branch 'mars0.1.y' into mars0.1a.y

This commit is contained in:
Thomas Schoebel-Theuer 2018-11-26 11:38:26 +01:00
commit 426b67e811
5 changed files with 94 additions and 8 deletions

View File

@ -303,6 +303,14 @@ Hint: branch 0.1a will get a merge from here, and then get the
(except Football related ones) will then go to 0.1b.
Finally, when 0.1a is stable, I will close this branch.
mars0.1stable65
* Major fix, only observed during KASAN debugging:
Use-after-free which appears to splat only at Football
during final deletion of resources. Never observed at production.
Update if you are very cautious.
* A few minor fixes, not relevant for production.
* Minor doc improvements.
mars0.1stable64
* Major regression: split-brain detection did not display
correctly.

View File

@ -3265,7 +3265,30 @@ When all shards are residing in the same datacenter, there exists a SPOF
\end_inset
from each other by definition.
from each other by definition (cf paragraph
\begin_inset CommandInset ref
LatexCommand vref
reference "par:Definition-of-Sharding"
\end_inset
for disambiguation of terms
\begin_inset Quotes eld
\end_inset
sharding
\begin_inset Quotes erd
\end_inset
and
\begin_inset Quotes eld
\end_inset
shared-nothing
\begin_inset Quotes erd
\end_inset
).
\end_layout
\begin_layout Standard
@ -4764,6 +4787,42 @@ exceptional(!)
regularly
\emph default
, but only in clear cases of emergency!
\begin_inset Newline newline
\end_inset
Notice: in this model, a shard typically consists of one storage node plus
\begin_inset Formula $k+1$
\end_inset
or
\begin_inset Formula $k+2$
\end_inset
compute servers, introducing some additional failure redundancy
\emph on
within
\emph default
such a shard, while retaining the
\begin_inset Quotes eld
\end_inset
no single point of contention
\begin_inset Quotes erd
\end_inset
property
\emph on
between
\emph default
the shards (according to the definition
\begin_inset CommandInset ref
LatexCommand vref
reference "par:Definition-of-Sharding"
\end_inset
).
\end_layout
\begin_layout Description
@ -6616,12 +6675,23 @@ both
\series bold
shard
\series default
) must have an incident at the same time.
in section
\begin_inset CommandInset ref
LatexCommand vref
reference "par:Definition-of-Sharding"
\end_inset
) must have an incident
\emph on
at the same time
\emph default
.
\end_layout
\begin_layout Standard
In contrast, big clusters are spreading their objects over a huge number
of nodes
In contrast, big clusters are conceptually spreading their objects over
a huge number of nodes
\begin_inset Formula $O(n)$
\end_inset

View File

@ -173,8 +173,9 @@ int make_bio(struct bio_brick *brick, void *data, int len, loff_t pos, struct bi
MARS_ERR("odd sector offset %d\n", sector_offset);
goto out;
}
if (unlikely(sector_offset != data_offset)) {
MARS_ERR("bad alignment: sector_offset %d != data_offet %d\n", sector_offset, data_offset);
if (unlikely(sector_offset != 0)) {
MARS_ERR("bad alignment: sector_offset %d != 0\n",
sector_offset);
goto out;
}
if (unlikely(rest_len & ((1 << 9) - 1))) {

View File

@ -260,7 +260,7 @@ int server_io(struct server_brick *brick, struct mars_socket *sock, struct mars_
SETUP_CALLBACK(mref, server_endio, mref_a);
amount = 0;
if (!mref->ref_cs_mode < 2)
if (mref->ref_cs_mode < 2)
amount = (mref->ref_len - 1) / 1024 + 1;
mars_limit_sleep(&server_limiter, amount);

View File

@ -1426,6 +1426,7 @@ int mars_dent_work(struct mars_global *global,
struct say_channel *say_channel = NULL;
struct list_head *tmp;
struct list_head *next;
struct list_head *prev;
int rounds = 0;
int status;
int total_status = 0;
@ -1536,10 +1537,12 @@ restart:
bind_to_dent(NULL, &say_channel);
/* Remove all dents marked for removal.
* Needs to be done in reverse order because later d_parent pointers may
* reference earlier list members.
*/
down_write(&global->dent_mutex);
MARS_IO("removal pass\n");
for (tmp = global->dent_anchor.next, next = tmp->next; tmp != &global->dent_anchor; tmp = next, next = next->next) {
for (tmp = global->dent_anchor.prev, prev = tmp->prev; tmp != &global->dent_anchor; tmp = prev, prev = prev->prev) {
struct mars_dent *dent = container_of(tmp, struct mars_dent, dent_link);
if (!dent->d_killme)
continue;
@ -1719,6 +1722,10 @@ EXPORT_SYMBOL_GPL(mars_free_dent);
void mars_free_dent_all(struct mars_global *global, struct list_head *anchor)
{
LIST_HEAD(tmp_list);
/* Needs to be done in reverse order because later d_parent pointers may
* reference earlier list members.
*/
if (global)
down_write(&global->dent_mutex);
list_replace_init(anchor, &tmp_list);