@@ -17,12 +17,14 @@ use std::env;
1717use clap:: ArgAction ;
1818use clap:: Args ;
1919use clap:: Parser ;
20+ use databend_common_config:: StorageConfig ;
2021use databend_common_meta_raft_store:: config:: get_default_raft_advertise_host;
2122use databend_common_meta_raft_store:: config:: RaftConfig as InnerRaftConfig ;
2223use databend_common_meta_types:: MetaStartupError ;
24+ use databend_common_storage:: StorageConfig as InnerStorageConfig ;
2325use databend_common_tracing:: Config as InnerLogConfig ;
2426use databend_common_tracing:: FileConfig as InnerFileLogConfig ;
25- use databend_common_tracing:: HistoryConfig ;
27+ use databend_common_tracing:: HistoryConfig as InnerLogHistoryConfig ;
2628use databend_common_tracing:: OTLPConfig ;
2729use databend_common_tracing:: ProfileLogConfig ;
2830use databend_common_tracing:: QueryLogConfig ;
@@ -422,6 +424,7 @@ impl Into<Config> for ConfigViaEnv {
422424 stderr_level : self . metasrv_log_stderr_level ,
423425 stderr_format : self . metasrv_log_stderr_format ,
424426 } ,
427+ storage : StorageLogConfig :: default ( ) ,
425428 } ;
426429
427430 Config {
@@ -671,6 +674,9 @@ pub struct LogConfig {
671674
672675 #[ clap( flatten) ]
673676 pub stderr : StderrLogConfig ,
677+
678+ #[ clap( flatten) ]
679+ pub storage : StorageLogConfig ,
674680}
675681
676682impl Default for LogConfig {
@@ -690,7 +696,7 @@ impl Into<InnerLogConfig> for LogConfig {
690696 profile : ProfileLogConfig :: default ( ) ,
691697 structlog : StructLogConfig :: default ( ) ,
692698 tracing : TracingConfig :: default ( ) ,
693- history : HistoryConfig :: default ( ) ,
699+ history : self . storage . into ( ) ,
694700 }
695701 }
696702}
@@ -700,6 +706,7 @@ impl From<InnerLogConfig> for LogConfig {
700706 Self {
701707 file : inner. file . into ( ) ,
702708 stderr : inner. stderr . into ( ) ,
709+ storage : inner. history . into ( ) ,
703710 }
704711 }
705712}
@@ -825,3 +832,93 @@ impl From<InnerStderrLogConfig> for StderrLogConfig {
825832 }
826833 }
827834}
835+
836+ #[ derive( Clone , Debug , PartialEq , Eq , Serialize , Deserialize , Args ) ]
837+ #[ serde( default ) ]
838+ pub struct StorageLogConfig {
839+ #[ clap(
840+ long = "log-storage-on" , value_name = "VALUE" , default_value = "false" , action = ArgAction :: Set , num_args = 0 ..=1 , require_equals = true , default_missing_value = "true"
841+ ) ]
842+ #[ serde( rename = "on" ) ]
843+ pub log_storage_on : bool ,
844+
845+ /// Specifies the interval in seconds for how often the log is flushed
846+ #[ clap(
847+ long = "log-storage-interval" ,
848+ value_name = "VALUE" ,
849+ default_value = "2"
850+ ) ]
851+ #[ serde( rename = "interval" ) ]
852+ pub log_storage_interval : usize ,
853+
854+ /// Specifies the name of the staging area that temporarily holds log data before it is finally copied into the table
855+ ///
856+ /// Note:
857+ /// The default value uses an uuid to avoid conflicts with existing stages
858+ #[ clap(
859+ long = "log-storage-stage-name" ,
860+ value_name = "VALUE" ,
861+ default_value = "log_1f93b76af0bd4b1d8e018667865fbc65"
862+ ) ]
863+ #[ serde( rename = "stage_name" ) ]
864+ pub log_storage_stage_name : String ,
865+
866+ /// Log level <DEBUG|INFO|WARN|ERROR>
867+ #[ clap(
868+ long = "log-storage-level" ,
869+ value_name = "VALUE" ,
870+ default_value = "INFO"
871+ ) ]
872+ #[ serde( rename = "level" ) ]
873+ pub log_storage_level : String ,
874+
875+ /// Specify store the log into where
876+ #[ clap( skip) ]
877+ #[ serde( rename = "params" ) ]
878+ pub log_storage_params : StorageConfig ,
879+ }
880+
881+ impl Default for StorageLogConfig {
882+ fn default ( ) -> Self {
883+ StorageLogConfig {
884+ log_storage_on : false ,
885+ log_storage_interval : 2 ,
886+ log_storage_stage_name : "log_1f93b76af0bd4b1d8e018667865fbc65" . to_string ( ) ,
887+ log_storage_level : "INFO" . to_string ( ) ,
888+ log_storage_params : Default :: default ( ) ,
889+ }
890+ }
891+ }
892+
893+ #[ allow( clippy:: from_over_into) ]
894+ impl Into < InnerLogHistoryConfig > for StorageLogConfig {
895+ fn into ( self ) -> InnerLogHistoryConfig {
896+ let storage_params: Option < InnerStorageConfig > =
897+ Some ( self . log_storage_params . try_into ( ) . unwrap_or_default ( ) ) ;
898+ InnerLogHistoryConfig {
899+ on : self . log_storage_on ,
900+ interval : self . log_storage_interval ,
901+ stage_name : self . log_storage_stage_name ,
902+ level : self . log_storage_level ,
903+ storage_params : storage_params. map ( |cfg| cfg. params ) ,
904+ ..Default :: default ( )
905+ }
906+ }
907+ }
908+
909+ impl From < InnerLogHistoryConfig > for StorageLogConfig {
910+ fn from ( value : InnerLogHistoryConfig ) -> Self {
911+ let inner_storage_config: Option < InnerStorageConfig > =
912+ value. storage_params . map ( |params| InnerStorageConfig {
913+ params,
914+ ..Default :: default ( )
915+ } ) ;
916+ Self {
917+ log_storage_on : value. on ,
918+ log_storage_interval : value. interval ,
919+ log_storage_stage_name : value. stage_name ,
920+ log_storage_level : value. level ,
921+ log_storage_params : inner_storage_config. map ( Into :: into) . unwrap_or_default ( ) ,
922+ }
923+ }
924+ }
0 commit comments