99 "github.com/buildbarn/bb-storage/pkg/auth"
1010 auth_configuration "github.com/buildbarn/bb-storage/pkg/auth/configuration"
1111 "github.com/buildbarn/bb-storage/pkg/blobstore"
12+ "github.com/buildbarn/bb-storage/pkg/blobstore/cdc"
1213 blobstore_configuration "github.com/buildbarn/bb-storage/pkg/blobstore/configuration"
1314 "github.com/buildbarn/bb-storage/pkg/blobstore/grpcservers"
1415 "github.com/buildbarn/bb-storage/pkg/builder"
@@ -54,55 +55,57 @@ func main() {
5455 var cacheCapabilitiesAuthorizers []auth.Authorizer
5556
5657 // Content Addressable Storage (CAS).
57- var contentAddressableStorageInfo * blobstore_configuration. BlobAccessInfo
58- var contentAddressableStorage blobstore. BlobAccess
59- if configuration .ContentAddressableStorage != nil {
60- info , authorizedBackend , allAuthorizers , err := newScannableBlobAccess (
58+ var contentAddressableStorage cdc. ContentAddressableStorage
59+ var authorizedContentAddressableStorage cdc. ContentAddressableStorage
60+ if configuration .ContentAddressableStorageServer != nil {
61+ cas , chunkStorage , chunkListStorage , _ , cdcParametersFetcher , err := blobstore_configuration . NewCASFromConfiguration (
6162 dependenciesGroup ,
62- configuration .ContentAddressableStorage ,
63- blobstore_configuration .NewCASBlobAccessCreator (
64- grpcClientFactory ,
65- int (configuration .MaximumMessageSizeBytes ),
66- zstdPool ,
67- ),
63+ configuration .ContentAddressableStorageServer .ContentAddressableStorage ,
6864 grpcClientFactory ,
65+ int (configuration .MaximumMessageSizeBytes ),
66+ zstdPool ,
6967 )
7068 if err != nil {
7169 return util .StatusWrap (err , "Failed to create Content Addressable Storage" )
7270 }
71+ contentAddressableStorage = cas
72+
73+ // Create authorizers.
74+ getAuthorizer , err := auth_configuration .DefaultAuthorizerFactory .NewAuthorizerFromConfiguration (configuration .ContentAddressableStorageServer .GetAuthorizer , dependenciesGroup , grpcClientFactory )
75+ if err != nil {
76+ return util .StatusWrap (err , "Failed to create Get() authorizer for Content Addressable Storage" )
77+ }
78+ putAuthorizer , err := auth_configuration .DefaultAuthorizerFactory .NewAuthorizerFromConfiguration (configuration .ContentAddressableStorageServer .PutAuthorizer , dependenciesGroup , grpcClientFactory )
79+ if err != nil {
80+ return util .StatusWrap (err , "Failed to create Put() authorizer for Content Addressable Storage" )
81+ }
82+ findMissingAuthorizer , err := auth_configuration .DefaultAuthorizerFactory .NewAuthorizerFromConfiguration (configuration .ContentAddressableStorageServer .FindMissingAuthorizer , dependenciesGroup , grpcClientFactory )
83+ if err != nil {
84+ return util .StatusWrap (err , "Failed to create FindMissing() authorizer for Content Addressable Storage" )
85+ }
86+
87+ // Create authorized versions of the backends.
88+ authorizedChunkStorage := blobstore .NewAuthorizingBlobAccess (chunkStorage , getAuthorizer , putAuthorizer , findMissingAuthorizer )
89+ authorizedChunkListStorage := blobstore .NewAuthorizingBlobAccess (chunkListStorage , getAuthorizer , putAuthorizer , findMissingAuthorizer )
90+ authorizedChunkListFetcher := blobstore .NewBlobAccessChunkListFetcher (authorizedChunkListStorage , int (configuration .MaximumMessageSizeBytes ))
91+ authorizedContentAddressableStorage = cdc .NewContentAddressableStorage (
92+ authorizedChunkStorage ,
93+ authorizedChunkListStorage ,
94+ authorizedChunkListFetcher ,
95+ cdcParametersFetcher ,
96+ contentAddressableStorage .GetDigestKeyFormat (),
97+ )
98+ // Create the Chunk Storage (CS).
7399 cacheCapabilitiesProviders = append (
74100 cacheCapabilitiesProviders ,
75- info . BlobAccess ,
101+ chunkStorage ,
76102 capabilities .NewStaticProvider (& remoteexecution.ServerCapabilities {
77103 CacheCapabilities : & remoteexecution.CacheCapabilities {
78104 SupportedCompressors : configuration .SupportedCompressors ,
79105 },
80106 }),
81107 )
82- cacheCapabilitiesAuthorizers = append (cacheCapabilitiesAuthorizers , allAuthorizers ... )
83- contentAddressableStorageInfo = & info
84- contentAddressableStorage = authorizedBackend
85- }
86-
87- // Chunk List Storage (CLS).
88- var chunkListStorage blobstore.BlobAccess
89- if configuration .ChunkListStorage != nil {
90- info , authorizedBackend , allAuthorizers , err := newScannableBlobAccess (
91- dependenciesGroup ,
92- configuration .ChunkListStorage ,
93- blobstore_configuration .NewCLSBlobAccessCreator (
94- contentAddressableStorageInfo ,
95- grpcClientFactory ,
96- int (configuration .MaximumMessageSizeBytes ),
97- ),
98- grpcClientFactory ,
99- )
100- if err != nil {
101- return util .StatusWrap (err , "Failed to create Chunk List Storage" )
102- }
103- cacheCapabilitiesProviders = append (cacheCapabilitiesProviders , info .BlobAccess )
104- cacheCapabilitiesAuthorizers = append (cacheCapabilitiesAuthorizers , allAuthorizers ... )
105- chunkListStorage = authorizedBackend
108+ cacheCapabilitiesAuthorizers = append (cacheCapabilitiesAuthorizers , getAuthorizer , putAuthorizer , findMissingAuthorizer )
106109 }
107110
108111 // Action Cache (AC).
@@ -112,7 +115,7 @@ func main() {
112115 dependenciesGroup ,
113116 configuration .ActionCache ,
114117 blobstore_configuration .NewACBlobAccessCreator (
115- contentAddressableStorageInfo ,
118+ contentAddressableStorage ,
116119 grpcClientFactory ,
117120 int (configuration .MaximumMessageSizeBytes ),
118121 ),
@@ -213,10 +216,9 @@ func main() {
213216 if err := bb_grpc .NewServersFromConfigurationAndServe (
214217 configuration .GrpcServers ,
215218 func (s grpc.ServiceRegistrar ) {
216- if contentAddressableStorage != nil {
219+ if authorizedContentAddressableStorage != nil {
217220 contentAddressableStorageServer := grpcservers .NewContentAddressableStorageServer (
218- contentAddressableStorage ,
219- chunkListStorage ,
221+ authorizedContentAddressableStorage ,
220222 configuration .MaximumMessageSizeBytes ,
221223 )
222224 remoteexecution .RegisterContentAddressableStorageServer (
@@ -226,8 +228,7 @@ func main() {
226228 bytestream .RegisterByteStreamServer (
227229 s ,
228230 grpcservers .NewByteStreamServer (
229- contentAddressableStorage ,
230- 1 << 16 ,
231+ authorizedContentAddressableStorage ,
231232 zstdPool ,
232233 ),
233234 )
0 commit comments