mirror of https://github.com/schoebel/mars
Merge branch 'mars0.1.y' into mars0.1a.y
This commit is contained in:
commit
426b67e811
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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))) {
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue