@@ -72,22 +72,57 @@ def get_pool_ids(mgr, volname):
7272 return None , None
7373 return metadata_pool_id , data_pool_ids
7474
75- def create_volume (mgr , volname , placement ):
76- """
77- create volume (pool, filesystem and mds)
78- """
75+ def create_fs_pools (mgr , volname , data_pool , metadata_pool ):
76+ '''
77+ Generate names of metadata pool and data pool and create these pools.
78+
79+ This methods returns a list where the first member represents whether or
80+ not this method ran successfullly.
81+ '''
82+ assert not data_pool and not metadata_pool
83+
7984 metadata_pool , data_pool = gen_pool_names (volname )
80- # create pools
85+
8186 r , outb , outs = create_pool (mgr , metadata_pool )
8287 if r != 0 :
83- return r , outb , outs
88+ return [False , r , outb , outs ]
89+
8490 # default to a bulk pool for data. In case autoscaling has been disabled
85- # for the cluster with `ceph osd pool set noautoscale`, this will have no effect.
91+ # for the cluster with `ceph osd pool set noautoscale`, this will have
92+ # no effect.
8693 r , outb , outs = create_pool (mgr , data_pool , bulk = True )
94+ # cleanup
8795 if r != 0 :
88- #cleanup
8996 remove_pool (mgr , metadata_pool )
90- return r , outb , outs
97+ return [False , r , outb , outs ]
98+
99+ return [True , data_pool , metadata_pool ]
100+
101+ def create_volume (mgr , volname , placement , data_pool , metadata_pool ):
102+ """
103+ Create volume, create pools if pool names are not passed and create MDS
104+ based on placement passed.
105+ """
106+ # although writing this case is technically redundant (because pool names
107+ # are passed by user they must exist already), leave it here so that some
108+ # future readers know that this case is already considered and not missed
109+ # by chance.
110+ if data_pool and metadata_pool :
111+ pass
112+ elif not data_pool and metadata_pool :
113+ errmsg = 'data pool name isn\' t passed'
114+ return - errno .EINVAL , '' , errmsg
115+ elif data_pool and not metadata_pool :
116+ errmsg = 'metadata pool name isn\' t passed'
117+ return - errno .EINVAL , '' , errmsg
118+ elif not data_pool and not metadata_pool :
119+ retval = create_fs_pools (mgr , volname , data_pool , metadata_pool )
120+ success = retval .pop (0 )
121+ if success :
122+ data_pool , metadata_pool = retval
123+ else :
124+ return retval
125+
91126 # create filesystem
92127 r , outb , outs = create_filesystem (mgr , volname , metadata_pool , data_pool )
93128 if r != 0 :
0 commit comments