Files
discord9 092ba1d01e feat: admin gc (#308)
* feat: add gc admin rpc

* chore: make all

Signed-off-by: discord9 <discord9@163.com>

* per review

Signed-off-by: discord9 <discord9@163.com>

* chore: per review

Signed-off-by: discord9 <discord9@163.com>

---------

Signed-off-by: discord9 <discord9@163.com>
2026-03-06 15:07:34 +08:00

158 lines
3.7 KiB
Protocol Buffer

// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
package greptime.v1.meta;
import "greptime/v1/meta/common.proto";
import "greptime/v1/meta/ddl.proto";
import "greptime/v1/meta/region.proto";
option go_package = "github.com/GreptimeTeam/greptime-proto/go/greptime/v1/meta";
enum ProcedureStatus {
Running = 0;
Done = 1;
Retrying = 2;
Failed = 3;
PrepareRollback = 4;
RollingBack = 5;
Poisoned = 6;
}
message ProcedureMeta {
ProcedureId id = 1;
string type_name = 2;
ProcedureStatus status = 3;
int64 start_time_ms = 4;
int64 end_time_ms = 5;
repeated string lock_keys = 6;
string error = 7;
}
message QueryProcedureRequest {
RequestHeader header = 1;
ProcedureId pid = 2;
}
message ProcedureStateResponse {
ResponseHeader header = 1;
ProcedureStatus status = 2;
string error = 3;
}
message ProcedureDetailRequest {
RequestHeader header = 1;
}
message ProcedureDetailResponse {
ResponseHeader header = 1;
repeated ProcedureMeta procedures = 2;
}
enum ResolveStrategy {
UseLatest = 0;
UseMetasrv = 1;
AbortOnConflict = 2;
}
message ReconcileTable {
string catalog_name = 1;
string schema_name = 2;
string table_name = 3;
ResolveStrategy resolve_strategy = 4;
}
message ReconcileDatabase {
string catalog_name = 1;
string database_name = 2;
uint32 parallelism = 3;
ResolveStrategy resolve_strategy = 4;
}
message ReconcileCatalog {
string catalog_name = 1;
uint32 parallelism = 2;
ResolveStrategy resolve_strategy = 3;
}
message ReconcileRequest {
RequestHeader header = 1;
oneof target {
ReconcileTable reconcile_table = 2;
ReconcileDatabase reconcile_database = 3;
ReconcileCatalog reconcile_catalog = 4;
}
}
message ReconcileResponse {
ResponseHeader header = 1;
ProcedureId pid = 2;
}
message GcRegionsRequest {
RequestHeader header = 1;
repeated uint64 region_ids = 2;
// Whether to perform a full file listing on datanodes when GC'ing the regions.
bool full_file_listing = 3;
// Timeout in seconds for the entire GC procedure.
uint32 timeout_secs = 4;
}
message GcStats {
// Number of regions requested for GC (accepted by the server side).
uint64 processed_regions = 1;
// Regions that need retry in the next GC round.
repeated uint64 need_retry_regions = 2;
// Number of deleted SST files.
uint64 deleted_files = 3;
// Number of deleted index files.
uint64 deleted_indexes = 4;
}
message GcRegionsResponse {
ResponseHeader header = 1;
GcStats stats = 2;
}
message GcTableRequest {
RequestHeader header = 1;
string catalog_name = 2;
string schema_name = 3;
string table_name = 4;
// Whether to perform a full file listing on datanodes when GC'ing the regions.
bool full_file_listing = 5;
// Timeout in seconds for the entire GC procedure.
uint32 timeout_secs = 6;
}
message GcTableResponse {
ResponseHeader header = 1;
GcStats stats = 2;
}
service ProcedureService {
// Query a submitted procedure state
rpc query(QueryProcedureRequest) returns (ProcedureStateResponse);
// Submits a DDL task
rpc ddl(DdlTaskRequest) returns (DdlTaskResponse);
// Submits a reconcile task
rpc reconcile(ReconcileRequest) returns (ReconcileResponse);
// Submits a region migration task
rpc migrate(MigrateRegionRequest) returns (MigrateRegionResponse);
// Query all submitted procedures details
rpc details(ProcedureDetailRequest) returns (ProcedureDetailResponse);
// Manually trigger GC for a specific list of regions
rpc gc_regions(GcRegionsRequest) returns (GcRegionsResponse);
// Manually trigger GC for a table (all its regions)
rpc gc_table(GcTableRequest) returns (GcTableResponse);
}