Skip to content

Commit

Permalink
Merge pull request #1072 from schakrava/930_ghost_shares
Browse files Browse the repository at this point in the history
930 ghost shares
  • Loading branch information
schakrava committed Dec 29, 2015
2 parents 0cfc832 + 80e101c commit bef9cea
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 28 deletions.
6 changes: 3 additions & 3 deletions src/rockstor/cli/api_wrapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ def __init__(self, client_id=None, client_secret=None, url=None):
self.client_secret = client_secret
self.url = url

if (client_id is None or client_secret is None or url is None):
if (url is None):
self.url = 'https://localhost'
try:
mgmt_ip = NetworkInterface.objects.get(itype='management').ipaddr
Expand All @@ -49,12 +49,12 @@ def __init__(self, client_id=None, client_secret=None, url=None):
except NetworkInterface.DoesNotExist:
pass

def set_token(self):
if (self.client_id is None or self.client_secret is None):
app = OauthApp.objects.get(name=settings.OAUTH_INTERNAL_APP)
self.client_id = app.application.client_id
self.client_secret = app.application.client_secret


def set_token(self):
token_request_data = {
'grant_type': 'client_credentials',
'client_id': self.client_id,
Expand Down
18 changes: 12 additions & 6 deletions src/rockstor/fs/btrfs.py
Original file line number Diff line number Diff line change
Expand Up @@ -254,9 +254,19 @@ def snapshot_list(mnt_pt):
return snaps


def shares_info(mnt_pt):
def shares_info(pool):
# return a list of share names under this mount_point.
# useful to gather names of all shares in a pool
try:
mnt_pt = mount_root(pool)
except CommandException, e:
if (e.rc == 32):
#mount failed, so we just assume that something has gone wrong at a
#lower level, like a device failure. Return empty share map.
#application state can be removed. If the low level failure is
#recovered, state gets reconstructed anyway.
return {}
raise
o, e, rc = run_command([BTRFS, 'subvolume', 'list', '-s', mnt_pt])
snap_idmap = {}
for l in o:
Expand Down Expand Up @@ -325,14 +335,10 @@ def snaps_info(mnt_pt, share_name):
if (fields[-1] == share_name):
share_id = fields[1]
share_uuid = fields[12]

if (share_id is None):
raise Exception('Failed to get uuid of the share(%s) under mount(%s)'
% (share_name, mnt_pt))
if (share_id is None): return {}

o, e, rc = run_command([BTRFS, 'subvolume', 'list', '-s', '-p', '-q',
'-u', mnt_pt])

snaps_d = {}
snap_uuids = []
for l in o:
Expand Down
15 changes: 9 additions & 6 deletions src/rockstor/scripts/prep_db.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,16 @@ def register_services():
'ZTaskd': 'ztask-daemon',
'Bootstrap': 'rockstor-bootstrap', }

keylist = services.keys()
for s in keylist:
if (not Service.objects.filter(display_name=s).exists()):
s_o = Service(display_name=s, name=services[s])
s_o.save()
for k,v in services.items():
try:
so = Service.objects.get(name=v)
so.display_name = k
except Service.DoesNotExist:
so = Service(display_name=k, name=v)
finally:
so.save()
for so in Service.objects.filter():
if (so.display_name not in keylist):
if (so.display_name not in services):
so.delete()


Expand Down
25 changes: 16 additions & 9 deletions src/rockstor/storageadmin/views/command.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
from rest_framework.permissions import IsAuthenticated
from system.osi import (uptime, kernel_info)
from fs.btrfs import (mount_share, device_scan, mount_root, qgroup_create,
get_pool_info, pool_raid, pool_usage, shares_info,
get_pool_info, pool_raid, pool_usage,
share_usage, snaps_info, mount_snap)
from system.ssh import (sftp_mount_map, sftp_mount)
from system.services import systemctl
Expand Down Expand Up @@ -225,15 +225,22 @@ def post(self, request, command):

if (command == 'refresh-pool-state'):
for p in Pool.objects.all():
fd = p.disk_set.first()
if (fd is None):
if (p.disk_set.count() == 0):
p.delete()
mount_root(p)
pool_info = get_pool_info(fd.name)
p.name = pool_info['label']
p.raid = pool_raid('%s%s' % (settings.MNT_PT, p.name))['data']
p.size = pool_usage('%s%s' % (settings.MNT_PT, p.name))[0]
p.save()
continue
try:
mount_root(p)
fd = p.disk_set.first()
pool_info = get_pool_info(fd.name)
p.name = pool_info['label']
p.raid = pool_raid('%s%s' % (settings.MNT_PT, p.name))['data']
p.size = pool_usage('%s%s' % (settings.MNT_PT, p.name))[0]
p.save()
except Exception, e:
logger.error('Exception while refreshing state for '
'Pool(%s). Moving on: %s' %
(p.name, e.__str__()))
logger.exception(e)
return Response()

if (command == 'refresh-share-state'):
Expand Down
5 changes: 2 additions & 3 deletions src/rockstor/storageadmin/views/share.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,8 @@
from storageadmin.models import (Share, Disk, Pool, Snapshot,
NFSExport, SambaShare, SFTP)
from smart_manager.models import (ShareUsage, Replica)
from fs.btrfs import (add_share, remove_share, update_quota,
share_usage, set_property, mount_share, qgroup_id,
shares_info, qgroup_create)
from fs.btrfs import (add_share, remove_share, update_quota, share_usage,
set_property, mount_share, qgroup_id, qgroup_create)
from system.osi import is_share_mounted
from storageadmin.serializers import ShareSerializer
from storageadmin.util import handle_exception
Expand Down
2 changes: 1 addition & 1 deletion src/rockstor/storageadmin/views/share_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ def toggle_sftp_visibility(share, snap_name, on=True):
def import_shares(pool, request):
disk = Disk.objects.filter(pool=pool)[0].name
shares = [s.name for s in Share.objects.filter(pool=pool)]
shares_d = shares_info('%s%s' % (settings.MNT_PT, pool.name))
shares_d = shares_info(pool)
for s in shares:
if (s not in shares_d):
Share.objects.get(pool=pool, name=s).delete()
Expand Down

0 comments on commit bef9cea

Please sign in to comment.