@hashgraph/solo
Version:
An opinionated CLI tool to deploy and manage private Hedera Networks.
102 lines (101 loc) • 4.74 kB
TypeScript
import { type K8Factory } from '../../integration/kube/k8-factory.js';
import { type LockHolder } from './lock-holder.js';
import { type NamespaceName } from '../../types/namespace/namespace-name.js';
import { type Duration } from '../time/duration.js';
export interface Lock {
readonly k8Factory: K8Factory;
readonly renewalService: LockRenewalService;
readonly leaseName: string;
readonly lockHolder: LockHolder;
readonly namespace: NamespaceName;
readonly durationSeconds: number;
scheduleId: number;
/**
* Acquires the lock. If the lock is already acquired, it checks if the lock is expired or held by the same process.
* If the lock is expired, it creates a new lock. If the lock is held by the same process, it renews the lock.
* If the lock is held by another process, then an exception is thrown.
*
* @throws LeaseAcquisitionError - If the lock is already acquired by another process or an error occurs during acquisition.
*/
acquire(): Promise<void>;
/**
* Attempts to acquire the lock, by calling the acquire method. If an exception is thrown, it is caught and false is returned.
* If the lock is successfully acquired, true is returned; otherwise, false is returned.
*
* @returns true if the lock is successfully acquired; otherwise, false.
*/
tryAcquire(): Promise<boolean>;
/**
* Renews the lock. If the lock is expired or held by the same process, it creates or renews the lock.
* If the lock is held by another process, then an exception is thrown.
*
* @throws LeaseAcquisitionError - If the lock is already acquired by another process or an error occurs during renewal.
*/
renew(): Promise<void>;
/**
* Attempts to renew the lock, by calling the renew method. If an exception is thrown, it is caught and false is returned.
* If the lock is successfully renewed, true is returned; otherwise, false is returned.
*
* @returns true if the lock is successfully renewed; otherwise, false.
*/
tryRenew(): Promise<boolean>;
/**
* Releases the lock. If the lock is expired or held by the same process, it deletes the lock.
* If the lock is held by another process, then an exception is thrown.
*
* @param immediate - If true, the safe sleep period is skipped and the lock is released immediately
* @throws LeaseRelinquishmentError - If the lock is already acquired by another process or an error occurs during relinquishment.
*/
release(immediate?: boolean): Promise<void>;
/**
* Attempts to relock the lock, by calling the relock method. If an exception is thrown, it is caught and false is returned.
* If the lock is successfully released, true is returned; otherwise, false is returned.
*
* @returns true if the lock is successfully released; otherwise, false.
*/
tryRelease(): Promise<boolean>;
/**
* Checks if the lock is acquired. If the lock is acquired and not expired, it returns true; otherwise, false.
*
* @returns true if the lock is acquired and not expired; otherwise, false.
*/
isAcquired(): Promise<boolean>;
/**
* Checks if the lock is expired. If the lock is expired, it returns true; otherwise, false.
* This method does not verify if the lock is acquired by the current process.
*
* @returns true if the lock is expired; otherwise, false.
*/
isExpired(): Promise<boolean>;
}
export interface LockRenewalService {
/**
* Determines if a lease renewal is scheduled.
* @param scheduleId - the unique identifier of the scheduled lease renewal.
* @returns true if the lease renewal is scheduled; false otherwise.
*/
isScheduled(scheduleId: number): Promise<boolean>;
/**
* Schedules a lease renewal.
* @param lease - the lease to be renewed.
* @returns the unique identifier of the scheduled lease renewal.
*/
schedule(lease: Lock): Promise<number>;
/**
* Cancels a scheduled lease renewal.
* @param scheduleId - the unique identifier of the scheduled lease renewal.
* @returns true if the lease renewal was successfully cancelled; false otherwise.
*/
cancel(scheduleId: number): Promise<boolean>;
/**
* Cancels all scheduled lease renewals.
* @returns a map of the unique identifiers of the scheduled lease renewals and their cancellation status.
*/
cancelAll(): Promise<Map<number, boolean>>;
/**
* Calculates the delay before the next lease renewal.
* @param lease - the lease to be renewed.
* @returns the delay in milliseconds.
*/
calculateRenewalDelay(lease: Lock): Duration;
}