def tearDown(self): if not self.is_playback(): for container_name in self.test_containers: try: container = self.bsc.get_container_client(container_name) container.delete_container() except HttpResponseError: try: lease = LeaseClient(container) lease.break_lease(0) container.delete_container() except: pass except: pass return super(StorageContainerTest, self).tearDown()
def process(): action, mutex_url = get_raw_input() # check whether the blob exists, if not quit right away to avoid wasting time blob_client = BlobClient(mutex_url) try: blob_client.get_blob_properties() print("INFO: validated mutex url") except HttpResponseError as e: raise ValueError('please provide an existing and valid blob URL, failed to get properties with error: ' + e) # get a handle on the lease lease_client = LeaseClient(blob_client) if action == UNLOCK: # make the lease free as soon as possible lease_client.break_lease(lease_break_period=1) print(f"INFO: successfully unlocked the mutex!") return # action is lock, attempt to acquire the lease continuously while True: # try to acquire and infinite lease try: lease_client.acquire(lease_duration=-1) # if we get here, the acquire call succeeded # if we don't get here it stalls forever, as expected print(f"INFO: successfully locked the mutex!") return except HttpResponseError: # failed to acquire lease, another agent holds the mutex # sleep a bit (randomly) and try again sleep_period = random.randint(1, 5) print(f"INFO: failed to lock mutex, wait for {sleep_period} and try again") time.sleep(sleep_period)