/** * Returns a worker id for the given worker. * * @param workerNetAddress the worker {@link WorkerNetAddress} * @return the worker id for this worker */ public long getWorkerId(WorkerNetAddress workerNetAddress) { // TODO(gene): This NetAddress cloned in case thrift re-uses the object. Does thrift re-use it? synchronized (mWorkers) { if (mWorkers.contains(mAddressIndex, workerNetAddress)) { // This worker address is already mapped to a worker id. long oldWorkerId = mWorkers.getFirstByField(mAddressIndex, workerNetAddress).getId(); LOG.warn("The worker {} already exists as id {}.", workerNetAddress, oldWorkerId); return oldWorkerId; } if (mLostWorkers.contains(mAddressIndex, workerNetAddress)) { // this is one of the lost workers final MasterWorkerInfo lostWorkerInfo = mLostWorkers.getFirstByField(mAddressIndex, workerNetAddress); final long lostWorkerId = lostWorkerInfo.getId(); LOG.warn("A lost worker {} has requested its old id {}.", workerNetAddress, lostWorkerId); // Update the timestamp of the worker before it is considered an active worker. lostWorkerInfo.updateLastUpdatedTimeMs(); mWorkers.add(lostWorkerInfo); mLostWorkers.remove(lostWorkerInfo); return lostWorkerId; } // Generate a new worker id. long workerId = mNextWorkerId.getAndIncrement(); mWorkers.add(new MasterWorkerInfo(workerId, workerNetAddress)); LOG.info("getWorkerId(): WorkerNetAddress: {} id: {}", workerNetAddress, workerId); return workerId; } }
/** * Removes the given inode from the directory. * * @param child the Inode to remove * @return true if the inode was removed, false otherwise */ public synchronized boolean removeChild(Inode child) { return mChildren.remove(child); }