feat(cluster): implement distributed clustering with etcd coordination
- Integrate etcd-client for distributed coordination and leader election - Add remote client macros with proper formatting for all services - Implement RequestMetrics for tracking RPC performance and errors - Add rate limiting mechanism across all service endpoints - Create ElectionRequest and ElectionResult message types for leader election - Add role management with primary/replica switching capabilities - Implement health checker with automatic failover detection - Add repository count metrics for cluster monitoring - Update Cargo.toml with etcd-client and dashmap dependencies - Modify RepoEntry to include read_only flag for replica handling - Implement should_accept_election logic to prevent duplicate elections - Add RoleChangedEvent handling for cluster role updates
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
syntax = "proto3";
|
||||
|
||||
package gitks;
|
||||
|
||||
import "repository.proto";
|
||||
|
||||
// HookService provides gRPC callback hooks for git operations.
|
||||
// External services can implement this interface to receive hook callbacks.
|
||||
service HookService {
|
||||
// Pre-receive hook callback: validate push before it happens.
|
||||
rpc PreReceiveHook(PreReceiveHookRequest) returns (PreReceiveHookResponse);
|
||||
|
||||
// Update hook callback: validate each ref update individually.
|
||||
rpc UpdateHook(UpdateHookRequest) returns (UpdateHookResponse);
|
||||
|
||||
// Post-receive hook callback: notify after push has completed.
|
||||
rpc PostReceiveHook(PostReceiveHookRequest) returns (PostReceiveHookResponse);
|
||||
}
|
||||
|
||||
message PreReceiveHookRequest {
|
||||
RepositoryHeader repository = 1;
|
||||
repeated RefUpdate ref_updates = 2;
|
||||
string push_options = 3;
|
||||
}
|
||||
|
||||
message PreReceiveHookResponse {
|
||||
bool accept = 1;
|
||||
string rejection_message = 2;
|
||||
}
|
||||
|
||||
message UpdateHookRequest {
|
||||
RepositoryHeader repository = 1;
|
||||
string ref_name = 2;
|
||||
string old_oid = 3;
|
||||
string new_oid = 4;
|
||||
}
|
||||
|
||||
message UpdateHookResponse {
|
||||
bool accept = 1;
|
||||
string rejection_message = 2;
|
||||
}
|
||||
|
||||
message PostReceiveHookRequest {
|
||||
RepositoryHeader repository = 1;
|
||||
repeated RefUpdate ref_updates = 2;
|
||||
}
|
||||
|
||||
message PostReceiveHookResponse {
|
||||
repeated HookAction actions = 1;
|
||||
}
|
||||
|
||||
message RefUpdate {
|
||||
string old_oid = 1;
|
||||
string new_oid = 2;
|
||||
string ref_name = 3;
|
||||
}
|
||||
|
||||
message HookAction {
|
||||
string action_type = 1; // "trigger_ci", "update_index", etc.
|
||||
string payload = 2;
|
||||
}
|
||||
Reference in New Issue
Block a user