main: earlier syncstatus update

This commit is contained in:
Thomas Schoebel-Theuer 2017-01-12 15:12:17 +01:00
parent 2e58ffadc1
commit 94dcded654
1 changed files with 31 additions and 10 deletions

View File

@ -4400,6 +4400,30 @@ done:
return status; return status;
} }
struct syncstatus_cookie {
struct mars_global *global;
struct mars_rotate *rot;
char *peer;
};
static
int update_syncstatus(struct mars_brick *_copy, bool switch_on, void *private)
{
struct copy_brick *copy = (void *)_copy;
struct syncstatus_cookie *cc = private;
int status = 0;
/* Update syncstatus symlink
*/
if (copy &&
((copy->power.button && copy->power.led_on) ||
!copy->copy_start ||
(copy->copy_last == copy->copy_end && copy->copy_end > 0))) {
status = _update_syncstatus(cc->rot, copy, cc->peer);
}
return status;
}
static int make_sync(void *buf, struct mars_dent *dent) static int make_sync(void *buf, struct mars_dent *dent)
{ {
struct mars_global *global = buf; struct mars_global *global = buf;
@ -4589,6 +4613,12 @@ static int make_sync(void *buf, struct mars_dent *dent)
*/ */
{ {
const char *argv[2] = { src, dst }; const char *argv[2] = { src, dst };
struct syncstatus_cookie cc = {
.global = global,
.rot = rot,
.peer = peer,
};
status = __make_copy(global, dent, status = __make_copy(global, dent,
do_start ? switch_path : "", do_start ? switch_path : "",
copy_path, dent->d_parent->d_path, argv, find_key(rot->msgs, "inf-sync"), copy_path, dent->d_parent->d_path, argv, find_key(rot->msgs, "inf-sync"),
@ -4597,7 +4627,7 @@ static int make_sync(void *buf, struct mars_dent *dent)
mars_fast_fullsync > 0, mars_fast_fullsync > 0,
true, false, true, false,
&copy, &copy,
NULL, NULL); update_syncstatus, &cc);
if (copy) { if (copy) {
copy->kill_ptr = (void**)&rot->sync_brick; copy->kill_ptr = (void**)&rot->sync_brick;
copy->copy_limiter = &rot->sync_limiter; copy->copy_limiter = &rot->sync_limiter;
@ -4605,15 +4635,6 @@ static int make_sync(void *buf, struct mars_dent *dent)
rot->sync_brick = copy; rot->sync_brick = copy;
} }
/* Update syncstatus symlink
*/
if (status >= 0 && copy &&
((copy->power.button && copy->power.led_on) ||
!copy->copy_start ||
(copy->copy_last == copy->copy_end && copy->copy_end > 0))) {
status = _update_syncstatus(rot, copy, peer);
}
done: done:
MARS_DBG("status = %d\n", status); MARS_DBG("status = %d\n", status);
brick_string_free(tmp); brick_string_free(tmp);