Implement
2001-05-04 Bradford Hovinen <hovinen@ximian.com> * cluster-location.c (cluster_location_do_rollback): Implement * location.c (location_do_rollback): Rename from do_rollback; make into virtual method (location_rollback_backend_to): (location_rollback_backend_by): (location_rollback_id): Update to call virtual method * Makefile.am (libximian_archiver_la_SOURCES): (include_HEADERS): Add cluster.[ch], cluster-location.[ch] 2001-05-03 Bradford Hovinen <hovinen@ximian.com> * cluster.[ch]: New class * cluster.c (cluster_new): (cluster_load): Implement * archive.c (archive_set_arg): Add argument ARG_IS_GLOBAL (archive_class_init): Make ARG_PREFIX construct-only (archive_construct): Implement (do_load): Remove (archive_load): Use archive_construct; pass is_global as an argument to the object constructor
This commit is contained in:
parent
7631a53d80
commit
a053572d1d
10 changed files with 972 additions and 102 deletions
222
archiver/cluster-location.c
Normal file
222
archiver/cluster-location.c
Normal file
|
@ -0,0 +1,222 @@
|
|||
/* -*- mode: c; style: linux -*- */
|
||||
|
||||
/* cluster-location.c
|
||||
* Copyright (C) 2000 Ximian, Inc.
|
||||
*
|
||||
* Written by Bradford Hovinen <hovinen@helixcode.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include "cluster.h"
|
||||
#include "cluster-location.h"
|
||||
|
||||
typedef struct _pair_t pair_t;
|
||||
|
||||
enum {
|
||||
ARG_0,
|
||||
ARG_SAMPLE
|
||||
};
|
||||
|
||||
struct _ClusterLocationPrivate
|
||||
{
|
||||
/* Private data members */
|
||||
};
|
||||
|
||||
struct _pair_t
|
||||
{
|
||||
gpointer a, b;
|
||||
};
|
||||
|
||||
static LocationClass *parent_class;
|
||||
|
||||
static void cluster_location_init (ClusterLocation *cluster_location);
|
||||
static void cluster_location_class_init (ClusterLocationClass *class);
|
||||
|
||||
static void cluster_location_set_arg (GtkObject *object,
|
||||
GtkArg *arg,
|
||||
guint arg_id);
|
||||
static void cluster_location_get_arg (GtkObject *object,
|
||||
GtkArg *arg,
|
||||
guint arg_id);
|
||||
|
||||
static void cluster_location_finalize (GtkObject *object);
|
||||
|
||||
static gboolean cluster_location_do_rollback (Location *location,
|
||||
gchar *backend_id,
|
||||
xmlDocPtr doc);
|
||||
|
||||
static gboolean host_cb (Cluster *cluster,
|
||||
gchar *hostname,
|
||||
pair_t *pair);
|
||||
|
||||
guint
|
||||
cluster_location_get_type (void)
|
||||
{
|
||||
static guint cluster_location_type = 0;
|
||||
|
||||
if (!cluster_location_type) {
|
||||
GtkTypeInfo cluster_location_info = {
|
||||
"ClusterLocation",
|
||||
sizeof (ClusterLocation),
|
||||
sizeof (ClusterLocationClass),
|
||||
(GtkClassInitFunc) cluster_location_class_init,
|
||||
(GtkObjectInitFunc) cluster_location_init,
|
||||
(GtkArgSetFunc) NULL,
|
||||
(GtkArgGetFunc) NULL
|
||||
};
|
||||
|
||||
cluster_location_type =
|
||||
gtk_type_unique (location_get_type (),
|
||||
&cluster_location_info);
|
||||
}
|
||||
|
||||
return cluster_location_type;
|
||||
}
|
||||
|
||||
static void
|
||||
cluster_location_init (ClusterLocation *cluster_location)
|
||||
{
|
||||
cluster_location->p = g_new0 (ClusterLocationPrivate, 1);
|
||||
}
|
||||
|
||||
static void
|
||||
cluster_location_class_init (ClusterLocationClass *class)
|
||||
{
|
||||
GtkObjectClass *object_class;
|
||||
LocationClass *location_class;
|
||||
|
||||
gtk_object_add_arg_type ("ClusterLocation::sample",
|
||||
GTK_TYPE_POINTER,
|
||||
GTK_ARG_READWRITE,
|
||||
ARG_SAMPLE);
|
||||
|
||||
object_class = GTK_OBJECT_CLASS (class);
|
||||
object_class->finalize = cluster_location_finalize;
|
||||
object_class->set_arg = cluster_location_set_arg;
|
||||
object_class->get_arg = cluster_location_get_arg;
|
||||
|
||||
location_class = LOCATION_CLASS (class);
|
||||
location_class->do_rollback = cluster_location_do_rollback;
|
||||
|
||||
parent_class = LOCATION_CLASS
|
||||
(gtk_type_class (location_get_type ()));
|
||||
}
|
||||
|
||||
static void
|
||||
cluster_location_set_arg (GtkObject *object, GtkArg *arg, guint arg_id)
|
||||
{
|
||||
ClusterLocation *cluster_location;
|
||||
|
||||
g_return_if_fail (object != NULL);
|
||||
g_return_if_fail (IS_CLUSTER_LOCATION (object));
|
||||
|
||||
cluster_location = CLUSTER_LOCATION (object);
|
||||
|
||||
switch (arg_id) {
|
||||
case ARG_SAMPLE:
|
||||
break;
|
||||
|
||||
default:
|
||||
g_warning ("Bad argument set");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
cluster_location_get_arg (GtkObject *object, GtkArg *arg, guint arg_id)
|
||||
{
|
||||
ClusterLocation *cluster_location;
|
||||
|
||||
g_return_if_fail (object != NULL);
|
||||
g_return_if_fail (IS_CLUSTER_LOCATION (object));
|
||||
|
||||
cluster_location = CLUSTER_LOCATION (object);
|
||||
|
||||
switch (arg_id) {
|
||||
case ARG_SAMPLE:
|
||||
break;
|
||||
|
||||
default:
|
||||
g_warning ("Bad argument get");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
cluster_location_finalize (GtkObject *object)
|
||||
{
|
||||
ClusterLocation *cluster_location;
|
||||
|
||||
g_return_if_fail (object != NULL);
|
||||
g_return_if_fail (IS_CLUSTER_LOCATION (object));
|
||||
|
||||
cluster_location = CLUSTER_LOCATION (object);
|
||||
|
||||
g_free (cluster_location->p);
|
||||
|
||||
GTK_OBJECT_CLASS (parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
GtkObject *
|
||||
cluster_location_new (void)
|
||||
{
|
||||
return gtk_object_new (cluster_location_get_type (),
|
||||
NULL);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
cluster_location_do_rollback (Location *location, gchar *backend_id,
|
||||
xmlDocPtr doc)
|
||||
{
|
||||
Cluster *cluster;
|
||||
pair_t pair;
|
||||
|
||||
g_return_val_if_fail (location != NULL, FALSE);
|
||||
g_return_val_if_fail (IS_CLUSTER_LOCATION (location), FALSE);
|
||||
g_return_val_if_fail (backend_id != NULL, FALSE);
|
||||
g_return_val_if_fail (doc != NULL, FALSE);
|
||||
|
||||
gtk_object_get (GTK_OBJECT (location), "archive", &cluster, NULL);
|
||||
pair.a = doc;
|
||||
pair.b = backend_id;
|
||||
cluster_foreach_host (cluster, (ClusterHostCB) host_cb, &pair);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
host_cb (Cluster *cluster, gchar *hostname, pair_t *pair)
|
||||
{
|
||||
xmlDocPtr doc;
|
||||
gchar *backend_id, *command;
|
||||
FILE *output;
|
||||
|
||||
doc = pair->a;
|
||||
backend_id = pair->b;
|
||||
command = g_strconcat ("ssh ", hostname, " ", backend_id, " --set",
|
||||
NULL);
|
||||
output = popen (command, "w");
|
||||
xmlDocDump (output, doc);
|
||||
pclose (output);
|
||||
g_free (command);
|
||||
|
||||
return FALSE;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue