public static CallContext unregister() {
    CallContext context = s_currentContext.get();
    if (context == null) {
      return null;
    }
    s_currentContext.remove();
    if (s_logger.isTraceEnabled()) {
      s_logger.trace("Unregistered: " + context);
    }
    String contextId = context.getContextId();
    String sessionIdOnStack = null;
    String sessionIdPushedToNDC = "ctx-" + UuidUtils.first(contextId);
    while ((sessionIdOnStack = NDC.pop()) != null) {
      if (sessionIdPushedToNDC.equals(sessionIdOnStack)) {
        break;
      }
      if (s_logger.isTraceEnabled()) {
        s_logger.trace("Popping from NDC: " + contextId);
      }
    }

    Stack<CallContext> stack = s_currentContextStack.get();
    stack.pop();

    if (!stack.isEmpty()) {
      s_currentContext.set(stack.peek());
    }

    return context;
  }
 public static CallContext registerSystemCallContextOnceOnly() {
   try {
     CallContext context = s_currentContext.get();
     if (context == null) {
       return register(User.UID_SYSTEM, Account.ACCOUNT_ID_SYSTEM);
     }
     assert context.getCallingUserId() == User.UID_SYSTEM
         : "You are calling a very specific method that registers a one time system context.  This method is meant for background threads that does processing.";
     return context;
   } catch (Exception e) {
     s_logger.fatal(
         "Exiting the system because we're unable to register the system call context.", e);
     System.exit(1);
     throw new CloudRuntimeException("Should never hit this");
   }
 }
 public static CallContext current() {
   return s_currentContext.get();
 }