22
22
import com .hedera .block .server .persistence .storage .PersistenceStorageConfig ;
23
23
import com .hedera .block .server .persistence .storage .StorageType ;
24
24
import com .hedera .block .server .persistence .storage .read .BlockAsDirReaderBuilder ;
25
+ import com .hedera .block .server .persistence .storage .read .BlockAsFileReaderBuilder ;
25
26
import com .hedera .block .server .persistence .storage .read .BlockReader ;
27
+ import com .hedera .block .server .persistence .storage .read .NoOpBlockReader ;
28
+ import com .hedera .block .server .persistence .storage .remove .BlockAsDirRemover ;
29
+ import com .hedera .block .server .persistence .storage .remove .BlockAsFileRemover ;
30
+ import com .hedera .block .server .persistence .storage .remove .BlockRemover ;
31
+ import com .hedera .block .server .persistence .storage .remove .NoOpRemover ;
26
32
import com .hedera .block .server .persistence .storage .write .BlockAsDirWriterBuilder ;
27
33
import com .hedera .block .server .persistence .storage .write .BlockAsFileWriterBuilder ;
28
34
import com .hedera .block .server .persistence .storage .write .BlockWriter ;
33
39
import dagger .Binds ;
34
40
import dagger .Module ;
35
41
import dagger .Provides ;
42
+ import edu .umd .cs .findbugs .annotations .NonNull ;
36
43
import java .io .IOException ;
44
+ import java .nio .file .Path ;
37
45
import java .util .List ;
46
+ import java .util .Objects ;
38
47
import javax .inject .Singleton ;
39
48
40
49
/** A Dagger module for providing dependencies for Persistence Module. */
@@ -49,7 +58,10 @@ public interface PersistenceInjectionModule {
49
58
*/
50
59
@ Provides
51
60
@ Singleton
52
- static BlockWriter <List <BlockItem >> providesBlockWriter (final BlockNodeContext blockNodeContext ) {
61
+ static BlockWriter <List <BlockItem >> providesBlockWriter (
62
+ @ NonNull final BlockNodeContext blockNodeContext , @ NonNull final BlockRemover blockRemover ) {
63
+ Objects .requireNonNull (blockRemover );
64
+ Objects .requireNonNull (blockNodeContext );
53
65
final StorageType persistenceType = blockNodeContext
54
66
.configuration ()
55
67
.getConfigData (PersistenceStorageConfig .class )
@@ -58,10 +70,11 @@ static BlockWriter<List<BlockItem>> providesBlockWriter(final BlockNodeContext b
58
70
return switch (persistenceType ) {
59
71
case null -> throw new NullPointerException (
60
72
"Persistence StorageType cannot be [null], cannot create an instance of BlockWriter" );
61
- case BLOCK_AS_FILE -> BlockAsFileWriterBuilder .newBuilder ().build ();
62
- case BLOCK_AS_DIR -> BlockAsDirWriterBuilder .newBuilder (blockNodeContext )
73
+ case BLOCK_AS_FILE -> BlockAsFileWriterBuilder .newBuilder (blockNodeContext , blockRemover )
63
74
.build ();
64
- case NOOP -> new NoOpBlockWriter (blockNodeContext );
75
+ case BLOCK_AS_DIR -> BlockAsDirWriterBuilder .newBuilder (blockNodeContext , blockRemover )
76
+ .build ();
77
+ case NOOP -> new NoOpBlockWriter (blockNodeContext , blockRemover );
65
78
};
66
79
} catch (final IOException e ) {
67
80
throw new RuntimeException ("Failed to create BlockWriter" , e );
@@ -76,8 +89,34 @@ static BlockWriter<List<BlockItem>> providesBlockWriter(final BlockNodeContext b
76
89
*/
77
90
@ Provides
78
91
@ Singleton
79
- static BlockReader <Block > providesBlockReader (PersistenceStorageConfig config ) {
80
- return BlockAsDirReaderBuilder .newBuilder (config ).build ();
92
+ static BlockReader <Block > providesBlockReader (@ NonNull final PersistenceStorageConfig config ) {
93
+ final StorageType persistenceType = Objects .requireNonNull (config ).type ();
94
+ return switch (persistenceType ) {
95
+ case null -> throw new NullPointerException (
96
+ "Persistence StorageType cannot be [null], cannot create an instance of BlockWriter" );
97
+ case BLOCK_AS_FILE -> BlockAsFileReaderBuilder .newBuilder ().build ();
98
+ case BLOCK_AS_DIR -> BlockAsDirReaderBuilder .newBuilder (config ).build ();
99
+ case NOOP -> new NoOpBlockReader ();
100
+ };
101
+ }
102
+
103
+ /**
104
+ * Provides a block reader singleton using the persistence storage config.
105
+ *
106
+ * @param config the persistence storage configuration needed to build the block reader
107
+ * @return a block reader singleton
108
+ */
109
+ @ Provides
110
+ @ Singleton
111
+ static BlockRemover providesBlockRemover (@ NonNull final PersistenceStorageConfig config ) {
112
+ final StorageType persistenceType = Objects .requireNonNull (config ).type ();
113
+ return switch (persistenceType ) {
114
+ case null -> throw new NullPointerException (
115
+ "Persistence StorageType cannot be [null], cannot create an instance of BlockWriter" );
116
+ case BLOCK_AS_FILE -> new BlockAsFileRemover ();
117
+ case BLOCK_AS_DIR -> new BlockAsDirRemover (Path .of (config .rootPath ()));
118
+ case NOOP -> new NoOpRemover ();
119
+ };
81
120
}
82
121
83
122
/**
@@ -89,5 +128,5 @@ static BlockReader<Block> providesBlockReader(PersistenceStorageConfig config) {
89
128
@ Binds
90
129
@ Singleton
91
130
BlockNodeEventHandler <ObjectEvent <SubscribeStreamResponse >> bindBlockNodeEventHandler (
92
- StreamPersistenceHandlerImpl streamPersistenceHandler );
131
+ @ NonNull final StreamPersistenceHandlerImpl streamPersistenceHandler );
93
132
}
0 commit comments