perf: faster builds, leaner daemon, smoother install/run (0.9.20)

Reuse libcstcore.a for tests with -MMD incremental deps; idle-backoff the
parliament seat loop; defer curl init and cache settings; add systemd helper.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
WHC
2026-10-29 11:41:16 +08:00
co-authored by Cursor
parent 812e3ee265
commit 2f96b050d6
13 changed files with 278 additions and 103 deletions
+27 -4
View File
@@ -139,6 +139,26 @@ int cst_discover_local_put(const char *realm_fp, const char *instance_id,
arr = cJSON_CreateArray();
cJSON_AddItemToObject(root, "instances", arr);
}
time_t now = time(NULL);
const cJSON *it;
cJSON_ArrayForEach(it, arr) {
const cJSON *iid = cJSON_GetObjectItemCaseSensitive(it, "iid");
const cJSON *rid = cJSON_GetObjectItemCaseSensitive(it, "rid");
const cJSON *port = cJSON_GetObjectItemCaseSensitive(it, "port");
const cJSON *updated = cJSON_GetObjectItemCaseSensitive(it, "updated");
if (!cJSON_IsString(iid) || strcmp(iid->valuestring, instance_id) != 0)
continue;
if (cJSON_IsString(rid) && !strcmp(rid->valuestring, realm_fp) &&
cJSON_IsNumber(port) && port->valueint == peer_port &&
cJSON_IsNumber(updated) &&
now - (time_t)updated->valuedouble < 60) {
/* Same seat advertisement still fresh — skip disk rewrite. */
cJSON_Delete(root);
pthread_mutex_unlock(&local_mu);
return 0;
}
break;
}
local_remove_iid(arr, instance_id);
cJSON *row = cJSON_CreateObject();
cJSON_AddStringToObject(row, "rid", realm_fp);
@@ -146,7 +166,7 @@ int cst_discover_local_put(const char *realm_fp, const char *instance_id,
cJSON_AddStringToObject(row, "name", name ? name : "");
cJSON_AddNumberToObject(row, "port", peer_port);
cJSON_AddNumberToObject(row, "pid", (double)os_getpid());
cJSON_AddNumberToObject(row, "updated", (double)time(NULL));
cJSON_AddNumberToObject(row, "updated", (double)now);
cJSON_AddItemToArray(arr, row);
int rc = save_local(root);
cJSON_Delete(root);
@@ -283,12 +303,15 @@ static void *discover_main(void *arg) {
cst_discover_t *d = arg;
int ticks = 0;
while (!d->stop) {
if ((ticks++ % 10) == 0) {
/* ~100ms recv timeout: beacon every ~5s, rewrite local registry ~60s. */
if ((ticks % 50) == 0) {
send_beacon(d);
(void)cst_discover_local_put(d->realm_fp, d->instance_id, d->name,
d->peer_port);
if ((ticks / 50) % 12 == 0)
(void)cst_discover_local_put(d->realm_fp, d->instance_id, d->name,
d->peer_port);
ingest_local(d);
}
ticks++;
if (d->sock == DISC_BAD) {
struct timespec ts = {0, 100 * 1000 * 1000};
nanosleep(&ts, NULL);