@@ -78,6 +78,59 @@ pub enum StoreSpec {
78
78
///
79
79
experimental_s3_store( S3Spec ) ,
80
80
81
+ /// `NetApp` ONTAP S3 store will use ONTAP's S3-compatible storage as a backend
82
+ /// to store files. This store is specifically configured for ONTAP's S3 requirements
83
+ /// including custom TLS configuration, credentials management, and proper vserver
84
+ /// configuration.
85
+ ///
86
+ /// This store uses AWS environment variables for credentials:
87
+ /// - `AWS_ACCESS_KEY_ID`
88
+ /// - `AWS_SECRET_ACCESS_KEY`
89
+ /// - `AWS_DEFAULT_REGION`
90
+ ///
91
+ /// Example JSON Config:
92
+ /// ```json
93
+ /// "ontap_s3_store": {
94
+ /// "endpoint": "https://ontap-s3-endpoint:443",
95
+ /// "vserver_name": "your-vserver",
96
+ /// "bucket": "your-bucket",
97
+ /// "root_certificates": "/path/to/certs.pem", // Optional
98
+ /// "key_prefix": "test-prefix/", // Optional
99
+ /// "retry": {
100
+ /// "max_retries": 6,
101
+ /// "delay": 0.3,
102
+ /// "jitter": 0.5
103
+ /// },
104
+ /// "multipart_max_concurrent_uploads": 10
105
+ /// }
106
+ /// ```
107
+ ontap_s3_store( OntapS3Spec ) ,
108
+
109
+ /// ONTAP S3 Existence Cache provides a caching layer on top of the ONTAP S3 store
110
+ /// to optimize repeated existence checks. It maintains an in-memory cache of object
111
+ /// digests and periodically syncs this cache to disk for persistence.
112
+ ///
113
+ /// The cache helps reduce latency for repeated calls to check object existence,
114
+ /// while still ensuring eventual consistency with the underlying ONTAP S3 store.
115
+ ///
116
+ /// Example JSON Config:
117
+ /// ```json
118
+ /// "ontap_s3_existence_cache": {
119
+ /// "index_path": "/path/to/cache/index.json",
120
+ /// "sync_interval_seconds": 300,
121
+ /// "backend": {
122
+ /// "ontap_s3_store": {
123
+ /// "endpoint": "https://ontap-s3-endpoint:443",
124
+ /// "vserver_name": "your-vserver",
125
+ /// "bucket": "your-bucket",
126
+ /// "key_prefix": "test-prefix/"
127
+ /// }
128
+ /// }
129
+ /// }
130
+ /// ```
131
+ ///
132
+ ontap_s3_existence_cache( Box < OntapS3ExistenceCacheSpec > ) ,
133
+
81
134
/// Verify store is used to apply verifications to an underlying
82
135
/// store implementation. It is strongly encouraged to validate
83
136
/// as much data as you can before accepting data from a client,
@@ -512,6 +565,42 @@ pub struct FilesystemSpec {
512
565
pub block_size : u64 ,
513
566
}
514
567
568
+ // NetApp ONTAP S3 Spec
569
+ #[ derive( Serialize , Deserialize , Debug , Default , Clone ) ]
570
+ #[ serde( deny_unknown_fields) ]
571
+ pub struct OntapS3Spec {
572
+ #[ serde( deserialize_with = "convert_string_with_shellexpand" ) ]
573
+ pub endpoint : String ,
574
+ #[ serde( deserialize_with = "convert_string_with_shellexpand" ) ]
575
+ pub vserver_name : String ,
576
+ #[ serde( deserialize_with = "convert_string_with_shellexpand" ) ]
577
+ pub bucket : String ,
578
+ #[ serde( default ) ]
579
+ pub root_certificates : Option < String > ,
580
+ #[ serde( default ) ]
581
+ pub key_prefix : Option < String > ,
582
+ #[ serde( default ) ]
583
+ pub retry : Retry ,
584
+ #[ serde( default , deserialize_with = "convert_duration_with_shellexpand" ) ]
585
+ pub consider_expired_after_s : u32 ,
586
+ pub max_retry_buffer_per_request : Option < usize > ,
587
+ pub multipart_max_concurrent_uploads : Option < usize > ,
588
+ #[ serde( default ) ]
589
+ pub insecure_allow_http : bool ,
590
+ #[ serde( default ) ]
591
+ pub disable_http2 : bool ,
592
+ }
593
+
594
+ #[ derive( Serialize , Deserialize , Debug , Clone ) ]
595
+ #[ serde( deny_unknown_fields) ]
596
+ pub struct OntapS3ExistenceCacheSpec {
597
+ #[ serde( deserialize_with = "convert_string_with_shellexpand" ) ]
598
+ pub index_path : String ,
599
+ #[ serde( deserialize_with = "convert_numeric_with_shellexpand" ) ]
600
+ pub sync_interval_seconds : u32 ,
601
+ pub backend : Box < StoreSpec > ,
602
+ }
603
+
515
604
#[ derive( Serialize , Deserialize , Debug , Clone ) ]
516
605
#[ serde( deny_unknown_fields) ]
517
606
pub struct FastSlowSpec {
0 commit comments