[glusterfs/f18] glusterfs-3.3.1-14, added multi-volume fix/support for G4S/UFO
Kaleb S. KEITHLEY
kkeithle at fedoraproject.org
Tue Apr 30 16:26:57 UTC 2013
commit d7cec693e11594a450894dcb6ce98a87a38f5c62
Author: Kaleb S. KEITHLEY <kkeithle at redhat.com>
Date: Tue Apr 30 12:26:14 2013 -0400
glusterfs-3.3.1-14, added multi-volume fix/support for G4S/UFO
...3.1.ufo.gluster.multi-volume.backport-1.1.patch | 406 ++++++++++++++++++++
glusterfs.spec | 259 ++++----------
sources | 6 +-
3 files changed, 474 insertions(+), 197 deletions(-)
---
diff --git a/glusterfs-3.3.1.ufo.gluster.multi-volume.backport-1.1.patch b/glusterfs-3.3.1.ufo.gluster.multi-volume.backport-1.1.patch
new file mode 100644
index 0000000..6d7830b
--- /dev/null
+++ b/glusterfs-3.3.1.ufo.gluster.multi-volume.backport-1.1.patch
@@ -0,0 +1,406 @@
+diff -ru a/ufo/bin/gluster-swift-gen-builders b/ufo/bin/gluster-swift-gen-builders
+--- a/ufo/bin/gluster-swift-gen-builders 2012-12-07 12:24:00.000000000 -0500
++++ b/ufo/bin/gluster-swift-gen-builders 2013-04-29 15:16:22.748000000 -0400
+@@ -1,9 +1,25 @@
+ #!/bin/bash
+
++# Note that these port numbers must match the configured values for the
++# various servers in their configuration files.
++declare -A port=(["account.builder"]=6012 ["container.builder"]=6011 \
++ ["object.builder"]=6010)
++
++builder_files="account.builder container.builder object.builder"
++
+ function create {
+- swift-ring-builder $1 create 0 1 1
+- swift-ring-builder $1 add z1-127.0.0.1:$2/$3_ 100.0
++ swift-ring-builder $1 create 1 1 1 >> /tmp/out
++}
++
++function add {
++ swift-ring-builder $1 add z$2-127.0.0.1:$3/$4_ 100.0
++}
++
++function rebalance {
+ swift-ring-builder $1 rebalance
++}
++
++function build {
+ swift-ring-builder $1
+ }
+
+@@ -12,8 +28,17 @@
+ exit 1
+ fi
+
+-# Note that these port numbers must match the configured values for the
+-# various servers in their configuration files.
+-create account.builder 6012 $1
+-create container.builder 6011 $1
+-create object.builder 6010 $1
++for builder_file in $builder_files
++do
++ create $builder_file
++
++ zone=1
++ for volname in $@
++ do
++ add $builder_file $zone ${port[$builder_file]} $volname
++ zone=$(expr $zone + 1)
++ done
++
++ rebalance $builder_file
++ build $builder_file
++done
+diff -ru a/ufo/etc/fs.conf-gluster b/ufo/etc/fs.conf-gluster
+--- a/ufo/etc/fs.conf-gluster 2012-12-07 12:24:00.000000000 -0500
++++ b/ufo/etc/fs.conf-gluster 2013-04-29 15:16:22.752000000 -0400
+@@ -3,10 +3,6 @@
+ # local host.
+ mount_ip = localhost
+
+-# The GlusterFS server need not be local, a remote server can also be used
+-# by setting "remote_cluster = yes".
+-remote_cluster = no
+-
+ # By default it is assumed the Gluster volumes can be accessed using other
+ # methods besides UFO (not object only), which disables a caching
+ # optimizations in order to keep in sync with file system changes.
+diff -ru a/ufo/gluster/swift/common/constraints.py b/ufo/gluster/swift/common/constraints.py
+--- a/ufo/gluster/swift/common/constraints.py 2012-12-07 12:24:00.000000000 -0500
++++ b/ufo/gluster/swift/common/constraints.py 2013-04-29 15:16:22.749000000 -0400
+@@ -16,7 +16,8 @@
+ from webob.exc import HTTPBadRequest
+
+ import swift.common.constraints
+-from gluster.swift.common import Glusterfs
++import swift.common.ring as _ring
++from gluster.swift.common import Glusterfs, ring
+
+
+ MAX_OBJECT_NAME_COMPONENT_LENGTH = swift.common.constraints.constraints_conf_int(
+@@ -80,3 +81,9 @@
+
+ # Replace the original check mount with ours
+ swift.common.constraints.check_mount = gluster_check_mount
++
++# Save the original Ring class
++__Ring = _ring.Ring
++
++# Replace the original Ring class
++_ring.Ring = ring.Ring
+diff -ru a/ufo/gluster/swift/common/Glusterfs.py b/ufo/gluster/swift/common/Glusterfs.py
+--- a/ufo/gluster/swift/common/Glusterfs.py 2012-12-07 12:24:00.000000000 -0500
++++ b/ufo/gluster/swift/common/Glusterfs.py 2013-04-29 15:16:22.753000000 -0400
+@@ -12,33 +12,35 @@
+ # implied.
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
++
+ import logging
+ import os, fcntl, time
+-from ConfigParser import ConfigParser
+-from swift.common.utils import TRUE_VALUES
++from ConfigParser import ConfigParser, NoSectionError, NoOptionError
++from swift.common.utils import TRUE_VALUES, search_tree
+ from gluster.swift.common.fs_utils import mkdirs
+
+-
+ #
+ # Read the fs.conf file once at startup (module load)
+ #
+ _fs_conf = ConfigParser()
+ MOUNT_IP = 'localhost'
+-REMOTE_CLUSTER = False
+ OBJECT_ONLY = False
++RUN_DIR='/var/run/swift'
++SWIFT_DIR = '/etc/swift'
+ if _fs_conf.read(os.path.join('/etc/swift', 'fs.conf')):
+ try:
+ MOUNT_IP = _fs_conf.get('DEFAULT', 'mount_ip', 'localhost')
+ except (NoSectionError, NoOptionError):
+ pass
+ try:
+- REMOTE_CLUSTER = _fs_conf.get('DEFAULT', 'remote_cluster', False) in TRUE_VALUES
++ OBJECT_ONLY = _fs_conf.get('DEFAULT', 'object_only', "no") in TRUE_VALUES
+ except (NoSectionError, NoOptionError):
+ pass
+ try:
+- OBJECT_ONLY = _fs_conf.get('DEFAULT', 'object_only', "no") in TRUE_VALUES
++ RUN_DIR = _fs_conf.get('DEFAULT', 'run_dir', '/var/run/swift')
+ except (NoSectionError, NoOptionError):
+ pass
++
+ NAME = 'glusterfs'
+
+
+@@ -60,7 +62,7 @@
+ if drive == export:
+ break
+ else:
+- logging.error('No export found in %r matching drive %s', el, drive)
++ logging.error('No export found in %r matching drive, %s', el, drive)
+ return False
+
+ # NOTE: root is typically the default value of /mnt/gluster-object
+@@ -68,13 +70,12 @@
+ if not os.path.isdir(full_mount_path):
+ mkdirs(full_mount_path)
+
+- pid_dir = "/var/lib/glusterd/vols/%s/run/" % drive
+- pid_file = os.path.join(pid_dir, 'swift.pid');
++ lck_file = os.path.join(RUN_DIR, '%s.lock' %drive);
+
+- if not os.path.exists(pid_dir):
+- mkdirs(pid_dir)
++ if not os.path.exists(RUN_DIR):
++ mkdirs(RUN_DIR)
+
+- fd = os.open(pid_file, os.O_CREAT|os.O_RDWR)
++ fd = os.open(lck_file, os.O_CREAT|os.O_RDWR)
+ with os.fdopen(fd, 'r+b') as f:
+ try:
+ fcntl.lockf(f, fcntl.LOCK_EX|fcntl.LOCK_NB)
+@@ -100,19 +101,12 @@
+ logging.error('Unable to unmount %s %s' % (full_mount_path, NAME))
+
+ def _get_export_list():
+- if REMOTE_CLUSTER:
+- cmnd = 'gluster --remote-host=%s volume info' % MOUNT_IP
+- else:
+- cmnd = 'gluster volume info'
++ cmnd = 'gluster --remote-host=%s volume info' % MOUNT_IP
+
+ export_list = []
+
+ if os.system(cmnd + ' >> /dev/null'):
+- if REMOTE_CLUSTER:
+- logging.error('Getting volume info failed for %s, make sure '\
+- 'gluster --remote-host=%s works', NAME, MOUNT_IP)
+- else:
+- logging.error('Getting volume info failed for %s', NAME)
++ logging.error('Getting volume info failed for %s', NAME)
+ else:
+ fp = os.popen(cmnd)
+ while True:
+@@ -124,3 +118,20 @@
+ export_list.append(item.split(':')[1].strip(' '))
+
+ return export_list
++
++def get_mnt_point(vol_name, conf_dir=SWIFT_DIR, conf_file="object-server*"):
++ """Read the object-server's configuration file and return
++ the device value"""
++
++ mnt_dir = ''
++ conf_files = search_tree(conf_dir, conf_file, '.conf')
++ if not conf_files:
++ raise Exception("Config file not found")
++
++ _conf = ConfigParser()
++ if _conf.read(conf_files[0]):
++ try:
++ mnt_dir = _conf.get('DEFAULT', 'devices', '')
++ except (NoSectionError, NoOptionError):
++ raise
++ return os.path.join(mnt_dir, vol_name)
+diff -ru a/ufo/gluster/swift/common/ring.py b/ufo/gluster/swift/common/ring.py
+--- a/ufo/gluster/swift/common/ring.py 2013-04-30 08:21:55.948000000 -0400
++++ b/ufo/gluster/swift/common/ring.py 2013-04-29 15:16:22.755000000 -0400
+@@ -0,0 +1,111 @@
++# Copyright (c) 2013 Red Hat, Inc.
++#
++# Licensed under the Apache License, Version 2.0 (the "License");
++# you may not use this file except in compliance with the License.
++# You may obtain a copy of the License at
++#
++# http://www.apache.org/licenses/LICENSE-2.0
++#
++# Unless required by applicable law or agreed to in writing, software
++# distributed under the License is distributed on an "AS IS" BASIS,
++# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
++# implied.
++# See the License for the specific language governing permissions and
++# limitations under the License.
++
++from ConfigParser import ConfigParser
++from swift.common.ring import ring
++from swift.common.utils import search_tree
++from gluster.swift.common.Glusterfs import SWIFT_DIR
++
++reseller_prefix = "AUTH_"
++conf_files = search_tree(SWIFT_DIR, "proxy-server*", 'conf')
++if conf_files:
++ conf_file = conf_files[0]
++
++_conf = ConfigParser()
++if conf_files and _conf.read(conf_file):
++ if _conf.defaults().get("reseller_prefix", None):
++ reseller_prefix = _conf.defaults().get("reseller_prefix")
++ else:
++ for key, value in _conf._sections.items():
++ if value.get("reseller_prefix", None):
++ reseller_prefix = value["reseller_prefix"]
++ break
++
++if not reseller_prefix.endswith('_'):
++ reseller_prefix = reseller_prefix + '_'
++
++class Ring(ring.Ring):
++ def _get_part_nodes(self, part):
++ seen_ids = set()
++ nodes = [dev for dev in self._devs \
++ if dev['device'] == self.acc_name \
++ and not (dev['id'] in seen_ids \
++ or seen_ids.add(dev['id']))]
++ if not nodes:
++ nodes = [self.false_node]
++ return nodes
++
++ def get_part_nodes(self, part):
++ """
++ Get the nodes that are responsible for the partition. If one
++ node is responsible for more than one replica of the same
++ partition, it will only appear in the output once.
++
++ :param part: partition to get nodes for
++ :returns: list of node dicts
++
++ See :func:`get_nodes` for a description of the node dicts.
++ """
++ return self._get_part_nodes(part)
++
++ def get_nodes(self, account, container=None, obj=None):
++ """
++ Get the partition and nodes for an account/container/object.
++ If a node is responsible for more than one replica, it will
++ only appear in the output once.
++ :param account: account name
++ :param container: container name
++ :param obj: object name
++ :returns: a tuple of (partition, list of node dicts)
++
++ Each node dict will have at least the following keys:
++ ====== ===============================================================
++ id unique integer identifier amongst devices
++ weight a float of the relative weight of this device as compared to
++ others; this indicates how many partitions the builder will try
++ to assign to this device
++ zone integer indicating which zone the device is in; a given
++ partition will not be assigned to multiple devices within the
++ same zone
++ ip the ip address of the device
++ port the tcp port of the device
++ device the device's name on disk (sdb1, for example)
++ meta general use 'extra' field; for example: the online date, the
++ hardware description
++ ====== ===============================================================
++ """
++ self.false_node = {'zone': 1, 'weight': 100.0, 'ip': '127.0.0.1', 'id': 0, \
++ 'meta': '', 'device': 'volume_not_in_ring', \
++ 'port': 6012}
++ if account.startswith(reseller_prefix):
++ self.acc_name = account.replace(reseller_prefix, '', 1)
++ else:
++ self.acc_name = account
++
++ part = 0
++ return part, self._get_part_nodes(part)
++
++
++ def get_more_nodes(self, part):
++ """
++ Generator to get extra nodes for a partition for hinted handoff.
++
++ :param part: partition to get handoff nodes for
++ :returns: generator of node dicts
++
++ See :func:`get_nodes` for a description of the node dicts.
++ Should never be called in the swift UFO environment, so yield nothing
++ """
++ yield self.false_node
+diff -ru a/ufo/test/unit/common/test_ring.py b/ufo/test/unit/common/test_ring.py
+--- a/ufo/test/unit/common/test_ring.py 2013-04-30 08:22:08.975000000 -0400
++++ b/ufo/test/unit/common/test_ring.py 2013-04-29 15:16:22.756000000 -0400
+@@ -0,0 +1,81 @@
++# Copyright (c) 2013 Red Hat, Inc.
++#
++# Licensed under the Apache License, Version 2.0 (the "License");
++# you may not use this file except in compliance with the License.
++# You may obtain a copy of the License at
++#
++# http://www.apache.org/licenses/LICENSE-2.0
++#
++# Unless required by applicable law or agreed to in writing, software
++# distributed under the License is distributed on an "AS IS" BASIS,
++# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
++# implied.
++# See the License for the specific language governing permissions and
++# limitations under the License.
++
++import unittest
++import gluster.swift.common.constraints
++from gluster.swift.common.ring import *
++from gluster.swift.common.Glusterfs import SWIFT_DIR
++
++def _mock_ring_data():
++ return [{'zone': 1, 'weight': 100.0, 'ip': '127.0.0.1', 'port': 6012, \
++ 'meta': '', 'device': 'test', 'id': 0},
++ {'zone': 2, 'weight': 100.0, 'ip': '127.0.0.1', 'id': 1, \
++ 'meta': '', 'device': 'iops', 'port': 6012}]
++
++class TestRing(unittest.TestCase):
++ """ Tests for common.utils """
++
++ def setUp(self):
++ self.ring = Ring(SWIFT_DIR, ring_name='object')
++
++ def test_first_device(self):
++ try:
++ __devs = self.ring._devs
++ self.ring._devs = _mock_ring_data()
++
++ part, node = self.ring.get_nodes('test')
++ assert node[0]['device'] == 'test'
++ node = self.ring.get_part_nodes(0)
++ assert node[0]['device'] == 'test'
++ for node in self.ring.get_more_nodes(0):
++ assert node['device'] == 'volume_not_in_ring'
++ finally:
++ self.ring._devs = __devs
++
++ def test_invalid_device(self):
++ try:
++ __devs = self.ring._devs
++ self.ring._devs = _mock_ring_data()
++
++ part, node = self.ring.get_nodes('test2')
++ assert node[0]['device'] == 'volume_not_in_ring'
++ node = self.ring.get_part_nodes(0)
++ assert node[0]['device'] == 'volume_not_in_ring'
++ finally:
++ self.ring._devs = __devs
++
++ def test_second_device(self):
++ try:
++ __devs = self.ring._devs
++ self.ring._devs = _mock_ring_data()
++
++ part, node = self.ring.get_nodes('iops')
++ assert node[0]['device'] == 'iops'
++ node = self.ring.get_part_nodes(0)
++ assert node[0]['device'] == 'iops'
++ for node in self.ring.get_more_nodes(0):
++ assert node['device'] == 'volume_not_in_ring'
++ finally:
++ self.ring._devs = __devs
++
++ def test_second_device_with_reseller_prefix(self):
++ try:
++ __devs = self.ring._devs
++ self.ring._devs = _mock_ring_data()
++
++ part, node = self.ring.get_nodes('AUTH_iops')
++ assert node[0]['device'] == 'iops'
++ finally:
++ self.ring._devs = __devs
diff --git a/glusterfs.spec b/glusterfs.spec
index 3a7d2bf..75d111e 100644
--- a/glusterfs.spec
+++ b/glusterfs.spec
@@ -1,8 +1,8 @@
%global _for_fedora_koji_builds 1
-# use the prerel for pre-releases
-%global prereltag alpha3
+# uncomment and add '%' to use the prereltag for pre-releases
+# global prereltag alpha
# if you wish to compile an rpm without rdma support, compile like this...
# rpmbuild -ta @PACKAGE_NAME at -@PACKAGE_VERSION at .tar.gz --without rdma
@@ -17,33 +17,23 @@
# rpmbuild -ta @PACKAGE_NAME at -@PACKAGE_VERSION at .tar.gz --without epoll
%{?_without_epoll:%global _without_epoll --disable-epoll}
-# if you wish to compile an rpm without fusermount...
-# rpmbuild -ta @PACKAGE_NAME at -@PACKAGE_VERSION at .tar.gz --without fusermount
-%{?_without_fusermount:%global _without_fusermount --disable-fusermount}
+# if you wish to compile an rpm with fusermount...
+# rpmbuild -ta @PACKAGE_NAME at -@PACKAGE_VERSION at .tar.gz --with fusermount
+%{?_with_fusermount:%global _with_fusermount --enable-fusermount}
# if you wish to compile an rpm without geo-replication support, compile like this...
# rpmbuild -ta @PACKAGE_NAME at -@PACKAGE_VERSION at .tar.gz --without georeplication
%{?_without_georeplication:%global _without_georeplication --disable-geo-replication}
-# if you wish to compile an rpm without the OCF resource agents...
-# rpmbuild -ta @PACKAGE_NAME at -@PACKAGE_VERSION at .tar.gz --without ocf
-%{?_without_ocf:%global _without_ocf --without-ocf}
-
-# if you wish to build rpms without UFO, compile like this
-# rpmbuild -ta @PACKAGE_NAME at -@PACKAGE_VERSION at tar.gz --without ufo
-%{?_without_ufo:%global _without_ufo true}
-
%if ( 0%{?fedora} ) || ( 0%{?rhel} && 0%{?rhel} >= 6 )
-%global SWIFTVER 1.8.0
+%global SWIFTVER 1.7.4
%if ( 0%{_for_fedora_koji_builds} )
-%global UFOVER 1.2
+%global UFOVER 1.1
%else
%global UFOVER @PACKAGE_VERSION@
%endif
-%if ! 0%{?_without_ufo:1}
%global _with_ufo true
%endif
-%endif
%if ( 0%{?fedora} && 0%{?fedora} > 16 ) || ( 0%{?rhel} && 0%{?rhel} > 6 )
%global _with_systemd true
@@ -52,8 +42,8 @@
Summary: Cluster File System
%if ( 0%{_for_fedora_koji_builds} )
Name: glusterfs
-Version: 3.4.0
-Release: 0.3%{?prereltag:.%{prereltag}}%{?dist}
+Version: 3.3.1
+Release: 14%{?prereltag:.%{prereltag}}%{?dist}
%else
Name: @PACKAGE_NAME@
Version: @PACKAGE_VERSION@
@@ -66,7 +56,7 @@ Vendor: Red Hat
%endif
URL: http://www.gluster.org//docs/index.php/GlusterFS
%if ( 0%{_for_fedora_koji_builds} )
-Source0: http://download.gluster.org/pub/gluster/glusterfs/qa-releases/%{PACKAGE_VERSION}%{?prereltag}/glusterfs-%{version}%{?prereltag}.tar.gz
+Source0: http://download.gluster.org/pub/gluster/glusterfs/3.3/%{version}/glusterfs-%{version}%{?prereltag}.tar.gz
%else
Source0: @PACKAGE_NAME at -@PACKAGE_VERSION at .tar.gz
%endif
@@ -102,10 +92,10 @@ Requires(postun): systemd-units
# can't seem to make a generic macro that works
%define _init_glusterd %{_unitdir}/glusterd.service
%define _init_glusterfsd %{_unitdir}/glusterfsd.service
-%define _init_gluster_swift_account %{_unitdir}/gluster-swift-account.service
+%define _init_gluster_swift_account %{_unitdir}/gluster-swift-account.service
%define _init_gluster_swift_object %{_unitdir}/gluster-swift-object.service
-%define _init_gluster_swift_container %{_unitdir}/gluster-swift-container.service
-%define _init_gluster_swift_proxy %{_unitdir}/gluster-swift-proxy.service
+%define _init_gluster_swift_container %{_unitdir}/gluster-swift-container.service
+%define _init_gluster_swift_proxy %{_unitdir}/gluster-swift-proxy.service
%else
%if ( 0%{_for_fedora_koji_builds} )
%global glusterd_service %{S:%{SOURCE12}}
@@ -123,10 +113,10 @@ Requires(postun): /sbin/service
# can't seem to make a generic macro that works
%define _init_glusterd %{_sysconfdir}/init.d/glusterd
%define _init_glusterfsd %{_sysconfdir}/init.d/glusterfsd
-%define _init_gluster_swift_account %{_sysconfdir}/init.d/gluster-swift-account
-%define _init_gluster_swift_object %{_sysconfdir}/init.d/gluster-swift-object
-%define _init_gluster_swift_container %{_sysconfdir}/init.d/gluster-swift-container
-%define _init_gluster_swift_proxy %{_sysconfdir}/init.d/gluster-swift-proxy
+%define _init_gluster_swift_account %{_sysconfdir}/init.d/gluster-swift-account
+%define _init_gluster_swift_object %{_sysconfdir}/init.d/gluster-swift-object
+%define _init_gluster_swift_container %{_sysconfdir}/init.d/gluster-swift-container
+%define _init_gluster_swift_proxy %{_sysconfdir}/init.d/gluster-swift-proxy
%endif
BuildRequires: bison flex
@@ -149,9 +139,13 @@ Provides: %{name}-libs = %{version}-%{release}
Provides: %{name}-common = %{version}-%{release}
Provides: %{name}-core = %{version}-%{release}
-# We do not want to generate useless provides for xlator .so files
+# We do not want to generate useless provides and requires for xlator .so files
+# Filter all generated:
+# - .so requires that do not start with 'lib'
+# - all provides from xlators and private libraries not in the ldconfig path
+#
# TODO: RHEL5 does not have a convenient solution
-%if ( 0%{?rhel} == 6 )
+%if 0%{?rhel} == 6
# filter_setup exists in RHEL6 only
%filter_provides_in %{_libdir}/glusterfs/%{version}/
%global __filter_from_req %{?__filter_from_req} | %{__grep} -v -P '^(?!lib).*\.so.*$'
@@ -220,9 +214,6 @@ Group: Applications/File
BuildRequires: fuse-devel
Requires: %{name} = %{version}-%{release}
-%if ( ! 0%{?_without_fusermount} )
-Requires: /usr/bin/fusermount
-%endif
Obsoletes: %{name}-client < %{version}-%{release}
Provides: %{name}-client = %{version}-%{release}
@@ -261,36 +252,6 @@ is in user space and easily manageable.
This package provides the glusterfs server daemon.
-%if ( 0%{!?_without_ocf:1} )
-%package resource-agents
-Summary: OCF Resource Agents for GlusterFS
-License: GPLv3+
-BuildArch: noarch
-# this Group handling comes from the Fedora resource-agents package
-%if ( 0%{?fedora} || 0%{?centos_version} || 0%{?rhel} )
-Group: System Environment/Base
-%else
-Group: Productivity/Clustering/HA
-%endif
-# for glusterd
-Requires: glusterfs-server
-# depending on the distribution, we need pacemaker or resource-agents
-Requires: %{_prefix}/lib/ocf/resource.d
-
-%description resource-agents
-GlusterFS is a clustered file-system capable of scaling to several
-petabytes. It aggregates various storage bricks over Infiniband RDMA
-or TCP/IP interconnect into one large parallel network file
-system. GlusterFS is one of the most sophisticated file systems in
-terms of features and extensibility. It borrows a powerful concept
-called Translators from GNU Hurd kernel. Much of the code in GlusterFS
-is in user space and easily manageable.
-
-This package provides the resource agents which plug glusterd into
-Open Cluster Framework (OCF) compliant cluster resource managers,
-like Pacemaker.
-%endif
-
%package devel
Summary: Development Libraries
License: GPLv2 or LGPLv3+
@@ -362,7 +323,6 @@ Source71: container-server.conf
Source72: object-server.conf
Source73: proxy-server.conf
Source74: swift.conf
-Source75: object-expirer.conf
Patch20: 0001-Use-updated-parallel-install-versions-of-epel-packag.patch
Patch21: 0002-Add-fixes-for-building-the-doc-package.patch
@@ -383,6 +343,7 @@ Patch24: 0002-Add-fixes-for-building-the-doc-package.patch.180
%global glusterswiftproxy_service %{S:%{SOURCE43}}
%endif
+BuildRequires: dos2unix
BuildRequires: python-devel
BuildRequires: python-setuptools
BuildRequires: python-netifaces
@@ -405,9 +366,6 @@ Requires: python-simplejson
Requires: pyxattr
Requires: python-setuptools
Requires: python-netifaces
-%if "%{SWIFTVER}" != "1.7.4"
-Requires: python-swiftclient
-%endif
Conflicts: openstack-swift
@@ -516,11 +474,12 @@ Obsoletes: glusterfs-swift-plugin < 3.3.1-4
Obsoletes: glusterfs-swift-ufo <= 3.3.1-4
%if ( 0%{_for_fedora_koji_builds} )
-Source15: http://download.gluster.org/pub/gluster/glusterfs/qa-releases/%{version}%{?prereltag}/UFO/gluster-swift-ufo-%{UFOVER}%{?prereltag}.tar.gz
+Source15: http://download.gluster.org/pub/gluster/glusterfs/3.3/%{version}/UFO/gluster-swift-ufo-%{UFOVER}%{?prereltag}.tar.gz
%else
Source15: gluster-swift-ufo- at PACKAGE_VERSION@.tar.gz
%endif
Patch15: %{name}-3.3.1.ufo.gluster.swift.common.DiskFile-1.7.4.patch
+Patch16: %{name}-3.3.1.ufo.gluster.multi-volume.backport-1.1.patch
%description ufo
Gluster Unified File and Object Storage unifies NAS and object storage
@@ -532,19 +491,20 @@ storage costs.
%prep
%setup -q -n %{name}-%{version}%{?prereltag}
-%if ( 0%{?_with_ufo:1} )
-# unpack swift-1.x.y
-%setup -q -T -D -n %{name}-%{version}%{?prereltag} -a 20
-# unpack gluster ufo
-%setup -q -T -D -n %{name}-%{version}%{?prereltag} -a 15
%if ( 0%{_for_fedora_koji_builds} )
#%patch0 -p0
-%patch1 -p0 -F4
+%patch1 -p0
%if ( "%{version}" == "3.3.1" )
%patch2 -p1
%endif
%endif
+%if ( 0%{?_with_ufo:1} )
+# unpack swift-1.x.y
+%setup -q -T -D -n %{name}-%{version}%{?prereltag} -a 20
+# unpack gluster ufo
+%setup -q -T -D -n %{name}-%{version}%{?prereltag} -a 15
cd swift-%{SWIFTVER}
+# apply Fedora openstack-swift patches to Swift as appropriate
%if ( 0%{?rhel} && 0%{?rhel} < 7 )
%patch20 -p1
%if "%{SWIFTVER}" == "1.7.4"
@@ -553,22 +513,26 @@ cd swift-%{SWIFTVER}
%patch24 -p1
%endif
%endif
+# apply our own patches to Swift, as appropriate
%if "%{SWIFTVER}" == "1.7.4"
%patch22 -p1
%else
%patch23 -p1
%endif
+# apply our fix for UFO 1.1 (tarball snapshot circa 7 Dec, 2012)
%if ( 0%{_for_fedora_koji_builds} )
%if ( "%{UFOVER}" == "1.1" )
-cd ../ufo
-%patch15 -p1
+cd ../
+pwd
+%patch15
+%patch16 -p1
%endif
%endif
%endif
%build
./autogen.sh
-%configure %{?_without_rdma} %{?_without_epoll} %{?_without_fusermount} %{?_without_georeplication} %{?_without_ocf}
+%configure %{?_without_rdma} %{?_without_epoll} %{?_with_fusermount} %{?_without_georeplication}
# Remove rpath
sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
@@ -633,11 +597,6 @@ find %{buildroot}%{_libdir} -name '*.la' -delete
# Remove installed docs, we include them ourselves as %%doc
%{__rm} -rf %{buildroot}%{_datadir}/doc/glusterfs/
-# Remove benchmarking and other unpackaged files
-%{__rm} -rf %{buildroot}/benchmarking
-%{__rm} -f %{buildroot}/glusterfs-mode.el
-%{__rm} -f %{buildroot}/glusterfs.vim
-
# Create working directory
%{__mkdir_p} %{buildroot}%{_sharedstatedir}/glusterd
@@ -769,7 +728,6 @@ cd swift-%{SWIFTVER}
#install -p -D -m 660 %{SOURCE72} %{buildroot}%{_sysconfdir}/swift/object-server.conf
#install -p -D -m 660 %{SOURCE73} %{buildroot}%{_sysconfdir}/swift/proxy-server.conf
#install -p -D -m 660 %{SOURCE74} %{buildroot}%{_sysconfdir}/swift/swift.conf
-#install -p -D -m 660 %{SOURCE75} %{buildroot}%{_sysconfdir}/swift/object-expirer.conf
#%endif
# Install pid directory
%{__install} -d -m 755 %{buildroot}%{_localstatedir}/run/swift
@@ -782,8 +740,6 @@ cd swift-%{SWIFTVER}
%{__mkdir_p} %{buildroot}%{_sysconfdir}/tmpfiles.d
install -p -m 0644 %{SOURCE37} %{buildroot}%{_sysconfdir}/tmpfiles.d/gluster-swift.conf
%endif
-# Install recon directory
-install -d -m 755 %{buildroot}%{_localstatedir}/cache/swift
# man pages
install -d -m 755 %{buildroot}%{_mandir}/man5
for m in doc/manpages/*.5; do
@@ -868,13 +824,12 @@ fi
%if ( 0%{_for_fedora_koji_builds} )
/sbin/umount.glusterfs
%endif
-%if ( 0%{?_without_fusermount:1} )
+%if ( 0%{?_with_fusermount:1} )
%{_bindir}/fusermount-glusterfs
%endif
%files server
%defattr(-,root,root,-)
-%doc extras/clear_xattrs.sh
%if ( 0%{_for_fedora_koji_builds} )
%config(noreplace) %{_sysconfdir}/logrotate.d/glusterd
%endif
@@ -935,17 +890,10 @@ fi
%ghost %dir %attr(0755,-,-) %{_sharedstatedir}/glusterd/nfs/run
%ghost %attr(0600,-,-) %{_sharedstatedir}/glusterd/nfs/run/nfs.pid
-%if ( 0%{!?_without_ocf:1} )
-%files resource-agents
-%defattr(-,root,root)
-# /usr/lib is the standard for OCF, also on x86_64
-%{_prefix}/lib/ocf/resource.d/glusterfs
-%endif
%files devel
%defattr(-,root,root,-)
%{_includedir}/glusterfs
-%{_libdir}/pkgconfig/glusterfs-api.pc
%exclude %{_includedir}/glusterfs/y.tab.h
%{_libdir}/*.so
@@ -954,13 +902,20 @@ fi
%defattr(-,root,root,-)
%doc swift-%{SWIFTVER}/AUTHORS
%doc swift-%{SWIFTVER}/LICENSE
-%doc swift-%{SWIFTVER}/README*
+%doc swift-%{SWIFTVER}/README
%doc swift-%{SWIFTVER}/etc/dispersion.conf-sample
%doc swift-%{SWIFTVER}/etc/drive-audit.conf-sample
%doc swift-%{SWIFTVER}/etc/object-expirer.conf-sample
%doc swift-%{SWIFTVER}/etc/swift.conf-sample
%{_mandir}/man5/dispersion.conf.5*
-%{_mandir}/man1/swift*.1*
+%{_mandir}/man1/swift-dispersion-populate.1*
+%{_mandir}/man1/swift-dispersion-report.1*
+%{_mandir}/man1/swift.1*
+%{_mandir}/man1/swift-get-nodes.1*
+%{_mandir}/man1/swift-init.1*
+%{_mandir}/man1/swift-orphans.1*
+%{_mandir}/man1/swift-recon.1*
+%{_mandir}/man1/swift-ring-builder.1*
%if ( 0%{?_with_systemd:1} )
%config(noreplace) %{_sysconfdir}/tmpfiles.d/gluster-swift.conf
%else
@@ -974,7 +929,6 @@ fi
%dir %{python_sitelib}/swift
%{_bindir}/swift-account-audit
%{_bindir}/swift-bench
-%{_bindir}/swift-bench-client
%{_bindir}/swift-drive-audit
%{_bindir}/swift-get-nodes
%{_bindir}/swift-init
@@ -1001,10 +955,7 @@ fi
%{_mandir}/man1/swift-account-server.1*
%_init_gluster_swift_account
%if ( 0%{?_with_systemd:1} )
-%{_unitdir}/gluster-swift-account at .service
-%if ( 0%{?fedora} && 0%{?fedora} > 18 )
-%{_unitdir}/gluster-swift-account-*.service
-%endif
+%{_unitdir}/gluster-swift-account*.service
%endif
%dir %attr(0755, swift, swift) %{_localstatedir}/run/swift/account-server
%dir %{_sysconfdir}/swift/account-server
@@ -1025,13 +976,9 @@ fi
%{_mandir}/man1/swift-container-updater.1*
%_init_gluster_swift_container
%if ( 0%{?_with_systemd:1} )
-%{_unitdir}/gluster-swift-container at .service
-%if ( 0%{?fedora} && 0%{?fedora} > 18 )
-%{_unitdir}/gluster-swift-container-*.service
-%endif
+%{_unitdir}/gluster-swift-container*.service
%endif
%dir %attr(0755, swift, swift) %{_localstatedir}/run/swift/container-server
-%dir %attr(0755, swift, swift) %{_localstatedir}/cache/swift
%dir %{_sysconfdir}/swift/container-server
%{_bindir}/swift-container-auditor
%{_bindir}/swift-container-server
@@ -1045,21 +992,18 @@ fi
%doc swift-%{SWIFTVER}/etc/object-server.conf-sample
%doc swift-%{SWIFTVER}/etc/rsyncd.conf-sample
%{_mandir}/man5/object-server.conf.5*
+%{_mandir}/man5/object-expirer.conf.5*
%{_mandir}/man1/swift-object-auditor.1*
+%{_mandir}/man1/swift-object-expirer.1*
%{_mandir}/man1/swift-object-info.1*
%{_mandir}/man1/swift-object-replicator.1*
%{_mandir}/man1/swift-object-server.1*
%{_mandir}/man1/swift-object-updater.1*
%_init_gluster_swift_object
%if ( 0%{?_with_systemd:1} )
-%{_unitdir}/gluster-swift-object at .service
-%if ( 0%{?fedora} && 0%{?fedora} > 18 )
-%{_unitdir}/gluster-swift-object-*.service
-%exclude %{_unitdir}/gluster-swift-object-expirer*.service
-%endif
+%{_unitdir}/gluster-swift-object*.service
%endif
%dir %attr(0755, swift, swift) %{_localstatedir}/run/swift/object-server
-%dir %attr(0755, swift, swift) %{_localstatedir}/cache/swift
%dir %{_sysconfdir}/swift/object-server
%{_bindir}/swift-object-auditor
%{_bindir}/swift-object-info
@@ -1071,19 +1015,11 @@ fi
%files swift-proxy
%defattr(-,root,root,-)
%doc swift-%{SWIFTVER}/etc/proxy-server.conf-sample
-%doc swift-%{SWIFTVER}/etc/object-expirer.conf-sample
-%{_mandir}/man5/object-expirer.conf.5*
%{_mandir}/man5/proxy-server.conf.5*
-%{_mandir}/man1/swift-object-expirer.1*
%{_mandir}/man1/swift-proxy-server.1*
%_init_gluster_swift_proxy
-%if ( 0%{?fedora} && 0%{?fedora} > 18 )
-%{_unitdir}/gluster-swift-object-expirer*.service
-%endif
%dir %attr(0755, swift, swift) %{_localstatedir}/run/swift/proxy-server
-%dir %attr(0755, swift, swift) %{_localstatedir}/cache/swift
%dir %{_sysconfdir}/swift/proxy-server
-%{_bindir}/swift-object-expirer
%{_bindir}/swift-proxy-server
%{python_sitelib}/swift/proxy
@@ -1183,36 +1119,18 @@ fi
%post swift-account
%_init_enable gluster-swift-account
-%if ( 0%{?fedora} && 0%{?fedora} > 18 )
-%_init_enable gluster-swift-account-replicator
-%_init_enable gluster-swift-account-auditor
-%_init_enable gluster-swift-account-reaper
-%endif
%preun swift-account
if [ $1 = 0 ] ; then
%_init_stop gluster-swift-account
%_init_disable gluster-swift-account
-%if ( 0%{?fedora} && 0%{?fedora} > 18 )
- %_init_stop gluster-swift-account-replicator
- %_init_disable gluster-swift-account-replicator
- %_init_stop gluster-swift-account-auditor
- %_init_disable gluster-swift-account-auditor
- %_init_stop gluster-swift-account-reaper
- %_init_disable gluster-swift-account-reaper
-%endif
fi
%postun swift-account
-if [ $1 -ge 1 ] ; then
+if [ "$1" -ge "1" ] ; then
%_init_restart gluster-swift-account
-%if ( 0%{?fedora} && 0%{?fedora} > 18 )
- %_init_restart gluster-swift-account-replicator
- %_init_restart gluster-swift-account-auditor
- %_init_restart gluster-swift-account-reaper
-%endif
fi
@@ -1226,36 +1144,18 @@ fi
%post swift-container
%_init_enable gluster-swift-container
-%if ( 0%{?fedora} && 0%{?fedora} > 18 )
-%_init_enable gluster-swift-container-replicator
-%_init_enable gluster-swift-container-auditor
-%_init_enable gluster-swift-container-updater
-%endif
%preun swift-container
if [ $1 = 0 ] ; then
%_init_stop gluster-swift-container
%_init_disable gluster-swift-container
-%if ( 0%{?fedora} && 0%{?fedora} > 18 )
- %_init_stop gluster-swift-container-replicator
- %_init_disable gluster-swift-container-replicator
- %_init_stop gluster-swift-container-auditor
- %_init_disable gluster-swift-container-auditor
- %_init_stop gluster-swift-container-updater
- %_init_disable gluster-swift-container-updater
-%endif
fi
%postun swift-container
-if [ $1 -ge 1 ] ; then
+if [ "$1" -ge "1" ] ; then
%_init_restart gluster-swift-container
-%if ( 0%{?fedora} && 0%{?fedora} > 18 )
- %_init_restart gluster-swift-container-replicator
- %_init_restart gluster-swift-container-auditor
- %_init_restart gluster-swift-container-updator
-%endif
fi
@@ -1269,36 +1169,18 @@ fi
%post swift-object
%_init_enable gluster-swift-object
-%if ( 0%{?fedora} && 0%{?fedora} > 18 )
-%_init_enable gluster-swift-object-replicator
-%_init_enable gluster-swift-object-auditor
-%_init_enable gluster-swift-object-updater
-%endif
%preun swift-object
if [ $1 = 0 ] ; then
%_init_stop gluster-swift-object
%_init_disable gluster-swift-object
-%if ( 0%{?fedora} && 0%{?fedora} > 18 )
- %_init_stop gluster-swift-object-replicator
- %_init_disable gluster-swift-object-replicator
- %_init_stop gluster-swift-object-auditor
- %_init_disable gluster-swift-object-auditor
- %_init_stop gluster-swift-object-updater
- %_init_disable gluster-swift-object-updater
-%endif
fi
%postun swift-object
-if [ $1 -ge 1 ] ; then
+if [ "$1" -ge "1" ] ; then
%_init_restart gluster-swift-object
-%if ( 0%{?fedora} && 0%{?fedora} > 18 )
- %_init_restart gluster-swift-object-replicator
- %_init_restart gluster-swift-object-auditor
- %_init_restart gluster-swift-object-updater
-%endif
fi
@@ -1308,42 +1190,30 @@ if [ -f /etc/swift/proxy-server.conf ]; then
echo "warning: /etc/swift/proxy-server.conf saved as /etc/swift/proxy-server.conf.rpmsave"
cp /etc/swift/proxy-server.conf /etc/swift/proxy-server.conf.rpmsave
fi
-%if ( 0%{?fedora} && 0%{?fedora} > 18 )
-if [ -f /etc/swift/object-expirer.conf ]; then
- echo "warning: /etc/swift/object-expirer.conf saved as /etc/swift/object-expirer.conf.rpmsave"
- cp /etc/swift/object-expirer.conf /etc/swift/object-expirer.conf.rpmsave
-fi
-%endif
%post swift-proxy
%_init_enable gluster-swift-proxy
-%if ( 0%{?fedora} && 0%{?fedora} > 18 )
-%_init_enable gluster-swift-object-expirer
-%endif
%preun swift-proxy
if [ $1 = 0 ] ; then
%_init_stop gluster-swift-proxy
%_init_disable gluster-swift-proxy
-%if ( 0%{?fedora} && 0%{?fedora} > 18 )
- %_init_stop gluster-swift-object-expirer
- %_init_disable gluster-swift-object-expirer
-%endif
fi
%postun swift-proxy
-if [ $1 -ge 1 ] ; then
+if [ "$1" -ge "1" ] ; then
%_init_restart gluster-swift-proxy
-%if ( 0%{?fedora} && 0%{?fedora} > 18 )
- %_init_restart gluster-swift-object-expirer
-%endif
fi
%endif
+
%changelog
+* Mon Apr 29 2013 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 3.3.1-14
+- include backport of G4S/UFO multi-volume fix
+
* Fri Apr 19 2013 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 3.4.0-0.3alpha3
- #else -> %else, a twisty maze of passages, all alike
@@ -1356,7 +1226,7 @@ fi
- prerelease 3.4.0alpha3 for oVirt/vdsm dependencies in Fedora19
* Wed Apr 17 2013 Niels de Vos <devos at fedoraproject.org> - 3.3.1-13
-- remove unused requires for xlator .so files and private libraries (RHBZ#95212
+- remove unused requires for xlator .so files and private libraries (RHBZ#952122)
* Mon Apr 15 2013 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 3.3.1-12
- add glusterfs-3.3.1.rpc.rpcxprt.rdma.name.c.patch, BZ 920332
@@ -1365,6 +1235,7 @@ fi
* Mon Apr 15 2013 Niels de Vos <devos at fedoraproject.org>
- Remove useless provides for xlator .so files and private libraries
+ (3.4.x)
* Wed Apr 10 2013 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 3.4.0-0.1alpha2
- prerelease 3.4.0alpha2 for oVirt/vdsm dependencies in Fedora19
diff --git a/sources b/sources
index 958917a..090e799 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,3 @@
-cfeb80809faead1bf75c3aed53b37fc5 glusterfs-3.4.0alpha3.tar.gz
-0d2479c3cbb124fa3a6b001d0d4d5a8b swift-1.8.0.tar.gz
-49358f9687473bd5aa1a4d4375eba259 gluster-swift-ufo-1.2alpha3.tar.gz
+4c9f291de887b1193d5d1acac4003360 glusterfs-3.3.1.tar.gz
+1cfb85335eafc4317414736477d47dfc swift-1.7.4.tar.gz
+c1041b0551be722363f18f3a5664d0cf gluster-swift-ufo-1.1.tar.gz
More information about the scm-commits
mailing list