Skip to content

Commit cd69d06

Browse files
finish
Signed-off-by: OneSizeFitsQuorum <[email protected]>
1 parent 5f0ad8c commit cd69d06

File tree

1 file changed

+13
-8
lines changed

1 file changed

+13
-8
lines changed

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/allocation/AbstractNodeAllocationStrategy.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,20 +34,21 @@
3434
import java.io.File;
3535
import java.io.IOException;
3636
import java.util.Arrays;
37+
import java.util.concurrent.atomic.AtomicReference;
3738

3839
public abstract class AbstractNodeAllocationStrategy implements NodeAllocationStrategy {
3940
private static final Logger logger =
4041
LoggerFactory.getLogger(AbstractNodeAllocationStrategy.class);
4142
private static final CommonConfig commonConfig = CommonDescriptor.getInstance().getConfig();
4243

4344
// manage wal folders
44-
protected FolderManager folderManager;
45+
protected AtomicReference<FolderManager> folderManager = new AtomicReference<>();
4546

4647
protected AbstractNodeAllocationStrategy() {
4748
try {
48-
folderManager =
49+
folderManager.set(
4950
new FolderManager(
50-
Arrays.asList(commonConfig.getWalDirs()), DirectoryStrategyType.SEQUENCE_STRATEGY);
51+
Arrays.asList(commonConfig.getWalDirs()), DirectoryStrategyType.SEQUENCE_STRATEGY));
5152
} catch (DiskSpaceInsufficientException e) {
5253
logger.error(
5354
"Fail to create wal node allocation strategy because all disks of wal folders are full.",
@@ -57,12 +58,16 @@ protected AbstractNodeAllocationStrategy() {
5758

5859
protected IWALNode createWALNode(String identifier) {
5960
try {
60-
if (folderManager == null) {
61-
folderManager = new FolderManager(
62-
Arrays.asList(commonConfig.getWalDirs()), DirectoryStrategyType.SEQUENCE_STRATEGY);
61+
// already in lock, so no need to synchronized
62+
if (folderManager.get() == null) {
63+
folderManager.set(
64+
new FolderManager(
65+
Arrays.asList(commonConfig.getWalDirs()), DirectoryStrategyType.SEQUENCE_STRATEGY));
6366
}
64-
return folderManager.getNextWithRetry(
65-
folder -> new WALNode(identifier, folder + File.separator + identifier));
67+
return folderManager
68+
.get()
69+
.getNextWithRetry(
70+
folder -> new WALNode(identifier, folder + File.separator + identifier));
6671
} catch (DiskSpaceInsufficientException e) {
6772
logger.error("Fail to create wal node because all disks of wal folders are full.", e);
6873
return WALFakeNode.getFailureInstance(e);

0 commit comments

Comments
 (0)