gfarm_error_t gfs_statfsnode(char *host, int port, gfarm_int32_t *bsize, gfarm_off_t *blocks, gfarm_off_t *bfree, gfarm_off_t *bavail, gfarm_off_t *files, gfarm_off_t *ffree, gfarm_off_t *favail) { gfarm_error_t e; struct gfm_connection *gfm_server; struct gfs_connection *gfs_server; int retry = 0; for (;;) { if ((e = gfm_client_connection_and_process_acquire( gfarm_metadb_server_name, gfarm_metadb_server_port, &gfm_server)) != GFARM_ERR_NO_ERROR) return (e); if ((e = gfs_client_connection_acquire_by_host(gfm_server, host, port, &gfs_server, NULL))!= GFARM_ERR_NO_ERROR) goto free_gfm_connection; if (gfs_client_pid(gfs_server) == 0) e = gfarm_client_process_set(gfs_server, gfm_server); if (e == GFARM_ERR_NO_ERROR) { /* "/" is actually not used */ e = gfs_client_statfs(gfs_server, "/", bsize, blocks, bfree, bavail, files, ffree, favail); if (gfs_client_is_connection_error(e) && ++retry<=1) { gfs_client_connection_free(gfs_server); continue; } } break; } gfs_client_connection_free(gfs_server); free_gfm_connection: gfm_client_connection_free(gfm_server); return (e); }
/* XXX FIXME */ static gfarm_error_t gfs_replicate_from_to_internal(GFS_File gf, char *srchost, int srcport, char *dsthost, int dstport) { gfarm_error_t e; struct gfm_connection *gfm_server = gfs_pio_metadb(gf); struct gfs_connection *gfs_server; int nretry = 1, gfsd_retried = 0, failover_retried = 0; retry: gfm_server = gfs_pio_metadb(gf); if ((e = gfs_client_connection_and_process_acquire( &gfm_server, dsthost, dstport, &gfs_server, NULL)) != GFARM_ERR_NO_ERROR) { gflog_debug(GFARM_MSG_1001388, "acquirement of client connection failed: %s", gfarm_error_string(e)); return (e); } e = gfs_client_replica_add_from(gfs_server, srchost, srcport, gfs_pio_fileno(gf)); gfs_client_connection_free(gfs_server); if (e != GFARM_ERR_NO_ERROR) { gflog_debug(GFARM_MSG_1003878, "gfs_client_replica_add_from: %s", gfarm_error_string(e)); if (nretry-- > 0) { if (gfs_client_is_connection_error(e)) { gfsd_retried = 1; goto retry; } if (gfs_pio_should_failover(gf, e)) { if ((e = gfs_pio_failover(gf)) != GFARM_ERR_NO_ERROR) { gflog_debug(GFARM_MSG_1003879, "gfs_pio_failover: %s", gfarm_error_string(e)); } else { failover_retried = 1; goto retry; } } } } if ((e == GFARM_ERR_ALREADY_EXISTS || e == GFARM_ERR_FILE_BUSY) && (gfsd_retried || failover_retried)) { gflog_warning(GFARM_MSG_1003453, "error ocurred at retry for the operation after " "connection to %s, " "so the operation possibly succeeded in the server." " error='%s'", gfsd_retried && failover_retried ? "gfsd was disconnected and connection to " "gfmd was failed over" : gfsd_retried ? "gfsd was disconnected" : "gfmd was failed over" , gfarm_error_string(e)); } return (e); }