-
Notifications
You must be signed in to change notification settings - Fork 1.9k
/
IgfsSecondaryFileSystem.java
195 lines (179 loc) · 7.92 KB
/
IgfsSecondaryFileSystem.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
/*
* 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 org.apache.ignite.igfs.secondary;
import java.io.OutputStream;
import java.util.Collection;
import java.util.Map;
import org.apache.ignite.IgniteException;
import org.apache.ignite.igfs.IgfsFile;
import org.apache.ignite.igfs.IgfsPath;
import org.jetbrains.annotations.Nullable;
/**
* Secondary file system interface.
*/
public interface IgfsSecondaryFileSystem {
/**
* Checks if the specified path exists.
*
* @param path Path to check for existence.
* @return {@code True} if such file exists, otherwise - {@code false}.
* @throws IgniteException In case of error.
*/
public boolean exists(IgfsPath path);
/**
* Updates file information for the specified path. Existent properties, not listed in the passed collection,
* will not be affected. Other properties will be added or overwritten. Passed properties with {@code null} values
* will be removed from the stored properties or ignored if they don't exist in the file info.
* <p>
* When working in {@code DUAL_SYNC} or {@code DUAL_ASYNC} modes only the following properties will be propagated
* to the secondary file system:
* <ul>
* <li>{@code usrName} - file owner name;</li>
* <li>{@code grpName} - file owner group;</li>
* <li>{@code permission} - Unix-style string representing file permissions.</li>
* </ul>
*
* @param path File path to set properties for.
* @param props Properties to update.
* @return File information for specified path or {@code null} if such path does not exist.
* @throws IgniteException In case of error.
*/
public IgfsFile update(IgfsPath path, Map<String, String> props) throws IgniteException;
/**
* Renames/moves a file.
* <p>
* You are free to rename/move data files as you wish, but directories can be only renamed.
* You cannot move the directory between different parent directories.
* <p>
* Examples:
* <ul>
* <li>"/work/file.txt" => "/home/project/Presentation Scenario.txt"</li>
* <li>"/work" => "/work-2012.bkp"</li>
* <li>"/work" => "<strike>/backups/work</strike>" - such operation is restricted for directories.</li>
* </ul>
*
* @param src Source file path to rename.
* @param dest Destination file path. If destination path is a directory, then source file will be placed
* into destination directory with original name.
* @throws IgniteException In case of error.
* @throws org.apache.ignite.igfs.IgfsPathNotFoundException If source file doesn't exist.
*/
public void rename(IgfsPath src, IgfsPath dest) throws IgniteException;
/**
* Deletes file.
*
* @param path File path to delete.
* @param recursive Delete non-empty directories recursively.
* @return {@code True} in case of success, {@code false} otherwise.
* @throws IgniteException In case of error.
*/
public boolean delete(IgfsPath path, boolean recursive) throws IgniteException;
/**
* Creates directories under specified path.
*
* @param path Path of directories chain to create.
* @throws IgniteException In case of error.
*/
public void mkdirs(IgfsPath path) throws IgniteException;
/**
* Creates directories under specified path with the specified properties.
*
* @param path Path of directories chain to create.
* @param props Metadata properties to set on created directories.
* @throws IgniteException In case of error.
*/
public void mkdirs(IgfsPath path, @Nullable Map<String, String> props) throws IgniteException;
/**
* Lists file paths under the specified path.
*
* @param path Path to list files under.
* @return List of files under the specified path.
* @throws IgniteException In case of error.
* @throws org.apache.ignite.igfs.IgfsPathNotFoundException If path doesn't exist.
*/
public Collection<IgfsPath> listPaths(IgfsPath path) throws IgniteException;
/**
* Lists files under the specified path.
*
* @param path Path to list files under.
* @return List of files under the specified path.
* @throws IgniteException In case of error.
* @throws org.apache.ignite.igfs.IgfsPathNotFoundException If path doesn't exist.
*/
public Collection<IgfsFile> listFiles(IgfsPath path) throws IgniteException;
/**
* Opens a file for reading.
*
* @param path File path to read.
* @param bufSize Read buffer size (bytes) or {@code zero} to use default value.
* @return File input stream to read data from.
* @throws IgniteException In case of error.
* @throws org.apache.ignite.igfs.IgfsPathNotFoundException If path doesn't exist.
*/
public IgfsSecondaryFileSystemPositionedReadable open(IgfsPath path, int bufSize) throws IgniteException;
/**
* Creates a file and opens it for writing.
*
* @param path File path to create.
* @param overwrite Overwrite file if it already exists. Note: you cannot overwrite an existent directory.
* @return File output stream to write data to.
* @throws IgniteException In case of error.
*/
public OutputStream create(IgfsPath path, boolean overwrite) throws IgniteException;
/**
* Creates a file and opens it for writing.
*
* @param path File path to create.
* @param bufSize Write buffer size (bytes) or {@code zero} to use default value.
* @param overwrite Overwrite file if it already exists. Note: you cannot overwrite an existent directory.
* @param replication Replication factor.
* @param blockSize Block size.
* @param props File properties to set.
* @return File output stream to write data to.
* @throws IgniteException In case of error.
*/
public OutputStream create(IgfsPath path, int bufSize, boolean overwrite, int replication, long blockSize,
@Nullable Map<String, String> props) throws IgniteException;
/**
* Opens an output stream to an existing file for appending data.
*
* @param path File path to append.
* @param bufSize Write buffer size (bytes) or {@code zero} to use default value.
* @param create Create file if it doesn't exist yet.
* @param props File properties to set only in case it file was just created.
* @return File output stream to append data to.
* @throws IgniteException In case of error.
* @throws org.apache.ignite.igfs.IgfsPathNotFoundException If path doesn't exist and create flag is {@code false}.
*/
public OutputStream append(IgfsPath path, int bufSize, boolean create, @Nullable Map<String, String> props)
throws IgniteException;
/**
* Gets file information for the specified path.
*
* @param path Path to get information for.
* @return File information for specified path or {@code null} if such path does not exist.
* @throws IgniteException In case of error.
*/
public IgfsFile info(IgfsPath path) throws IgniteException;
/**
* Gets used space in bytes.
*
* @return Used space in bytes.
* @throws IgniteException In case of error.
*/
public long usedSpaceSize() throws IgniteException;
}