Skip to content
Snippets Groups Projects
Commit 7c00558b authored by Eric Vidal's avatar Eric Vidal :speech_balloon:
Browse files

always create the live directory even if the tree is empty

parent 16a7c6b6
No related branches found
No related tags found
No related merge requests found
...@@ -52,7 +52,7 @@ int ssexec_init(int argc, char const *const *argv,char const *const *envp,ssexec ...@@ -52,7 +52,7 @@ int ssexec_init(int argc, char const *const *argv,char const *const *envp,ssexec
classic = db = earlier = 0 ; classic = db = earlier = 0 ;
gid_t gidowner ; gid_t gidowner ;
if (!yourgid(&gidowner,info->owner)) log_dieusys(LOG_EXIT_SYS,"set gid") ; if (!yourgid(&gidowner,info->owner)) log_dieusys(LOG_EXIT_SYS,"get gid") ;
if (argc <= 1) log_usage(usage_init) ; if (argc <= 1) log_usage(usage_init) ;
if (*argv[1] == 'c') classic = 1 ; if (*argv[1] == 'c') classic = 1 ;
...@@ -83,18 +83,20 @@ int ssexec_init(int argc, char const *const *argv,char const *const *envp,ssexec ...@@ -83,18 +83,20 @@ int ssexec_init(int argc, char const *const *argv,char const *const *envp,ssexec
size_t dirlen ; size_t dirlen ;
char svdir[info->tree.len + SS_SVDIRS_LEN + SS_SVC_LEN + 1] ; char svdir[info->tree.len + SS_SVDIRS_LEN + SS_SVC_LEN + 1] ;
memcpy(svdir,info->tree.s,info->tree.len) ;
memcpy(svdir + info->tree.len ,SS_SVDIRS ,SS_SVDIRS_LEN) ; auto_strings(svdir, info->tree.s, SS_SVDIRS, SS_SVC) ;
memcpy(svdir + info->tree.len + SS_SVDIRS_LEN, SS_SVC ,SS_SVC_LEN) ;
dirlen = info->tree.len + SS_SVDIRS_LEN + SS_SVC_LEN ; dirlen = info->tree.len + SS_SVDIRS_LEN + SS_SVC_LEN ;
svdir[dirlen] = 0 ;
if (!create_live(info)) log_dieusys(LOG_EXIT_SYS,"create live state") ;
/** svc already initiated? */ /** svc already initiated? */
if (classic) if (classic) {
{
if (!sastr_dir_get(&sasvc,svdir,exclude,S_IFDIR)) log_dieusys(LOG_EXIT_SYS,"get classic services from: ",svdir) ; if (!sastr_dir_get(&sasvc,svdir,exclude,S_IFDIR))
if (!sasvc.len) log_dieusys(LOG_EXIT_SYS,"get classic services from: ",svdir) ;
{
if (!sasvc.len) {
log_info("Initialization report: no classic services into tree: ",info->treename.s) ; log_info("Initialization report: no classic services into tree: ",info->treename.s) ;
goto follow ; goto follow ;
} }
...@@ -102,8 +104,7 @@ int ssexec_init(int argc, char const *const *argv,char const *const *envp,ssexec ...@@ -102,8 +104,7 @@ int ssexec_init(int argc, char const *const *argv,char const *const *envp,ssexec
if (!sa_pointo(&sares,info,SS_NOTYPE,SS_RESOLVE_SRC)) if (!sa_pointo(&sares,info,SS_NOTYPE,SS_RESOLVE_SRC))
log_dieu(LOG_EXIT_SYS,"set revolve pointer to source") ; log_dieu(LOG_EXIT_SYS,"set revolve pointer to source") ;
for (i = 0;i < sasvc.len; i += strlen(sasvc.s + i) + 1) for (i = 0;i < sasvc.len; i += strlen(sasvc.s + i) + 1) {
{
char *name = sasvc.s + i ; char *name = sasvc.s + i ;
resolve_service_t res = RESOLVE_SERVICE_ZERO ; resolve_service_t res = RESOLVE_SERVICE_ZERO ;
resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, &res) ; resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, &res) ;
...@@ -113,17 +114,16 @@ int ssexec_init(int argc, char const *const *argv,char const *const *envp,ssexec ...@@ -113,17 +114,16 @@ int ssexec_init(int argc, char const *const *argv,char const *const *envp,ssexec
resolve_free(wres) ; resolve_free(wres) ;
} }
if (!earlier) if (!earlier) {
{
/** reverse to start first the logger */ /** reverse to start first the logger */
genalloc_reverse(resolve_service_t,&gares) ; genalloc_reverse(resolve_service_t,&gares) ;
if (!svc_init(info,svdir,&gares)) log_dieu(LOG_EXIT_SYS,"initiate service of tree: ",info->treename.s) ; if (!svc_init(info,svdir,&gares)) log_dieu(LOG_EXIT_SYS,"initiate service of tree: ",info->treename.s) ;
}
else } else {
{
if (!create_live(info)) log_dieusys(LOG_EXIT_SYS,"create live state") ;
for (i = 0 ; i < genalloc_len(resolve_service_t,&gares) ; i++) for (i = 0 ; i < genalloc_len(resolve_service_t,&gares) ; i++) {
{
logname = 0 ; logname = 0 ;
char *string = genalloc_s(resolve_service_t,&gares)[i].sa.s ; char *string = genalloc_s(resolve_service_t,&gares)[i].sa.s ;
char *name = string + genalloc_s(resolve_service_t,&gares)[i].name ; char *name = string + genalloc_s(resolve_service_t,&gares)[i].name ;
...@@ -131,14 +131,10 @@ int ssexec_init(int argc, char const *const *argv,char const *const *envp,ssexec ...@@ -131,14 +131,10 @@ int ssexec_init(int argc, char const *const *argv,char const *const *envp,ssexec
logname = get_rstrlen_until(name,SS_LOG_SUFFIX) ; logname = get_rstrlen_until(name,SS_LOG_SUFFIX) ;
if (logname > 0) name = string + genalloc_s(resolve_service_t,&gares)[i].logassoc ; if (logname > 0) name = string + genalloc_s(resolve_service_t,&gares)[i].logassoc ;
char tocopy[dirlen + 1 + namelen + 1] ; char tocopy[dirlen + 1 + namelen + 1] ;
memcpy(tocopy,svdir,dirlen) ; auto_strings(tocopy, svdir, "/", name) ;
tocopy[dirlen] = '/' ;
memcpy(tocopy + dirlen + 1, name, namelen) ;
tocopy[dirlen + 1 + namelen] = 0 ;
if (!hiercopy(tocopy,string + genalloc_s(resolve_service_t,&gares)[i].runat)) log_dieusys(LOG_EXIT_SYS,"copy earlier service: ",tocopy," to: ",string + genalloc_s(resolve_service_t,&gares)[i].runat) ; if (!hiercopy(tocopy,string + genalloc_s(resolve_service_t,&gares)[i].runat)) log_dieusys(LOG_EXIT_SYS,"copy earlier service: ",tocopy," to: ",string + genalloc_s(resolve_service_t,&gares)[i].runat) ;
state_setflag(&sta,SS_FLAGS_RELOAD,SS_FLAGS_FALSE) ; state_setflag(&sta,SS_FLAGS_RELOAD,SS_FLAGS_FALSE) ;
state_setflag(&sta,SS_FLAGS_INIT,SS_FLAGS_FALSE) ; state_setflag(&sta,SS_FLAGS_INIT,SS_FLAGS_FALSE) ;
// state_setflag(&sta,SS_FLAGS_UNSUPERVISE,SS_FLAGS_FALSE) ;
state_setflag(&sta,SS_FLAGS_STATE,SS_FLAGS_UNKNOWN) ; state_setflag(&sta,SS_FLAGS_STATE,SS_FLAGS_UNKNOWN) ;
state_setflag(&sta,SS_FLAGS_PID,SS_FLAGS_UNKNOWN) ; state_setflag(&sta,SS_FLAGS_PID,SS_FLAGS_UNKNOWN) ;
if (!state_write(&sta,string + genalloc_s(resolve_service_t,&gares)[i].state,name)) log_dieusys(LOG_EXIT_SYS,"write state file of: ",name) ; if (!state_write(&sta,string + genalloc_s(resolve_service_t,&gares)[i].state,name)) log_dieusys(LOG_EXIT_SYS,"write state file of: ",name) ;
...@@ -154,12 +150,9 @@ int ssexec_init(int argc, char const *const *argv,char const *const *envp,ssexec ...@@ -154,12 +150,9 @@ int ssexec_init(int argc, char const *const *argv,char const *const *envp,ssexec
resolve_deep_free(DATA_SERVICE, &gares) ; resolve_deep_free(DATA_SERVICE, &gares) ;
/** db already initiated? */ /** db already initiated? */
if (db) if (db) {
{ if (!earlier) {
if (!earlier) if (db_ok(info->livetree.s,info->treename.s)) {
{
if (db_ok(info->livetree.s,info->treename.s))
{
log_warn("db of tree: ",info->treename.s," already initialized") ; log_warn("db of tree: ",info->treename.s," already initialized") ;
goto end ; goto end ;
} }
......
...@@ -76,6 +76,8 @@ int rc_init(ssexec_t *info, char const *const *envp) ...@@ -76,6 +76,8 @@ int rc_init(ssexec_t *info, char const *const *envp)
if (chown(info->livetree.s,info->owner,gidowner) < 0){ log_warnusys("chown directory: ",info->livetree.s) ; goto err ; } if (chown(info->livetree.s,info->owner,gidowner) < 0){ log_warnusys("chown directory: ",info->livetree.s) ; goto err ; }
} }
if (!create_live(info)) { log_warnusys("create live state") ; goto err ; }
if (!sa_pointo(&sares,info,SS_NOTYPE,SS_RESOLVE_SRC)) if (!sa_pointo(&sares,info,SS_NOTYPE,SS_RESOLVE_SRC))
{ log_warnu("set revolve pointer to source") ; goto err ; } { log_warnu("set revolve pointer to source") ; goto err ; }
...@@ -87,7 +89,7 @@ int rc_init(ssexec_t *info, char const *const *envp) ...@@ -87,7 +89,7 @@ int rc_init(ssexec_t *info, char const *const *envp)
empty = 1 ; empty = 1 ;
goto end ; goto end ;
} }
if (!create_live(info)) { log_warnusys("create live state") ; goto err ; }
memcpy(svdir,info->tree.s,info->tree.len) ; memcpy(svdir,info->tree.s,info->tree.len) ;
memcpy(svdir + info->tree.len ,SS_SVDIRS ,SS_SVDIRS_LEN) ; memcpy(svdir + info->tree.len ,SS_SVDIRS ,SS_SVDIRS_LEN) ;
......
...@@ -35,8 +35,6 @@ int create_live(ssexec_t *info) ...@@ -35,8 +35,6 @@ int create_live(ssexec_t *info)
int r ; int r ;
resolve_tree_t tres = RESOLVE_TREE_ZERO ;
resolve_wrapper_t_ref wres = resolve_set_struct(DATA_TREE, &tres) ;
char ownerstr[UID_FMT] ; char ownerstr[UID_FMT] ;
size_t ownerlen = uid_fmt(ownerstr,info->owner) ; size_t ownerlen = uid_fmt(ownerstr,info->owner) ;
size_t stelen = info->live.len + SS_STATE_LEN + 1 + ownerlen + 1 + info->treename.len ; size_t stelen = info->live.len + SS_STATE_LEN + 1 + ownerlen + 1 + info->treename.len ;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment