Package com.sun.jini.norm

Source Code of com.sun.jini.norm.DeformedLeaseList

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.sun.jini.norm;

import net.jini.core.lease.Lease;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/**
* <code>DeformedLeaseList</code> provides a list for keeping track of
* of client lease that could not be fully recovered during log
* recovery.  Unless otherwise noted all the methods in the class are
* not thread safe.
*
* @author Sun Microsystems, Inc.
*/
class DeformedLeaseList {
    /**
     * A list of all the leases we are tracking.
     */
    private Set leases = null;

    /**
     * Add a wrapped client lease to the list of deformed client leases.
     * This method is not thread safe.
     *
     * @param clw a deformed client lease
     */
    void add(ClientLeaseWrapper clw) {
  if (leases == null)
      leases =  new HashSet();
  leases.add(clw);
    }

    /**
     * Remove a lease from the list.  This method is not thread safe.
     *
     * @param clw a deformed client lease
     */
    void remove(ClientLeaseWrapper clw) {
  if (leases != null) {
      leases.remove(clw);
      if (leases.isEmpty()) {
    leases = null;
      }
  }
    }

    /**
     * Query the list to see if the specified client lease is in this list
     * of deformed leases.  If it is, return the existing client lease
     * wrapper for this client lease.  During the query, any client
     * lease wrappers (including the target if found) which are
     * discovered to no longer be deformed will be inserted into the
     * passed table using their associated client lease as a key, and
     * removed from the list of deformed leases. This method is not
     * thread safe.
     *
     * @param clientLease the client lease which may be
     *        referenced by a deformed client lease wrapper
     * @param table a table mapping client leases to client lease
     *        wrappers.  Any client lease wrappers encountered during
     *        the query that are no longer deformed will be placed in
     *        this table.  It is assumed that no other thread is trying
     *        to access this table.
     * @return if it could be found, the client lease wrapper that goes
     *         with <code>cl</code>, <code>null</code> otherwise
     */
    ClientLeaseWrapper query(Lease clientLease, Map table) {
  // Recheck now that we have the lock
  if (leases == null)
      return null;
 
  try {
      for (Iterator i = leases.iterator(); i.hasNext(); ) {
    ClientLeaseWrapper clw = (ClientLeaseWrapper) i.next();
    final Lease candidate = clw.getClientLease();
   
    if (candidate != null) {
        // We've got a live one!, remove it from the
        // deformed list and place it in the table
        i.remove();
        table.put(candidate, clw);

        // Is it the one we are looking for?
        if (candidate.equals(clientLease)) {
      return clw;
        }
    }
      }
  } finally {
      // Can we GC the leases set?
      if (leases.isEmpty())
    leases = null;
  }

  return null;
    }
}
TOP

Related Classes of com.sun.jini.norm.DeformedLeaseList

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.