View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *     http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   */
18  
19  package org.apache.hadoop.hbase.regionserver;
20  
21  import java.io.IOException;
22  import java.util.List;
23  
24  import org.apache.hadoop.hbase.classification.InterfaceAudience;
25  import org.apache.hadoop.fs.Path;
26  import org.apache.hadoop.hbase.monitoring.MonitoredTask;
27  
28  /**
29   * A package protected interface for a store flushing.
30   * A store flush context carries the state required to prepare/flush/commit the store's cache.
31   */
32  @InterfaceAudience.Private
33  interface StoreFlushContext {
34  
35    /**
36     * Prepare for a store flush (create snapshot)
37     *
38     * Requires pausing writes.
39     *
40     * A very short operation.
41     */
42    void prepare();
43  
44    /**
45     * Flush the cache (create the new store file)
46     *
47     * A length operation which doesn't require locking out any function
48     * of the store.
49     *
50     * @throws IOException in case the flush fails
51     */
52    void flushCache(MonitoredTask status) throws IOException;
53  
54    /**
55     * Commit the flush - add the store file to the store and clear the
56     * memstore snapshot.
57     *
58     * Requires pausing scans.
59     *
60     * A very short operation
61     *
62     * @return
63     * @throws IOException
64     */
65    boolean commit(MonitoredTask status) throws IOException;
66  
67    /**
68     * Similar to commit, but called in secondary region replicas for replaying the
69     * flush cache from primary region. Adds the new files to the store, and drops the
70     * snapshot depending on dropMemstoreSnapshot argument.
71     * @param fileNames names of the flushed files
72     * @param dropMemstoreSnapshot whether to drop the prepared memstore snapshot
73     * @throws IOException
74     */
75    void replayFlush(List<String> fileNames, boolean dropMemstoreSnapshot) throws IOException;
76  
77    /**
78     * Abort the snapshot preparation. Drops the snapshot if any.
79     * @throws IOException
80     */
81    void abort() throws IOException;
82  
83    /**
84     * Returns the newly committed files from the flush. Called only if commit returns true
85     * @return a list of Paths for new files
86     */
87    List<Path> getCommittedFiles();
88  }