20
20
* Author: lixiaocui
21
21
*/
22
22
23
- #include < glog/logging.h >
23
+ #include " src/chunkserver/chunkserver.h "
24
24
25
- #include < butil/endpoint.h>
26
25
#include < braft/builtin_service_impl.h>
27
26
#include < braft/raft_service.h>
28
27
#include < braft/storage.h>
28
+ #include < butil/endpoint.h>
29
+ #include < glog/logging.h>
29
30
30
31
#include < memory>
31
32
32
- #include " src/chunkserver/chunkserver.h"
33
- #include " src/chunkserver/chunkserver_metrics.h"
34
- #include " src/chunkserver/chunkserver_service.h"
35
- #include " src/chunkserver/copyset_service.h"
36
- #include " src/chunkserver/chunk_service.h"
37
33
#include " src/chunkserver/braft_cli_service.h"
38
34
#include " src/chunkserver/braft_cli_service2.h"
35
+ #include " src/chunkserver/chunk_service.h"
39
36
#include " src/chunkserver/chunkserver_helper.h"
40
- #include " src/common/concurrent/task_thread_pool.h"
41
- #include " src/common/uri_parser.h"
42
- #include " src/chunkserver/raftsnapshot/curve_snapshot_attachment.h"
37
+ #include " src/chunkserver/chunkserver_metrics.h"
38
+ #include " src/chunkserver/chunkserver_service.h"
39
+ #include " src/chunkserver/copyset_service.h"
40
+ #include " src/chunkserver/raftlog/curve_segment_log_storage.h"
43
41
#include " src/chunkserver/raftsnapshot/curve_file_service.h"
42
+ #include " src/chunkserver/raftsnapshot/curve_snapshot_attachment.h"
44
43
#include " src/chunkserver/raftsnapshot/curve_snapshot_storage.h"
45
- #include " src/chunkserver/raftlog/curve_segment_log_storage.h"
44
+ #include " src/common/bytes_convert.h"
45
+ #include " src/common/concurrent/task_thread_pool.h"
46
46
#include " src/common/curve_version.h"
47
+ #include " src/common/uri_parser.h"
47
48
48
49
using ::curve::fs::LocalFileSystem;
49
50
using ::curve::fs::LocalFileSystemOption;
@@ -65,6 +66,10 @@ DEFINE_string(raftSnapshotUri, "curve://./0/copysets", "raft snapshot uri");
65
66
DEFINE_string (raftLogUri, " curve://./0/copysets" , " raft log uri" );
66
67
DEFINE_string (recycleUri, " local://./0/recycler" , " recycle uri" );
67
68
DEFINE_string (chunkFilePoolDir, " ./0/" , " chunk file pool location" );
69
+ DEFINE_int32 (chunkFilePoolAllocatedPercent, 80 ,
70
+ " format percent for chunkfillpool." );
71
+ DEFINE_uint32 (chunkFormatThreadNum, 1 ,
72
+ " number of threads while file pool formatting" );
68
73
DEFINE_string (chunkFilePoolMetaPath,
69
74
" ./chunkfilepool.meta" , " chunk file pool meta path" );
70
75
DEFINE_string (logPath, " ./0/chunkserver.log-" , " log file path" );
@@ -479,8 +484,6 @@ void ChunkServer::Stop() {
479
484
brpc::AskToQuit ();
480
485
}
481
486
482
-
483
-
484
487
void ChunkServer::InitChunkFilePoolOptions (
485
488
common::Configuration *conf, FilePoolOptions *chunkFilePoolOptions) {
486
489
LOG_IF (FATAL, !conf->GetUInt32Value (" global.chunk_size" ,
@@ -513,13 +516,56 @@ void ChunkServer::InitChunkFilePoolOptions(
513
516
" chunkfilepool.meta_path" , &metaUri));
514
517
::memcpy (
515
518
chunkFilePoolOptions->metaPath, metaUri.c_str(), metaUri.size());
519
+
520
+ std::string chunkFilePoolUri;
521
+ LOG_IF (FATAL, !conf->GetStringValue (" chunkfilepool.chunk_file_pool_dir" ,
522
+ &chunkFilePoolUri));
523
+
524
+ ::memcpy (chunkFilePoolOptions->filePoolDir, chunkFilePoolUri.c_str(),
525
+ chunkFilePoolUri.size());
526
+ std::string pool_size;
527
+ LOG_IF (FATAL, !conf->GetStringValue (
528
+ " chunkfilepool.chunk_file_pool_size" , &pool_size));
529
+ LOG_IF (FATAL, !curve::common::ToNumbericByte (
530
+ pool_size, &chunkFilePoolOptions->filePoolSize ));
531
+ LOG_IF (FATAL,
532
+ !conf->GetBoolValue (" chunkfilepool.allocated_by_percent" ,
533
+ &chunkFilePoolOptions->allocatedByPercent ));
534
+ LOG_IF (FATAL,
535
+ !conf->GetUInt32Value (" chunkfilepool.allocate_percent" ,
536
+ &chunkFilePoolOptions->allocatedPercent ));
537
+ LOG_IF (FATAL, !conf->GetUInt32Value (
538
+ " chunkfilepool.chunk_file_pool_format_thread_num" ,
539
+ &chunkFilePoolOptions->formatThreadNum ));
516
540
LOG_IF (FATAL, !conf->GetBoolValue (" chunkfilepool.clean.enable" ,
517
541
&chunkFilePoolOptions->needClean ));
518
- LOG_IF (FATAL, !conf->GetUInt32Value (" chunkfilepool.clean.bytes_per_write" , // NOLINT
519
- &chunkFilePoolOptions->bytesPerWrite ));
542
+ LOG_IF (FATAL,
543
+ !conf->GetUInt32Value (" chunkfilepool.clean.bytes_per_write" ,
544
+ &chunkFilePoolOptions->bytesPerWrite ));
520
545
LOG_IF (FATAL, !conf->GetUInt32Value (" chunkfilepool.clean.throttle_iops" ,
521
546
&chunkFilePoolOptions->iops4clean ));
522
547
548
+ std::string copysetUri;
549
+ LOG_IF (FATAL,
550
+ !conf->GetStringValue (" copyset.raft_snapshot_uri" , ©setUri));
551
+ curve::common::UriParser::ParseUri (copysetUri,
552
+ &chunkFilePoolOptions->copysetDir );
553
+
554
+ std::string recycleUri;
555
+ LOG_IF (FATAL,
556
+ !conf->GetStringValue (" copyset.recycler_uri" , &recycleUri));
557
+ curve::common::UriParser::ParseUri (recycleUri,
558
+ &chunkFilePoolOptions->recycleDir );
559
+
560
+ bool useChunkFilePoolAsWalPool;
561
+ LOG_IF (FATAL, !conf->GetBoolValue (" walfilepool.use_chunk_file_pool" ,
562
+ &useChunkFilePoolAsWalPool));
563
+
564
+ chunkFilePoolOptions->isAllocated = [=](const std::string& filename) {
565
+ return Trash::IsChunkOrSnapShotFile (filename) ||
566
+ (useChunkFilePoolAsWalPool && Trash::IsWALFile (filename));
567
+ };
568
+
523
569
if (0 == chunkFilePoolOptions->bytesPerWrite
524
570
|| chunkFilePoolOptions->bytesPerWrite > 1 * 1024 * 1024
525
571
|| 0 != chunkFilePoolOptions->bytesPerWrite % 4096 ) {
@@ -565,6 +611,36 @@ void ChunkServer::InitWalFilePoolOptions(
565
611
std::string metaUri;
566
612
LOG_IF (FATAL, !conf->GetStringValue (
567
613
" walfilepool.meta_path" , &metaUri));
614
+
615
+ std::string pool_size;
616
+ LOG_IF (FATAL, !conf->GetStringValue (" walfilepool.chunk_file_pool_size" ,
617
+ &pool_size));
618
+ LOG_IF (FATAL, !curve::common::ToNumbericByte (
619
+ pool_size, &walPoolOptions->filePoolSize ));
620
+ LOG_IF (FATAL, !conf->GetUInt64Value (" walfilepool.wal_file_pool_size" ,
621
+ &walPoolOptions->filePoolSize ));
622
+ LOG_IF (FATAL, !conf->GetBoolValue (" walfilepool.allocated_by_percent" ,
623
+ &walPoolOptions->allocatedByPercent ));
624
+ LOG_IF (FATAL, !conf->GetUInt32Value (" walfilepool.allocated_percent" ,
625
+ &walPoolOptions->allocatedPercent ));
626
+ LOG_IF (FATAL, !conf->GetUInt32Value (" walfilepool.thread_num" ,
627
+ &walPoolOptions->formatThreadNum ));
628
+
629
+ std::string copysetUri;
630
+ LOG_IF (FATAL,
631
+ !conf->GetStringValue (" copyset.raft_log_uri" , ©setUri));
632
+ curve::common::UriParser::ParseUri (copysetUri,
633
+ &walPoolOptions->copysetDir );
634
+
635
+ std::string recycleUri;
636
+ LOG_IF (FATAL,
637
+ !conf->GetStringValue (" copyset.recycler_uri" , &recycleUri));
638
+ curve::common::UriParser::ParseUri (recycleUri,
639
+ &walPoolOptions->recycleDir );
640
+
641
+ walPoolOptions->isAllocated = [](const string& filename) {
642
+ return Trash::IsWALFile (filename);
643
+ };
568
644
::memcpy (
569
645
walPoolOptions->metaPath, metaUri.c_str(), metaUri.size());
570
646
}
@@ -833,6 +909,16 @@ void ChunkServer::LoadConfigFromCmdline(common::Configuration *conf) {
833
909
<< " chunkFilePoolDir must be set when run chunkserver in command." ;
834
910
}
835
911
912
+ if (GetCommandLineFlagInfo (" chunkFilePoolAllocatedPercent" , &info)) {
913
+ conf->SetUInt32Value (" chunkfilepool.allocate_percent" ,
914
+ FLAGS_chunkFilePoolAllocatedPercent);
915
+ }
916
+
917
+ if (GetCommandLineFlagInfo (" chunkFormatThreadNum" , &info)) {
918
+ conf->SetUInt64Value (" chunkfilepool.chunk_file_pool_format_thread_num" ,
919
+ FLAGS_chunkFormatThreadNum);
920
+ }
921
+
836
922
if (GetCommandLineFlagInfo (" chunkFilePoolMetaPath" , &info) &&
837
923
!info.is_default ) {
838
924
conf->SetStringValue (
0 commit comments