File: //lib/python3/dist-packages/uaclient/__pycache__/lock.cpython-38.pyc
U
��Jh� � @ s� d dl Z d dlZd dlZd dlmZ d dlmZmZmZ d dl m
Z
mZmZ d dl
mZ d dlmZmZ d dlmZ d dlmZ e �e�e��ZG d d
� d
e
�Zeeeddd
�ej�Zeeef d�dd�Zdd� Z G dd� d�Z!dS )� N)�Tuple)�
exceptions�system�util)�
DataObject�Field�StringDataValue)�notices)�DataObjectFile�DataObjectFileFormat)�UAFile)�Noticec @ s0 e Zd Zede�ede�gZeed�dd�ZdS )�LockData�lock_pid�lock_holder�r r c C s || _ || _d S �Nr )�selfr r � r �//usr/lib/python3/dist-packages/uaclient/lock.py�__init__ s zLockData.__init__N)�__name__�
__module__�__qualname__r r Zfields�strr r r r r r s �r �lockF)Zprivate)�returnc C s� zt �� } W n$ tjk
r0 tjt jd��Y nX d}| s>|S | j}| j}zt� d|g� t
|�|fW S tjk
r� t�
� s�t�d||� t
|�|f Y S t�d||� t�t j� | Y S X dS )a Return lock info if lock file is present the lock is active.
If process claiming the lock is no longer present, remove the lock file
and log a warning.
:return: A tuple (pid, string describing lock holder)
If no active lock, pid will be -1.
)Zlock_file_path)���� Zpsz.Found stale lock file previously held by %s:%sz1Removing stale lock file previously held by %s:%sN)�lock_data_file�readr ZInvalidFileFormatErrorZInvalidLockFile�pathr r r Zsubp�intZProcessExecutionErrorr Zwe_are_currently_root�LOG�debugZwarningZensure_file_absent)Z
lock_data_objZno_lockr r r r r �check_lock_info"