/* * 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.outrigger; import net.jini.id.Uuid; /** * Methods that log an operation. These are used * when writing to the store. <p> * * The <code>writeOp</code> and <code>takeOp</code> methods can * be called under a transaction. For these methods an in-progress * transaction is indicated by a non-null <code>txnId</code> parameter. * The <code>txnId</code> is an identifier for a transaction. * Each unique transaction must have a unique identifier and all * write or take operations under the same transaction should * use the same identifier. The store does not interpret the * identifier in any way. <p> * * <i>Note: Because the transaction identifier * must be unique, it can not be <code>ServerTransaction.id</code>. * Instead this identifier is the <code>Txn</code> ID. </i> <p> * * When a transaction is closed, the <code>prepareOp</code>, * <code>commitOp</code>, and <code>abortOp</code> methods are * passed the identifier (<code>txnId</code>) for that transaction. If * <code>prepareOp</code> is called and there is a restart, the * <code>txnId</code> passed to the write and take operations will * be passed back to the server via the <code>Recover.recoverWrite</code> * and <code>Recover.recoverTake</code> methods. Likewise the same * identifier will be passed to <code>Recover.recoverTransaction</code>. * * @see Store * @see Recover * * @author Sun Microsystems, Inc. * */ public interface LogOps { /** * Log a server boot (first time start or any reactivation). * * @see Recover#recoverSessionId * * @param time stamp for this boot * * @param sessionId of this boot */ void bootOp(long time, long sessionId); /** * Log an update to the join state * * @see Recover#recoverJoinState * * @param state to be logged * */ void joinStateOp(StorableObject state); /** * Log a <code>write</code> operation. If the operation was * performed under a transaction the <code>txnId</code> is * the identifier for that transaction. * * @see Recover#recoverWrite * * @param entry to be logged * * @param txnId transaction identifier or <code>null</code> if * no transaction is active for this write */ void writeOp(StorableResource entry, Long txnId); /** * Log a batch <code>write</code> operation. If the operation was * performed under a transaction the <code>txnId</code> is * the identifier for that transaction. * * @see Recover#recoverWrite * @param entries to be logged * @param txnId transaction identifier or <code>null</code> if * no transaction is active for this write */ void writeOp(StorableResource entries[], Long txnId); /** * Log a <code>take</code> operation. If the operation was * performed under a transaction the <code>txnId</code> is * the identifier for that transaction. * * @see Recover#recoverTake * * @param cookie ID identifying the entry target to be taken * * @param txnId transaction identifier or <code>null</code> if * no transaction is active for this take */ void takeOp(Uuid cookie, Long txnId); /** * Log a batch <code>take</code> operation. If the operation was * performed under a transaction the <code>txnId</code> is * the identifier for that transaction. * * @see Recover#recoverTake * * @param cookies IDs identifying the entries to be taken * * @param txnId transaction identifier or <code>null</code> if * no transaction is active for this take */ void takeOp(Uuid[] cookies, Long txnId); /** * Log a <code>notify</code> operation. Notifications under * transactions are lost at the end of the transaction, so the * only ones that are logged are those that are under no * transaction. * * @see Recover#recoverRegister * * @param registration to be logged * * @param type of registration, passed back via <code>type</code> * parameter of corresponding <code>recoverRegister</code> * call * * @param templates associated with this registration */ void registerOp(StorableResource registration, String type, StorableObject[] templates); /** * Log a <code>renew</code> operation. We use the expiration, not * the extension, because we don't want to calculate the * expiration relative to when we read the log -- we want to use * the exact expiration granted. * * @see StoredResource * * @param cookie ID of the entry or registration associated with this * renew * * @param expiration time */ void renewOp(Uuid cookie, long expiration); /** * Log a <code>cancel</code> and entry or registration. The entry or * registration associated with <code>cookie</code> will no longer * be recoverable and may be removed from the log records. * * @param cookie ID of the entry or registration to cancel * @param expired is true if the cancel was due to a lease expiration */ void cancelOp(Uuid cookie, boolean expired); /** * Log a transaction <code>prepare</code>. If there is a restart * before either <code>commitOp</code> or <code>abortOp</code> is * called for the transaction identified by <code>txnId</code>, * all write and take operations associated with <code>txnId</code> * will be recovered and <code>Recover.recoverTransaction</code> * called with the the same <code>txnId</code>. * * @see Recover#recoverTransaction * * @param txnId identifier of the transaction to be prepared * * @param transaction object associated with this transaction */ void prepareOp(Long txnId, StorableObject transaction); /** * Log a transaction <code>commit</code> or * <code>prepareAndCommit</code>. The store will commit the write * and take operations associated with <code>txnId</code>. A call * to <code>prepareOP</code> is not required for * <code>commitOp</code> to be called. * * @param txnId identifier of the transaction to be committed */ void commitOp(Long txnId); /** * Log a transaction <code>abort</code>. Any write and take operations * associated with <code>txnId</code> will no longer be recoverable * and may be removed from the log records. * * @param txnId identifier of the transaction to be aborted */ void abortOp(Long txnId); /** * Log the <code>Uuid</code> that identifies the space as a whole. * @see Recover#recoverUuid * @param uuid The <code>Uuid</code> to be stored. */ void uuidOp(Uuid uuid); }