Lines Matching refs:inst

105 method_record_start(restarter_inst_t *inst)  in method_record_start()  argument
107 int index = inst->ri_start_index++ % RINST_START_TIMES; in method_record_start()
109 inst->ri_start_time[index] = gethrtime(); in method_record_start()
125 method_rate_critical(restarter_inst_t *inst) in method_rate_critical() argument
129 uint_t n = inst->ri_start_index; in method_rate_critical()
139 if (instance_is_wait_style(inst)) in method_rate_critical()
147 if (scf_read_propvec(inst->ri_i.i_fmri, "startd", in method_rate_critical()
156 if (inst->ri_start_index < critical_failure_count) in method_rate_critical()
160 (inst->ri_start_time[(n - 1) % critical_failure_count] - in method_rate_critical()
161 inst->ri_start_time[n % critical_failure_count]) / in method_rate_critical()
173 method_is_transient(restarter_inst_t *inst, int type) in method_is_transient() argument
175 if (instance_is_transient_style(inst) || type != METHOD_START) in method_is_transient()
187 method_store_contract(restarter_inst_t *inst, int type, ctid_t *cid) in method_store_contract() argument
193 uu_die("%s: Couldn't get new contract's id", inst->ri_i.i_fmri); in method_store_contract()
195 primary = !method_is_transient(inst, type); in method_store_contract()
198 if (inst->ri_i.i_transient_ctid != 0) { in method_store_contract()
201 "was set to %ld\n", inst->ri_i.i_fmri, in method_store_contract()
202 inst->ri_i.i_transient_ctid); in method_store_contract()
205 inst->ri_i.i_transient_ctid = *cid; in method_store_contract()
207 if (inst->ri_i.i_primary_ctid != 0) { in method_store_contract()
212 method_remove_contract(inst, B_TRUE, B_FALSE); in method_store_contract()
215 if (inst->ri_i.i_primary_ctid != 0) { in method_store_contract()
218 "was set to %ld\n", inst->ri_i.i_fmri, in method_store_contract()
219 inst->ri_i.i_primary_ctid); in method_store_contract()
222 inst->ri_i.i_primary_ctid = *cid; in method_store_contract()
223 inst->ri_i.i_primary_ctid_stopped = 0; in method_store_contract()
226 "%s.\n", *cid, inst->ri_i.i_fmri); in method_store_contract()
228 contract_hash_store(*cid, inst->ri_id); in method_store_contract()
232 if (inst->ri_mi_deleted) in method_store_contract()
235 r = restarter_store_contract(inst->ri_m_inst, *cid, primary ? in method_store_contract()
242 inst->ri_mi_deleted = B_TRUE; in method_store_contract()
246 libscf_handle_rebind(scf_instance_handle(inst->ri_m_inst)); in method_store_contract()
250 libscf_reget_instance(inst); in method_store_contract()
258 inst->ri_i.i_fmri, *cid); in method_store_contract()
278 method_remove_contract(restarter_inst_t *inst, boolean_t primary, in method_remove_contract() argument
281 ctid_t * const ctidp = primary ? &inst->ri_i.i_primary_ctid : in method_remove_contract()
282 &inst->ri_i.i_transient_ctid; in method_remove_contract()
289 primary ? "primary" : "transient", *ctidp, inst->ri_i.i_fmri); in method_remove_contract()
295 if (inst->ri_mi_deleted) { in method_remove_contract()
300 r = restarter_remove_contract(inst->ri_m_inst, *ctidp, primary ? in method_remove_contract()
307 inst->ri_mi_deleted = B_TRUE; in method_remove_contract()
311 libscf_handle_rebind(scf_instance_handle(inst->ri_m_inst)); in method_remove_contract()
315 libscf_reget_instance(inst); in method_remove_contract()
323 "%s.\n", inst->ri_i.i_fmri, *ctidp, strerror(r)); in method_remove_contract()
350 method_ready_contract(restarter_inst_t *inst, int type, in method_ready_contract() argument
364 iswait = instance_is_wait_style(inst); in method_ready_contract()
365 istrans = method_is_transient(inst, type); in method_ready_contract()
404 if (type == METHOD_START && inst->ri_i.i_primary_ctid != 0) { in method_ready_contract()
405 ret = ct_pr_tmpl_set_transfer(tmpl, inst->ri_i.i_primary_ctid); in method_ready_contract()
412 method_remove_contract(inst, B_TRUE, B_TRUE); in method_ready_contract()
413 if (inst->ri_mi_deleted) { in method_ready_contract()
427 err = ct_pr_tmpl_set_svc_fmri(tmpl, inst->ri_i.i_fmri); in method_ready_contract()
445 exec_method(const restarter_inst_t *inst, int type, const char *method, in exec_method() argument
455 if (inst->ri_utmpx_prefix[0] != '\0' && inst->ri_utmpx_prefix != NULL) in exec_method()
456 (void) utmpx_mark_init(getpid(), inst->ri_utmpx_prefix); in exec_method()
458 setlog(inst->ri_logstem); in exec_method()
459 log_instance(inst, B_FALSE, "Executing %s method (\"%s\").", in exec_method()
468 log_instance(inst, B_FALSE, in exec_method()
473 log_instance(inst, B_FALSE, in exec_method()
476 log_instance(inst, B_FALSE, "%s: a resource " in exec_method()
479 log_instance(inst, B_FALSE, "%s: a system " in exec_method()
497 log_instance(inst, B_FALSE, "%s: the pool " in exec_method()
502 log_instance(inst, B_FALSE, "%s: the " in exec_method()
507 log_instance(inst, B_FALSE, "%s: pool name " in exec_method()
534 log_instance(inst, B_FALSE, "%s: %s (\"%s\")", in exec_method()
572 log_instance(inst, B_FALSE, "Out of memory."); in exec_method()
577 log_instance(inst, B_FALSE, "Missing passwd entry for " in exec_method()
592 nenv = set_smf_env(mcp->env, mcp->env_sz, NULL, inst, in exec_method()
603 write_status(restarter_inst_t *inst, const char *mname, int stat) in write_status() argument
608 if (inst->ri_mi_deleted) in write_status()
611 r = libscf_write_method_status(inst->ri_m_inst, mname, stat); in write_status()
617 libscf_reget_instance(inst); in write_status()
621 inst->ri_mi_deleted = 1; in write_status()
629 inst->ri_i.i_fmri, strerror(r)); in write_status()
676 restarter_inst_t *inst = *instp; in method_run() local
677 int id = inst->ri_id; in method_run()
680 assert(MUTEX_HELD(&inst->ri_lock)); in method_run()
681 assert(instance_in_transition(inst)); in method_run()
683 if (inst->ri_mi_deleted) in method_run()
692 inst->ri_pre_online_hook(); in method_run()
694 h = scf_instance_handle(inst->ri_m_inst); in method_run()
698 scf_instance_get_snapshot(inst->ri_m_inst, "running", snap) != 0) { in method_run()
702 inst->ri_i.i_fmri, mname); in method_run()
712 r = libscf_note_method_log(inst->ri_m_inst, st->st_log_prefix, in method_run()
713 inst->ri_logstem); in method_run()
717 inst->ri_i.i_fmri, strerror(r)); in method_run()
720 if ((method = libscf_get_method(h, type, inst, snap, &restart_on, in method_run()
725 inst->ri_i.i_fmri, mname); in method_run()
727 log_instance(inst, B_TRUE, "No '%s' method " in method_run()
730 log_instance(inst, B_TRUE, "Method property " in method_run()
737 inst->ri_i.i_fmri, mname); in method_run()
738 log_instance(inst, B_TRUE, "Method property '%s/exec " in method_run()
745 inst->ri_i.i_fmri); in method_run()
752 if (type == METHOD_STOP && (!instance_is_transient_style(inst))) { in method_run()
753 if (inst->ri_i.i_primary_ctid == 0) { in method_run()
757 inst->ri_i.i_fmri); in method_run()
761 if ((ctfd = contract_open(inst->ri_i.i_primary_ctid, "process", in method_run()
764 log_instance(inst, B_TRUE, "Could not open service " in method_run()
766 inst->ri_i.i_primary_ctid); in method_run()
773 inst->ri_i.i_fmri); in method_run()
775 log_instance(inst, B_TRUE, "Executing %s method (null).", in method_run()
779 write_status(inst, mname, 0); in method_run()
786 if (inst->ri_i.i_primary_ctid == 0) { in method_run()
788 inst->ri_i.i_fmri); in method_run()
789 log_instance(inst, B_TRUE, "Invalid use of \":kill\" " in method_run()
797 inst->ri_i.i_fmri, sig); in method_run()
799 log_instance(inst, B_TRUE, "Executing %s method (:kill).", in method_run()
802 if (contract_kill(inst->ri_i.i_primary_ctid, sig, in method_run()
803 inst->ri_i.i_fmri) != 0) { in method_run()
811 inst->ri_i.i_fmri, method); in method_run()
814 inst->ri_m_inst, snap, mname, method, &mcp); in method_run()
817 log_instance(inst, B_TRUE, "%s", m_error->msg); in method_run()
823 r = method_ready_contract(inst, type, restart_on, cte_mask); in method_run()
826 assert(inst->ri_mi_deleted); in method_run()
837 "to root-accessible libraries\n", inst->ri_i.i_fmri); in method_run()
843 if (instance_is_wait_style(inst) && type == METHOD_START) { in method_run()
856 log_instance(inst, B_TRUE, "Missing start method (%s), " in method_run()
871 method_record_start(inst); in method_run()
872 if (method_rate_critical(inst) && in method_run()
873 !instance_is_wait_style(inst)) { in method_run()
874 log_instance(inst, B_TRUE, "Restarting too quickly, " in method_run()
885 exec_method(inst, type, method, mcp, need_session); in method_run()
896 inst->ri_i.i_fmri, method, strerror(forkerr)); in method_run()
907 method_store_contract(inst, type, &ctid); in method_run()
915 if (type == METHOD_START && !inst->ri_mi_deleted) in method_run()
916 (void) libscf_write_start_pid(inst->ri_m_inst, pid); in method_run()
918 if (instance_is_wait_style(inst) && type == METHOD_START) { in method_run()
920 if (wait_register(pid, inst->ri_i.i_fmri, 1, 0)) { in method_run()
923 inst->ri_i.i_fmri, pid); in method_run()
927 write_status(inst, mname, 0); in method_run()
942 if (timeout != METHOD_TIMEOUT_INFINITE && !is_timeout_ovr(inst)) in method_run()
943 timeout_insert(inst, ctid, timeout); in method_run()
948 MUTEX_UNLOCK(&inst->ri_lock); in method_run()
957 inst = inst_lookup_by_id(id); in method_run()
963 assert(inst != NULL); in method_run()
964 *instp = inst; in method_run()
966 if (inst->ri_timeout != NULL && inst->ri_timeout->te_fired) in method_run()
969 timeout_remove(inst, ctid); in method_run()
973 inst->ri_i.i_fmri, WEXITSTATUS(ret_status)); in method_run()
978 mname, inst->ri_i.i_fmri, strerror(err)); in method_run()
984 write_status(inst, mname, ret_status); in method_run()
1005 inst->ri_i.i_fmri, method, buf); in method_run()
1006 log_instance(inst, B_TRUE, "Method \"%s\" " in method_run()
1011 inst->ri_i.i_fmri, method, in method_run()
1013 log_instance(inst, B_TRUE, "Method \"%s\" " in method_run()
1026 inst->ri_i.i_fmri, method, WEXITSTATUS(ret_status)); in method_run()
1029 log_instance(inst, B_TRUE, "Method \"%s\" exited with status " in method_run()
1048 if (type == METHOD_STOP && (!instance_is_transient_style(inst)) && in method_run()
1049 !(contract_is_empty(inst->ri_i.i_primary_ctid))) { in method_run()
1053 timeout_insert(inst, inst->ri_i.i_primary_ctid, in method_run()
1067 if (contract_is_empty(inst->ri_i.i_primary_ctid)) in method_run()
1072 if (inst->ri_timeout->te_fired) in method_run()
1075 timeout_remove(inst, inst->ri_i.i_primary_ctid); in method_run()
1083 transient = method_is_transient(inst, type); in method_run()
1086 method_remove_contract(inst, !transient, B_TRUE); in method_run()
1117 restarter_inst_t *inst; in method_thread() local
1129 inst = inst_lookup_by_id(info->sf_id); in method_thread()
1131 assert(inst->ri_method_thread != 0); in method_thread()
1132 assert(instance_in_transition(inst) == 1); in method_thread()
1140 method_names[info->sf_method_type], inst->ri_i.i_fmri); in method_thread()
1146 switch (r = libscf_fmri_get_instance(local_handle, inst->ri_i.i_fmri, in method_thread()
1160 (void) restarter_instance_update_states(local_handle, inst, in method_thread()
1161 inst->ri_i.i_state, RESTARTER_STATE_NONE, RERR_NONE, in method_thread()
1171 inst->ri_m_inst = s_inst; in method_thread()
1172 inst->ri_mi_deleted = B_FALSE; in method_thread()
1176 log_transition(inst, START_REQUESTED); in method_thread()
1178 r = method_run(&inst, info->sf_method_type, &exit_code); in method_thread()
1183 assert(inst->ri_i.i_next_state != RESTARTER_STATE_NONE); in method_thread()
1193 inst->ri_i.i_primary_ctid != 0) { in method_thread()
1194 if (inst->ri_i.i_next_state == RESTARTER_STATE_OFFLINE) in method_thread()
1195 inst->ri_i.i_primary_ctid_stopped = 1; in method_thread()
1197 method_remove_contract(inst, B_TRUE, B_TRUE); in method_thread()
1209 (void) restarter_instance_update_states(local_handle, inst, in method_thread()
1210 inst->ri_i.i_next_state, RESTARTER_STATE_NONE, in method_thread()
1213 (void) update_fault_count(inst, FAULT_COUNT_RESET); in method_thread()
1236 if (retryable && update_fault_count(inst, FAULT_COUNT_INCR) != 1) in method_thread()
1241 log_transition(inst, START_FAILED_REPEATEDLY); in method_thread()
1243 log_transition(inst, START_FAILED_TIMEOUT_FATAL); in method_thread()
1245 log_transition(inst, START_FAILED_CONFIGURATION); in method_thread()
1247 log_transition(inst, START_FAILED_FATAL); in method_thread()
1249 log_transition(inst, START_FAILED_OTHER); in method_thread()
1259 (void) restarter_instance_update_states(local_handle, inst, in method_thread()
1263 if (!method_is_transient(inst, info->sf_method_type) && in method_thread()
1264 inst->ri_i.i_primary_ctid != 0) in method_thread()
1265 method_remove_contract(inst, B_TRUE, B_TRUE); in method_thread()
1268 inst->ri_method_thread = 0; in method_thread()
1274 (void) pthread_cond_broadcast(&inst->ri_method_cv); in method_thread()
1275 MUTEX_UNLOCK(&inst->ri_lock); in method_thread()