mirror of
https://github.com/urbit/shrub.git
synced 2024-12-20 17:32:11 +03:00
serf: disables auto |pack, refactors loading from rock (-r)
This commit is contained in:
parent
f48dd41ca8
commit
19da74d146
@ -12,7 +12,7 @@
|
||||
c3_d dun_d; // last event processed
|
||||
c3_l mug_l; // hash of state
|
||||
c3_o pac_o; // pack kernel
|
||||
c3_o rec_o; // reclaim cash
|
||||
c3_o rec_o; // reclaim cache
|
||||
c3_o mut_o; // mutated kerne
|
||||
u3_noun sac; // space measurementl
|
||||
} u3_serf;
|
||||
@ -24,6 +24,11 @@
|
||||
u3_noun
|
||||
u3_serf_init(u3_serf* sef_u);
|
||||
|
||||
/* u3_serf_unpack(): initialize from rock at [eve_d].
|
||||
*/
|
||||
void
|
||||
u3_serf_unpack(u3_serf* sef_u, c3_d eve_d);
|
||||
|
||||
/* u3_serf_writ(): apply writ [wit], producing plea [*pel] on c3y.
|
||||
*/
|
||||
c3_o
|
||||
|
@ -1133,6 +1133,11 @@
|
||||
c3_o
|
||||
u3_pier_save(u3_pier* pir_u);
|
||||
|
||||
/* u3_pier_pack(): save a portable snapshot.
|
||||
*/
|
||||
c3_o
|
||||
u3_pier_pack(u3_pier* pir_u);
|
||||
|
||||
/* u3_pier_stub(): get the One Pier for unreconstructed code.
|
||||
*/
|
||||
u3_pier*
|
||||
|
@ -574,9 +574,6 @@ _pier_play_read(u3_play* pay_u)
|
||||
}
|
||||
}
|
||||
|
||||
c3_o
|
||||
u3_pier_pack(u3_pier* pir_u);
|
||||
|
||||
/* _pier_play(): send a batch of events to the worker for log replay.
|
||||
*/
|
||||
static void
|
||||
|
@ -1401,6 +1401,9 @@ _term_io_kick(u3_auto* car_u, u3_noun wir, u3_noun cad)
|
||||
//
|
||||
case c3__pack: {
|
||||
ret_o = c3y;
|
||||
// XX would be
|
||||
//
|
||||
// u3_assure(u3_pier_pack(car_u->pir_u));
|
||||
} break;
|
||||
}
|
||||
}
|
||||
|
@ -175,54 +175,7 @@ main(c3_i argc, c3_c* argv[])
|
||||
u3V.sen_d = u3V.dun_d = u3m_boot(dir_c);
|
||||
|
||||
if ( eve_d ) {
|
||||
c3_o roc_o;
|
||||
c3_c nam_c[8193];
|
||||
snprintf(nam_c, 8192, "%s/.urb/roc/%" PRIu64 ".jam", u3V.dir_c, eve_d);
|
||||
|
||||
struct stat buf_b;
|
||||
c3_i fid_i = open(nam_c, O_RDONLY, 0644);
|
||||
|
||||
if ( (fid_i < 0) || (fstat(fid_i, &buf_b) < 0) ) {
|
||||
fprintf(stderr, "serf: rock: %s not found\r\n", nam_c);
|
||||
roc_o = c3n;
|
||||
}
|
||||
else {
|
||||
fprintf(stderr, "serf: rock: %s found\r\n", nam_c);
|
||||
roc_o = c3y;
|
||||
}
|
||||
|
||||
close(fid_i);
|
||||
|
||||
|
||||
if ( c3y == roc_o ) {
|
||||
if ( c3n == u3e_hold() ) {
|
||||
fprintf(stderr, "serf: unable to backup checkpoint\r\n");
|
||||
}
|
||||
else {
|
||||
u3m_wipe();
|
||||
|
||||
if ( c3n == u3m_rock_load(u3V.dir_c, eve_d) ) {
|
||||
fprintf(stderr, "serf: compaction failed, restoring checkpoint\r\n");
|
||||
|
||||
if ( c3n == u3e_fall() ) {
|
||||
fprintf(stderr, "serf: unable to restore checkpoint\r\n");
|
||||
c3_assert(0);
|
||||
}
|
||||
}
|
||||
|
||||
if ( c3n == u3e_drop() ) {
|
||||
fprintf(stderr, "serf: warning: orphaned backup checkpoint file\r\n");
|
||||
}
|
||||
|
||||
fprintf(stderr, "serf (%" PRIu64 "): compacted loom\r\n", eve_d);
|
||||
|
||||
u3V.sen_d = u3V.dun_d = eve_d;
|
||||
|
||||
// save now for flexibility
|
||||
//
|
||||
u3e_save();
|
||||
}
|
||||
}
|
||||
u3_serf_unpack(&u3V, eve_d);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -290,9 +290,7 @@ _serf_static_grab(void)
|
||||
static void
|
||||
_serf_pack(u3_serf* sef_u)
|
||||
{
|
||||
// skip for now
|
||||
//
|
||||
// _serf_static_grab();
|
||||
_serf_static_grab();
|
||||
|
||||
u3l_log("serf (%" PRIu64 "): compacting loom\r\n", sef_u->dun_d);
|
||||
|
||||
@ -301,39 +299,11 @@ _serf_pack(u3_serf* sef_u)
|
||||
return;
|
||||
}
|
||||
|
||||
if ( c3n == u3e_hold() ) {
|
||||
u3l_log("serf: unable to backup checkpoint\r\n");
|
||||
return;
|
||||
}
|
||||
|
||||
u3m_wipe();
|
||||
|
||||
if ( c3n == u3m_rock_load(sef_u->dir_c, sef_u->dun_d) ) {
|
||||
u3l_log("serf: compaction failed, restoring checkpoint\r\n");
|
||||
|
||||
if ( c3n == u3e_fall() ) {
|
||||
fprintf(stderr, "serf: unable to restore checkpoint\r\n");
|
||||
c3_assert(0);
|
||||
}
|
||||
}
|
||||
|
||||
if ( c3n == u3e_drop() ) {
|
||||
u3l_log("serf: warning: orphaned backup checkpoint file\r\n");
|
||||
}
|
||||
|
||||
// leave these for now
|
||||
//
|
||||
// if ( c3n == u3m_rock_drop(sef_u->dir_c, sef_u->dun_d) ) {
|
||||
// u3l_log("serf: warning: orphaned state file\r\n");
|
||||
// }
|
||||
u3_serf_unpack(sef_u, sef_u->dun_d);
|
||||
|
||||
u3l_log("serf (%" PRIu64 "): compacted loom\r\n", sef_u->dun_d);
|
||||
|
||||
_serf_static_grab();
|
||||
|
||||
// save now for flexibility
|
||||
//
|
||||
u3e_save();
|
||||
}
|
||||
|
||||
/* u3_serf_post(): update serf state post-writ.
|
||||
@ -346,7 +316,7 @@ u3_serf_post(u3_serf* sef_u)
|
||||
sef_u->rec_o = c3n;
|
||||
}
|
||||
|
||||
// XX this runs on replay too
|
||||
// XX this runs on replay too, |mass s/b elsewhere
|
||||
//
|
||||
if ( c3y == sef_u->mut_o ) {
|
||||
sef_u->mut_o = c3n;
|
||||
@ -432,14 +402,11 @@ _serf_sure_feck(u3_serf* sef_u, c3_w pre_w, u3_noun vir)
|
||||
|
||||
if ( (pre_w > low_w) && !(pos_w > low_w) ) {
|
||||
// XX set flag(s) in u3V so we don't repeat endlessly?
|
||||
// XX pack here too?
|
||||
//
|
||||
pac_o = c3y;
|
||||
rec_o = c3y;
|
||||
pri = 1;
|
||||
}
|
||||
else if ( (pre_w > hig_w) && !(pos_w > hig_w) ) {
|
||||
pac_o = c3y;
|
||||
rec_o = c3y;
|
||||
pri = 0;
|
||||
}
|
||||
@ -453,12 +420,6 @@ _serf_sure_feck(u3_serf* sef_u, c3_w pre_w, u3_noun vir)
|
||||
rec_o = c3y;
|
||||
}
|
||||
|
||||
// pack every 20K events
|
||||
//
|
||||
if ( 0 == (sef_u->dun_d % 20000ULL) ) {
|
||||
pac_o = c3y;
|
||||
}
|
||||
|
||||
// notify daemon of memory pressure via "fake" effect
|
||||
//
|
||||
if ( u3_none != pri ) {
|
||||
@ -782,7 +743,7 @@ _serf_play_list(u3_serf* sef_u, u3_noun eve)
|
||||
|
||||
_serf_sure_core(sef_u, u3k(cor));
|
||||
|
||||
// process effects to set pack/reclaim flags
|
||||
// process effects to set u3_serf_post flags
|
||||
//
|
||||
u3z(_serf_sure_feck(sef_u, pre_w, u3k(vir)));
|
||||
|
||||
@ -806,8 +767,7 @@ _serf_play_list(u3_serf* sef_u, u3_noun eve)
|
||||
|
||||
u3z(gon);
|
||||
|
||||
// XX reclaim/pack on meme
|
||||
// XX retry?
|
||||
// XX reclaim on meme ?
|
||||
//
|
||||
|
||||
// send failure notification
|
||||
@ -964,6 +924,8 @@ u3_serf_live(u3_serf* sef_u, u3_noun com, u3_noun* ret)
|
||||
return c3y;
|
||||
}
|
||||
|
||||
// NB: the %pack $writ only saves the rock, it doesn't load it
|
||||
//
|
||||
case c3__pack: {
|
||||
c3_d eve_d;
|
||||
|
||||
@ -1099,6 +1061,67 @@ _serf_ripe(u3_serf* sef_u)
|
||||
return u3nc(u3i_chubs(1, &sef_u->dun_d), sef_u->mug_l);
|
||||
}
|
||||
|
||||
/* u3_serf_unpack(): initialize from rock at [eve_d].
|
||||
*/
|
||||
void
|
||||
u3_serf_unpack(u3_serf* sef_u, c3_d eve_d)
|
||||
{
|
||||
c3_o roc_o;
|
||||
c3_c nam_c[8193];
|
||||
snprintf(nam_c, 8192, "%s/.urb/roc/%" PRIu64 ".jam", sef_u->dir_c, eve_d);
|
||||
|
||||
struct stat buf_b;
|
||||
c3_i fid_i = open(nam_c, O_RDONLY, 0644);
|
||||
|
||||
if ( (fid_i < 0) || (fstat(fid_i, &buf_b) < 0) ) {
|
||||
fprintf(stderr, "serf: rock: %s not found\r\n", nam_c);
|
||||
roc_o = c3n;
|
||||
}
|
||||
else {
|
||||
fprintf(stderr, "serf: rock: %s found\r\n", nam_c);
|
||||
roc_o = c3y;
|
||||
}
|
||||
|
||||
close(fid_i);
|
||||
|
||||
|
||||
if ( c3y == roc_o ) {
|
||||
if ( c3n == u3e_hold() ) {
|
||||
fprintf(stderr, "serf: unable to backup checkpoint\r\n");
|
||||
}
|
||||
else {
|
||||
u3m_wipe();
|
||||
|
||||
if ( c3n == u3m_rock_load(sef_u->dir_c, eve_d) ) {
|
||||
fprintf(stderr, "serf: compaction failed, restoring checkpoint\r\n");
|
||||
|
||||
if ( c3n == u3e_fall() ) {
|
||||
fprintf(stderr, "serf: unable to restore checkpoint\r\n");
|
||||
c3_assert(0);
|
||||
}
|
||||
}
|
||||
|
||||
if ( c3n == u3e_drop() ) {
|
||||
fprintf(stderr, "serf: warning: orphaned backup checkpoint file\r\n");
|
||||
}
|
||||
|
||||
// leave rocks on disk
|
||||
//
|
||||
// if ( c3n == u3m_rock_drop(sef_u->dir_c, sef_u->dun_d) ) {
|
||||
// u3l_log("serf: warning: orphaned state file\r\n");
|
||||
// }
|
||||
|
||||
fprintf(stderr, "serf (%" PRIu64 "): compacted loom\r\n", eve_d);
|
||||
|
||||
sef_u->sen_d = sef_u->dun_d = eve_d;
|
||||
|
||||
// save now for flexibility
|
||||
//
|
||||
u3e_save();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* u3_serf_init(): init or restore, producing status.
|
||||
*/
|
||||
u3_noun
|
||||
|
Loading…
Reference in New Issue
Block a user