Skip to content

Commit 999c6fe

Browse files
Issue (#1): Initial Commit.
1 parent 9d68d37 commit 999c6fe

26 files changed

+1723
-3063
lines changed

ramd/Makefile.am

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@ ramd_SOURCES = src/ramd_main.c \
1313
src/ramd_sync_replication.c \
1414
src/ramd_config_reload.c \
1515
src/ramd_maintenance.c \
16-
src/ramd_cascade.c \
17-
src/ramd_callbacks.c \
18-
src/ramd_metrics.c
16+
src/ramd_metrics.c \
17+
src/ramd_basebackup.c \
18+
src/ramd_conn.c \
19+
src/ramd_query.c \
20+
src/ramd_pgraft.c
1921

2022
# Link with pthread and PostgreSQL
2123
ramd_LDADD = -lpthread -L/usr/local/pgsql/lib -L/opt/homebrew/lib -lpq

ramd/include/ramd.h

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,21 +34,8 @@
3434
#define RAMD_VERSION_PATCH 0
3535
#define RAMD_VERSION_STRING "1.0.0"
3636

37-
/* Configuration constants */
38-
#define RAMD_MAX_HOSTNAME_LENGTH 256
39-
#define RAMD_MAX_PATH_LENGTH 512
40-
#define RAMD_MAX_COMMAND_LENGTH 1024
41-
#define RAMD_MAX_LOG_MESSAGE 2048
4237
/* Use centralized defaults from ramd_defaults.h */
4338
#include "ramd_defaults.h"
44-
#define RAMD_MAX_NODES RAMD_DEFAULT_MAX_NODES
45-
#define RAMD_DEFAULT_PORT RAMD_DEFAULT_PG_PORT
46-
#define RAMD_DEFAULT_DSTORE_PORT 7401
47-
48-
/* Daemon constants */
49-
#define RAMD_MONITOR_INTERVAL_MS 5000 /* 5 seconds */
50-
#define RAMD_FAILOVER_TIMEOUT_MS 30000 /* 30 seconds */
51-
#define RAMD_HEALTH_CHECK_TIMEOUT_MS 10000 /* 10 seconds */
5239

5340
/* Node states */
5441
typedef enum ramd_node_state

ramd/include/ramd_cascade.h

Lines changed: 0 additions & 65 deletions
This file was deleted.

ramd/include/ramd_cluster.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ typedef struct ramd_node_t
4040
/* Cluster structure */
4141
typedef struct ramd_cluster_t
4242
{
43-
char cluster_name[64];
43+
char cluster_name[RAMD_MAX_HOSTNAME_LENGTH];
4444
int32_t node_count;
4545
ramd_node_t nodes[RAMD_MAX_NODES];
4646
int32_t primary_node_id;

ramd/include/ramd_config.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,14 @@ typedef struct ramd_config
2929
char postgresql_data_dir[RAMD_MAX_PATH_LENGTH];
3030
char postgresql_config_file[RAMD_MAX_PATH_LENGTH];
3131
char postgresql_log_dir[RAMD_MAX_PATH_LENGTH];
32-
char database_name[64];
33-
char database_user[64];
34-
char database_password[64];
35-
char postgresql_user[64];
36-
char replication_user[64];
32+
char database_name[RAMD_MAX_HOSTNAME_LENGTH];
33+
char database_user[RAMD_MAX_HOSTNAME_LENGTH];
34+
char database_password[RAMD_MAX_HOSTNAME_LENGTH];
35+
char postgresql_user[RAMD_MAX_HOSTNAME_LENGTH];
36+
char replication_user[RAMD_MAX_HOSTNAME_LENGTH];
3737

3838
/* Cluster settings */
39-
char cluster_name[64];
39+
char cluster_name[RAMD_MAX_HOSTNAME_LENGTH];
4040
int32_t cluster_size;
4141
bool auto_failover_enabled;
4242
bool synchronous_replication;
@@ -55,13 +55,13 @@ typedef struct ramd_config
5555

5656
/* HTTP API settings */
5757
bool http_api_enabled;
58-
char http_bind_address[64];
58+
char http_bind_address[RAMD_MAX_HOSTNAME_LENGTH];
5959
int32_t http_port;
6060
bool http_auth_enabled;
61-
char http_auth_token[256];
61+
char http_auth_token[RAMD_MAX_COMMAND_LENGTH];
6262

6363
/* Synchronous replication settings */
64-
char sync_standby_names[512];
64+
char sync_standby_names[RAMD_MAX_COMMAND_LENGTH];
6565
int32_t num_sync_standbys;
6666
int32_t sync_timeout_ms;
6767
bool enforce_sync_standbys;
@@ -74,9 +74,9 @@ typedef struct ramd_config
7474
/* Daemon settings */
7575
char pid_file[RAMD_MAX_PATH_LENGTH];
7676
bool daemonize;
77-
char user[64];
78-
char group[64];
79-
char backup_dir[256];
77+
char user[RAMD_MAX_HOSTNAME_LENGTH];
78+
char group[RAMD_MAX_HOSTNAME_LENGTH];
79+
char backup_dir[RAMD_MAX_PATH_LENGTH];
8080
} ramd_config_t;
8181

8282
/* Configuration functions */

ramd/include/ramd_defaults.h

Lines changed: 73 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,52 +11,99 @@
1111
#ifndef RAMD_DEFAULTS_H
1212
#define RAMD_DEFAULTS_H
1313

14+
/* Basic Size Constants */
15+
#define RAMD_MAX_HOSTNAME_LENGTH 256
16+
#define RAMD_MAX_PATH_LENGTH 512
17+
#define RAMD_MAX_COMMAND_LENGTH 1024
18+
#define RAMD_MAX_LOG_MESSAGE 2048
19+
#define RAMD_MAX_NODES 16
20+
21+
/* Daemon Constants */
22+
#define RAMD_MONITOR_INTERVAL_MS 5000
23+
#define RAMD_FAILOVER_TIMEOUT_MS 30000
24+
#define RAMD_HEALTH_CHECK_TIMEOUT_MS 10000
25+
#define RAMD_DEFAULT_PORT 8008
26+
1427
/* PostgreSQL Default Paths */
15-
#define RAMD_DEFAULT_PG_BIN_DIR "/usr/bin"
16-
#define RAMD_DEFAULT_PG_DATA_DIR "/var/lib/postgresql/data"
17-
#define RAMD_DEFAULT_PG_LOG_DIR "/var/log/postgresql"
18-
#define RAMD_DEFAULT_PG_ARCHIVE_DIR "/var/lib/postgresql/archive"
28+
#define RAMD_DEFAULT_PG_BIN_DIR "/usr/bin"
29+
#define RAMD_DEFAULT_PG_DATA_DIR "/var/lib/postgresql/data"
30+
#define RAMD_DEFAULT_PG_LOG_DIR "/var/log/postgresql"
31+
#define RAMD_DEFAULT_PG_ARCHIVE_DIR "/var/lib/postgresql/archive"
1932

2033
/* PostgreSQL Default Connection Parameters */
21-
#define RAMD_DEFAULT_PG_DATABASE "postgres"
22-
#define RAMD_DEFAULT_PG_USER "postgres"
23-
#define RAMD_DEFAULT_PG_PORT 5432
34+
#define RAMD_DEFAULT_PG_DATABASE "postgres"
35+
#define RAMD_DEFAULT_PG_USER "postgres"
36+
#define RAMD_DEFAULT_PG_PORT 5432
2437

2538
/* Network Security Defaults */
26-
#define RAMD_DEFAULT_NETWORK_RANGE "127.0.0.1/32"
39+
#define RAMD_DEFAULT_NETWORK_RANGE "127.0.0.1/32"
2740

2841
/* HTTP API Defaults */
29-
#define RAMD_DEFAULT_HTTP_PORT 8008
30-
#define RAMD_DEFAULT_HTTP_BIND_ADDRESS "127.0.0.1"
42+
#define RAMD_DEFAULT_HTTP_PORT 8008
43+
#define RAMD_DEFAULT_HTTP_BIND_ADDRESS "127.0.0.1"
3144

3245
/* RALE (Raft-like Leader Election) Defaults */
33-
#define RAMD_DEFAULT_RALE_PORT 7400
34-
#define RAMD_DEFAULT_DSTORE_PORT 24000
46+
#define RAMD_DEFAULT_RALE_PORT 7400
47+
#define RAMD_DEFAULT_DSTORE_PORT 24000
3548

3649
/* Cluster Defaults */
37-
#define RAMD_DEFAULT_CLUSTER_NAME "pgraft_cluster"
38-
#define RAMD_DEFAULT_CLUSTER_SIZE 3
39-
#define RAMD_DEFAULT_MAX_NODES 16
50+
#define RAMD_DEFAULT_CLUSTER_NAME "pgraft_cluster"
51+
#define RAMD_DEFAULT_CLUSTER_SIZE 3
52+
#define RAMD_DEFAULT_MAX_NODES 16
4053

4154
/* Timeouts and Intervals (in seconds) */
42-
#define RAMD_DEFAULT_FAILOVER_TIMEOUT 60
55+
#define RAMD_DEFAULT_FAILOVER_TIMEOUT 60
4356
#define RAMD_DEFAULT_HEALTH_CHECK_INTERVAL 5
44-
#define RAMD_DEFAULT_CONNECTION_TIMEOUT 30
45-
#define RAMD_DEFAULT_RECOVERY_TIMEOUT_MS 300000
46-
#define RAMD_NODE_TIMEOUT_SECONDS 300
47-
#define RAMD_HEALTH_SCORE_THRESHOLD 50.0f
57+
#define RAMD_DEFAULT_CONNECTION_TIMEOUT 30
58+
#define RAMD_DEFAULT_RECOVERY_TIMEOUT_MS 300000
59+
#define RAMD_NODE_TIMEOUT_SECONDS 300
60+
#define RAMD_HEALTH_SCORE_THRESHOLD 50.0f
61+
#define RAMD_MAX_HEALTH_SCORE 1.0f
62+
#define RAMD_MIN_HEALTH_SCORE 0.0f
63+
#define RAMD_FAILOVER_THRESHOLD 3
64+
#define RAMD_FAILOVER_SLEEP_SECONDS 3
65+
#define RAMD_FAILOVER_VALIDATION_SLEEP_SECONDS 5
66+
67+
/* Health Score Constants */
68+
#define RAMD_HEALTH_BASE_SCORE 50.0f
69+
#define RAMD_HEALTH_PRIMARY_BONUS 30.0f
70+
#define RAMD_HEALTH_STANDBY_SCORE 20.0f
71+
#define RAMD_HEALTH_WAL_SCORE 15.0f
72+
#define RAMD_HEALTH_VACUUM_BONUS 5.0f
73+
#define RAMD_MAX_VACUUM_PROCESSES 5
74+
#define RAMD_POSTGRESQL_RESTART_DELAY 2
75+
76+
/* Logging Constants */
77+
#define RAMD_MAX_TIMESTAMP_LENGTH 64
78+
#define RAMD_MAX_USERNAME_LENGTH 256
79+
80+
/* API Path Lengths */
81+
#define RAMD_API_PROMOTE_PATH_LEN 16
82+
#define RAMD_API_DEMOTE_PATH_LEN 15
83+
#define RAMD_API_NODES_PATH_LEN 14
84+
85+
/* Maintenance Constants */
86+
#define RAMD_MAINTENANCE_SCHEDULE_DELAY_HOURS 1
87+
88+
/* Metrics Constants */
89+
#define RAMD_METRICS_COLLECTION_INTERVAL_MS 5000
90+
#define RAMD_KILOBYTE_TO_BYTES 1024
91+
#define RAMD_PRIMARY_NODE_COUNT 1
92+
#define RAMD_DEFAULT_MAINTENANCE_TIMEOUT_MS 300000
93+
#define RAMD_MAX_LINE_LENGTH 1024
94+
#define RAMD_HTTP_MAX_CONNECTIONS 128
4895

4996
/* Replication Defaults */
5097
#define RAMD_DEFAULT_REPLICATION_LAG_THRESHOLD 5000 /* microseconds */
51-
#define RAMD_DEFAULT_SYNC_TIMEOUT_MS 10000
98+
#define RAMD_DEFAULT_SYNC_TIMEOUT_MS 10000
5299

53100
/* File Paths */
54-
#define RAMD_DEFAULT_CONFIG_FILE "/etc/ramd/ramd.conf"
55-
#define RAMD_DEFAULT_PID_FILE "/var/run/ramd.pid"
56-
#define RAMD_DEFAULT_LOG_FILE "/var/log/ramd.log"
101+
#define RAMD_DEFAULT_CONFIG_FILE "/etc/ramd/ramd.conf"
102+
#define RAMD_DEFAULT_PID_FILE "/var/run/ramd.pid"
103+
#define RAMD_DEFAULT_LOG_FILE "/var/log/ramd.log"
57104

58105
/* Temporary/Development Paths */
59-
#define RAMD_FALLBACK_DATA_DIR "/tmp/postgresql/data"
60-
#define RAMD_FALLBACK_ARCHIVE_DIR "/tmp/postgresql/archive"
106+
#define RAMD_FALLBACK_DATA_DIR "/tmp/postgresql/data"
107+
#define RAMD_FALLBACK_ARCHIVE_DIR "/tmp/postgresql/archive"
61108

62109
#endif /* RAMD_DEFAULTS_H */

ramd/include/ramd_failover.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ typedef struct ramd_failover_context_t
3434
int32_t new_primary_node_id;
3535
time_t started_at;
3636
time_t completed_at;
37-
char reason[256];
37+
char reason[RAMD_MAX_HOSTNAME_LENGTH];
3838
bool auto_triggered;
3939
int32_t retry_count;
4040
} ramd_failover_context_t;

ramd/include/ramd_http_api.h

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,8 @@
2020
/* HTTP API Configuration */
2121
#include "ramd_defaults.h"
2222
#define RAMD_HTTP_DEFAULT_PORT RAMD_DEFAULT_HTTP_PORT
23-
#define RAMD_HTTP_MAX_CONNECTIONS 64
24-
#define RAMD_HTTP_MAX_REQUEST_SIZE 8192
25-
#define RAMD_HTTP_MAX_RESPONSE_SIZE 16384
23+
#define RAMD_HTTP_MAX_REQUEST_SIZE RAMD_MAX_COMMAND_LENGTH
24+
#define RAMD_HTTP_MAX_RESPONSE_SIZE (RAMD_MAX_COMMAND_LENGTH * 2)
2625

2726
/* HTTP Methods */
2827
typedef enum
@@ -52,22 +51,22 @@ typedef enum
5251
typedef struct ramd_http_request_t
5352
{
5453
ramd_http_method_t method;
55-
char path[256];
56-
char query_string[512];
54+
char path[RAMD_MAX_PATH_LENGTH];
55+
char query_string[RAMD_MAX_COMMAND_LENGTH];
5756
char body[RAMD_HTTP_MAX_REQUEST_SIZE];
5857
size_t body_length;
59-
char headers[1024];
60-
char authorization[256];
58+
char headers[RAMD_MAX_COMMAND_LENGTH];
59+
char authorization[RAMD_MAX_HOSTNAME_LENGTH];
6160
} ramd_http_request_t;
6261

6362
/* HTTP Response Structure */
6463
typedef struct ramd_http_response_t
6564
{
6665
ramd_http_status_code_t status;
67-
char content_type[64];
66+
char content_type[RAMD_MAX_HOSTNAME_LENGTH];
6867
char body[RAMD_HTTP_MAX_RESPONSE_SIZE];
6968
size_t body_length;
70-
char headers[512];
69+
char headers[RAMD_MAX_COMMAND_LENGTH];
7170
} ramd_http_response_t;
7271

7372
/* HTTP Server Context */
@@ -78,9 +77,9 @@ typedef struct ramd_http_server_t
7877
bool running;
7978
pthread_t server_thread;
8079
pthread_mutex_t mutex;
81-
char bind_address[64];
80+
char bind_address[RAMD_MAX_HOSTNAME_LENGTH];
8281
bool auth_enabled;
83-
char auth_token[256];
82+
char auth_token[RAMD_MAX_COMMAND_LENGTH];
8483
} ramd_http_server_t;
8584

8685
/* HTTP Client Connection */

ramd/include/ramd_postgresql.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ typedef struct ramd_postgresql_connection_t
2020
{
2121
char host[RAMD_MAX_HOSTNAME_LENGTH];
2222
int32_t port;
23-
char database[64];
24-
char user[64];
25-
char password[64];
23+
char database[RAMD_MAX_HOSTNAME_LENGTH];
24+
char user[RAMD_MAX_HOSTNAME_LENGTH];
25+
char password[RAMD_MAX_HOSTNAME_LENGTH];
2626
void* connection; /* PGconn * */
2727
bool is_connected;
2828
time_t last_activity;

0 commit comments

Comments
 (0)