Ejemplo n.º 1
0
/* Put the process PID into controller directory DIR.  */
static bool
set_pid_cgroup(pid_t pid, char *dir)
{
   char path[SGE_PATH_MAX], spid[PID_BSIZE];
   int ret;
   bool is_admin, error;

   DENTER(TOP_LAYER, "set_pid_cgroup");
   if (!pid) pid = getpid();
   snprintf(spid, sizeof spid, pid_t_fmt, pid);
   build_path(path, dir, "tasks");
   sge_running_as_admin_user(&error, &is_admin);
   if (error) {
      CRITICAL((SGE_EVENT, "Can't get admin user"));
      abort();
   }
   /* We can't move tasks unless we have permission to signal them,
      and we need sgeadmin permission for the filesystem.  */
   sge_seteuid(SGE_SUPERUSER_UID);
   errno = 0;
   ret = sge_string2file(spid, strlen(spid), path);
   if (ret != 0)
      WARNING((SGE_EVENT, "Can't put task in controller "SFN": "SFN,
               dir, strerror(errno)));
   if (is_admin)
      ret = sge_switch2admin_user();
   else
      ret = sge_switch2start_user();
   if (ret != 0) {
      CRITICAL((SGE_EVENT, "Can't switch user"));
      DEXIT;
      abort();
   }
   DRETURN(ret ? false : true);
}
Ejemplo n.º 2
0
/* Write string RECORD to the task's GROUP controller file CFILE with
   MODE copy or append.  For a cpuset, add "cpuset." prefix to CFILE if
   necessary.  */
bool
write_to_shepherd_cgroup(cgroup_t group, const char *cfile, const char *record, u_long32 job, u_long32 task, pid_t pid)
{
   char path[SGE_PATH_MAX], buf[64], *prefix = "";

   if (!get_cgroup_job_dir(group, path, sizeof path, job, task))
      return false;
   if (cg_cpuset == group && cpuset_prefix
       && strncmp("cpuset.", cfile, 7) != 0)
      prefix = "cpuset.";
   snprintf(buf, sizeof buf, "/"pid_t_fmt"/%s%s", pid, prefix, cfile);
   sge_strlcat(path, buf, sizeof path);
   return sge_string2file(record, strlen(record), path) == 0;
}
Ejemplo n.º 3
0
static void qmonRQSGetText(Widget tw, lList *rqs_list, lList **alpp)
{
   char *text = NULL;
   lList *new_rqs_list = NULL;
   char filename[SGE_PATH_MAX] = "";
   size_t len = 0;
   bool ret = false;
   bool ignore_unchanged_message = false;
   dstring sge_tmpnam_error = DSTRING_INIT;

   DENTER(GUI_LAYER, "qmonRQSGetText");

   if (sge_tmpnam(filename, &sge_tmpnam_error) == NULL) {
      if (sge_dstring_get_string(&sge_tmpnam_error) != NULL) {
         answer_list_add(alpp, sge_dstring_get_string(&sge_tmpnam_error), STATUS_ERROR1, ANSWER_QUALITY_ERROR);
      } else {
         answer_list_add(alpp, MSG_POINTER_NULLPARAMETER, STATUS_ERROR1, ANSWER_QUALITY_ERROR);
      }
      sge_dstring_free(&sge_tmpnam_error);
      DEXIT;
      return;
   }
   sge_dstring_free(&sge_tmpnam_error);

   /*
   ** allocates a string
   */
   text = XmTextGetString(tw);
   len = strlen(text);
   ret = sge_string2file(text, len, filename);
   XtFree(text);

   new_rqs_list = spool_flatfile_read_list(alpp, RQS_Type, RQS_fields,
                                            NULL, true, 
                                            &qconf_rqs_sfi,
                                            SP_FORM_ASCII, NULL, filename);
   if (answer_list_output(alpp)) {
      lFreeList(&new_rqs_list);
   }

   if (new_rqs_list != NULL) {
      if (ignore_unchanged_message || object_list_has_differences(new_rqs_list, alpp, rqs_list, false)) {
         ret = true;
      } else {
         lFreeList(&new_rqs_list);
         answer_list_add(alpp, MSG_FILE_NOTCHANGED,
                         STATUS_ERROR1, ANSWER_QUALITY_ERROR);
      }
   } else {
      answer_list_add(alpp, MSG_FILE_ERRORREADINGINFILE,
                      STATUS_ERROR1, ANSWER_QUALITY_ERROR);
   }

   unlink(filename);

   if (ret) {
      ret = rqs_add_del_mod_via_gdi(ctx, new_rqs_list, alpp, SGE_GDI_REPLACE);
   }

   lFreeList(&new_rqs_list);
   DEXIT;
}